任教课程-历史学期页面样式及“进入课程”后各功能完善

This commit is contained in:
1378012178@qq.com 2024-12-12 14:56:36 +08:00
parent 334a9c1347
commit de29ed40c5
5 changed files with 293 additions and 234 deletions

View File

@ -270,7 +270,15 @@ const site: AppRouteModule = {
title: '答题结果',
},
},
{
path: 'WjxCywjV2Dtjghis',
name: 'WjxCywjV2Dtjghis',
component: () => import('/@/views/kc/wjxCswj/WjxCywjV2Dtjghis.vue'),
meta: {
// affix: true,
title: '答题结果',
},
},
],
};

View File

@ -1,69 +0,0 @@
import type { AppRouteModule } from '/@/router/types';
// import { LAYOUT } from '/@/router/constant';
import { t } from '/@/hooks/web/useI18n';
const zuoyehistory: AppRouteModule = {
path: '/history',
name: 'history',
component: () => import('/@/views/site/renKeJiaoCheng/checkKecheng/history/kcHistoryMain.vue'),
redirect: '/history/hismain',
meta: {
isAddStaticPath: true,//是否静态引入不用配置menu表
orderNo: 106,
title: '历史作业',
},
children: [
{
path: 'hismain',
name: 'zuoyeHistoryMain',
meta: {
title: '课程简介',
},
component: () => import('/@/views/site/renKeJiaoCheng/checkKecheng/history/kcHistoryDetail.vue'),
},
{
path: 'hisTzgg',
name: 'hisTzgg',
component: () => import('/@/views/zy/zyGonggao/StudentGonggaoList.vue'),
meta: {
title: '通知公告',
},
},
{
path: 'hisKczy',
name: 'hisKczy',
component: () => import('/@/views/zy/zyInfo/ZyInfoHisMainList.vue'),
meta: {
title: '课程作业',
},
},
{
path: 'hisdksbl',
name: 'hisdksbl',
component: () => import('/@/views/kc/detection/zyZhjsList.vue'),
meta: {
title: 'AI识别出勤率',
},
},
{
path: 'hisKccy',
name: 'hisKccy',
component: () => import('/@/views/kc/wjxCswj/WjxCswjHisMainList.vue'),
meta: {
title: '课程测验',
},
},
{
path: 'hisWjdc',
name: 'hisWjdc',
component: () => import('/@/views/kc/wjxDcwj/WjxDcwjHisMainList.vue'),
meta: {
title: '问卷调查',
},
},
]
}
export default zuoyehistory;

View File

@ -4,7 +4,9 @@
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" :key="index" v-for="(item, index) in allList">
<div class=" ketangback ketangCard ketangCardcol">
<div class="rjkcTopDiv">
<div style="text-align: left"><Icon icon="ant-design:read-outlined" /><span>{{ item.sksj }}</span></div>
<div style="text-align: left">
<Icon icon="ant-design:read-outlined" /><span>{{ item.sksj }}</span>
</div>
</div>
<div class="rjkcBodyDiv">
<div class="kcmcDiv">
@ -15,23 +17,23 @@
:numberStyle="{ backgroundColor: '#f00', width: '10px', height: '10px' }"
:title="'您有' + item.dbtxType + '条提醒信息'"
> -->
<span style="font-size: 20px">{{ item.kcmc }}</span>
<span style="font-size: 20px">{{ item.kcmc }}</span>
<!-- </a-badge> -->
</div>
<div class="skddDiv">{{ item.skdd }}</div>
<!-- <div class="skddDiv">教课周次{{ item.jkzc }}</div> -->
<div class="xkrsDiv skdd-Left-section">
<div style="width:70%; display: flex; justify-content: flex-start; ">
<div class="skdd-line">
<div class="xkrs-color">{{ item.xf }}</div>
<div class="skddDiv">学分</div>
</div>
<div class="skdd-line" style="cursor: pointer;">
<div class="xkrs-color">{{ item.xkrs }}</div>
<div class="skddDiv" @click="openXkrs(item)">选课人数</div>
</div>
<div style="width:70%; display: flex; justify-content: flex-start; ">
<div class="skdd-line">
<div class="xkrs-color">{{ item.xf }}</div>
<div class="skddDiv">学分</div>
</div>
<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button>
<div class="skdd-line" style="cursor: pointer;">
<div class="xkrs-color">{{ item.xkrs }}</div>
<div class="skddDiv" @click="openXkrs(item)">选课人数</div>
</div>
</div>
<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button>
</div>
</div>
</div>
@ -46,13 +48,13 @@ import { ref, onMounted } from 'vue';
import { getUserSf, getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
import XxhbbksListModal from '/@/views/kc/xxhbbks/XxhbbksListModal.vue';
import XxhbbksListModal from '/@/views/kc/xxhbbks/XxhbbksListModal.vue';
import { router } from '/@/router';
import { useRouter } from 'vue-router';
const allList = ref<any>([]);
const XxhbbksListModalPage = ref();
const XxhbbksListModalPage = ref();
const weebMap = {
'1': '星期一',
@ -67,18 +69,18 @@ function toWeek(week) {
return weebMap[week];
}
//
function openXkrs(record){
console.log(`🚀 ~ openXkrs ~ record:`, record)
XxhbbksListModalPage.value.disableSubmit = true;
XxhbbksListModalPage.value.init(record);
}
//
function openXkrs(record) {
console.log(`🚀 ~ openXkrs ~ record:`, record)
XxhbbksListModalPage.value.disableSubmit = true;
XxhbbksListModalPage.value.init(record);
}
//
onMounted(() => {
loadData();
setInterval(() => {
loadData()
}, 60*1000);
}, 60 * 1000);
});
function loadData() {
@ -99,17 +101,20 @@ function openKechengDetail(item) {
.ketangCard {
margin: 0.5rem;
}
.ketangCardcol {
background-color: #f3f3f3;
padding: 1px;
box-shadow: 1px 1px 5px 1px #e1e1e1;
}
.rjkcTopDiv {
padding: 0.5rem;
color: #798394;
font-size: 15px;
text-align: right;
}
.nDayDiv {
top: -14px;
right: -14px;
@ -121,26 +126,31 @@ function openKechengDetail(item) {
border-radius: 0 0 0 5px;
text-align: left;
}
.rjkcBodyDiv {
margin-top: 1px;
background: #fff;
padding:1rem;
padding: 1rem;
}
.kcmcDiv {
font-size: 24px;
font-weight: bold;
}
.skddDiv {
color: #333333;
font-size:14px;
font-size: 14px;
// font-weight: bold;
}
.xkrsDiv {
padding-top:1rem;
padding-top: 1rem;
font-size: 18px;
font-weight: bold;
text-align: right;
}
.buttonClass {
background: #1ab394;
font-weight: 600;
@ -152,46 +162,52 @@ function openKechengDetail(item) {
background: #6cafda;
}
}
.skdd-Left-section{
.skdd-Left-section {
display: flex;
align-items: flex-end;
justify-content: space-between;
}
.ketangback{
.ketangback {
background: #f7f7f7;
border-radius: 5px;
}
.skdd-line{
.skdd-line {
text-align: left;
width:30%;
width: 30%;
margin-right: 10rpx;
}
.xkrs-color{
.xkrs-color {
color: #18a689;
}
.xkrs-color:hover{
.xkrs-color:hover {
color: #ff5a00;
}
.ant-btn {
line-height: 1.5715;
position: relative;
display: inline-block;
font-weight: 400;
white-space: nowrap;
text-align: center;
background-image: none;
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
touch-action: manipulation;
height: 32px;
padding: 4px 15px;
font-size: 14px;
border-radius:5px;
border-color: #fff;
color: #fff;
line-height: 1.5715;
position: relative;
display: inline-block;
font-weight: 400;
white-space: nowrap;
text-align: center;
background-image: none;
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
touch-action: manipulation;
height: 32px;
padding: 4px 15px;
font-size: 14px;
border-radius: 5px;
border-color: #fff;
color: #fff;
}
</style>

View File

@ -3,52 +3,77 @@
<a-row>
<a-col :span="24">
<a-row>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" >
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }">
<a-form-item label="学年学期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag placeholder="学年学期" v-model:value="queryParam.xqxn" dictCode="kc_xqxn_history,title,title,true order by start_time desc" style="width:90%;"/>
<j-dict-select-tag placeholder="学年学期" v-model:value="queryParam.xqxn"
dictCode="kc_xqxn_history,title,title,true order by start_time desc" style="width:90%;" />
</a-form-item>
</a-col>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" >
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }">
<a-form-item label="课程名称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-input placeholder="课程名称" v-model:value="queryParam.kcmc" style="width:90%;"/>
<j-input placeholder="课程名称" v-model:value="queryParam.kcmc" style="width:90%;" />
</a-form-item>
</a-col>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" >
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }">
<a-button type="primary" preIcon="ant-design:search-outlined" @click="loadData">查询</a-button>
</a-col>
</a-row>
</a-col>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" :key="index" v-for="(item, index) in allList" >
<div class="ketangCard ketangCardcol" >
<div class="rjkcTopDiv">
<div style="text-align: left;"><span>{{ item.sksj }}</span></div>
</div>
<div class="rjkcBodyDiv">
<div class="kcmcDiv">{{ item.kcmc }}</div>
<div class="skddDiv" style="margin-top:20px;">{{ item.skdd }}</div>
<div class="xkrsDiv" style="margin-top:20px;">{{ item.xqxn }}</div>
<div class="xkrsDiv">{{ item.xkrs }}人选课&nbsp;&nbsp;&nbsp;<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button></div>
<a-col :xs="{ span: 24 }" :sm="{ span: 8 }" :lg="{ span: 8 }" :key="index" v-for="(item, index) in allList">
<div class=" ketangback ketangCard ketangCardcol">
<div class="rjkcTopDiv">
<div style="text-align: left">
<Icon icon="ant-design:read-outlined" /><span>{{ item.sksj }}</span>
</div>
</div>
</a-col>
</a-row>
<div class="rjkcBodyDiv">
<div class="kcmcDiv">
<!-- <a-badge :offset="[10|0]" :count="item.dbtxType" :title="'您有'+item.dbtxType+'条提醒信息'"> -->
<!-- <a-badge
:dot="item.dbtxType > 0 ? true : false"
:offset="[5 | 0]"
:numberStyle="{ backgroundColor: '#f00', width: '10px', height: '10px' }"
:title="'您有' + item.dbtxType + '条提醒信息'"
> -->
<span style="font-size: 20px">{{ item.kcmc }}</span>
<!-- </a-badge> -->
</div>
<div class="skddDiv">{{ item.skdd }}</div>
<!-- <div class="skddDiv">教课周次{{ item.jkzc }}</div> -->
<div class="xkrsDiv skdd-Left-section">
<div style="width:70%; display: flex; justify-content: flex-start; ">
<div class="skdd-line">
<div class="xkrs-color">{{ item.xf }}</div>
<div class="skddDiv">学分</div>
</div>
<div class="skdd-line" style="cursor: pointer;">
<div class="xkrs-color">{{ item.xkrs }}</div>
<div class="skddDiv" @click="openXkrs(item)">选课人数</div>
</div>
</div>
<a-button class="buttonClass" @click="openKechengDetail(item)">进入课程</a-button>
</div>
</div>
</div>
</a-col>
</a-row>
</a-card>
</template>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { ref, onMounted } from 'vue';
import { getUserSf,getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { JInput } from '/@/components/Form';
import { getUserSf, getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectTag.vue';
import { JInput } from '/@/components/Form';
import { router } from '/@/router';
import { useRouter } from 'vue-router';
const queryParam = ref<any>({});
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
import { router } from '/@/router';
import { useRouter } from 'vue-router';
const queryParam = ref<any>({});
const labelCol = ref<any>({ xs: { span: 24 }, sm: { span: 5 } });
const wrapperCol = ref<any>({ xs: { span: 24 }, sm: { span: 16 } });
const allList = ref<any>([]);
@ -61,43 +86,55 @@ const weebMap = {
'6': '星期六',
'7': '星期日',
}
function toWeek(week){
function toWeek(week) {
return weebMap[week];
}
function loadData(){
function loadData() {
queryParam.value.checkType = '1';
defHttp.get({ url: '/ktgl/kcKechengbiao/getKechengbiaolist',params:queryParam.value}).then((res) => {
console.log(res);
allList.value = res.records;
});
}
//
onMounted(() => {
loadData()
defHttp.get({ url: '/ktgl/kcKechengbiao/getKechengbiaolist', params: queryParam.value }).then((res) => {
console.log(res);
allList.value = res.records;
});
function openKechengDetail(item){
console.log(`🚀 ~ openKechengDetail ~ item:`, item)
window.open('/history/hismain?rwbh='+item.rwbh+'&xqxn='+getSysConfig().flag1+"&type=0","_blank");
}
}
//
onMounted(() => {
loadData()
});
function openKechengDetail(item) {
console.log(`🚀 ~ openKechengDetail ~ item:`, item)
//
// window.open('/history/hismain?rwbh='+item.rwbh+'&xqxn='+getSysConfig().flag1+"&type=0","_blank");
//
window.open('/zyhis/tuGonggaohis?rwbh=' + item.rwbh + '&xqxn=' + getSysConfig().flag1 + '&type=1' + '&teano=' + item.jgh, '_blank');
}
//
function openXkrs(record) {
// console.log(`🚀 ~ openXkrs ~ record:`, record)
// XxhbbksListModalPage.value.disableSubmit = true;
// XxhbbksListModalPage.value.init(record);
}
</script>
<style lang="less" scoped>
.ketangCard {
margin: .5rem;
margin: 0.5rem;
}
.ketangCardcol{
.ketangCardcol {
background-color: #f3f3f3;
padding: 1px;
box-shadow: 1px 1px 5px 1px #e1e1e1;
}
.rjkcTopDiv {
background: #fff;
padding: .9rem;
color: #1ab394;
font-size: 18px;
font-weight: bold;
text-align:right;
padding: 0.5rem;
color: #798394;
font-size: 15px;
text-align: right;
}
.nDayDiv {
top: -14px;
right: -14px;
@ -107,37 +144,90 @@ function loadData(){
font-weight: 200;
padding: 2px 6px 2px 6px;
border-radius: 0 0 0 5px;
text-align:left;
text-align: left;
}
.rjkcBodyDiv {
margin-top: 1px;
background: #fff;
padding: 1rem 2rem 2rem 2rem;
padding: 1rem;
}
.kcmcDiv {
font-size: 24px;
font-weight: bold;
}
.skddDiv {
color: #1c84c6;
font-size: 16px;
color: #333333;
font-size: 14px;
// font-weight: bold;
}
.xkrsDiv {
padding-top: 2.5rem;
padding-top: 1rem;
font-size: 18px;
font-weight: bold;
text-align: right;
}
.buttonClass {
background: #1c84c6;
background: #1ab394;
font-weight: 600;
color: #fff;
border-radius: 5px;
line-height: 23px;
line-height: 22px;
&[disabled] {
background: #6cafda;
}
}
.skdd-Left-section {
display: flex;
align-items: flex-end;
justify-content: space-between;
}
.ketangback {
background: #f7f7f7;
border-radius: 5px;
}
.skdd-line {
text-align: left;
width: 30%;
margin-right: 10rpx;
}
.xkrs-color {
color: #18a689;
}
.xkrs-color:hover {
color: #ff5a00;
}
.ant-btn {
line-height: 1.5715;
position: relative;
display: inline-block;
font-weight: 400;
white-space: nowrap;
text-align: center;
background-image: none;
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);
cursor: pointer;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
touch-action: manipulation;
height: 32px;
padding: 4px 15px;
font-size: 14px;
border-radius: 5px;
border-color: #fff;
color: #fff;
}
</style>

View File

@ -2,96 +2,101 @@
<div id="siteMain">
<div id="maxSite">
<a-layout style="height: calc(100vh - 30px)">
<headerPage/>
<headerPage />
<a-row>
<a-col :span="24">
<a-row>
<a-col :lg="24" :xs="18">
<div style="width:100%;background: #fff;font-size: 18px;font-weight: bold;margin-top:10px;padding: 10px;">
<a-row>
<a-col :xs="0" :lg="24">
<a-button type="primary" @click="toggleCollapsed">
<MenuUnfoldOutlined v-if="collapsed" />
<MenuUnfoldOutlined v-else />
</a-button>
<span class="ellipsis">
课程名称1{{kcxxInfo.kcmc}}
</span>
</a-col>
<a-col :xs="24" :lg="0">
<span class="ellipsis">
课程名称1{{kcxxInfo.kcmc}}
</span>
</a-col>
</a-row>
<div
style="width:100%;background: #fff;font-size: 18px;font-weight: bold;margin-top:10px;padding: 10px;">
<a-row>
<a-col :xs="0" :lg="24">
<a-button type="primary" @click="toggleCollapsed">
<MenuUnfoldOutlined v-if="collapsed" />
<MenuUnfoldOutlined v-else />
</a-button>
<span class="ellipsis">
课程名称{{ kcxxInfo.kcmc }}
</span>
</a-col>
<a-col :xs="24" :lg="0">
<span class="ellipsis">
课程名称{{ kcxxInfo.kcmc }}
</span>
</a-col>
</a-row>
</div>
</a-col>
<a-col :lg="0" :xs="6">
<dqxqkcMenu/>
<dqxqkcMenu />
</a-col>
</a-row>
</a-col>
<a-col :lg="spanlg" :xs="0">
<dqxqkcMenu ref="dqxqkcMenuTag"/>
<dqxqkcMenu v-if="!readOnly" ref="dqxqkcMenuTag" />
<dqxqkcMenuHis v-else ref="dqxqkcMenuTag" />
</a-col>
<a-col :lg="spanlt" :xs="24">
<RouterView/>
<RouterView />
</a-col>
</a-row>
<footerPage/>
<footerPage />
</a-layout>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted, unref } from 'vue';
import { ref, onMounted, unref } from 'vue';
import { getUserSf,getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
import { useRouter } from 'vue-router';
import { getUserSf, getSysConfig } from '/@/views/site/utils/index';
import { defHttp } from '/@/utils/http/axios';
import { useRouter } from 'vue-router';
import { MenuUnfoldOutlined } from '@ant-design/icons-vue';
import headerPage from '/@/views/site/common/header.vue';
import footerPage from '/@/views/site/common/footer.vue';
import dqxqkcMenu from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkcMenu.vue';
import dqxqkc from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkc.vue';
import { MenuUnfoldOutlined } from '@ant-design/icons-vue';
import headerPage from '/@/views/site/common/header.vue';
import footerPage from '/@/views/site/common/footer.vue';
import dqxqkcMenu from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkcMenu.vue';
import dqxqkcMenuHis from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkcMenuHistory.vue';
import dqxqkc from '/@/views/site/renKeJiaoCheng/checkKecheng/dqxqkc.vue';
const maxClassName = ref<any>({});
const dqxqkcMenuTag = ref();
const selectedKeys = ref<string[]>([]);
//
const { currentRoute } = useRouter();
const { query } = unref(currentRoute);
const { rwbh,xqxn } = query;//
let router = useRouter();
const kcxxInfo = ref<string>('');
const spanlg = ref<number>(5);
const spanlt = ref<number>(19);
const collapsed = ref<any>(false);
const maxClassName = ref<any>({});
const dqxqkcMenuTag = ref();
const selectedKeys = ref<string[]>([]);
//
const { currentRoute } = useRouter();
const { query, matched } = unref(currentRoute);
const readOnly = ref(false)
if (matched[0].name == 'zyhis') readOnly.value = true
const { rwbh, xqxn } = query;//
let router = useRouter();
const kcxxInfo = ref<string>('');
const spanlg = ref<number>(5);
const spanlt = ref<number>(19);
const collapsed = ref<any>(false);
function toggleCollapsed() {
collapsed.value = !collapsed.value;
dqxqkcMenuTag.value.toggleCollapsed();
if(collapsed.value){
if (collapsed.value) {
spanlg.value = 1;
spanlt.value = 23;
}else{
} else {
spanlg.value = 5;
spanlt.value = 19;
}
}
//
onMounted(() => {
// console.log('rwbh:',rwbh);
defHttp.get({ url: '/ktgl/kcKechengbiao/getKcxxByRwbhXqxn', params: { rwbh: rwbh,xqxn:xqxn } }).then((res) => {
//
onMounted(() => {
// console.log('rwbh:',rwbh);
defHttp.get({ url: '/ktgl/kcKechengbiao/getKcxxByRwbhXqxn', params: { rwbh: rwbh, xqxn: xqxn } }).then((res) => {
// console.log(`🚀 ~ 1111 defHttp.get ~ res:`, res)
kcxxInfo.value = res;
});
});
});
</script>
<style lang="less" scoped>
@ -99,13 +104,15 @@ function toggleCollapsed() {
// font-size: ;
// height: 100%;
background: #f3f3f4;
#maxSite {
//
max-width: 1070px;
min-height: calc(100vh);
//
margin: 0 auto;
.rowGutter{
.rowGutter {
margin-top: 1rem;
margin-bottom: 1rem;
}
@ -114,15 +121,18 @@ function toggleCollapsed() {
color: #fff;
background: #1ab394;
}
.ant-layout-footer {
line-height: 1.5;
background: #FFF;
}
.ant-layout-sider {
color: #fff;
line-height: 120px;
background: #3ba0e9;
}
.ant-layout-content {
min-height: 120px;
color: #000;
@ -131,9 +141,13 @@ function toggleCollapsed() {
}
}
}
.ellipsis {
white-space: nowrap; /* 确保文本在一行内显示 */
overflow: hidden; /* 隐藏溢出的内容 */
text-overflow: ellipsis; /* 使用省略号表示溢出的文本 */
white-space: nowrap;
/* 确保文本在一行内显示 */
overflow: hidden;
/* 隐藏溢出的内容 */
text-overflow: ellipsis;
/* 使用省略号表示溢出的文本 */
}
</style>