注册 openId 没有获取调整

This commit is contained in:
hebo 2025-10-22 15:01:22 +08:00
parent f0c85a60f9
commit 8231066bf5
7 changed files with 222 additions and 52 deletions

View File

@ -1,12 +1,42 @@
<script setup lang="ts">
import {onHide, onLaunch, onShow} from "@dcloudio/uni-app";
import {useDataStore} from "@/store/modules/data";
onLaunch(() => {
console.log("App Launch");
// #ifdef H5
// URL global
try {
const urlParams = new URLSearchParams(window.location.search);
const openId = urlParams.get('openId');
const menu = urlParams.get('menu');
const type = urlParams.get('type');
const profilePhoto = urlParams.get('profilePhoto');
if (openId) {
const {setGlobal, getGlobal} = useDataStore();
// global openId
if (!getGlobal.openId) {
setGlobal({
openId,
menu,
type: type ? parseInt(type) : 2,
profilePhoto
});
console.log('App.vue 保存 URL 参数到 global:', {openId, menu, type, profilePhoto});
}
}
} catch (error) {
console.error('App.vue 处理 URL 参数失败:', error);
}
// #endif
});
onShow(() => {
console.log("App Show");
});
onHide(() => {
console.log("App Hide");
});

View File

@ -4,11 +4,6 @@
<view class="header-section">
<view class="header-gradient"></view>
<!-- 退出按钮 -->
<view class="logout-btn" @click="handleLogout">
<text class="logout-text">退出</text>
</view>
<!-- 老师信息 -->
<view class="teacher-info">
<view class="teacher-avatar">
@ -843,25 +838,6 @@ defineExpose({
z-index: 1;
}
// 退
.logout-btn {
position: absolute;
top: 40rpx;
right: 30rpx;
z-index: 3;
background: rgba(255, 255, 255, 0.2);
border-radius: 20rpx;
padding: 10rpx 20rpx;
border: 1px solid rgba(255, 255, 255, 0.3);
backdrop-filter: blur(10px);
.logout-text {
color: #ffffff;
font-size: 14px;
font-weight: 500;
}
}
//
.teacher-info {
display: flex;

View File

@ -96,6 +96,18 @@ function goByJs(js: any) {
onLoad(async (data: any) => {
console.log('launchPage onLoad - 接收到的参数:', data);
if (data && data.openId) {
// global
setGlobal({
openId: data.openId,
menu: data.menu,
type: data.type || 2, //
profilePhoto: data.profilePhoto,
qdId: data.qdId,
rqgqtime: data.rqgqtime,
timestampqd: data.timestampqd
});
console.log('已保存参数到 global:', { openId: data.openId, type: data.type });
try {
const res = await checkOpenId({
openId: data.openId,

View File

@ -111,7 +111,7 @@ const formData = reactive({
loginName: "",
phone: "",
code: "",
avatarUrl: "",
avatarUrl: getGlobal.profilePhoto || "", //
openId: getGlobal.openId,
appCode: getGlobal.type == 1 ? "ZB" : "JS",
});

View File

@ -146,25 +146,21 @@
</view>
<view class="info-card list-item-card">
<uni-datetime-picker type="datetime" v-model="formData.startTime">
<view class="list-item-row">
<text class="list-label">开始时间</text>
<view class="list-value">
<text>{{ formData.startTime || "请选择" }}</text>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
<view class="list-item-row" @click="startTimePicker?.open()">
<text class="list-label">开始时间</text>
<view class="list-value">
<text :class="{ placeholder: !formData.startTime }">{{ formData.startTime || "请选择" }}</text>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
</uni-datetime-picker>
</view>
<uni-datetime-picker type="datetime" v-model="formData.endTime">
<view class="list-item-row no-border">
<text class="list-label">结束时间</text>
<view class="list-value">
<text>{{ formData.endTime || "请选择" }}</text>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
<view class="list-item-row no-border" @click="endTimePicker?.open()">
<text class="list-label">结束时间</text>
<view class="list-value">
<text :class="{ placeholder: !formData.endTime }">{{ formData.endTime || "请选择" }}</text>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
</uni-datetime-picker>
</view>
</view>
</view>
</scroll-view>
@ -230,6 +226,22 @@
</scroll-view>
</view>
</view>
<!-- 自定义时间选择器 -->
<DatetimePicker
ref="startTimePicker"
:value="formData.startTime || new Date().getTime()"
mode="datetime"
title="选择开始时间"
@confirm="handleStartTimeConfirm"
/>
<DatetimePicker
ref="endTimePicker"
:value="formData.endTime || new Date().getTime()"
mode="datetime"
title="选择结束时间"
@confirm="handleEndTimeConfirm"
/>
</BasicLayout>
</template>
@ -243,6 +255,7 @@ import { imagUrl } from "@/utils";
import { mobilejlstudentListApi, jlFindByIdApi, jlSaveApi } from "@/api/base/jlApi";
import { findAllNjBjTree } from "@/api/base/server";
import { useUserStore } from "@/store/modules/user";
import DatetimePicker from "@/components/BasicPicker/TimePicker/DatetimePicker.vue";
interface Attachment {
name: string;
@ -272,6 +285,11 @@ interface FormData {
const noticeId = ref<string | null>(null);
const isLoadingStudents = ref(false);
//
const startTimePicker = ref<any>(null);
const endTimePicker = ref<any>(null);
const formData = reactive<FormData>({
title: "",
content: "",
@ -1094,6 +1112,15 @@ const publishNotice = async () => {
};
//
const handleStartTimeConfirm = (e: any) => {
formData.startTime = formatDate(e.value);
};
const handleEndTimeConfirm = (e: any) => {
formData.endTime = formatDate(e.value);
};
//
watch(() => formData.title, (newTitle) => {
if (formData.signatureRequired && newTitle) {

View File

@ -138,6 +138,8 @@ import { ref, reactive, onMounted } from "vue";
import { onShow, onLoad } from "@dcloudio/uni-app";
import { useUserStore } from "@/store/modules/user";
const { getJs, getUser } = useUserStore();
interface QdItem {
id: string;
qdmc: string; //
@ -152,15 +154,35 @@ interface QdItem {
qdry: string; //
}
//
const getCurrentMonthRange = () => {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth();
//
const firstDay = new Date(year, month, 1);
const startTime = `${year}-${String(month + 1).padStart(2, '0')}-01`;
//
const lastDay = new Date(year, month + 1, 0);
const endTime = `${year}-${String(month + 1).padStart(2, '0')}-${String(lastDay.getDate()).padStart(2, '0')}`;
return { startTime, endTime };
};
//
const pageParams = ref({
qdlx: ''
});
//
const defaultRange = getCurrentMonthRange();
//
const searchForm = reactive({
startTime: '',
endTime: ''
startTime: defaultRange.startTime,
endTime: defaultRange.endTime
});
//
@ -187,8 +209,9 @@ const handleSearch = () => {
//
const handleReset = () => {
searchForm.startTime = '';
searchForm.endTime = '';
const resetRange = getCurrentMonthRange();
searchForm.startTime = resetRange.startTime;
searchForm.endTime = resetRange.endTime;
getQdList();
};
@ -197,17 +220,28 @@ const getQdList = async () => {
isLoading.value = true;
try {
const queryParams: any = {
qdkstime: searchForm.startTime,
qdjstime: searchForm.endTime,
page: 1,
rows: 100
};
//
if (searchForm.startTime) {
queryParams.createdTimeStart = searchForm.startTime + ' 00:00:00';
}
if (searchForm.endTime) {
queryParams.createdTimeEnd = searchForm.endTime + ' 23:59:59';
}
// qdlx
if (pageParams.value.qdlx) {
queryParams.qdlx = pageParams.value.qdlx;
}
// admin ID
const empCode = getUser?.empCode || '';
if (empCode !== 'admin') {
queryParams.jsId = getJs.id; // ID
}
const res = await qdFindPageApi(queryParams);
dataList.value = res.rows || [];
} catch (error) {

View File

@ -116,7 +116,21 @@
<!-- 签到打卡开始时间 -->
<view class="info-card list-item-card">
<uni-datetime-picker type="datetime" v-model="formData.dkkstime">
<!-- iOS使用自定义时间选择器 -->
<view v-if="isIOS" class="list-item-row" @click="dkkstimePicker?.open()">
<view class="list-label-container">
<text class="required-asterisk">*</text>
<text class="list-label">签到开始</text>
</view>
<view class="list-value">
<text :class="{ placeholder: !formData.dkkstime }">
{{ formData.dkkstime || '请选择签到打卡开始时间' }}
</text>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
</view>
<!-- 非iOS使用原生时间选择器 -->
<uni-datetime-picker v-else type="datetime" v-model="formData.dkkstime">
<view class="list-item-row">
<view class="list-label-container">
<text class="required-asterisk">*</text>
@ -134,7 +148,21 @@
<!-- 签到开始时间 -->
<view class="info-card list-item-card">
<uni-datetime-picker type="datetime" v-model="formData.qdkstime">
<!-- iOS使用自定义时间选择器 -->
<view v-if="isIOS" class="list-item-row" @click="qdkstimePicker?.open()">
<view class="list-label-container">
<text class="required-asterisk">*</text>
<text class="list-label">会议开始</text>
</view>
<view class="list-value">
<text :class="{ placeholder: !formData.qdkstime }">
{{ formData.qdkstime || '请选择会议开始时间' }}
</text>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
</view>
<!-- 非iOS使用原生时间选择器 -->
<uni-datetime-picker v-else type="datetime" v-model="formData.qdkstime">
<view class="list-item-row">
<view class="list-label-container">
<text class="required-asterisk">*</text>
@ -152,7 +180,21 @@
<!-- 签到结束时间 -->
<view class="info-card list-item-card">
<uni-datetime-picker type="datetime" v-model="formData.qdjstime">
<!-- iOS使用自定义时间选择器 -->
<view v-if="isIOS" class="list-item-row" @click="qdjstimePicker?.open()">
<view class="list-label-container">
<text class="required-asterisk">*</text>
<text class="list-label">会议结束</text>
</view>
<view class="list-value">
<text :class="{ placeholder: !formData.qdjstime }">
{{ formData.qdjstime || '请选择会议结束时间' }}
</text>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
</view>
<!-- 非iOS使用原生时间选择器 -->
<uni-datetime-picker v-else type="datetime" v-model="formData.qdjstime">
<view class="list-item-row">
<view class="list-label-container">
<text class="required-asterisk">*</text>
@ -238,6 +280,32 @@
</view>
</view>
<!-- iOS自定义时间选择器 -->
<DatetimePicker
v-if="isIOS"
ref="dkkstimePicker"
:value="formData.dkkstime || new Date().getTime()"
mode="datetime"
title="选择签到开始时间"
@confirm="handleDkkstimeConfirm"
/>
<DatetimePicker
v-if="isIOS"
ref="qdkstimePicker"
:value="formData.qdkstime || new Date().getTime()"
mode="datetime"
title="选择会议开始时间"
@confirm="handleQdkstimeConfirm"
/>
<DatetimePicker
v-if="isIOS"
ref="qdjstimePicker"
:value="formData.qdjstime || new Date().getTime()"
mode="datetime"
title="选择会议结束时间"
@confirm="handleQdjstimeConfirm"
/>
<template #bottom>
<view class="bottom-actions">
<button class="action-btn cancel-btn" @click="handleCancel">
@ -260,9 +328,14 @@ import { kccyFindByKcjbIdApi } from "@/api/base/kccyApi";
import { jyjbFindPageApi } from "@/api/base/jyjbApi";
import { jycyFindByJyjbIdApi } from "@/api/base/jycyApi";
import { useUserStore } from "@/store/modules/user";
import { getPlatform } from "@/utils/uniapp";
import DatetimePicker from "@/components/BasicPicker/TimePicker/DatetimePicker.vue";
const { getJs } = useUserStore();
// iOS
const isIOS = getPlatform() === 'ios';
interface TeacherInfo {
id: string;
jsxm: string;
@ -293,6 +366,11 @@ const isPublishing = ref(false);
const maxDisplayCount = 5;
const showTeacherListModal = ref(false); //
// iOS
const dkkstimePicker = ref<any>(null);
const qdkstimePicker = ref<any>(null);
const qdjstimePicker = ref<any>(null);
//
const courseOptions = ref<CourseInfo[]>([]);
const selectedCourse = ref<CourseInfo | null>(null);
@ -561,7 +639,7 @@ const handleCancel = () => {
};
//
const formatDateTime = (dateTime: string) => {
const formatDateTime = (dateTime: string | number) => {
if (!dateTime) return '';
const date = new Date(dateTime);
const year = date.getFullYear();
@ -573,6 +651,19 @@ const formatDateTime = (dateTime: string) => {
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};
// iOS
const handleDkkstimeConfirm = (e: any) => {
formData.dkkstime = formatDateTime(e.value);
};
const handleQdkstimeConfirm = (e: any) => {
formData.qdkstime = formatDateTime(e.value);
};
const handleQdjstimeConfirm = (e: any) => {
formData.qdjstime = formatDateTime(e.value);
};
const handlePublish = async () => {
const requestStartTime = new Date().toISOString();
console.log('=== handlePublish 开始 ===', requestStartTime);