审批调整
This commit is contained in:
parent
5222b1c8e6
commit
2d2314c336
@ -164,3 +164,5 @@ const setDefaultValue = () => {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="spr-list-container">
|
<view class="spr-list-container">
|
||||||
<!-- 原始审批人 -->
|
<!-- 原始审批人 -->
|
||||||
<view class="section">
|
<view v-if="!hideOriginal" class="section">
|
||||||
<view class="section-header">
|
<view class="section-header">
|
||||||
<text class="section-title">原审批人({{ srcSprList.length || 0 }})</text>
|
<text class="section-title">原审批人({{ srcSprList.length || 0 }})</text>
|
||||||
</view>
|
</view>
|
||||||
@ -24,7 +24,7 @@
|
|||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 原始抄送人 -->
|
<!-- 原始抄送人 -->
|
||||||
<view class="section">
|
<view v-if="!hideOriginal" class="section">
|
||||||
<view class="section-header">
|
<view class="section-header">
|
||||||
<text class="section-title">原抄送人({{ srcCsrList.length || 0 }})</text>
|
<text class="section-title">原抄送人({{ srcCsrList.length || 0 }})</text>
|
||||||
</view>
|
</view>
|
||||||
@ -53,9 +53,10 @@
|
|||||||
<view class="section">
|
<view class="section">
|
||||||
<view class="section-header">
|
<view class="section-header">
|
||||||
<text class="section-title">{{ newSprTitle }}</text>
|
<text class="section-title">{{ newSprTitle }}</text>
|
||||||
|
<text class="required-asterisk">*</text>
|
||||||
<!-- 审批人选择器 -->
|
<!-- 审批人选择器 -->
|
||||||
<BasicJsPicker ref="approverPickerRef" :customTrigger="true" :multiple="true"
|
<BasicJsPicker ref="approverPickerRef" :customTrigger="true" :multiple="true"
|
||||||
:excludeIds="getExcludeApproverIds()" :defaultValue="approvers" title="选择审批人" placeholder="请选择审批转办人"
|
:excludeIds="getExcludeApproverIds()" :defaultValue="approvers" title="选择转办人" placeholder="请选择转办人"
|
||||||
searchPlaceholder="搜索审批人" @change="handleApproverChange">
|
searchPlaceholder="搜索审批人" @change="handleApproverChange">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<view class="add-btn">
|
<view class="add-btn">
|
||||||
@ -98,7 +99,7 @@
|
|||||||
<text class="section-title">{{ newCsrTitle }}</text>
|
<text class="section-title">{{ newCsrTitle }}</text>
|
||||||
<!-- 抄送人选择器 -->
|
<!-- 抄送人选择器 -->
|
||||||
<BasicJsPicker ref="ccPickerRef" :customTrigger="true" :multiple="true" :excludeIds="getExcludeCcIds()"
|
<BasicJsPicker ref="ccPickerRef" :customTrigger="true" :multiple="true" :excludeIds="getExcludeCcIds()"
|
||||||
:defaultValue="ccList" title="选择抄送人" placeholder="请选择抄送人" searchPlaceholder="搜索抄送人" @change="handleCcChange">
|
:defaultValue="ccList" title="选择抄送人" placeholder="请选择抄送人(可选)" searchPlaceholder="搜索抄送人" @change="handleCcChange">
|
||||||
<template #trigger>
|
<template #trigger>
|
||||||
<view class="add-btn">
|
<view class="add-btn">
|
||||||
<text class="add-icon">+</text>
|
<text class="add-icon">+</text>
|
||||||
@ -137,9 +138,11 @@ const { getLcgl } = useDataStore();
|
|||||||
const props = withDefaults(defineProps<{
|
const props = withDefaults(defineProps<{
|
||||||
newSprTitle?: string;
|
newSprTitle?: string;
|
||||||
newCsrTitle?: string;
|
newCsrTitle?: string;
|
||||||
|
hideOriginal?: boolean;
|
||||||
}>(), {
|
}>(), {
|
||||||
newSprTitle: "审批转办人",
|
newSprTitle: "审批转办人",
|
||||||
newCsrTitle: "新抄送人"
|
newCsrTitle: "新抄送人",
|
||||||
|
hideOriginal: false
|
||||||
});
|
});
|
||||||
|
|
||||||
// 定义教师信息接口(参照JsVo)
|
// 定义教师信息接口(参照JsVo)
|
||||||
@ -406,6 +409,13 @@ defineExpose({
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: #262626;
|
color: #262626;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.required-asterisk {
|
||||||
|
color: #ff4757;
|
||||||
|
font-size: 32rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
|
|
||||||
.add-btn {
|
.add-btn {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@ -1,16 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="white-bg-color py-5 yw-confirm">
|
<view class="white-bg-color py-5 yw-confirm">
|
||||||
<view class="flex-row items-center pt-5 pb-10">
|
<view class="flex-row items-center pt-5 pb-10" v-if="showReject || showTransfer || showApprove || showXtDk">
|
||||||
<u-button text="驳回" class="ml-15 mr-7" :plain="true" @click="showDlg('reject')" />
|
<u-button v-if="showReject" text="驳回" class="flex-1 mx-2 reject-btn" @click="showDlg('reject')" />
|
||||||
<u-button text="同意" class="mr-15 ml-7" type="primary" @click="submit" />
|
<u-button v-if="showTransfer" text="转办" class="flex-1 mx-2 transfer-btn" @click="showTransfer" />
|
||||||
|
<u-button v-if="showApprove" text="同意" class="flex-1 mx-2" type="primary" @click="submit" />
|
||||||
|
<u-button v-if="showXtDk" text="协调代课" class="flex-1 mx-2" type="primary" @click="showXtDlg" />
|
||||||
</view>
|
</view>
|
||||||
<view class="flex-row items-center pb-10">
|
<view class="flex-row items-center pb-5" v-if="showXt && (showReturn || showStop)">
|
||||||
<u-button text="终止" class="ml-15 mr-7" type="error" @click="showDlg('stop')" />
|
<u-button v-if="showReturn" text="返回" class="flex-1 mx-2" :plain="true" @click="goToMessage" />
|
||||||
<u-button text="转办" class="mr-15 ml-7" :plain="true" @click="showTransfer" />
|
<u-button v-if="showStop" text="终止" class="flex-1 mx-2" type="error" @click="showDlg('stop')" />
|
||||||
</view>
|
|
||||||
<view class="flex-row items-center pb-5" v-if="showXt">
|
|
||||||
<u-button text="返回" class="ml-15 mr-7" :plain="true" @click="goToMessage" />
|
|
||||||
<u-button text="同意并协调代课" class="mr-15 ml-7" type="primary" @click="showXtDlg" />
|
|
||||||
</view>
|
</view>
|
||||||
<!-- 驳回弹窗 -->
|
<!-- 驳回弹窗 -->
|
||||||
<u-popup :show="dlgFlag" mode="center" :closeOnClickOverlay="false" @close="closeDlg">
|
<u-popup :show="dlgFlag" mode="center" :closeOnClickOverlay="false" @close="closeDlg">
|
||||||
@ -52,6 +50,12 @@ const props = withDefaults(defineProps<{
|
|||||||
approvedRemark?: string //
|
approvedRemark?: string //
|
||||||
autoToMessage?: boolean // 默认自动跳转到待办页面
|
autoToMessage?: boolean // 默认自动跳转到待办页面
|
||||||
showXt?: boolean
|
showXt?: boolean
|
||||||
|
showReject?: boolean // 显示驳回按钮
|
||||||
|
showTransfer?: boolean // 显示转办按钮
|
||||||
|
showApprove?: boolean // 显示同意按钮
|
||||||
|
showReturn?: boolean // 显示返回按钮
|
||||||
|
showStop?: boolean // 显示终止按钮
|
||||||
|
showXtDk?: boolean // 显示协调代课按钮
|
||||||
}>(), {
|
}>(), {
|
||||||
spApi: async (params: any) => {},
|
spApi: async (params: any) => {},
|
||||||
transferApi: async (params: any) => {},
|
transferApi: async (params: any) => {},
|
||||||
@ -63,7 +67,13 @@ const props = withDefaults(defineProps<{
|
|||||||
rejectValue: 'rejected',
|
rejectValue: 'rejected',
|
||||||
approvedRemark: '同意',
|
approvedRemark: '同意',
|
||||||
autoToMessage: true,
|
autoToMessage: true,
|
||||||
showXt: false
|
showXt: false,
|
||||||
|
showReject: true,
|
||||||
|
showTransfer: true,
|
||||||
|
showApprove: true,
|
||||||
|
showReturn: true,
|
||||||
|
showStop: true,
|
||||||
|
showXtDk: true
|
||||||
});
|
});
|
||||||
|
|
||||||
// 定义一个上级传入的emit响应事件用于接收数据变更
|
// 定义一个上级传入的emit响应事件用于接收数据变更
|
||||||
@ -215,6 +225,30 @@ defineExpose({
|
|||||||
margin-top: 8rpx;
|
margin-top: 8rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 驳回按钮 - 红色
|
||||||
|
:deep(.reject-btn) {
|
||||||
|
background-color: #ff4757 !important;
|
||||||
|
border-color: #ff4757 !important;
|
||||||
|
color: #fff !important;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #ff3742 !important;
|
||||||
|
border-color: #ff3742 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 转办按钮 - 黄色
|
||||||
|
:deep(.transfer-btn) {
|
||||||
|
background-color: #ffa502 !important;
|
||||||
|
border-color: #ffa502 !important;
|
||||||
|
color: #fff !important;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #ff9500 !important;
|
||||||
|
border-color: #ff9500 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.popup-content {
|
.popup-content {
|
||||||
.popup-header {
|
.popup-header {
|
||||||
padding: 20rpx 30rpx;
|
padding: 20rpx 30rpx;
|
||||||
|
|||||||
@ -3,19 +3,31 @@
|
|||||||
class="transfer-popup">
|
class="transfer-popup">
|
||||||
<view class="popup-content">
|
<view class="popup-content">
|
||||||
<view class="popup-header">
|
<view class="popup-header">
|
||||||
<view class="popup-title">转办设置</view>
|
<view class="popup-title">转办</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="popup-body">
|
<view class="popup-body">
|
||||||
|
<!-- 原审批人信息 -->
|
||||||
|
<view class="info-section">
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">当前审批人:</text>
|
||||||
|
<text class="info-value">{{ currentApprovers }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="info-label">当前抄送人:</text>
|
||||||
|
<text class="info-value">{{ currentCcRecipients }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<TransferSpCsMgr ref="transferSpCsMgrRef" :hideOriginal="true" newSprTitle="转办人" newCsrTitle="抄送人" />
|
||||||
|
|
||||||
<view class="section">
|
<view class="section">
|
||||||
<view class="section-header">
|
<view class="section-header">
|
||||||
<text class="section-title">转办原因</text>
|
<text class="section-title">转办原因</text>
|
||||||
</view>
|
</view>
|
||||||
<view class="list-content">
|
<view class="list-content">
|
||||||
<u-input v-model="spRemark" type="textarea" placeholder="请填写转办原因" :autoHeight="true" maxlength="200"
|
<u-input v-model="spRemark" type="textarea" placeholder="请输入转办原因和描述(可选)" :autoHeight="true" maxlength="200"
|
||||||
class="remark-input" />
|
class="remark-input" />
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<TransferSpCsMgr ref="transferSpCsMgrRef" />
|
|
||||||
</view>
|
</view>
|
||||||
<view class="popup-actions flex-row justify-end mt-4">
|
<view class="popup-actions flex-row justify-end mt-4">
|
||||||
<u-button class="mr-2" @click="closeDlg">取消</u-button>
|
<u-button class="mr-2" @click="closeDlg">取消</u-button>
|
||||||
@ -26,8 +38,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref } from "vue";
|
import { ref, computed } from "vue";
|
||||||
import TransferSpCsMgr from "@/components/TransferSpCsMgr/index.vue"
|
import TransferSpCsMgr from "@/components/TransferSpCsMgr/index.vue"
|
||||||
|
import { useDataStore } from "@/store/modules/data";
|
||||||
|
|
||||||
// 定义一个上级传入的emit响应事件用于接收数据变更
|
// 定义一个上级传入的emit响应事件用于接收数据变更
|
||||||
const emit = defineEmits(["submit"]);
|
const emit = defineEmits(["submit"]);
|
||||||
@ -36,6 +49,20 @@ const transferSpCsMgrRef = ref<any>(null);
|
|||||||
const dlgFlag = ref(false);
|
const dlgFlag = ref(false);
|
||||||
const spRemark = ref("");
|
const spRemark = ref("");
|
||||||
|
|
||||||
|
const { getLcgl } = useDataStore();
|
||||||
|
|
||||||
|
// 获取当前审批人列表
|
||||||
|
const currentApprovers = computed(() => {
|
||||||
|
const sprList = getLcgl.sprSpList || [];
|
||||||
|
return sprList.map((item: any) => item.userName || item.jsxm).join('、');
|
||||||
|
});
|
||||||
|
|
||||||
|
// 获取当前抄送人列表
|
||||||
|
const currentCcRecipients = computed(() => {
|
||||||
|
const csrList = getLcgl.csrSpList || [];
|
||||||
|
return csrList.map((item: any) => item.userName || item.jsxm).join('、');
|
||||||
|
});
|
||||||
|
|
||||||
const showDlg = (type: string) => {
|
const showDlg = (type: string) => {
|
||||||
dlgFlag.value = true;
|
dlgFlag.value = true;
|
||||||
};
|
};
|
||||||
@ -46,14 +73,10 @@ const closeDlg = () => {
|
|||||||
|
|
||||||
// 提交
|
// 提交
|
||||||
const submit = () => {
|
const submit = () => {
|
||||||
if (!spRemark.value || !spRemark.value.trim()) {
|
|
||||||
uni.showToast({ title: "请填写转办原因", icon: "none" });
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const newSprList = transferSpCsMgrRef.value.getNewSprList();
|
const newSprList = transferSpCsMgrRef.value.getNewSprList();
|
||||||
const newCsrList = transferSpCsMgrRef.value.getNewCsrList();
|
const newCsrList = transferSpCsMgrRef.value.getNewCsrList();
|
||||||
if (!newSprList.length) {
|
if (!newSprList.length) {
|
||||||
uni.showToast({ title: "请选择审批转办人", icon: "none" });
|
uni.showToast({ title: "请选择转办人", icon: "none" });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
emit('submit', { newSprList, newCsrList, spRemark: spRemark.value });
|
emit('submit', { newSprList, newCsrList, spRemark: spRemark.value });
|
||||||
@ -147,8 +170,37 @@ defineExpose({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.list-content {
|
}
|
||||||
|
|
||||||
|
.info-section {
|
||||||
|
margin-bottom: 40rpx;
|
||||||
|
padding: 30rpx;
|
||||||
|
background: #f8f9fa;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
|
||||||
|
.info-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: flex-start;
|
||||||
|
margin-bottom: 20rpx;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-label {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #666;
|
||||||
|
width: 160rpx;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-value {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #333;
|
||||||
|
flex: 1;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,28 @@ async function forceRefreshPermission(changeTime?: string): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function goByJs(js: any) {
|
function goByJs(js: any) {
|
||||||
|
// 检查是否有签到相关参数
|
||||||
|
const globalData = getGlobal;
|
||||||
|
console.log('goByJs - globalData:', globalData);
|
||||||
|
console.log('goByJs - js:', js);
|
||||||
|
|
||||||
|
if (globalData && globalData.qdId) {
|
||||||
|
// 有签到参数,重定向到签到确认页面
|
||||||
|
let confirmUrl = `/pages/view/routine/qd/confirm?qdId=${globalData.qdId}`;
|
||||||
|
if (globalData.rqgqtime) {
|
||||||
|
confirmUrl += `&rqgqtime=${globalData.rqgqtime}`;
|
||||||
|
}
|
||||||
|
if (globalData.timestamp) {
|
||||||
|
confirmUrl += `×tamp=${globalData.timestamp}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('重定向到签到确认页面:', confirmUrl);
|
||||||
|
uni.reLaunch({
|
||||||
|
url: confirmUrl
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (getGlobal && getGlobal.type === '1') {
|
if (getGlobal && getGlobal.type === '1') {
|
||||||
uni.reLaunch({
|
uni.reLaunch({
|
||||||
url: "/pages/view/routine/xk/qd?from=login"
|
url: "/pages/view/routine/xk/qd?from=login"
|
||||||
@ -79,8 +101,11 @@ function goByJs(js: any) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onLoad(async (data: any) => {
|
onLoad(async (data: any) => {
|
||||||
|
console.log('launchPage onLoad - 接收到的参数:', data);
|
||||||
|
|
||||||
if (data && data.openId) {
|
if (data && data.openId) {
|
||||||
setGlobal(data);
|
setGlobal(data);
|
||||||
|
console.log('launchPage onLoad - 设置global数据后:', getGlobal);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const res = await checkOpenId({
|
const res = await checkOpenId({
|
||||||
@ -88,6 +113,8 @@ onLoad(async (data: any) => {
|
|||||||
appCode: "JS",
|
appCode: "JS",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log('launchPage onLoad - checkOpenId结果:', res);
|
||||||
|
|
||||||
if (res.resultCode == 1 && res.result) {
|
if (res.resultCode == 1 && res.result) {
|
||||||
// 执行登录操作
|
// 执行登录操作
|
||||||
afterLoginAction(res.result);
|
afterLoginAction(res.result);
|
||||||
@ -104,6 +131,7 @@ onLoad(async (data: any) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 跳转页面
|
// 跳转页面
|
||||||
|
console.log('launchPage onLoad - 准备调用goByJs');
|
||||||
goByJs(res.result.js);
|
goByJs(res.result.js);
|
||||||
} else {
|
} else {
|
||||||
uni.reLaunch({
|
uni.reLaunch({
|
||||||
@ -111,11 +139,13 @@ onLoad(async (data: any) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.error('launchPage onLoad - checkOpenId失败:', err);
|
||||||
uni.reLaunch({
|
uni.reLaunch({
|
||||||
url: "/pages/system/login/login"
|
url: "/pages/system/login/login"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
console.log('launchPage onLoad - 没有openId参数,跳转到登录页面');
|
||||||
uni.reLaunch({
|
uni.reLaunch({
|
||||||
url: "/pages/system/login/login"
|
url: "/pages/system/login/login"
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,10 +10,10 @@
|
|||||||
<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.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.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.qjsc }}</text></view>
|
||||||
<view class="info-column"><text class="label">请假事由:</text><text class="value">{{ qjData.qjsy }}</text></view>
|
<view class="info-row"><text class="label">请假事由:</text><text class="value">{{ qjData.qjsy }}</text></view>
|
||||||
<view class="info-row" style="margin-bottom: 0; margin-top: 10px">
|
<view class="info-row" style="margin-bottom: 0; margin-top: 10px">
|
||||||
<text class="label">代课方式:</text>
|
<text class="label">代课方式:</text>
|
||||||
<text class="value">{{ dkfsText }}</text>
|
<text class="value" :class="{ 'no-dk-style': dkfsText === '无须代课' }">{{ dkfsText }}</text>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
@ -144,6 +144,11 @@ defineExpose({
|
|||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #333;
|
color: #333;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
|
|
||||||
|
&.no-dk-style {
|
||||||
|
color: #ff4757;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,9 +9,35 @@
|
|||||||
/>
|
/>
|
||||||
<!-- 代课信息 -->
|
<!-- 代课信息 -->
|
||||||
<view class="dk-info">
|
<view class="dk-info">
|
||||||
<view v-if="!showDkFlag" class="empty-dk">
|
<view class="section-title">
|
||||||
|
<text class="title-text">代课信息</text>
|
||||||
|
<view class="title-underline"></view>
|
||||||
|
</view>
|
||||||
|
<view v-if="!showDkFlag && !showPkkbFlag" class="empty-dk">
|
||||||
<view>{{ showDkEmptyLabel }}</view>
|
<view>{{ showDkEmptyLabel }}</view>
|
||||||
</view>
|
</view>
|
||||||
|
<view v-else-if="showPkkbFlag && !showDkFlag" class="pkkb-list">
|
||||||
|
<view v-for="(item, index) in pkkbList" :key="index" class="pkkb-card">
|
||||||
|
<view class="card-header">
|
||||||
|
<text class="applicant-name">{{ item.dktime }}({{ item.xqLabel }})的{{ item.jcmc }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="divider"></view>
|
||||||
|
<view class="card-body">
|
||||||
|
<view class="info-row">
|
||||||
|
<text class="label">排课名称:</text>
|
||||||
|
<text class="value">{{ item.pkMc }}</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>
|
||||||
|
<text class="value no-teacher">没有选择代课老师</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
<JsQjDetailDk v-else
|
<JsQjDetailDk v-else
|
||||||
:qjId="qjId"
|
:qjId="qjId"
|
||||||
@loadDkList="handleDkListLoaded"
|
@loadDkList="handleDkListLoaded"
|
||||||
@ -22,15 +48,26 @@
|
|||||||
<LcglSp :yw-id="qjId" yw-type="JS_QJ" />
|
<LcglSp :yw-id="qjId" yw-type="JS_QJ" />
|
||||||
</view>
|
</view>
|
||||||
<template #bottom>
|
<template #bottom>
|
||||||
<YwConfirm :spApi="jsQjSpApi" :stopApi="jsQjStopApi" :xtDkApi="jsQjXtApi"
|
<YwConfirm
|
||||||
:transferApi="jsQjTransferApi" :params="spParams" :showXt="true" />
|
:spApi="jsQjSpApi"
|
||||||
|
:stopApi="jsQjStopApi"
|
||||||
|
:xtDkApi="jsQjXtApi"
|
||||||
|
:transferApi="jsQjTransferApi"
|
||||||
|
:params="spParams"
|
||||||
|
:showXt="true"
|
||||||
|
:showReject="true"
|
||||||
|
:showTransfer="true"
|
||||||
|
:showApprove="showApproveButton"
|
||||||
|
:showReturn="false"
|
||||||
|
:showStop="false"
|
||||||
|
:showXtDk="showXtDkButton" />
|
||||||
</template>
|
</template>
|
||||||
</BasicLayout>
|
</BasicLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onLoad } from "@dcloudio/uni-app";
|
import { onLoad } from "@dcloudio/uni-app";
|
||||||
import { jsQjSpApi, jsQjStopApi, jsQjTransferApi, jsQjXtApi } from "@/api/base/jsQjApi";
|
import { jsQjSpApi, jsQjStopApi, jsQjTransferApi, jsQjXtApi, getPkkbByJsRangeTimeApi } from "@/api/base/jsQjApi";
|
||||||
import { useUserStore } from "@/store/modules/user";
|
import { useUserStore } from "@/store/modules/user";
|
||||||
import { useDataStore } from "@/store/modules/data";
|
import { useDataStore } from "@/store/modules/data";
|
||||||
import { ref } from "vue";
|
import { ref } from "vue";
|
||||||
@ -48,6 +85,10 @@ const dbFlag = ref(false);
|
|||||||
const qjId = ref('');
|
const qjId = ref('');
|
||||||
const showDkFlag = ref(false);
|
const showDkFlag = ref(false);
|
||||||
const showDkEmptyLabel = ref('');
|
const showDkEmptyLabel = ref('');
|
||||||
|
const showXtDkButton = ref(false);
|
||||||
|
const showApproveButton = ref(true);
|
||||||
|
const pkkbList = ref<any[]>([]);
|
||||||
|
const showPkkbFlag = ref(false);
|
||||||
|
|
||||||
const spParams = computed(() => {
|
const spParams = computed(() => {
|
||||||
return {
|
return {
|
||||||
@ -56,7 +97,7 @@ const spParams = computed(() => {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const handleQjDataLoaded = (data: any) => {
|
const handleQjDataLoaded = async (data: any) => {
|
||||||
data = data || {};
|
data = data || {};
|
||||||
setData(data);
|
setData(data);
|
||||||
if (data.spResult != "A" && getXxts && getXxts.dbZt === "A") {
|
if (data.spResult != "A" && getXxts && getXxts.dbZt === "A") {
|
||||||
@ -64,10 +105,21 @@ const handleQjDataLoaded = (data: any) => {
|
|||||||
}
|
}
|
||||||
const dkfs = typeof(data.dkfs) === "string" ? parseInt(data.dkfs) : (data.dkfs || 2);
|
const dkfs = typeof(data.dkfs) === "string" ? parseInt(data.dkfs) : (data.dkfs || 2);
|
||||||
showDkFlag.value = dkfs === 0;
|
showDkFlag.value = dkfs === 0;
|
||||||
|
|
||||||
|
// 获取排课信息
|
||||||
|
await getPkkbData(data);
|
||||||
|
|
||||||
if (dkfs === 1) {
|
if (dkfs === 1) {
|
||||||
showDkEmptyLabel.value = "审批同意后由教科处协调";
|
showDkEmptyLabel.value = "教科处协调,请点击协调代课按钮\n如无法协调,请点击转办按钮";
|
||||||
|
showXtDkButton.value = true; // 显示协调代课按钮
|
||||||
|
showApproveButton.value = false; // 隐藏同意按钮
|
||||||
} else if (dkfs === 2) {
|
} else if (dkfs === 2) {
|
||||||
showDkEmptyLabel.value = "无需代课";
|
showDkEmptyLabel.value = "无需代课";
|
||||||
|
showXtDkButton.value = false; // 隐藏协调代课按钮
|
||||||
|
showApproveButton.value = true; // 显示同意按钮
|
||||||
|
} else {
|
||||||
|
showXtDkButton.value = false; // 其他情况隐藏协调代课按钮
|
||||||
|
showApproveButton.value = true; // 显示同意按钮
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -75,6 +127,50 @@ const handleDkListLoaded = (list: any[]) => {
|
|||||||
// 代课明细数据已由JsQjDetail组件处理
|
// 代课明细数据已由JsQjDetail组件处理
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 获取排课信息
|
||||||
|
const getPkkbData = async (data: any) => {
|
||||||
|
if (!data.qjkstime || !data.qjjstime) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const res = await getPkkbByJsRangeTimeApi({
|
||||||
|
jsId: data.jsId,
|
||||||
|
startTime: data.qjkstime,
|
||||||
|
endTime: data.qjjstime,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (res && res.result) {
|
||||||
|
pkkbList.value = res.result.map((item: any) => {
|
||||||
|
item.dktime = item.kbtime.split(" ")[0];
|
||||||
|
item.jcmc = getJcMc(item.jcType) + "第" + item.jc + "节";
|
||||||
|
const xq: number = item.xq - 1;
|
||||||
|
item.xqLabel = getWdName(xq);
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
showPkkbFlag.value = pkkbList.value.length > 0;
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("获取排课信息失败:", error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取节次名称
|
||||||
|
const getJcMc = (jcType: string) => {
|
||||||
|
const jsTypeMc: any = {
|
||||||
|
ZAM: "早自习",
|
||||||
|
AM: "上午",
|
||||||
|
PM: "下午",
|
||||||
|
};
|
||||||
|
return jsTypeMc[jcType] || jcType;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取星期名称
|
||||||
|
const getWdName = (xq: number) => {
|
||||||
|
const wdNameList = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"];
|
||||||
|
return wdNameList[xq] || "";
|
||||||
|
};
|
||||||
|
|
||||||
onLoad(async (data?: any) => {
|
onLoad(async (data?: any) => {
|
||||||
const ret = await QjPageUtils.init(data);
|
const ret = await QjPageUtils.init(data);
|
||||||
if (!ret || !ret.success) {
|
if (!ret || !ret.success) {
|
||||||
@ -90,12 +186,117 @@ onLoad(async (data?: any) => {
|
|||||||
background-color: #f5f7fa;
|
background-color: #f5f7fa;
|
||||||
}
|
}
|
||||||
|
|
||||||
.empty-dk {
|
.dk-info {
|
||||||
margin: 15px;
|
margin: 15px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.section-title {
|
||||||
|
padding: 15px 15px 0 15px;
|
||||||
|
margin-bottom: 0;
|
||||||
|
|
||||||
|
.title-text {
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title-underline {
|
||||||
|
height: 2px;
|
||||||
|
background-color: #007aff;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 1px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 代课信息内容区域与申请人卡片对齐
|
||||||
|
:deep(.dk-info) {
|
||||||
|
margin: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.info-card) {
|
||||||
|
margin: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
border-bottom: 1px solid #f0f0f0;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.empty-dk {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
padding: 50px 15px;
|
padding: 50px 15px;
|
||||||
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
white-space: pre-line;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pkkb-list {
|
||||||
|
.pkkb-card {
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 8px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.05);
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
padding: 15px;
|
||||||
|
border-bottom: 1px solid #eee;
|
||||||
|
|
||||||
|
.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;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #999;
|
||||||
|
width: 70px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.value {
|
||||||
|
font-size: 14px;
|
||||||
|
color: #333;
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
&.no-teacher {
|
||||||
|
color: #ff4757;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@ -214,16 +214,37 @@ const options = ref<any>({});
|
|||||||
|
|
||||||
// 页面加载时接收参数
|
// 页面加载时接收参数
|
||||||
onLoad((params) => {
|
onLoad((params) => {
|
||||||
|
console.log('confirm.vue onLoad - 接收到的参数:', params);
|
||||||
options.value = params || {};
|
options.value = params || {};
|
||||||
|
|
||||||
if (params && params.from === "login") {
|
if (params && params.from === "login") {
|
||||||
options.value = getGlobal;
|
options.value = getGlobal;
|
||||||
|
console.log('confirm.vue onLoad - 从登录页面来,使用global数据:', options.value);
|
||||||
} else {
|
} else {
|
||||||
setGlobal({
|
setGlobal({
|
||||||
...options.value,
|
...options.value,
|
||||||
type: "qd"
|
type: "qd"
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 如果是从launchPage重定向过来的,直接执行页面初始化
|
||||||
|
if (params && params.qdId) {
|
||||||
|
console.log('confirm.vue onLoad - 检测到qdId参数,准备初始化页面');
|
||||||
|
// 延迟执行,确保页面完全加载
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log('confirm.vue onLoad - 开始执行initializePage');
|
||||||
|
initializePage();
|
||||||
|
}, 100);
|
||||||
|
} else {
|
||||||
|
console.log('confirm.vue onLoad - 没有qdId参数,不执行初始化');
|
||||||
|
// 如果没有qdId参数,检查Token状态
|
||||||
if (checkToken()) {
|
if (checkToken()) {
|
||||||
return;
|
console.log('confirm.vue onLoad - Token有效,但没有qdId参数');
|
||||||
|
} else {
|
||||||
|
console.log('confirm.vue onLoad - Token无效,跳转登录页面');
|
||||||
|
uni.navigateTo({
|
||||||
|
url: '/pages/system/login/login'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -254,26 +275,39 @@ const showSignature = ref<boolean>(false);
|
|||||||
// 获取用户store
|
// 获取用户store
|
||||||
const userStore = useUserStore();
|
const userStore = useUserStore();
|
||||||
|
|
||||||
// 页面初始化
|
// 页面初始化函数
|
||||||
onMounted(async () => {
|
const initializePage = async () => {
|
||||||
|
console.log('confirm.vue initializePage - 开始初始化');
|
||||||
|
console.log('confirm.vue initializePage - options.value:', options.value);
|
||||||
|
|
||||||
// 获取签到ID
|
// 获取签到ID
|
||||||
if (options.value?.qdId) {
|
if (options.value?.qdId) {
|
||||||
qdId.value = options.value.qdId;
|
qdId.value = options.value.qdId;
|
||||||
|
console.log('confirm.vue initializePage - 设置qdId:', qdId.value);
|
||||||
} else {
|
} else {
|
||||||
|
console.log('confirm.vue initializePage - 没有qdId参数,显示错误');
|
||||||
uni.showToast({ title: '参数错误', icon: 'none' });
|
uni.showToast({ title: '参数错误', icon: 'none' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取二维码过期时间参数
|
// 获取二维码过期时间参数(单位:秒)
|
||||||
if (options.value?.rqgqtime) {
|
if (options.value?.rqgqtime) {
|
||||||
qrExpireTime.value = parseInt(options.value.rqgqtime) || 60;
|
qrExpireTime.value = parseInt(options.value.rqgqtime) || 60;
|
||||||
|
console.log('confirm.vue initializePage - 设置qrExpireTime:', qrExpireTime.value, '秒');
|
||||||
|
} else {
|
||||||
|
qrExpireTime.value = 60; // 默认60秒
|
||||||
|
console.log('confirm.vue initializePage - 使用默认qrExpireTime:', qrExpireTime.value, '秒');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第一步:获取缓存的教师信息
|
// 第一步:获取缓存的教师信息
|
||||||
const jsData = userStore.getJs;
|
const jsData = userStore.getJs;
|
||||||
|
console.log('confirm.vue initializePage - 获取教师信息:', jsData);
|
||||||
|
|
||||||
if (jsData && Object.keys(jsData).length > 0) {
|
if (jsData && Object.keys(jsData).length > 0) {
|
||||||
userInfo.value = jsData;
|
userInfo.value = jsData;
|
||||||
|
console.log('confirm.vue initializePage - 教师信息有效,继续执行');
|
||||||
} else {
|
} else {
|
||||||
|
console.log('confirm.vue initializePage - 教师信息无效,跳转登录页面');
|
||||||
uni.showToast({ title: '请先登录', icon: 'none' });
|
uni.showToast({ title: '请先登录', icon: 'none' });
|
||||||
// 跳转到登录页面
|
// 跳转到登录页面
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -289,42 +323,72 @@ onMounted(async () => {
|
|||||||
const qrTimestamp = parseInt(options.value.timestamp);
|
const qrTimestamp = parseInt(options.value.timestamp);
|
||||||
const currentTimestamp = Date.now();
|
const currentTimestamp = Date.now();
|
||||||
const timeDiff = currentTimestamp - qrTimestamp;
|
const timeDiff = currentTimestamp - qrTimestamp;
|
||||||
const maxValidTime = qrExpireTime.value * 1000; // 转换为毫秒
|
const maxValidTime = qrExpireTime.value * 1000; // qrExpireTime是秒,转换为毫秒
|
||||||
|
|
||||||
|
console.log('confirm.vue initializePage - 验证二维码时间戳:', {
|
||||||
|
qrTimestamp,
|
||||||
|
currentTimestamp,
|
||||||
|
timeDiff: timeDiff + '毫秒',
|
||||||
|
maxValidTime: maxValidTime + '毫秒',
|
||||||
|
qrExpireTime: qrExpireTime.value + '秒'
|
||||||
|
});
|
||||||
|
|
||||||
if (timeDiff > maxValidTime) {
|
if (timeDiff > maxValidTime) {
|
||||||
|
console.log('confirm.vue initializePage - 二维码已过期,时间差:', timeDiff, '毫秒,超过最大有效时间:', maxValidTime, '毫秒');
|
||||||
currentStep.value = 'qrExpired';
|
currentStep.value = 'qrExpired';
|
||||||
return;
|
return;
|
||||||
|
} else {
|
||||||
|
console.log('confirm.vue initializePage - 二维码未过期,时间差:', timeDiff, '毫秒,小于最大有效时间:', maxValidTime, '毫秒');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 第二步:通过qdId和教师ID查询该教师是否能签到
|
// 第二步:通过qdId和教师ID查询该教师是否能签到
|
||||||
|
console.log('confirm.vue initializePage - 准备调用checkTeacherSignInPermission');
|
||||||
await checkTeacherSignInPermission();
|
await checkTeacherSignInPermission();
|
||||||
|
};
|
||||||
|
|
||||||
|
// 页面初始化
|
||||||
|
onMounted(async () => {
|
||||||
|
// 如果页面已经在onLoad中初始化完成,这里不需要额外操作
|
||||||
|
// 但可以添加一些DOM相关的初始化逻辑
|
||||||
});
|
});
|
||||||
|
|
||||||
// 检查教师签到权限
|
// 检查教师签到权限
|
||||||
const checkTeacherSignInPermission = async () => {
|
const checkTeacherSignInPermission = async () => {
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - 开始检查签到权限');
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - qdId:', qdId.value);
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - userInfo.value.id:', userInfo.value?.id);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - 准备调用qdzxFindByQdAndJsApi');
|
||||||
const result = await qdzxFindByQdAndJsApi({
|
const result = await qdzxFindByQdAndJsApi({
|
||||||
qdId: qdId.value,
|
qdId: qdId.value,
|
||||||
jsId: userInfo.value.id
|
jsId: userInfo.value.id
|
||||||
});
|
});
|
||||||
|
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - API调用结果:', result);
|
||||||
|
|
||||||
if (result && result.resultCode === 1 && result.result) {
|
if (result && result.resultCode === 1 && result.result) {
|
||||||
// 找到签到记录
|
// 找到签到记录
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - 找到签到记录');
|
||||||
qdzxRecord.value = result.result;
|
qdzxRecord.value = result.result;
|
||||||
qdzxId.value = result.result.id;
|
qdzxId.value = result.result.id;
|
||||||
|
|
||||||
// 第三步:获取签到详情,验证是否需要签名
|
// 第三步:获取签到详情,验证是否需要签名
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - 准备调用loadMeetingInfo');
|
||||||
await loadMeetingInfo();
|
await loadMeetingInfo();
|
||||||
} else if (result && result.resultCode === 0) {
|
} else if (result && result.resultCode === 0) {
|
||||||
// 后端明确返回未找到记录
|
// 后端明确返回未找到记录
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - 未找到签到记录');
|
||||||
currentStep.value = 'notInList';
|
currentStep.value = 'notInList';
|
||||||
await loadMeetingInfo(); // 仍然加载会议信息用于显示
|
await loadMeetingInfo(); // 仍然加载会议信息用于显示
|
||||||
} else {
|
} else {
|
||||||
// 其他错误情况
|
// 其他错误情况
|
||||||
|
console.log('confirm.vue checkTeacherSignInPermission - 查询失败:', result);
|
||||||
uni.showToast({ title: '查询签到权限失败', icon: 'none' });
|
uni.showToast({ title: '查询签到权限失败', icon: 'none' });
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
console.error('confirm.vue checkTeacherSignInPermission - 网络异常:', error);
|
||||||
uni.showToast({ title: '网络异常,请重试', icon: 'none' });
|
uni.showToast({ title: '网络异常,请重试', icon: 'none' });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -46,8 +46,18 @@
|
|||||||
<LcglSp :yw-id="xkTf.id" yw-type="XK_TF" />
|
<LcglSp :yw-id="xkTf.id" yw-type="XK_TF" />
|
||||||
</view>
|
</view>
|
||||||
<template #bottom>
|
<template #bottom>
|
||||||
<YwConfirm :spApi="xkTfSpApi" :stopApi="xkTfStopApi"
|
<YwConfirm
|
||||||
:transferApi="xkTfTransferApi" :params="spParams" v-if="xkTf.id" />
|
:spApi="xkTfSpApi"
|
||||||
|
:stopApi="xkTfStopApi"
|
||||||
|
:transferApi="xkTfTransferApi"
|
||||||
|
:params="spParams"
|
||||||
|
:showReject="true"
|
||||||
|
:showTransfer="true"
|
||||||
|
:showApprove="true"
|
||||||
|
:showReturn="false"
|
||||||
|
:showStop="false"
|
||||||
|
:showXtDk="false"
|
||||||
|
v-if="xkTf.id" />
|
||||||
</template>
|
</template>
|
||||||
</BasicLayout>
|
</BasicLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user