注册 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"> <script setup lang="ts">
import {onHide, onLaunch, onShow} from "@dcloudio/uni-app"; import {onHide, onLaunch, onShow} from "@dcloudio/uni-app";
import {useDataStore} from "@/store/modules/data";
onLaunch(() => { onLaunch(() => {
console.log("App Launch"); 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(() => { onShow(() => {
console.log("App Show"); console.log("App Show");
}); });
onHide(() => { onHide(() => {
console.log("App Hide"); console.log("App Hide");
}); });

View File

@ -4,11 +4,6 @@
<view class="header-section"> <view class="header-section">
<view class="header-gradient"></view> <view class="header-gradient"></view>
<!-- 退出按钮 -->
<view class="logout-btn" @click="handleLogout">
<text class="logout-text">退出</text>
</view>
<!-- 老师信息 --> <!-- 老师信息 -->
<view class="teacher-info"> <view class="teacher-info">
<view class="teacher-avatar"> <view class="teacher-avatar">
@ -843,25 +838,6 @@ defineExpose({
z-index: 1; 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 { .teacher-info {
display: flex; display: flex;

View File

@ -96,6 +96,18 @@ function goByJs(js: any) {
onLoad(async (data: any) => { onLoad(async (data: any) => {
console.log('launchPage onLoad - 接收到的参数:', data); console.log('launchPage onLoad - 接收到的参数:', data);
if (data && data.openId) { 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 { try {
const res = await checkOpenId({ const res = await checkOpenId({
openId: data.openId, openId: data.openId,

View File

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

View File

@ -146,25 +146,21 @@
</view> </view>
<view class="info-card list-item-card"> <view class="info-card list-item-card">
<uni-datetime-picker type="datetime" v-model="formData.startTime"> <view class="list-item-row" @click="startTimePicker?.open()">
<view class="list-item-row"> <text class="list-label">开始时间</text>
<text class="list-label">开始时间</text> <view class="list-value">
<view class="list-value"> <text :class="{ placeholder: !formData.startTime }">{{ formData.startTime || "请选择" }}</text>
<text>{{ formData.startTime || "请选择" }}</text> <uni-icons type="right" size="16" color="#999"></uni-icons>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
</view> </view>
</uni-datetime-picker> </view>
<uni-datetime-picker type="datetime" v-model="formData.endTime"> <view class="list-item-row no-border" @click="endTimePicker?.open()">
<view class="list-item-row no-border"> <text class="list-label">结束时间</text>
<text class="list-label">结束时间</text> <view class="list-value">
<view class="list-value"> <text :class="{ placeholder: !formData.endTime }">{{ formData.endTime || "请选择" }}</text>
<text>{{ formData.endTime || "请选择" }}</text> <uni-icons type="right" size="16" color="#999"></uni-icons>
<uni-icons type="right" size="16" color="#999"></uni-icons>
</view>
</view> </view>
</uni-datetime-picker> </view>
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
@ -230,6 +226,22 @@
</scroll-view> </scroll-view>
</view> </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> </BasicLayout>
</template> </template>
@ -243,6 +255,7 @@ import { imagUrl } from "@/utils";
import { mobilejlstudentListApi, jlFindByIdApi, jlSaveApi } from "@/api/base/jlApi"; import { mobilejlstudentListApi, jlFindByIdApi, jlSaveApi } from "@/api/base/jlApi";
import { findAllNjBjTree } from "@/api/base/server"; import { findAllNjBjTree } from "@/api/base/server";
import { useUserStore } from "@/store/modules/user"; import { useUserStore } from "@/store/modules/user";
import DatetimePicker from "@/components/BasicPicker/TimePicker/DatetimePicker.vue";
interface Attachment { interface Attachment {
name: string; name: string;
@ -272,6 +285,11 @@ interface FormData {
const noticeId = ref<string | null>(null); const noticeId = ref<string | null>(null);
const isLoadingStudents = ref(false); const isLoadingStudents = ref(false);
//
const startTimePicker = ref<any>(null);
const endTimePicker = ref<any>(null);
const formData = reactive<FormData>({ const formData = reactive<FormData>({
title: "", title: "",
content: "", 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) => { watch(() => formData.title, (newTitle) => {
if (formData.signatureRequired && 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 { onShow, onLoad } from "@dcloudio/uni-app";
import { useUserStore } from "@/store/modules/user"; import { useUserStore } from "@/store/modules/user";
const { getJs, getUser } = useUserStore();
interface QdItem { interface QdItem {
id: string; id: string;
qdmc: string; // qdmc: string; //
@ -152,15 +154,35 @@ interface QdItem {
qdry: string; // 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({ const pageParams = ref({
qdlx: '' qdlx: ''
}); });
//
const defaultRange = getCurrentMonthRange();
// //
const searchForm = reactive({ const searchForm = reactive({
startTime: '', startTime: defaultRange.startTime,
endTime: '' endTime: defaultRange.endTime
}); });
// //
@ -187,8 +209,9 @@ const handleSearch = () => {
// //
const handleReset = () => { const handleReset = () => {
searchForm.startTime = ''; const resetRange = getCurrentMonthRange();
searchForm.endTime = ''; searchForm.startTime = resetRange.startTime;
searchForm.endTime = resetRange.endTime;
getQdList(); getQdList();
}; };
@ -197,17 +220,28 @@ const getQdList = async () => {
isLoading.value = true; isLoading.value = true;
try { try {
const queryParams: any = { const queryParams: any = {
qdkstime: searchForm.startTime,
qdjstime: searchForm.endTime,
page: 1, page: 1,
rows: 100 rows: 100
}; };
//
if (searchForm.startTime) {
queryParams.createdTimeStart = searchForm.startTime + ' 00:00:00';
}
if (searchForm.endTime) {
queryParams.createdTimeEnd = searchForm.endTime + ' 23:59:59';
}
// qdlx // qdlx
if (pageParams.value.qdlx) { if (pageParams.value.qdlx) {
queryParams.qdlx = 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); const res = await qdFindPageApi(queryParams);
dataList.value = res.rows || []; dataList.value = res.rows || [];
} catch (error) { } catch (error) {

View File

@ -116,7 +116,21 @@
<!-- 签到打卡开始时间 --> <!-- 签到打卡开始时间 -->
<view class="info-card list-item-card"> <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-item-row">
<view class="list-label-container"> <view class="list-label-container">
<text class="required-asterisk">*</text> <text class="required-asterisk">*</text>
@ -134,7 +148,21 @@
<!-- 签到开始时间 --> <!-- 签到开始时间 -->
<view class="info-card list-item-card"> <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-item-row">
<view class="list-label-container"> <view class="list-label-container">
<text class="required-asterisk">*</text> <text class="required-asterisk">*</text>
@ -152,7 +180,21 @@
<!-- 签到结束时间 --> <!-- 签到结束时间 -->
<view class="info-card list-item-card"> <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-item-row">
<view class="list-label-container"> <view class="list-label-container">
<text class="required-asterisk">*</text> <text class="required-asterisk">*</text>
@ -238,6 +280,32 @@
</view> </view>
</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> <template #bottom>
<view class="bottom-actions"> <view class="bottom-actions">
<button class="action-btn cancel-btn" @click="handleCancel"> <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 { jyjbFindPageApi } from "@/api/base/jyjbApi";
import { jycyFindByJyjbIdApi } from "@/api/base/jycyApi"; import { jycyFindByJyjbIdApi } from "@/api/base/jycyApi";
import { useUserStore } from "@/store/modules/user"; import { useUserStore } from "@/store/modules/user";
import { getPlatform } from "@/utils/uniapp";
import DatetimePicker from "@/components/BasicPicker/TimePicker/DatetimePicker.vue";
const { getJs } = useUserStore(); const { getJs } = useUserStore();
// iOS
const isIOS = getPlatform() === 'ios';
interface TeacherInfo { interface TeacherInfo {
id: string; id: string;
jsxm: string; jsxm: string;
@ -293,6 +366,11 @@ const isPublishing = ref(false);
const maxDisplayCount = 5; const maxDisplayCount = 5;
const showTeacherListModal = ref(false); // 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 courseOptions = ref<CourseInfo[]>([]);
const selectedCourse = ref<CourseInfo | null>(null); const selectedCourse = ref<CourseInfo | null>(null);
@ -561,7 +639,7 @@ const handleCancel = () => {
}; };
// //
const formatDateTime = (dateTime: string) => { const formatDateTime = (dateTime: string | number) => {
if (!dateTime) return ''; if (!dateTime) return '';
const date = new Date(dateTime); const date = new Date(dateTime);
const year = date.getFullYear(); const year = date.getFullYear();
@ -573,6 +651,19 @@ const formatDateTime = (dateTime: string) => {
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; 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 handlePublish = async () => {
const requestStartTime = new Date().toISOString(); const requestStartTime = new Date().toISOString();
console.log('=== handlePublish 开始 ===', requestStartTime); console.log('=== handlePublish 开始 ===', requestStartTime);