1、完善请假相关页面的显示
2、将待办请假的加载业务逻辑提取到qjPageUtil中
This commit is contained in:
parent
5d77454c4d
commit
978f53aa64
@ -19,6 +19,10 @@
|
||||
<text class="label">代课老师:</text>
|
||||
<view class="value">{{ item.jsName }}</view>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="label">确认状态:</text>
|
||||
<view class="value">{{ item.statusLabel }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -67,6 +71,12 @@ const jsTypeMc: any = {
|
||||
PM: "下午",
|
||||
};
|
||||
|
||||
const qrStatus: any = {
|
||||
"wait": "待确认",
|
||||
"approved": "同意",
|
||||
"rejected": "拒绝",
|
||||
};
|
||||
|
||||
const dkList = ref<any>([]);
|
||||
|
||||
watch(
|
||||
@ -92,6 +102,7 @@ const init = async () => {
|
||||
item.jcmc = jsTypeMc[item.jcType] + "第" + item.jc + "节";
|
||||
const xq: number = item.xq - 1;
|
||||
item.xqLabel = wdNameList.value[xq];
|
||||
item.statusLabel = qrStatus[item.qrStatus] || "未知";
|
||||
return item;
|
||||
});
|
||||
// 排序,将当前教师作为代课教师的代课数据,排在前面,并且添加一个标记
|
||||
|
||||
@ -23,8 +23,11 @@
|
||||
</view>
|
||||
|
||||
<!-- 代课信息 -->
|
||||
<view v-show="showDkTab && curTabIndex === 1">
|
||||
<JsQjDetailDk
|
||||
<view v-show="curTabIndex === 1">
|
||||
<view v-if="!showDkFlag" class="empty-dk">
|
||||
<view>{{ showDkEmptyLabel }}</view>
|
||||
</view>
|
||||
<JsQjDetailDk v-else
|
||||
:qjId="qjId"
|
||||
@loadDkList="handleDkListLoaded"
|
||||
/>
|
||||
@ -54,24 +57,18 @@ import ProgressList from "./components/progressList.vue";
|
||||
|
||||
const { getData, setData } = useDataStore();
|
||||
|
||||
const tabList = ref<any>([{ name: "请假信息", id: "tab-qj" }]);
|
||||
const tabList = ref<any>([
|
||||
{ name: "请假信息", id: "tab-qj" },
|
||||
{ name: "代课信息", id: "tab-dk" },
|
||||
{ name: "审批流程", id: "tab-sp" }
|
||||
]);
|
||||
const curTabIndex = ref(0);
|
||||
|
||||
const dbFlag = ref(false);
|
||||
const qjId = computed(() => getData.id);
|
||||
const showDkTab = ref(false);
|
||||
const showDkFlag = ref(false);
|
||||
const showDkEmptyLabel = ref('');
|
||||
|
||||
// 构建Tab列表
|
||||
const rebuildTabList = (showDk: boolean) => {
|
||||
// 构建Tab列表
|
||||
tabList.value = [
|
||||
{ name: "请假信息", id: "tab-qj" },
|
||||
];
|
||||
if (showDk) {
|
||||
tabList.value.push({ name: "代课信息", id: "tab-dk" });
|
||||
}
|
||||
tabList.value.push({ name: "审批流程", id: "tab-sp" });
|
||||
};
|
||||
|
||||
// 切换Tab
|
||||
const switchTab = (index: number) => {
|
||||
@ -80,8 +77,15 @@ const switchTab = (index: number) => {
|
||||
|
||||
const handleQjDataLoaded = (data: any) => {
|
||||
setData(data);
|
||||
showDkTab.value = !!(data && data.dkfs != 2);
|
||||
rebuildTabList(showDkTab.value);
|
||||
data = data || {};
|
||||
const dkfs = typeof(data.dkfs) === "string" ? parseInt(data.dkfs) : (data.dkfs || 2);
|
||||
const bpmStatus = typeof(data.bpmStatus) === "string" ? parseInt(data.bpmStatus) : (data.bpmStatus || 1);
|
||||
showDkFlag.value = dkfs === 0 || (dkfs === 1 && bpmStatus > 4);
|
||||
if (dkfs === 1) {
|
||||
showDkEmptyLabel.value = "等待教科处协调";
|
||||
} else if (dkfs === 2) {
|
||||
showDkEmptyLabel.value = "无需代课";
|
||||
}
|
||||
};
|
||||
|
||||
const handleDkListLoaded = (list: any[]) => {
|
||||
@ -101,4 +105,12 @@ const goHome = () => {
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
|
||||
.empty-dk {
|
||||
margin: 15px;
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 50px 15px;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -1,289 +1,212 @@
|
||||
<template>
|
||||
<BasicLayout>
|
||||
<view class="p-15">
|
||||
<!-- 请假信息卡片 -->
|
||||
<view class="info-card">
|
||||
<view class="card-header">
|
||||
<text class="applicant-name">教师{{ qjData.jsName }}的请假申请</text>
|
||||
</view>
|
||||
<view class="card-content">
|
||||
<view class="info-row">
|
||||
<text class="label">请假老师:</text>
|
||||
<text class="value">{{ qjData.jsName }}</text>
|
||||
</view>
|
||||
<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 }} 至 {{ 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.qjsy }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<template #top>
|
||||
<view>
|
||||
<BasicTabs
|
||||
class="detail-tabs"
|
||||
:list="tabList"
|
||||
bar-width="60px"
|
||||
scroll-count="4"
|
||||
:current="curTabIndex"
|
||||
@change="switchTab"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
<view class="qj-detail">
|
||||
<!-- 请假信息 -->
|
||||
<view v-show="curTabIndex === 0">
|
||||
<JsQjDetailInfo
|
||||
:qjId="qjId"
|
||||
:dbFlag="dbFlag"
|
||||
@loadQjData="handleQjDataLoaded"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<!-- 代课信息 -->
|
||||
<view class="dk-info-card">
|
||||
<view class="card-header">
|
||||
<text class="card-title">代课信息</text>
|
||||
</view>
|
||||
<view class="card-content">
|
||||
<view class="info-row">
|
||||
<text class="label">代课时间:</text>
|
||||
<text class="value">{{ dkData.dktime }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="label">课程名称:</text>
|
||||
<text class="value">{{ dkData.kcmc }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="label">班级:</text>
|
||||
<text class="value">{{ dkData.bjmc }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view v-show="showDkTab && curTabIndex === 1">
|
||||
<JsQjDetailDk
|
||||
:qjId="qjId"
|
||||
@loadDkList="handleDkListLoaded"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<!-- 确认操作 -->
|
||||
<view class="action-section">
|
||||
<view class="action-title">确认代课</view>
|
||||
<view class="action-buttons">
|
||||
<u-button
|
||||
text="拒绝代课"
|
||||
type="error"
|
||||
@click="handleReject"
|
||||
class="action-btn"
|
||||
/>
|
||||
<u-button
|
||||
text="确认代课"
|
||||
type="primary"
|
||||
@click="handleConfirm"
|
||||
class="action-btn"
|
||||
/>
|
||||
</view>
|
||||
<!-- 审批流程 -->
|
||||
<view v-show="curTabIndex === 2">
|
||||
<ProgressList :qjId="qjId" />
|
||||
</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="showDlg" />
|
||||
<u-button text="同意" class="mr-15 mr-7" type="primary" @click="submit" />
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<!-- 驳回弹窗 -->
|
||||
<u-popup
|
||||
:show="dlgFlag"
|
||||
mode="center"
|
||||
:closeOnClickOverlay="false"
|
||||
@close="closeDlg"
|
||||
>
|
||||
<view class="popup-content">
|
||||
<view class="popup-title">驳回原因</view>
|
||||
<u-input
|
||||
v-model="rejectReason"
|
||||
type="textarea"
|
||||
placeholder="请填写驳回原因"
|
||||
:autoHeight="true"
|
||||
maxlength="200"
|
||||
/>
|
||||
<view class="popup-actions flex-row justify-end mt-4">
|
||||
<u-button class="mr-2" @click="closeDlg">取消</u-button>
|
||||
<u-button type="primary" @click="handleReject">确定</u-button>
|
||||
</view>
|
||||
</view>
|
||||
</u-popup>
|
||||
</BasicLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import { jsQjDkQrApi } from "@/api/base/jsQjApi";
|
||||
import { findQjById, findDkByIdApi } from "@/api/base/jsQjApi";
|
||||
import { xxtsFindByIdApi } from "@/api/base/server";
|
||||
import { useUserStore } from "@/store/modules/user";
|
||||
import { useDataStore } from "@/store/modules/data";
|
||||
import { navigateBack } from "@/utils/uniapp";
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import { ref } from "vue";
|
||||
import JsQjDetailInfo from "./components/jsQjDetailInfo.vue";
|
||||
import JsQjDetailDk from "./components/jsQjDetailDk.vue";
|
||||
import ProgressList from "./components/progressList.vue";
|
||||
import { QjPageUtils } from "@/utils/qjPageUtils";
|
||||
|
||||
const { getJs, loginByOpenId } = useUserStore();
|
||||
const { getData, setXxts, setData, getXxts } = useDataStore();
|
||||
const { getJs } = useUserStore();
|
||||
const { setData } = useDataStore();
|
||||
|
||||
const tabList = ref<any>([{ name: "请假信息", id: "tab-qj" }]);
|
||||
const curTabIndex = ref(0);
|
||||
|
||||
const dbFlag = ref(false);
|
||||
const qjId = ref<string>();
|
||||
const dkId = ref<string>();
|
||||
const qjData = ref<any>({});
|
||||
const dkData = ref<any>({});
|
||||
const qjId = ref('');
|
||||
const showDkTab = ref(false);
|
||||
|
||||
// 加载请假信息
|
||||
const loadQjData = async () => {
|
||||
try {
|
||||
const result: any = await findQjById({ id: qjId.value });
|
||||
if (result.code === 1) {
|
||||
qjData.value = result.data;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取请假信息失败:', error);
|
||||
const dlgFlag = ref(false);
|
||||
const rejectReason = ref("");
|
||||
|
||||
|
||||
// 构建Tab列表
|
||||
const rebuildTabList = (showDk: boolean) => {
|
||||
// 构建Tab列表
|
||||
tabList.value = [
|
||||
{ name: "请假信息", id: "tab-qj" },
|
||||
];
|
||||
if (showDk) {
|
||||
tabList.value.push({ name: "代课信息", id: "tab-dk" });
|
||||
}
|
||||
tabList.value.push({ name: "审批流程", id: "tab-sp" });
|
||||
};
|
||||
|
||||
// 加载代课信息
|
||||
const loadDkData = async () => {
|
||||
try {
|
||||
const result: any = await findDkByIdApi({ id: dkId.value });
|
||||
if (result.code === 1) {
|
||||
dkData.value = result.data;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取代课信息失败:', error);
|
||||
}
|
||||
// 切换Tab
|
||||
const switchTab = (index: number) => {
|
||||
curTabIndex.value = index;
|
||||
};
|
||||
|
||||
// 确认代课
|
||||
const handleConfirm = async () => {
|
||||
const handleQjDataLoaded = (data: any) => {
|
||||
setData(data);
|
||||
showDkTab.value = !!(data && data.dkfs != 2);
|
||||
rebuildTabList(showDkTab.value);
|
||||
};
|
||||
|
||||
const handleDkListLoaded = (list: any[]) => {
|
||||
// 代课明细数据已由JsQjDetail组件处理
|
||||
};
|
||||
|
||||
const showDlg = () => {
|
||||
dlgFlag.value = true;
|
||||
};
|
||||
|
||||
const closeDlg = () => {
|
||||
dlgFlag.value = false;
|
||||
};
|
||||
|
||||
const submit = async () => {
|
||||
const params = {
|
||||
qjId: qjId.value,
|
||||
jsId: getJs.id,
|
||||
qrStatus: "1", // 1表示确认
|
||||
remark: "确认代课"
|
||||
spStatus: "approved",
|
||||
spRemark: "同意",
|
||||
};
|
||||
|
||||
uni.showLoading({ title: "确认中..." });
|
||||
try {
|
||||
await jsQjDkQrApi(params);
|
||||
uni.showToast({ title: "确认成功", icon: "success" });
|
||||
navigateBack();
|
||||
} catch (error) {
|
||||
uni.showToast({ title: "确认失败", icon: "error" });
|
||||
}
|
||||
await jsQjDkQrApi(params);
|
||||
uni.hideLoading();
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({ url: '/pages/base/message/index' });
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
// 拒绝代课
|
||||
// 驳回处理
|
||||
const handleReject = async () => {
|
||||
uni.showModal({
|
||||
title: "确认拒绝",
|
||||
content: "确定要拒绝代课吗?",
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
const params = {
|
||||
qjId: qjId.value,
|
||||
jsId: getJs.id,
|
||||
qrStatus: "2", // 2表示拒绝
|
||||
remark: "拒绝代课"
|
||||
};
|
||||
|
||||
uni.showLoading({ title: "处理中..." });
|
||||
try {
|
||||
await jsQjDkQrApi(params);
|
||||
uni.showToast({ title: "已拒绝", icon: "success" });
|
||||
navigateBack();
|
||||
} catch (error) {
|
||||
uni.showToast({ title: "操作失败", icon: "error" });
|
||||
}
|
||||
uni.hideLoading();
|
||||
}
|
||||
}
|
||||
});
|
||||
if (!rejectReason.value.trim()) {
|
||||
uni.showToast({ title: "请填写驳回意见", icon: "none" });
|
||||
return;
|
||||
}
|
||||
const params = {
|
||||
qjId: qjId.value,
|
||||
jsId: getJs.id,
|
||||
spStatus: "rejected",
|
||||
spRemark: rejectReason.value,
|
||||
};
|
||||
uni.showLoading({ title: "正在驳回..." });
|
||||
await jsQjDkQrApi(params);
|
||||
uni.hideLoading();
|
||||
closeDlg();
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({ url: '/pages/base/message/index' });
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
|
||||
onLoad(async (data?: any) => {
|
||||
// 从待办过来的,需要从后端获取数据
|
||||
console.log(data);
|
||||
if (data && data.from && data.from == "db") {
|
||||
dbFlag.value = true;
|
||||
|
||||
// 检查登录状态
|
||||
const isLoggedIn = await loginByOpenId(data.openId);
|
||||
if (!isLoggedIn) {
|
||||
console.log("用户未登录,跳过处理");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 优先从后端根据url中的id去查询Xxts
|
||||
const xxtsRes = await xxtsFindByIdApi({ id: data.id });
|
||||
if (xxtsRes && xxtsRes.result) {
|
||||
const xxts = xxtsRes.result;
|
||||
// 检查待办状态
|
||||
if (xxts.dbZt === "B") {
|
||||
setData({ id: xxts.xxzbId });
|
||||
let url = "/pages/view/hr/jsQj/detail";
|
||||
uni.navigateTo({ url });
|
||||
return;
|
||||
}
|
||||
setXxts(xxts);
|
||||
qjId.value = xxts.xxzbId;
|
||||
dkId.value = xxts.xxglId
|
||||
loadQjData();
|
||||
loadDkData();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("获取待办信息失败", error);
|
||||
// 如果获取Xxts失败,回退到原来的逻辑
|
||||
const xxtsData = getXxts;
|
||||
if (xxtsData && xxtsData.dbZt === "B") {
|
||||
setData({ id: data.id });
|
||||
let url = "/pages/view/hr/jsQj/detail";
|
||||
uni.navigateTo({ url });
|
||||
return;
|
||||
}
|
||||
qjId.value = data.id;
|
||||
}
|
||||
} else {
|
||||
dbFlag.value = false;
|
||||
// 直接加载请假详情
|
||||
qjId.value = getData.id || '';
|
||||
const ret = await QjPageUtils.init(data);
|
||||
if (!ret || !ret.success) {
|
||||
return;
|
||||
}
|
||||
qjId.value = ret.qjId;
|
||||
dbFlag.value = ret.dbFlag;
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.info-card,
|
||||
.dk-info-card {
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 15px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
.qj-detail {
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
.info-card {
|
||||
margin: 15px;
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #eee;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
||||
|
||||
.applicant-name,
|
||||
.card-title {
|
||||
.card-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
margin-bottom: 10px;
|
||||
|
||||
.card-content {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
margin-bottom: 10px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.label {
|
||||
width: 80px;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.value {
|
||||
flex: 1;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.action-section {
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
padding: 15px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
|
||||
.action-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 15px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.action-buttons {
|
||||
display: flex;
|
||||
gap: 15px;
|
||||
|
||||
.action-btn {
|
||||
flex: 1;
|
||||
.applicant-name {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.divider {
|
||||
height: 1px;
|
||||
background-color: #eee;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: 15px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -74,14 +74,14 @@ import { navigateBack } from "@/utils/uniapp";
|
||||
import { jsQjJwcQrApi } from "@/api/base/jsQjApi";
|
||||
import { useUserStore } from "@/store/modules/user";
|
||||
import { useDataStore } from "@/store/modules/data";
|
||||
import { ref, computed } from "vue";
|
||||
import { xxtsFindByIdApi } from "@/api/base/server";
|
||||
import { ref } from "vue";
|
||||
import JsQjDetailInfo from "./components/jsQjDetailInfo.vue";
|
||||
import JsQjDetailDk from "./components/jsQjDetailDk.vue";
|
||||
import ProgressList from "./components/progressList.vue";
|
||||
import { QjPageUtils } from "@/utils/qjPageUtils";
|
||||
|
||||
const { getJs, loginByOpenId } = useUserStore();
|
||||
const { getData, setXxts, setData, getXxts } = useDataStore();
|
||||
const { getJs } = useUserStore();
|
||||
const { setData } = useDataStore();
|
||||
|
||||
const tabList = ref<any>([{ name: "请假信息", id: "tab-qj" }]);
|
||||
const curTabIndex = ref(0);
|
||||
@ -162,50 +162,12 @@ const handleReject = async () => {
|
||||
};
|
||||
|
||||
onLoad(async (data?: any) => {
|
||||
// 从待办过来的,需要从后端获取数据
|
||||
console.log(data);
|
||||
if (data && data.from && data.from == "db") {
|
||||
dbFlag.value = true;
|
||||
|
||||
// 检查登录状态
|
||||
const isLoggedIn = await loginByOpenId(data.openId);
|
||||
if (!isLoggedIn) {
|
||||
console.log("用户未登录,跳过处理");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 优先从后端根据url中的id去查询Xxts
|
||||
const xxtsRes = await xxtsFindByIdApi({ id: data.id });
|
||||
if (xxtsRes && xxtsRes.result) {
|
||||
const xxts = xxtsRes.result;
|
||||
// 检查待办状态
|
||||
if (xxts.dbZt === "B") {
|
||||
setData({ id: xxts.xxzbId });
|
||||
let url = "/pages/view/hr/jsQj/detail";
|
||||
uni.navigateTo({ url });
|
||||
return;
|
||||
}
|
||||
setXxts(xxts);
|
||||
qjId.value = xxts.xxzbId;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("获取待办信息失败", error);
|
||||
// 如果获取Xxts失败,回退到原来的逻辑
|
||||
const xxtsData = getXxts;
|
||||
if (xxtsData && xxtsData.dbZt === "B") {
|
||||
setData({ id: data.id });
|
||||
let url = "/pages/view/hr/jsQj/detail";
|
||||
uni.navigateTo({ url });
|
||||
return;
|
||||
}
|
||||
qjId.value = data.id;
|
||||
}
|
||||
} else {
|
||||
dbFlag.value = false;
|
||||
// 直接加载请假详情
|
||||
qjId.value = getData.id || '';
|
||||
const ret = await QjPageUtils.init(data);
|
||||
if (!ret || !ret.success) {
|
||||
return;
|
||||
}
|
||||
qjId.value = ret.qjId;
|
||||
dbFlag.value = ret.dbFlag;
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@ -1,366 +1,176 @@
|
||||
<template>
|
||||
<BasicLayout>
|
||||
<view class="p-15">
|
||||
<!-- 请假信息卡片 -->
|
||||
<view class="info-card">
|
||||
<view class="card-header">
|
||||
<text class="applicant-name">教师{{ qjData.jsName }}的请假申请</text>
|
||||
</view>
|
||||
<view class="card-content">
|
||||
<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 }} 至 {{ 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.qjsy }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 代课安排 -->
|
||||
<view class="dk-arrange-card">
|
||||
<view class="card-header">
|
||||
<text class="card-title">代课安排</text>
|
||||
</view>
|
||||
<view class="card-content">
|
||||
<view class="dk-list">
|
||||
<view
|
||||
v-for="(dk, index) in dkList"
|
||||
:key="index"
|
||||
class="dk-item"
|
||||
>
|
||||
<view class="dk-header">
|
||||
<text class="dk-title">代课{{ index + 1 }}</text>
|
||||
<u-button
|
||||
text="删除"
|
||||
size="mini"
|
||||
type="error"
|
||||
@click="removeDk(index)"
|
||||
/>
|
||||
</view>
|
||||
<view class="dk-content">
|
||||
<view class="info-row">
|
||||
<text class="label">代课教师:</text>
|
||||
<text class="value">{{ dk.jsName }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="label">代课时间:</text>
|
||||
<text class="value">{{ dk.dktime }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="label">课程名称:</text>
|
||||
<text class="value">{{ dk.kcmc }}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="label">班级:</text>
|
||||
<text class="value">{{ dk.bjmc }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="add-dk-section">
|
||||
<u-button
|
||||
text="添加代课安排"
|
||||
type="primary"
|
||||
@click="showDkSelector"
|
||||
class="add-btn"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 提交按钮 -->
|
||||
<view class="submit-section">
|
||||
<u-button
|
||||
text="提交协调结果"
|
||||
type="primary"
|
||||
@click="handleSubmit"
|
||||
class="submit-btn"
|
||||
<template #top>
|
||||
<view>
|
||||
<BasicTabs
|
||||
class="detail-tabs"
|
||||
:list="tabList"
|
||||
bar-width="60px"
|
||||
scroll-count="4"
|
||||
:current="curTabIndex"
|
||||
@change="switchTab"
|
||||
/>
|
||||
</view>
|
||||
</template>
|
||||
<view class="qj-detail">
|
||||
<!-- 请假信息 -->
|
||||
<view v-show="curTabIndex === 0">
|
||||
<JsQjDetailInfo
|
||||
:qjId="qjId"
|
||||
:dbFlag="dbFlag"
|
||||
@loadQjData="handleQjDataLoaded"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 代课教师选择弹窗 -->
|
||||
<u-popup
|
||||
:show="showSelector"
|
||||
mode="bottom"
|
||||
height="70%"
|
||||
@close="closeSelector"
|
||||
>
|
||||
<view class="selector-container">
|
||||
<view class="selector-header">
|
||||
<text class="selector-title">选择代课教师</text>
|
||||
<u-button text="确定" type="primary" @click="confirmSelection" />
|
||||
</view>
|
||||
<view class="selector-content">
|
||||
<u-checkbox-group v-model="selectedDkIds">
|
||||
<view
|
||||
v-for="dk in availableDkList"
|
||||
:key="dk.id"
|
||||
class="dk-option"
|
||||
>
|
||||
<u-checkbox
|
||||
:value="dk.id"
|
||||
:label="`${dk.jsName} - ${dk.kcmc} - ${dk.bjmc}`"
|
||||
/>
|
||||
</view>
|
||||
</u-checkbox-group>
|
||||
<!-- 代课信息 -->
|
||||
<view v-show="curTabIndex === 1" class="px-15">
|
||||
<JsQjDkEdit :data="qjData" ref="dkRef" />
|
||||
</view>
|
||||
|
||||
<!-- 审批流程 -->
|
||||
<view v-show="curTabIndex === 2">
|
||||
<ProgressList :qjId="qjId" />
|
||||
</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>
|
||||
</u-popup>
|
||||
</template>
|
||||
</BasicLayout>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { jsQjJwcXtApi } from "@/api/base/jsQjApi";
|
||||
import { findQjById, getPkkbByJsRangeTimeApi } from "@/api/base/jsQjApi";
|
||||
import { useUserStore } from "@/store/modules/user";
|
||||
import { navigateBack } from "@/utils/uniapp";
|
||||
import { onLoad } from "@dcloudio/uni-app";
|
||||
import { navigateBack } from "@/utils/uniapp";
|
||||
import { jsQjJwcXtApi } from "@/api/base/jsQjApi";
|
||||
import { useUserStore } from "@/store/modules/user";
|
||||
import { useDataStore } from "@/store/modules/data";
|
||||
import { ref } from "vue";
|
||||
import JsQjDetailInfo from "./components/jsQjDetailInfo.vue";
|
||||
import JsQjDkEdit from "./components/jsQjDkEdit.vue";
|
||||
import ProgressList from "./components/progressList.vue";
|
||||
import { QjPageUtils } from "@/utils/qjPageUtils";
|
||||
|
||||
const { getJs } = useUserStore();
|
||||
const { setData, getData } = useDataStore();
|
||||
|
||||
const qjId = ref<string>();
|
||||
const qjData = ref<any>({});
|
||||
const dkList = ref<any[]>([]);
|
||||
const availableDkList = ref<any[]>([]);
|
||||
const selectedDkIds = ref<string[]>([]);
|
||||
const showSelector = ref(false);
|
||||
const tabList = ref<any>([
|
||||
{ name: "请假信息", id: "tab-qj" },
|
||||
{ name: "代课信息", id: "tab-dk" },
|
||||
{ name: "审批流程", id: "tab-sp" }
|
||||
]);
|
||||
const curTabIndex = ref(1);
|
||||
|
||||
// 加载请假信息
|
||||
const loadQjData = async () => {
|
||||
try {
|
||||
const result = await findQjById({ id: qjId.value });
|
||||
if (result.code === 1) {
|
||||
qjData.value = result.data;
|
||||
// 加载可用的代课安排
|
||||
await loadAvailableDkList();
|
||||
const dbFlag = ref(false);
|
||||
const qjId = ref('');
|
||||
|
||||
const qjData = computed(() => getData);
|
||||
const dkRef = ref<any>(null);
|
||||
|
||||
// 切换Tab
|
||||
const switchTab = (index: number) => {
|
||||
curTabIndex.value = index;
|
||||
};
|
||||
|
||||
const updateDk = () => {
|
||||
nextTick(() => {
|
||||
if (dkRef.value) {
|
||||
dkRef.value.getPkkbList();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取请假信息失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// 加载可用的代课安排
|
||||
const loadAvailableDkList = async () => {
|
||||
try {
|
||||
const params = {
|
||||
jsId: qjData.value.jsId,
|
||||
startTime: qjData.value.qjkstime,
|
||||
endTime: qjData.value.qjjstime
|
||||
};
|
||||
const result = await getPkkbByJsRangeTimeApi(params);
|
||||
if (result.code === 1) {
|
||||
availableDkList.value = result.data || [];
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取可用代课安排失败:', error);
|
||||
}
|
||||
};
|
||||
|
||||
// 显示代课选择器
|
||||
const showDkSelector = () => {
|
||||
selectedDkIds.value = [];
|
||||
showSelector.value = true;
|
||||
};
|
||||
|
||||
// 关闭选择器
|
||||
const closeSelector = () => {
|
||||
showSelector.value = false;
|
||||
selectedDkIds.value = [];
|
||||
};
|
||||
|
||||
// 确认选择
|
||||
const confirmSelection = () => {
|
||||
const selectedDks = availableDkList.value.filter(dk =>
|
||||
selectedDkIds.value.includes(dk.id)
|
||||
);
|
||||
|
||||
// 添加到代课列表
|
||||
selectedDks.forEach(dk => {
|
||||
const dkItem = {
|
||||
jsId: dk.jsId,
|
||||
jsName: dk.jsName,
|
||||
dktime: dk.dktime,
|
||||
kcmc: dk.kcmc,
|
||||
bjmc: dk.bjmc,
|
||||
pkkbId: dk.id
|
||||
};
|
||||
dkList.value.push(dkItem);
|
||||
});
|
||||
|
||||
closeSelector();
|
||||
};
|
||||
|
||||
// 删除代课安排
|
||||
const removeDk = (index: number) => {
|
||||
dkList.value.splice(index, 1);
|
||||
const handleQjDataLoaded = (data: any) => {
|
||||
setData(data);
|
||||
updateDk();
|
||||
};
|
||||
|
||||
// 提交协调结果
|
||||
const handleSubmit = async () => {
|
||||
if (dkList.value.length === 0) {
|
||||
uni.showToast({
|
||||
title: "请至少添加一个代课安排",
|
||||
icon: "none"
|
||||
});
|
||||
return;
|
||||
}
|
||||
const handleDkListLoaded = (list: any[]) => {
|
||||
// 代课明细数据已由JsQjDetail组件处理
|
||||
};
|
||||
|
||||
const submit = async () => {
|
||||
const params = {
|
||||
qjId: qjId.value,
|
||||
jsId: getJs.id,
|
||||
dkList: dkList.value
|
||||
dkList: [],
|
||||
};
|
||||
|
||||
uni.showLoading({ title: "提交中..." });
|
||||
try {
|
||||
await jsQjJwcXtApi(params);
|
||||
uni.showToast({ title: "协调成功", icon: "success" });
|
||||
navigateBack();
|
||||
} catch (error) {
|
||||
uni.showToast({ title: "协调失败", icon: "error" });
|
||||
const flag = await dkRef.value.validate();
|
||||
if (!flag) {
|
||||
uni.showToast({
|
||||
title: "请选择代课教师",
|
||||
icon: "none",
|
||||
});
|
||||
return;
|
||||
}
|
||||
let dkList = dkRef.value.getDkList() || [];
|
||||
if (dkList.length) {
|
||||
params.dkList = dkList.map((item: any) => {
|
||||
const newItem = { ...item };
|
||||
newItem.jsId = item.dkJsId;
|
||||
newItem.jsName = item.dkJsName;
|
||||
newItem.pkkbId = item.id;
|
||||
newItem.dktime = item.dktime + " 00:00:00";
|
||||
newItem.id = "";
|
||||
newItem.qjId = "";
|
||||
return newItem;
|
||||
});
|
||||
}
|
||||
uni.showLoading({ title: "提交中..." });
|
||||
await jsQjJwcXtApi(params);
|
||||
uni.hideLoading();
|
||||
setTimeout(() => {
|
||||
uni.reLaunch({ url: '/pages/base/message/index' });
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
onLoad((options) => {
|
||||
if (options.qjId) {
|
||||
qjId.value = options.qjId;
|
||||
loadQjData();
|
||||
onLoad(async (data?: any) => {
|
||||
const ret = await QjPageUtils.init(data);
|
||||
if (!ret || !ret.success) {
|
||||
return;
|
||||
}
|
||||
qjId.value = ret.qjId;
|
||||
dbFlag.value = ret.dbFlag;
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.info-card,
|
||||
.dk-arrange-card {
|
||||
background: white;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 15px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
.qj-detail {
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
.info-card {
|
||||
margin: 15px;
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #eee;
|
||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
||||
|
||||
.applicant-name,
|
||||
.card-title {
|
||||
.card-header {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.card-content {
|
||||
padding: 15px;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
margin-bottom: 10px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.label {
|
||||
width: 80px;
|
||||
font-size: 14px;
|
||||
color: #666;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.value {
|
||||
flex: 1;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.dk-list {
|
||||
.dk-item {
|
||||
border: 1px solid #eee;
|
||||
border-radius: 6px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
.dk-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 10px;
|
||||
background-color: #f5f5f5;
|
||||
border-bottom: 1px solid #eee;
|
||||
|
||||
.dk-title {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.dk-content {
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.add-dk-section {
|
||||
margin-top: 15px;
|
||||
text-align: center;
|
||||
|
||||
.add-btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.submit-section {
|
||||
margin-top: 20px;
|
||||
|
||||
.submit-btn {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.selector-container {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.selector-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #eee;
|
||||
|
||||
.selector-title {
|
||||
.applicant-name {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.selector-content {
|
||||
flex: 1;
|
||||
padding: 15px;
|
||||
overflow-y: auto;
|
||||
.divider {
|
||||
height: 1px;
|
||||
background-color: #eee;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.dk-option {
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #f0f0f0;
|
||||
}
|
||||
.card-body {
|
||||
padding: 15px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@ -23,8 +23,11 @@
|
||||
</view>
|
||||
|
||||
<!-- 代课信息 -->
|
||||
<view v-show="showDkTab && curTabIndex === 1">
|
||||
<JsQjDetailDk
|
||||
<view v-show="curTabIndex === 1">
|
||||
<view v-if="!showDkFlag" class="empty-dk">
|
||||
<view>{{ showDkEmptyLabel }}</view>
|
||||
</view>
|
||||
<JsQjDetailDk v-else
|
||||
:qjId="qjId"
|
||||
@loadDkList="handleDkListLoaded"
|
||||
/>
|
||||
@ -56,21 +59,26 @@ import { navigateBack } from "@/utils/uniapp";
|
||||
import { jsQjSpApi } from "@/api/base/jsQjApi";
|
||||
import { useUserStore } from "@/store/modules/user";
|
||||
import { useDataStore } from "@/store/modules/data";
|
||||
import { ref, computed } from "vue";
|
||||
import { xxtsFindByIdApi } from "@/api/base/server";
|
||||
import { ref } from "vue";
|
||||
import JsQjDetailInfo from "./components/jsQjDetailInfo.vue";
|
||||
import JsQjDetailDk from "./components/jsQjDetailDk.vue";
|
||||
import ProgressList from "./components/progressList.vue";
|
||||
import { QjPageUtils } from "@/utils/qjPageUtils";
|
||||
|
||||
const { getJs, loginByOpenId } = useUserStore();
|
||||
const { getData, setXxts, setData, getXxts } = useDataStore();
|
||||
const { getJs } = useUserStore();
|
||||
const { setData } = useDataStore();
|
||||
|
||||
const tabList = ref<any>([{ name: "请假信息", id: "tab-qj" }]);
|
||||
const tabList = ref<any>([
|
||||
{ name: "请假信息", id: "tab-qj" },
|
||||
{ name: "代课信息", id: "tab-dk" },
|
||||
{ name: "审批流程", id: "tab-sp" }
|
||||
]);
|
||||
const curTabIndex = ref(0);
|
||||
|
||||
const dbFlag = ref(false);
|
||||
const qjId = ref('');
|
||||
const showDkTab = ref(false);
|
||||
const showDkFlag = ref(false);
|
||||
const showDkEmptyLabel = ref('');
|
||||
|
||||
const [register, { getValue }] = useForm({
|
||||
schema: [
|
||||
@ -90,7 +98,7 @@ const [register, { getValue }] = useForm({
|
||||
},
|
||||
},
|
||||
{
|
||||
field: "spYj",
|
||||
field: "spRemark",
|
||||
label: "审批说明",
|
||||
component: "BasicInput",
|
||||
required: true,
|
||||
@ -105,18 +113,6 @@ const [register, { getValue }] = useForm({
|
||||
],
|
||||
});
|
||||
|
||||
// 构建Tab列表
|
||||
const rebuildTabList = (showDk: boolean) => {
|
||||
// 构建Tab列表
|
||||
tabList.value = [
|
||||
{ name: "请假信息", id: "tab-qj" },
|
||||
];
|
||||
if (showDk) {
|
||||
tabList.value.push({ name: "代课信息", id: "tab-dk" });
|
||||
}
|
||||
tabList.value.push({ name: "审批流程", id: "tab-sp" });
|
||||
};
|
||||
|
||||
// 切换Tab
|
||||
const switchTab = (index: number) => {
|
||||
curTabIndex.value = index;
|
||||
@ -124,8 +120,14 @@ const switchTab = (index: number) => {
|
||||
|
||||
const handleQjDataLoaded = (data: any) => {
|
||||
setData(data);
|
||||
showDkTab.value = !!(data && data.dkfs != 2);
|
||||
rebuildTabList(showDkTab.value);
|
||||
data = data || {};
|
||||
const dkfs = typeof(data.dkfs) === "string" ? parseInt(data.dkfs) : (data.dkfs || 2);
|
||||
showDkFlag.value = dkfs === 0;
|
||||
if (dkfs === 1) {
|
||||
showDkEmptyLabel.value = "审批同意后由教科处协调";
|
||||
} else if (dkfs === 2) {
|
||||
showDkEmptyLabel.value = "无需代课";
|
||||
}
|
||||
};
|
||||
|
||||
const handleDkListLoaded = (list: any[]) => {
|
||||
@ -135,7 +137,7 @@ const handleDkListLoaded = (list: any[]) => {
|
||||
const submit = async () => {
|
||||
try {
|
||||
const formData = await getValue();
|
||||
if (!formData.spStatus || !formData.spYj) {
|
||||
if (!formData.spStatus || !formData.spRemark) {
|
||||
uni.showToast({
|
||||
title: '请填写完整的审批信息',
|
||||
icon: 'none'
|
||||
@ -147,7 +149,7 @@ const submit = async () => {
|
||||
qjId: qjId.value,
|
||||
jsId: getJs.id,
|
||||
spStatus: formData.spStatus,
|
||||
spYj: formData.spYj,
|
||||
spRemark: formData.spRemark,
|
||||
};
|
||||
|
||||
uni.showLoading({
|
||||
@ -161,11 +163,9 @@ const submit = async () => {
|
||||
title: '审批提交成功',
|
||||
icon: 'success'
|
||||
});
|
||||
|
||||
setTimeout(() => {
|
||||
navigateBack();
|
||||
}, 1500);
|
||||
|
||||
uni.reLaunch({ url: '/pages/base/message/index' });
|
||||
}, 1000);
|
||||
} catch (error) {
|
||||
uni.hideLoading();
|
||||
uni.showToast({
|
||||
@ -177,50 +177,12 @@ const submit = async () => {
|
||||
};
|
||||
|
||||
onLoad(async (data?: any) => {
|
||||
// 从待办过来的,需要从后端获取数据
|
||||
console.log(data);
|
||||
if (data && data.from && data.from == "db") {
|
||||
dbFlag.value = true;
|
||||
|
||||
// 检查登录状态
|
||||
const isLoggedIn = await loginByOpenId(data.openId);
|
||||
if (!isLoggedIn) {
|
||||
console.log("用户未登录,跳过处理");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
// 优先从后端根据url中的id去查询Xxts
|
||||
const xxtsRes = await xxtsFindByIdApi({ id: data.id });
|
||||
if (xxtsRes && xxtsRes.result) {
|
||||
const xxts = xxtsRes.result;
|
||||
// 检查待办状态
|
||||
if (xxts.dbZt === "B") {
|
||||
setData({ id: xxts.xxzbId });
|
||||
let url = "/pages/view/hr/jsQj/detail";
|
||||
uni.navigateTo({ url });
|
||||
return;
|
||||
}
|
||||
setXxts(xxts);
|
||||
qjId.value = xxts.xxzbId;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("获取待办信息失败", error);
|
||||
// 如果获取Xxts失败,回退到原来的逻辑
|
||||
const xxtsData = getXxts;
|
||||
if (xxtsData && xxtsData.dbZt === "B") {
|
||||
setData({ id: data.id });
|
||||
let url = "/pages/view/hr/jsQj/detail";
|
||||
uni.navigateTo({ url });
|
||||
return;
|
||||
}
|
||||
qjId.value = data.id;
|
||||
}
|
||||
} else {
|
||||
dbFlag.value = false;
|
||||
// 直接加载请假详情
|
||||
qjId.value = getData.id || '';
|
||||
const ret = await QjPageUtils.init(data);
|
||||
if (!ret || !ret.success) {
|
||||
return;
|
||||
}
|
||||
qjId.value = ret.qjId;
|
||||
dbFlag.value = ret.dbFlag;
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -229,34 +191,12 @@ onLoad(async (data?: any) => {
|
||||
background-color: #f5f7fa;
|
||||
}
|
||||
|
||||
.info-card {
|
||||
.empty-dk {
|
||||
margin: 15px;
|
||||
background-color: #fff;
|
||||
border-radius: 8px;
|
||||
padding: 15px;
|
||||
padding: 50px 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;
|
||||
}
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -147,7 +147,7 @@ const mediaData = ref({
|
||||
photoList: [],
|
||||
videoList: []
|
||||
});
|
||||
const dmPsRef = ref(null);
|
||||
const dmPsRef = ref<any>(null);
|
||||
|
||||
const now = dayjs();
|
||||
let wDay = now.day();
|
||||
|
||||
@ -240,6 +240,8 @@ const goDm = (xkkc: any) => {
|
||||
} else {
|
||||
msg = "上课时间未到,无法点名";
|
||||
}
|
||||
// TODO: 测试阶段,默认都可以点名,不计算时间
|
||||
dmFlag = true;
|
||||
if (dmFlag) {
|
||||
setData(xkkc);
|
||||
uni.navigateTo({
|
||||
|
||||
64
src/utils/qjPageUtils.ts
Normal file
64
src/utils/qjPageUtils.ts
Normal file
@ -0,0 +1,64 @@
|
||||
import { xxtsFindByIdApi } from "@/api/base/server";
|
||||
import { useUserStore } from "@/store/modules/user";
|
||||
import { useDataStore } from "@/store/modules/data";
|
||||
|
||||
const { loginByOpenId } = useUserStore();
|
||||
const { getData, setXxts, setData, getXxts } = useDataStore();
|
||||
|
||||
export const QjPageUtils = {
|
||||
async init(data?: any) {
|
||||
let ret = {
|
||||
success: true,
|
||||
dbFlag: false,
|
||||
qjId: getData.id,
|
||||
};
|
||||
if (!data || !data.from || data.from != "db") {
|
||||
return ret;
|
||||
}
|
||||
// 从待办过来的,需要从后端获取数据
|
||||
ret.dbFlag = true;
|
||||
// 检查登录状态
|
||||
const isLoggedIn = await loginByOpenId(data.openId);
|
||||
if (!isLoggedIn) {
|
||||
console.log("用户未登录,跳过处理");
|
||||
ret.success = false;
|
||||
return ret;
|
||||
}
|
||||
let url = "/pages/base/message/index";
|
||||
try {
|
||||
// 优先从后端根据url中的id去查询Xxts
|
||||
const xxtsRes = await xxtsFindByIdApi({ id: data.id });
|
||||
if (xxtsRes && xxtsRes.result) {
|
||||
const xxts = xxtsRes.result;
|
||||
// 检查待办状态
|
||||
if (xxts.dbZt === "B") {
|
||||
setData({ id: xxts.xxzbId });
|
||||
url = "/pages/view/hr/jsQj/detail";
|
||||
uni.reLaunch({ url });
|
||||
ret.success = false;
|
||||
} else {
|
||||
setXxts(xxts);
|
||||
ret.qjId = xxts.xxzbId;
|
||||
}
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: "获取消息推送数据失败",
|
||||
icon: "error",
|
||||
});
|
||||
uni.reLaunch({ url });
|
||||
ret.success = false;
|
||||
}
|
||||
return ret;
|
||||
} catch (error) {
|
||||
console.error("获取待办信息失败", error);
|
||||
// 如果获取Xxts失败,回退到原来的逻辑
|
||||
const xxtsData = getXxts;
|
||||
if (xxtsData && xxtsData.dbZt === "B") {
|
||||
setData({ id: data.id });
|
||||
uni.reLaunch({ url });
|
||||
ret.success = false;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user