JLBA202505130001_关于吉林银行新建AI智能培训系统的需求_开发任务新样式一半

This commit is contained in:
田岩
2026-01-23 17:01:37 +08:00
parent 0bdbb3cb73
commit 64cffa01c9
25 changed files with 338 additions and 35 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<view class="text font_pf">待办事项</view>
</view>
<view class="cont-box">
<calendarCom @change="changeDate"/>
<calendarCom />
{{activeDate}}
</view>
</template>
@@ -1,8 +1,159 @@
<template>
<view class="item-div" :class="direction">
<view class="idea-div">
<image class="img" src="@/static/images/learningTasks/idea-1.png" mode="aspectFit"></image>
</view>
<view class="mid-div">
<view class="title-div">
柜面业务操作业务操作规范及流程
</view>
<view class="button-div">
<view class="button button-status-1">
<view class="button-icon">
<image class="img" src="@/static/images/learningTasks/button-1.png" mode="aspectFit"></image>
</view>
<view class="button-text">完成学习</view>
</view>
<view class="button button-status-2">
<view class="button-icon">
<image class="img" src="@/static/images/learningTasks/button-2.png" mode="aspectFit"></image>
</view>
<view class="button-text">完成学习</view>
</view>
</view>
</view>
<view class="tip-div">
<image class="img" src="@/static/images/learningTasks/tip-1.png" mode="aspectFit"></image>
</view>
</view>
</template>
<script>
<script setup>
import { ref } from 'vue';
// 方向
const a = ['left', 'right'];
const direction = ref(a[0]);
</script>
<style>
</style>
<style scoped lang="scss">
.title-div {
width: 100%;
font-weight: 500;
font-size: 32rpx;
color: #333333;
max-height: 100rpx;
line-height: 50rpx;
padding: 0 20rpx;
text-align: left;
font-style: normal;
background-color: #fedb32;
clip-path: polygon(
12rpx 0%,
calc(100% - 18rpx) 0%,
100% 30rpx,
calc(100% - 18rpx) 100%,
12rpx 100%,
0% calc(100% - 22rpx)
);
overflow: hidden;
/* 多行省略核心配置(适配2行) */
display: -webkit-box; /* 转为WebKit弹性盒模型 */
-webkit-box-orient: vertical; /* 文本垂直排列 */
-webkit-line-clamp: 2; /* 限制最多显示2行(和line-height/max-height匹配) */
text-overflow: ellipsis; /* 溢出显示省略号 */
}
.button-div {
display: flex;
align-items: center;
// background-color: blue;
margin-top: 28rpx;
.button {
width: 178rpx;
height: 54rpx;
border-radius: 8rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 16rpx;
.button-icon {
margin-right: 10rpx;
.img {
width: 26rpx;
height: 24rpx;
}
}
.button-text {
font-weight: 400;
font-size: 26rpx;
color: #ffffff;
text-align: left;
}
}
}
.mid-div {
flex: 1;
}
.idea-div {
display: flex;
align-items: center;
.img {
width: 108rpx;
height: 108rpx;
}
background-color: yellow;
}
.tip-div {
display: flex;
align-items: center;
.img {
width: 108rpx;
height: 108rpx;
}
background-color: green;
}
.mid {
.title-div {
}
.button-div {
}
}
.item-div {
display: flex;
justify-content: space-between;
width: calc(100% - 60rpx);
margin: 0 auto;
}
// 状态样式
.left {
&.item-div {
flex-direction: row;
}
.mid-div {
margin-left: 20rpx;
margin-right: 40rpx;
}
}
.right {
&.item-div {
flex-direction: row-reverse;
}
.tip-div .img {
transform: scaleX(-1);
}
.button-div {
justify-content: flex-end;
}
.mid-div {
margin-left: 40rpx;
margin-right: 20rpx;
}
}
.button-status-1 {
background-color: #63a1ff;
}
.button-status-2 {
background-color: #6baa1b;
}
</style>
+183 -31
View File
@@ -1,30 +1,66 @@
<template>
<view class="div-max">
<z-paging
ref="pagingRef"
@query="queryList"
v-model="data_list"
:loading-more-enabled="false"
:refresher-only="true"
:aoto="false"
>
<template #refresher>
<view class="" style="background-color: red;width: 100%;height: 800rpx;">
</view>
</template>
<template #top>
<view class="body-title">
<view class="back_div" @click="common.navigateBack()">
<view class="back-icon"></view>
<view class="noise-bg">
<view class="div-max">
<z-paging
ref="pagingRef"
@query="queryList"
v-model="data_list"
:loading-more-enabled="false"
:refresher-only="true"
:aoto="false"
>
<template #top>
<view class="body-title">
<view class="back_div" @click="common.navigateBack()">
<view class="back-icon"></view>
</view>
<view>任务详情</view>
</view>
</template>
<view class="interior">
<!-- 详情盒子 -->
<view class="details-div">
<view class="img-div">
<image-preview class="img_100" :src="detailData.ossAddr"></image-preview>
</view>
<view class="right-div">
<view class="title-div">{{ detailData.taskName }}</view>
<view class="other-div-1">
<!-- 时间盒子 -->
<view class="time-div">
起止时间{{ detailData.startTm?.substr(0, 10) }}{{ detailData.endTm?.substr(0, 10) }}
</view>
<!-- 收藏盒子 -->
<view class="collection-div"></view>
</view>
<view class="other-div-2">
<!-- 完成人数盒子 -->
<view class="progress-text-div">
<text class="color_3">
完成人数
<text class="maoh">:</text>
</text>
<text class="color_2">
{{ detailData.taskFinishSums ?? 0 }}/{{ detailData.taskSums ?? 0 }}
</text>
</view>
<!-- 进度条 -->
<view class="line-progress-div">
<view class="progress-div">
<view class="progress-line"></view>
</view>
<view class="progress-text">32%</view>
</view>
</view>
</view>
</view>
<view>任务详情</view>
</view>
</template>
<view class="interior">
</view>
</z-paging>
<!-- 步骤 -->
<view class="step-list-div">
<detailsItem></detailsItem>
</view>
</z-paging>
</view>
</view>
</template>
@@ -34,6 +70,7 @@
import { queryAllTraTaskCrsInfo, queryTraTaskInfoByTaskId } from '@/api/learningTasks.js';
import { passTheExamIcon, completeTheExercisesIcon, lockIcon } from '@/common/imgSvg';
import { insertTraPersonalCollectionTask, deleteTraPersonalCollectionById } from '@/api/favorites.js';
import detailsItem from './components/details-item';
import common from '@/common/common';
import { getPageCache } from '@/common/common';
@@ -42,7 +79,7 @@
const data_list = ref([]);
const total = ref(-1);
const taskId = ref('');
const progress = computed(() => '30%');
const queryList = async (pageNo, pageSize, from) => {
const requests = [queryAllTraTaskCrsInfo({ taskId: taskId.value })];
// 如果不是第一次请求,才添加第二个请求
@@ -202,19 +239,134 @@
</script>
<style scoped lang="scss">
// 步骤
.step-list-div {
}
// 详情
.details-div {
display: flex;
margin: 50rpx auto 30rpx auto;
width: calc(100% - 60rpx);
.img-div {
width: 224rpx;
height: 126rpx;
border-radius: 18rpx;
overflow: hidden;
}
.right-div {
flex: 1;
height: 100%;
display: flex;
flex-direction: column;
margin-left: 24rpx;
.title-div {
font-family: PingFangSC, PingFang SC;
font-weight: 500;
font-size: 30rpx;
color: #ffffff;
line-height: 43rpx;
text-align: left;
font-style: normal;
max-height: 86rpx;
}
.other-div-1 {
margin-top: 6rpx;
.time-div {
font-weight: 400;
font-size: 22rpx;
color: #f2f5fa;
line-height: 33rpx;
font-family: Arial, Helvetica, sans-serif;
}
}
.other-div-2 {
width: 100%;
margin-top: 6rpx;
display: flex;
align-items: center;
justify-content: space-between;
.progress-text-div {
font-weight: 400;
font-size: 22rpx;
color: #f2f5fa;
line-height: 33rpx;
text-align: left;
font-style: normal;
}
.line-progress-div {
margin-left: 20rpx;
flex: 1;
display: flex;
align-items: center;
.progress-div {
position: relative;
background-color: rgba(255, 255, 255, 0.5);
width: 100%;
height: 16rpx;
border-radius: 10rpx;
overflow: hidden;
.progress-line {
position: absolute;
top: 0;
left: 0;
border-radius: 10rpx;
background-color: #ffffff;
width: v-bind(progress);
height: 100%;
}
}
.progress-text {
color: #ffffff;
font-size: 22rpx;
margin-left: 10rpx;
}
}
}
}
}
.div-max {
width: 100vw;
height: 100vh;
background-image: url('@/static/images/learningTasks/bg.png');
background-size: 100%;
// background: linear-gradient(358deg, #184891 0%, #3772c1 100%);
opacity: 1;
}
.interior{
.interior {
z-index: 1;
}
.noise-bg {
width: 100vw;
height: 100vh;
opacity: .9;
background: linear-gradient( 358deg, #184891 0%, #3772C1 100%);
position: relative;
overflow: hidden;
background: linear-gradient(358deg, #184891 0%, #3772c1 100%);
opacity: 1;
}
/* 伪元素:只负责噪点,单独模糊+调透明度 */
.noise-bg::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
/* 噪点图配置 */
background-image: url('@/static/images/learningTasks/bg.png');
background-repeat: repeat;
background-size: 300px; /* 控制噪点大小,可按需改 */
/* 核心:模糊噪点(1px=轻微,2px=中度,3px=更糊) */
// filter: blur(1px);
opacity: 0.8;
/* 混合模式:让噪点和渐变自然融合(multiply/overlay二选一) */
background-blend-mode: multiply;
/* 不影响容器内元素点击 */
pointer-events: none;
/* 确保噪点在内容之下,渐变之上 */
z-index: 1;
}
.body-title {
width: 100%;

Before

Width:  |  Height:  |  Size: 823 B

After

Width:  |  Height:  |  Size: 823 B

Before

Width:  |  Height:  |  Size: 613 B

After

Width:  |  Height:  |  Size: 613 B

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 680 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 684 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 845 B