调整请假详情

This commit is contained in:
ywyonui 2025-07-26 15:27:02 +08:00
parent 64d84d7803
commit aaf1360f03
8 changed files with 241 additions and 181 deletions

View File

@ -64,7 +64,7 @@ export const findDkByIdApi = async (params: any) => {
*
*/
export const findDkPageApi = async (params: any) => {
return await get("/api/jsQjDk/findById", params);
return await get("/api/jsQjDk/findPage", params);
};
/**

View File

@ -5,7 +5,7 @@
<view class="info-card">
<view class="card-header">
<text class="applicant-name" v-if="dbFlag">{{ dbData.dbZy }}</text>
<text class="applicant-name" v-if="dbFlag">学生{{ qjData.xsxm }}的请假申请</text>
<text class="applicant-name" v-else>学生{{ qjData.xsxm }}的请假申请</text>
</view>
<view class="divider"></view>
<view class="card-body">

View File

@ -37,11 +37,11 @@ const { getAllJs } = useCommonStore();
//
const props = withDefaults(defineProps<{
defualtValue: any,
parentData: any,
multiple: boolean,
defualtValue?: any,
parentData?: any,
multiple?: boolean,
// id
excludeIds: any
excludeIds?: any
}>(), {
defualtValue: null,
parentData: null,

View File

@ -0,0 +1,226 @@
<template>
<view class="qj-detail back-f8f8f8">
<view class="pt-15">
<view class="dk-title pl-15 pr-15">
<BasicTitle line title="请假信息" :isBorder="false" />
</view>
<!-- 请假信息卡片 -->
<view class="info-card">
<view class="card-header">
<text class="applicant-name" v-if="dbFlag">{{ qjData.dbZy }}</text>
<text class="applicant-name" v-else>教师{{ qjData.jsName }}的请假申请</text>
</view>
<view class="divider"></view>
<view class="card-body">
<view class="info-row">
<text class="label">请假类型:</text>
<text class="value">{{ qjData.qjlx }}</text>
</view>
<view class="info-row">
<text class="label">开始时间:</text>
<text class="value">{{ qjData.qjkstime }}</text>
</view>
<view class="info-row">
<text class="label">结束时间:</text>
<text class="value">{{ qjData.qjjstime }}</text>
</view>
<view class="info-row">
<text class="label">请假时长:</text>
<text class="value">{{ qjData.qjsc }}</text>
</view>
<view class="info-column">
<text class="label">请假事由:</text>
<text class="value">{{ qjData.qjsy }}</text>
</view>
<view class="info-row" style="margin-bottom: 0;margin-top: 10px;">
<text class="label">代课方式:</text>
<text class="value">{{ dkfsList[qjData.dkfs] ? dkfsList[qjData.dkfs].text : "" }}</text>
</view>
</view>
</view>
</view>
<view class="" v-if="qjData.dkfs != 2">
<view class="dk-title pl-15 pr-15">
<BasicTitle line title="代课明细" :isBorder="false" />
</view>
<view >
<view class="dk-card">
<view class="card-body">
</view>
</view>
</view>
<!-- 请假信息卡片 -->
<view class="info-card" v-for="(item, index) in dkList" :key="index">
<view class="card-header">
<text class="applicant-name">{{ item.dktime }}{{ wdNameList[item.xq - 1] }}{{ item.jcmc }}</text>
</view>
<view class="divider"></view>
<view class="card-body">
<view class="info-row">
<text class="label">排课名称:</text>
<text class="value">{{ item.pkName }}</text>
</view>
<view class="info-row">
<text class="label">上课时间:</text>
<text class="value">{{ item.startTime }}-{{ item.endTime }}</text>
</view>
<view class="info-row">
<text class="label">代课老师:</text>
<view class="value">{{ item.jsName }}</view>
</view>
</view>
</view>
</view>
<view class="">
<view class="dk-title pl-15 pr-15">
<BasicTitle line title="请假流程" :isBorder="false" />
</view>
<ProgressList :procInstId="qjData.procInstId" />
</view>
</view>
</template>
<script setup lang="ts">
import ProgressList from "./progressList.vue"
import { findQjById, findDkPageApi } from "@/api/base/jsQjApi";
import { showToast } from "@/utils/uniapp";
import { useDicStore } from "@/store/modules/dic";
import { update } from "lodash";
const { findByPid } = useDicStore();
//
const props = withDefaults(defineProps<{
qjId?: string,
dbFlag?: boolean
}>(), {
qjId: "",
dbFlag: false
});
const qjData = ref<any>({});
const wdNameList = ref<string[]>(["周一", "周二", "周三", "周四", "周五", "周六", "周日"]);
const dkfsList = ref<any>([
{ value: 0, text: "自行协调" },
{ value: 1, text: "教科处协调" },
{ value: 2, text: "无须代课" },
]);
const jsTypeMc: any = {
"ZAM": '早自习',
"AM": '上午',
"PM": '下午',
};
const dkList = ref<any>([]);
watch(() => props.qjId, (newVal, oldVal) => {
//
console.log('qjId changed:', newVal, oldVal);
if (newVal != oldVal && newVal) {
init();
}
});
const init = async () => {
{
const res = await findQjById({ id: props.qjId });
qjData.value = res.result;
}
//
if (qjData.value.dkfs == 2) {
return;
}
{
const res:any = await findDkPageApi({ qjId: props.qjId, page: 1, rows: 1000 });
dkList.value = res.rows.map((item: any) => {
item.dktime = item.dktime.split(" ")[0];
item.jcmc = jsTypeMc[item.jcType] + "第" + item.jc + "节";
return item;
});
}
};
//
onMounted(async () => {
await init();
});
</script>
<style lang="scss" scoped>
.qj-detail {
background-color: #f5f7fa;
}
.info-card {
margin: 15px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
.card-header {
font-size: 16px;
font-weight: bold;
color: #333;
padding: 15px;
.applicant-name {
font-size: 16px;
font-weight: bold;
color: #333;
}
}
.divider {
height: 1px;
background-color: #eee;
}
.card-body {
padding: 15px;
.info-row {
display: flex;
margin-bottom: 10px;
.label {
font-size: 14px;
color: #999;
width: 70px;
flex-shrink: 0;
margin-right: 8px;
}
.value {
font-size: 14px;
color: #333;
flex: 1;
}
}
.info-column {
display: flex;
flex-direction: column;
.label {
font-size: 14px;
color: #999;
flex-shrink: 0;
margin-right: 8px;
width: 100%;
margin-bottom: 5px;
}
.value {
font-size: 14px;
color: #333;
flex: 1;
}
}
}
}
</style>

View File

@ -215,7 +215,7 @@ const submit = async () => {
newItem.jsId = item.dkJsId;
newItem.jsName = item.dkJsName;
newItem.pkkbId = item.id;
newItem.dktime = item.dktime + " " + item.startTime + ":00";
newItem.dktime = item.dktime + " 00:00:00";
newItem.id = "";
newItem.qjId = "";
return newItem;
@ -229,6 +229,7 @@ const submit = async () => {
} else {
params.id = null;
params.jsId = getJs.id;
params.jsName = getJs.jsxm;
}
uni.showLoading({ title: "提交中..." });
await jsQjSqApi(params).then(() => {

View File

@ -4,7 +4,7 @@
<template v-slot="{ data, index }">
<view class="leave-card" @click="goToDetail(data)">
<view class="card-header">
<text class="applicant-name">{{ data.jsxm }}的请假申请</text>
<text class="applicant-name">{{ data.jsName }}的请假申请</text>
</view>
<view class="card-body">
<view class="info-row">

View File

@ -2,7 +2,7 @@
<view class="approval-progress">
<view class="progress-title">
<!-- <image src="/static/icons/approval.png" class="title-icon"></image> -->
<text class="applicant-name">审批进度</text>
<text class="applicant-name">请假流程进度</text>
</view>
<view class="divider"></view>
<view class="progress-list">
@ -10,7 +10,7 @@
<view class="progress-item-row">
<view class="item-avatar">
<image
:src="task.avatar || '/static/base/home/11222.png'"
:src="task.avatar || '/static/base/home/user-5-line.png'"
class="w-full h-full"
></image>
</view>

View File

@ -1,183 +1,16 @@
<template>
<BasicLayout>
<view class="qj-detail">
<!-- 请假信息卡片 -->
<view class="info-card">
<view class="card-header">
<text class="applicant-name" v-if="dbFlag">{{ dbData.dbZy }}</text>
<text class="applicant-name" v-if="dbFlag">学生{{ qjData.xsxm }}的请假申请</text>
</view>
<view class="divider"></view>
<view class="card-body">
<view class="info-row">
<text class="label">请假类型:</text>
<text class="value">{{ qjData.qjlx }}</text>
</view>
<view class="info-row">
<text class="label">开始时间:</text>
<text class="value">{{ qjData.qjkstime }}</text>
</view>
<view class="info-row">
<text class="label">结束时间:</text>
<text class="value">{{ qjData.qjjstime }}</text>
</view>
<view class="info-row">
<text class="label">请假时长:</text>
<text class="value">{{ qjData.qjsc }}</text>
</view>
<view class="info-row">
<text class="label">是否离校:</text>
<text class="value">{{ qjData.sflx === 1 ? '是' : '否' }}</text>
</view>
<view class="info-column">
<text class="label">请假事由:</text>
<text class="value">{{ qjData.qjsy }}</text>
</view>
</view>
</view>
</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="navigateBack"
/>
<u-button
text="提交"
class="mr-15 mr-7"
type="primary"
@click="submit"
/>
</view>
</view>
</template>
<JsQjDetail :qjId="qjId" :dbFlag="false" />
</BasicLayout>
</template>
<script setup lang="ts">
import { onLoad } from "@dcloudio/uni-app";
import { navigateBack } from "@/utils/uniapp";
import { findQjById, } from "@/api/base/jsQjApi";
import JsQjDetail from "./components/jsQjDetail.vue";
import { useDataStore } from "@/store/modules/data";
const { getData, getDb, setData } = useDataStore();
const { getData } = useDataStore();
const dbFlag = ref(false);
//
const qjData = computed(() => getData || {});
const dbData = computed(() => getDb || {});
const submit = async () => {
navigateBack();
};
onLoad(async (data: any) => {
//
if (data && data.from && data.from == "db") {
dbFlag.value = true;
const res = await findQjById({ id: data.id });
nextTick(() => {
setData(res.result);
});
} else {
dbFlag.value = false;
}
});
const qjId = computed(() => getData.id);
</script>
<style lang="scss" scoped>
.qj-detail {
background-color: #f5f7fa;
}
.info-card {
margin: 15px;
background-color: #fff;
border-radius: 8px;
padding: 15px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
.card-header {
font-size: 16px;
font-weight: bold;
color: #333;
margin-bottom: 10px;
.applicant-name {
font-size: 16px;
font-weight: bold;
color: #333;
}
}
.divider {
height: 1px;
background-color: #eee;
margin-bottom: 15px;
}
.card-body {
padding: 15px;
.info-row {
display: flex;
margin-bottom: 10px;
.label {
font-size: 14px;
color: #bbb;
width: 70px;
flex-shrink: 0;
margin-right: 8px;
}
.value {
font-size: 14px;
color: #333;
flex: 1;
}
}
.info-column {
display: flex;
flex-direction: column;
.label {
font-size: 14px;
color: #bbb;
flex-shrink: 0;
margin-right: 8px;
width: 100%;
margin-bottom: 5px;
}
.value {
font-size: 14px;
color: #333;
flex: 1;
}
}
}
}
.bottom-action {
padding: 15px;
margin-top: 20px;
.back-btn {
width: 100%;
height: 44px;
line-height: 44px;
background-color: #fff;
color: #333;
border-radius: 22px;
font-size: 16px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
}
}
</style>