This commit is contained in:
Net 2025-06-14 14:08:44 +08:00
parent 9fe8dd2880
commit 15c65bd49f
10 changed files with 793 additions and 237 deletions

View File

@ -175,12 +175,19 @@
}
},
{
"path": "pages/view/routine/JiFenPingJia",
"path": "pages/view/routine/JiFenPingJia/JiFenPingJia",
"style": {
"navigationBarTitleText": "积分评价",
"enablePullDownRefresh": false
}
},
{
"path": "pages/view/routine/JiFenPingJia/detail",
"style": {
"navigationBarTitleText": "评价详情",
"enablePullDownRefresh": false
}
},
{
"path": "pages/view/routine/kefuxuncha/KeFuXunCha",
"style": {
@ -390,6 +397,20 @@
"navigationBarTitleText": "zhujiaoDetails"
}
},
{
"path": "pages/view/routine/RengJiaoRengZhi/index",
"style": {
"navigationBarTitleText": "任教任职",
"enablePullDownRefresh": false
}
},
{
"path": "pages/view/routine/GongZuoLiang/index",
"style": {
"navigationBarTitleText": "工作量",
"enablePullDownRefresh": false
}
},
{
"path": "pages/base/groupTeaching/studentRollCall",
"style": {

View File

@ -167,27 +167,42 @@ const sections = reactive<Section[]>([
show: true,
path: "/pages/view/routine/JiaoXueZiYuan/index",
},
{
id: "r3",
icon: "file-list-3-fil",
text: "活动资源",
show: true,
path: "/pages/view/routine/HuoDongZiYuan/index",
},
{
id: "r4",
icon: "file-paper-2-fill",
text: "公文流转",
show: true,
path: "/pages/view/routine/GongWenLiuZhuan/index",
},
{
id: "r5",
icon: "file-mark-fill",
text: "积分评价",
show: true,
path: "/pages/view/routine/JiFenPingJia",
path: "/pages/view/routine/JiFenPingJia/JiFenPingJia",
},
// {
// id: "r3",
// icon: "file-list-3-fil",
// text: "",
// show: true,
// path: "/pages/view/routine/HuoDongZiYuan/index",
// },
{
id: "r3",
icon: "file-list-3-fil",
text: "工作量",
show: true,
path: "/pages/view/routine/GongZuoLiang/index",
},
// {
// id: "r4",
// icon: "file-paper-2-fill",
// text: "",
// show: true,
// path: "/pages/view/routine/GongWenLiuZhuan/index",
// },
{
id: "r4",
icon: "file-paper-2-fill",
text: "任教任职",
show: true,
path: "/pages/view/routine/RengJiaoRengZhi/index",
},
{
id: "r6",
icon: "pass-pending-fill",

View File

@ -32,14 +32,8 @@
<template #bottom>
<view class="flex-row items-center pb-10 pt-5">
<u-button
text="上一步"
class="ml-15 mr-7"
:plain="true"
@click="navigateBack"
/>
<u-button
text="下一步"
class="mr-15 mr-7"
text="提交"
class="mx-15"
type="primary"
@click="submit"
/>
@ -258,36 +252,32 @@ function deleteMemberFamily(index: number, item: any) {
//
function submit() {
setFile({
...getFile,
grRyList: map(education.xl, (item) => {
const grRyList = map(education.xl, (item) => {
return { ...item.value, hjlxId: "GRRY" };
}),
});
navigateTo("/pages/view/hr/teacherProfile/PublicClassAwards");
}
//
const { getFile, setFile } = useDataStore();
//
if (getFile.grRyList && getFile.grRyList.length > 0) {
education.xl = map(getFile.grRyList, (item) => {
return { value: item };
});
}
// //
// const { getFile, setFile } = useDataStore();
// //
// if (getFile.grRyList && getFile.grRyList.length > 0) {
// education.xl = map(getFile.grRyList, (item) => {
// return { value: item };
// });
// }
//
onMounted(() => {
if (getFile.grRyList && getFile.grRyList.length > 0) {
//
nextTick(() => {
initEchoData();
});
} else {
//
initHonorCategories();
}
// if (getFile.grRyList && getFile.grRyList.length > 0) {
// //
// nextTick(() => {
// initEchoData();
// });
// } else {
// //
// initHonorCategories();
// }
});
</script>

View File

@ -31,18 +31,7 @@
</view>
<template #bottom>
<view class="flex-row items-center pb-10 pt-5">
<u-button
text="上一步"
class="ml-15 mr-7"
:plain="true"
@click="navigateBack"
/>
<u-button
text="提交"
class="mr-15 mr-7"
type="primary"
@click="submit"
/>
<u-button text="提交" class="mx-15" type="primary" @click="submit" />
</view>
</template>
</BasicLayout>
@ -260,36 +249,32 @@ function deleteMemberFamily(index: number, item: any) {
//
function submit() {
setFile({
...getFile,
gkkRyList: map(education.xl, (item) => {
const gkkRyList = map(education.xl, (item) => {
return { ...item.value, hjlxId: "GKKHJQK" };
}),
});
navigateTo("/pages/view/hr/teacherProfile/RecordMaterials");
}
//
const { getFile, setFile } = useDataStore();
//
if (getFile.gkkRyList && getFile.gkkRyList.length > 0) {
education.xl = map(getFile.gkkRyList, (item) => {
return { value: item };
});
}
// //
// const { getFile, setFile } = useDataStore();
// //
// if (getFile.gkkRyList && getFile.gkkRyList.length > 0) {
// education.xl = map(getFile.gkkRyList, (item) => {
// return { value: item };
// });
// }
//
onMounted(() => {
if (getFile.gkkRyList && getFile.gkkRyList.length > 0) {
//
nextTick(() => {
initEchoData();
});
} else {
//
initHonorCategories();
}
// if (getFile.gkkRyList && getFile.gkkRyList.length > 0) {
// //
// nextTick(() => {
// initEchoData();
// });
// } else {
// //
// initHonorCategories();
// }
});
</script>
<style>

View File

@ -1,128 +0,0 @@
<template>
<view class="container">
<uni-card :is-shadow="false" is-full>
<view class="header">
<text class="score">我的得分: 84</text>
<view class="status">
<text>我的状态: </text>
<view class="status-indicator"></view>
</view>
</view>
</uni-card>
<uni-card :is-shadow="false" is-full margin="10px 0 0 0">
<view class="list-header">
<text class="category-header">分类</text>
<text class="value-header">分值</text>
</view>
<view class="list-item" v-for="(item, index) in evaluationItems" :key="index">
<text class="category-name">{{ item.category }}</text>
<text class="value">{{ item.value }}</text>
</view>
</uni-card>
</view>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
const evaluationItems = ref([
{ category: '师德师风', value: 8 },
{ category: '考勤管理', value: 4 },
{ category: '资料上交', value: 1 },
{ category: '教学质量', value: 1 },
{ category: '教育科研课题', value: 8 },
{ category: '个人材料发表和获奖', value: 9 },
{ category: '展示交流和比赛', value: 4 },
{ category: '工作室活动', value: 5 },
{ category: '荣誉', value: 6 },
{ category: '辅导学生', value: 7 },
{ category: '安全管理', value: 2 },
{ category: '班级常规管理', value: 7 },
]);
</script>
<style scoped lang="scss">
.container {
background-color: #f8f8f8;
min-height: 100vh;
padding: 15px;
box-sizing: border-box;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0; // Adjusted padding
font-size: 16px;
}
.score {
color: #333;
font-weight: bold;
}
.status {
display: flex;
align-items: center;
color: #666;
}
.status-indicator {
width: 12px;
height: 12px;
background-color: #4caf50; // Green color from the image
margin-left: 8px;
border-radius: 2px; // Slightly rounded corners
}
// Remove default card padding if needed
::v-deep .uni-card .uni-card__content {
padding: 10px 15px !important; // Overwrite default padding
}
.list-header {
display: flex;
justify-content: space-between;
padding: 10px 0; // Adjust padding as needed
border-bottom: 1px solid #eee;
color: #666;
font-size: 14px;
}
.category-header {
flex: 3; // Give more space to category
}
.value-header {
flex: 1;
text-align: right;
}
.list-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 0; // Vertical padding for spacing
border-bottom: 1px solid #eee;
font-size: 14px;
&:last-child {
border-bottom: none; // Remove border for the last item
}
}
.category-name {
flex: 3; // Corresponds to header
color: #333;
}
.value {
flex: 1; // Corresponds to header
text-align: right;
color: #333;
font-weight: 500;
}
</style>

View File

@ -0,0 +1,225 @@
<template>
<BasicLayout>
<view class="container">
<uni-card :is-shadow="false" is-full>
<view class="header">
<text class="score">我的得分: 84</text>
<view class="status">
<text>我的状态: </text>
<view class="status-indicator"></view>
<view class="review-count" v-if="reviewingCount > 0">
{{ reviewingCount }}项在审核
</view>
</view>
</view>
</uni-card>
<uni-card :is-shadow="false" is-full margin="10px 0 0 0">
<view class="list-header">
<text class="category-header">分类</text>
<text class="value-header">分值</text>
</view>
<view
class="list-item"
v-for="(item, index) in evaluationItems"
:key="index"
>
<view
class="flex-row items-center justify-between w-full"
@click="handleItemClick(item)"
>
<view class="category-name">{{ item.category }}</view>
<view class="flex-row items-center">
<text class="value">{{ item.value }}</text>
<view class="review-badge" v-if="item.isUnderReview"></view>
<u-icon name="arrow-right" size="16" color="#999"></u-icon
></view>
</view>
</view>
</uni-card>
</view>
<template #bottom>
<view class="white-bg-color py-5">
<view class="flex-row items-center pb-10 pt-5">
<u-button
text="上传个人荣誉"
class="ml-15 mr-7"
:plain="true"
@click="scgrry"
/>
<u-button
text="上传公开课获奖"
class="mr-15 mr-7"
type="primary"
@click="scgkkhj"
/>
</view>
</view>
</template>
</BasicLayout>
</template>
<script lang="ts" setup>
import { ref, computed } from "vue";
const evaluationItems = ref([
{ category: "师德师风", value: 8, isUnderReview: false },
{ category: "考勤管理", value: 4, isUnderReview: true },
{ category: "资料上交", value: 1, isUnderReview: false },
{ category: "教学质量", value: 1, isUnderReview: true },
{ category: "教育科研课题", value: 8, isUnderReview: false },
{ category: "个人材料发表和获奖", value: 9, isUnderReview: true },
{ category: "展示交流和比赛", value: 4, isUnderReview: false },
{ category: "工作室活动", value: 5, isUnderReview: false },
{ category: "荣誉", value: 6, isUnderReview: true },
{ category: "辅导学生", value: 7, isUnderReview: false },
{ category: "安全管理", value: 2, isUnderReview: false },
{ category: "班级常规管理", value: 7, isUnderReview: true },
]);
//
const reviewingCount = computed(() => {
return evaluationItems.value.filter(item => item.isUnderReview).length;
});
function handleItemClick(item: any) {
uni.navigateTo({
url: `/pages/view/routine/JiFenPingJia/detail?id=${item.id}`,
});
}
function scgrry() {
uni.navigateTo({
url: `/pages/view/hr/teacherProfile/PersonalHonor`,
});
}
function scgkkhj() {
uni.navigateTo({
url: `/pages/view/hr/teacherProfile/PublicClassAwards`,
});
}
</script>
<style scoped lang="scss">
.container {
background-color: #f8f8f8;
min-height: 100vh;
padding: 15px;
box-sizing: border-box;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 10px 0; // Adjusted padding
font-size: 16px;
}
.score {
color: #333;
font-weight: bold;
}
.status {
display: flex;
align-items: center;
color: #666;
}
.status-indicator {
width: 12px;
height: 12px;
background-color: #4caf50; // Green color from the image
margin-left: 8px;
border-radius: 2px; // Slightly rounded corners
}
.review-count {
background-color: #fff2e8;
color: #ff6b35;
font-size: 12px;
padding: 2px 8px;
border-radius: 12px;
margin-left: 12px;
border: 1px solid #ff6b35;
font-weight: bold;
}
// Remove default card padding if needed
::v-deep .uni-card .uni-card__content {
padding: 10px 15px !important; // Overwrite default padding
}
.list-header {
display: flex;
justify-content: space-between;
padding: 10px 0; // Adjust padding as needed
border-bottom: 1px solid #eee;
color: #666;
font-size: 14px;
}
.category-header {
flex: 3; // Give more space to category
}
.value-header {
flex: 1;
text-align: right;
}
.list-item {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 0; // Vertical padding for spacing
border-bottom: 1px solid #eee;
font-size: 14px;
&:last-child {
border-bottom: none; // Remove border for the last item
}
}
.category-name {
flex: 3; // Corresponds to header
color: #333;
}
.value {
flex: 1; // Corresponds to header
text-align: right;
color: #333;
font-weight: 500;
}
.review-badge {
display: inline-flex;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
background-color: #ff6b35;
color: #ffffff;
font-size: 12px;
font-weight: bold;
border-radius: 50%;
margin-left: 8px;
margin-right: 8px;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% {
box-shadow: 0 0 0 0 rgba(255, 107, 53, 0.7);
}
70% {
box-shadow: 0 0 0 10px rgba(255, 107, 53, 0);
}
100% {
box-shadow: 0 0 0 0 rgba(255, 107, 53, 0);
}
}
</style>

View File

@ -0,0 +1,277 @@
<template>
<view class="detail-container">
<view class="content-wrapper">
<!-- 评分标准 -->
<view class="form-section">
<view class="section-title">评分标准</view>
<view class="standard-text">
1.一二年级考核语文数学两个学科平行班教学质量评价差距均在2分内的按一...
</view>
</view>
<!-- 考核评价 -->
<view class="detail-item">
<text class="detail-label">考核评价</text>
<text class="detail-value">{{ detailData.evaluationType }}</text>
</view>
<!-- 积分类型 -->
<view class="detail-item">
<text class="detail-label">积分类型</text>
<text class="detail-value">{{ detailData.scoreType }}</text>
</view>
<!-- 积分分值 -->
<view class="detail-item">
<text class="detail-label">积分分值</text>
<text class="detail-value">{{ detailData.scoreValue }}</text>
</view>
<!-- 考核处室 -->
<view class="detail-item">
<text class="detail-label">考核处室</text>
<text class="detail-value">{{ detailData.department }}</text>
</view>
<!-- 考核时间 -->
<view class="detail-item">
<text class="detail-label">考核时间</text>
<text class="detail-value">{{ detailData.evaluationDate }}</text>
</view>
<!-- 考核打分 -->
<view class="detail-item">
<text class="detail-label">考核打分</text>
<text class="detail-value">{{ detailData.score }}</text>
</view>
<!-- 证明材料 -->
<view class="detail-item file-section" v-if="detailData.files.length > 0">
<text class="detail-label">证明材料</text>
<view class="file-list">
<view
class="file-item"
v-for="(file, index) in detailData.files"
:key="index"
@click="previewFile(file)"
>
<uni-icons type="paperplane" size="16" color="#409eff" />
<text class="file-name">{{ file.name }}</text>
</view>
</view>
</view>
<!-- 转手机端按钮 -->
<view class="bottom-actions">
<button class="mobile-btn" @click="goBack">返回</button>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import { ref, onMounted } from "vue";
interface DetailData {
evaluationType: string;
scoreType: string;
scoreValue: number | string;
department: string;
evaluationDate: string;
score: number | string;
files: Array<{ name: string; url: string }>;
}
//
const detailData = ref<DetailData>({
evaluationType: "考核评价",
scoreType: "加分",
scoreValue: 1,
department: "教科处",
evaluationDate: "2025-06-08",
score: 90,
files: [
{ name: "教学成果证明.pdf", url: "/files/certificate.pdf" },
{ name: "获奖证书.jpg", url: "/files/award.jpg" },
],
});
//
const goBack = () => {
uni.navigateBack();
};
//
const previewFile = (file: { name: string; url: string }) => {
//
const ext = file.name.split(".").pop()?.toLowerCase();
if (["jpg", "jpeg", "png", "gif"].includes(ext || "")) {
//
uni.previewImage({
urls: [file.url],
current: file.url,
});
} else {
//
uni.showModal({
title: "提示",
content: `是否下载文件: ${file.name}?`,
success: (res) => {
if (res.confirm) {
// TODO:
uni.showToast({
title: "开始下载",
icon: "success",
});
}
},
});
}
};
//
const transferToMobile = () => {
uni.showModal({
title: "提示",
content: "确定要转到手机端处理吗?",
success: (res) => {
if (res.confirm) {
// TODO:
uni.showToast({
title: "已转至手机端",
icon: "success",
});
}
},
});
};
onMounted(() => {
//
console.log("页面加载完成");
});
</script>
<style scoped lang="scss">
.detail-container {
min-height: 100vh;
background-color: #f5f5f5;
}
.content-wrapper {
padding: 30rpx 30rpx 40rpx;
}
.form-section {
background-color: #ffffff;
border-radius: 16rpx;
padding: 30rpx;
margin-bottom: 20rpx;
.section-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
margin-bottom: 20rpx;
}
.standard-text {
font-size: 28rpx;
color: #666;
line-height: 1.6;
}
}
.detail-item {
display: flex;
align-items: center;
background-color: #ffffff;
border-radius: 16rpx;
padding: 30rpx;
margin-bottom: 20rpx;
.detail-label {
font-size: 28rpx;
color: #333;
width: 160rpx;
flex-shrink: 0;
}
.detail-value {
flex: 1;
font-size: 28rpx;
color: #333;
text-align: right;
}
}
.file-section {
flex-direction: column;
align-items: flex-start;
.detail-label {
margin-bottom: 20rpx;
}
.file-list {
width: 100%;
.file-item {
display: flex;
align-items: center;
padding: 15rpx 20rpx;
background-color: #f5f5f5;
border-radius: 8rpx;
margin-bottom: 10rpx;
cursor: pointer;
&:hover {
background-color: #e6f7ff;
}
uni-icons {
margin-right: 10rpx;
}
.file-name {
font-size: 26rpx;
color: #333;
flex: 1;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
}
.bottom-actions {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: 20rpx 30rpx;
padding-bottom: calc(20rpx + env(safe-area-inset-bottom));
background-color: #ffffff;
border-top: 1rpx solid #eee;
.mobile-btn {
width: 100%;
height: 88rpx;
background-color: #ff4757;
color: #ffffff;
font-size: 32rpx;
font-weight: bold;
border-radius: 44rpx;
border: none;
display: flex;
align-items: center;
justify-content: center;
&:active {
background-color: #ff3742;
}
}
}
</style>

View File

@ -0,0 +1,174 @@
<template>
<view class="container">
<view class="content">
<!-- 党政职务 -->
<view class="section">
<view class="section-title">党政职务</view>
<view class="position-display">
<text class="position-text" v-for="item in partyPositions" :key="item.id">
{{ item.name }}
</text>
</view>
</view>
<!-- 其他职务 -->
<view class="section">
<view class="section-title">其他职务</view>
<view class="position-display">
<text class="position-text" v-for="item in otherPositions" :key="item.id">
{{ item.name }}
</text>
</view>
</view>
<!-- 任职信息列表 -->
<view class="info-list">
<view class="info-item" v-for="item in teachingInfo" :key="item.key">
<view class="info-label">{{ item.label }}</view>
<view class="info-value">
<text :class="{ empty: item.isEmpty }">{{ item.value }}</text>
</view>
</view>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
import { ref } from "vue";
//
const partyPositions = ref([
{ id: 1, name: "党委(总支)书记" },
{ id: 2, name: "党委(总支)副书记" },
]);
//
const otherPositions = ref([{ id: 1, name: "党支部支委" }]);
//
const teachingInfo = ref([
{
key: "mainSubject",
label: "主任学科",
value: "音乐",
isEmpty: false,
},
{
key: "mainClass",
label: "主任班级",
value: "未填写",
isEmpty: true,
},
{
key: "partTimeSubject",
label: "兼任学科",
value: "未填写",
isEmpty: true,
},
{
key: "partTimeClass",
label: "兼任班级",
value: "未填写",
isEmpty: true,
},
{
key: "grade",
label: "所属年级",
value: "一年级(2024级)",
isEmpty: false,
},
{
key: "headTeacherClass",
label: "所任班主任班级",
value: "8班",
isEmpty: false,
},
]);
//
const goBack = () => {
uni.navigateBack();
};
</script>
<style scoped lang="scss">
.container {
min-height: 100vh;
background-color: #f5f5f5;
}
.content {
padding-bottom: 40rpx;
}
.section {
background-color: #ffffff;
margin-bottom: 20rpx;
padding: 30rpx;
.section-title {
font-size: 32rpx;
color: #333;
font-weight: bold;
margin-bottom: 20rpx;
}
}
//
.position-display {
.position-text {
display: inline-block;
font-size: 28rpx;
color: #333;
margin-right: 20rpx;
margin-bottom: 10rpx;
&:not(:last-child)::after {
content: '、';
margin-left: 0;
margin-right: 0;
}
}
}
//
.info-list {
background-color: #ffffff;
border-radius: 16rpx;
overflow: hidden;
margin: 0 30rpx;
}
.info-item {
display: flex;
align-items: center;
justify-content: space-between;
padding: 30rpx;
border-bottom: 1rpx solid #f0f0f0;
&:last-child {
border-bottom: none;
}
.info-label {
font-size: 28rpx;
color: #333;
flex-shrink: 0;
}
.info-value {
flex: 1;
text-align: right;
text {
font-size: 28rpx;
color: #333;
&.empty {
color: #999;
}
}
}
}
</style>

View File

@ -1,17 +1,16 @@
<template>
<view class="page-container">
<!-- 1. 顶部 Banner -->
<view class="header-banner mx-15 mt-15 r-md" style="box-sizing: border-box">
<!-- <view class="header-banner mx-15 mt-15 r-md" style="box-sizing: border-box">
<view class="banner-text">
<text class="banner-title">上课巡查</text>
<text class="banner-subtitle">泸州市实验小学城西学校</text>
</view>
<!-- 右侧图片区域暂时留空或用占位符 -->
<view class="banner-image-placeholder"></view>
</view>
</view> -->
<!-- 2. 我的应用 -->
<view class="section my-apps mt-15 px-15">
<!-- <view class="section my-apps mt-15 px-15">
<view class="section-title-bar">
<view class="decorator"></view>
<text class="title-text">我的应用</text>
@ -20,19 +19,17 @@
<view class="app-grid">
<view class="app-item" @click="goToRecord">
<view class="app-icon-wrapper record-icon">
<!-- 暂时用背景色代替图标 -->
</view>
<text class="app-text">巡查记录</text>
</view>
<view class="app-item" @click="goToSummary">
<view class="app-icon-wrapper summary-icon">
<!-- 暂时用背景色代替图标 -->
</view>
<text class="app-text">巡查汇总</text>
</view>
</view>
</uni-card>
</view>
</view> -->
<!-- 3. 巡检情况 -->
<view class="section inspection-status flex-1 flex-col mt-15">