Merge branch 'develop' of http://25.13.9.101:9000/K17_AITS/tra-app into develop

This commit is contained in:
yanghang
2025-07-25 09:24:23 +08:00
16 changed files with 141 additions and 72 deletions
+2
View File
@@ -18,4 +18,6 @@ VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
# h5专用地址 # h5专用地址
VITE_APP_BASE_H5_API_Url = 'http://aitstest.jlbank.com.cn:7001' VITE_APP_BASE_H5_API_Url = 'http://aitstest.jlbank.com.cn:7001'
Binary file not shown.
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnZcvmQypn5F6Hym4517K
uTb5FKJXf4Z+QBqrA2YaAL3VDrHn9s1IpkRu7FwmqqEhYHs72BE3F41pbLkzg178
d9grSFMJ8N3OtGc9D4/jt4seSyZ2fPWkSN38upQPetFEjYQGJQ3MeCqbhdXGXDQ+
XRi/wLsVpT7Dp11u0H2r7uFEpD85kkJnooyFdJAptmbdqb/Oi5wCbJZRwO1BSV3h
YOw5T9/4yexLRteSODiMmq7xjAaotfxSNe7OpOGlBBBe84nsmplyDR0mldqh9esC
DcSlBywWIO2y9azWx8F4EyR/3PTJwi03meQFpSB2ioXQwZgQXXlV8Z0VcWx0JRqG
LwIDAQAB
-----END PUBLIC KEY-----
@@ -0,0 +1,23 @@
为什么没有 MD5
Java 8+ 默认禁用了 MD5(出于安全原因),keytool 默认只显示 SHA-1 和 SHA-256。
但 证书本身仍然可以计算 MD5,只是 keytool 默认不显示。
如何获取该 Keystore 的 MD5 指纹?
方法 1:使用 openssl 计算证书的 MD5
导出证书(.cer 或 .pem 格式):
bash
keytool -exportcert -alias ai_jlyh_app -keystore ai_jlyh_app.keystore -file cert.cer
(输入 keystore 密码)
用 openssl 计算 MD5 指纹:
bash
openssl x509 -inform der -in cert.cer -noout -fingerprint -md5
输出示例:
text
MD5 Fingerprint=D5:DC:64:CD:DD:A5:25:FE:26:B8:EF:24:8A:2B:B3:89
去掉冒号,转为小写,就是备案所需的 d5dc64cddda525fe26b8ef248a2bb389。
+5 -1
View File
@@ -6,4 +6,8 @@ keytool -v -importkeystore -srckeystore ai_jlyh_app.p12 -srcstoretype PKCS12 -de
# 迁移到行业标准格式 PKCS12 # 迁移到行业标准格式 PKCS12
keytool -importkeystore -srckeystore ai_jlyh_app.keystore -destkeystore ai_jlyh_app.keystore -deststoretype pkcs12 keytool -importkeystore -srckeystore ai_jlyh_app.keystore -destkeystore ai_jlyh_app.keystore -deststoretype pkcs12
keytool -v -list -keystore ai_jlyh_app.keystore keytool -v -list -keystore ai_jlyh_app.keystore
# cer生成pem
openssl x509 -inform der -in cert.cer -pubkey -noout > public_key.pem
Binary file not shown.
+9
View File
@@ -0,0 +1,9 @@
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAttdtX3bTzu/8jSHkGYd+
VyaQO94lvu+movMufkT8Whg5X9dMjI4bZrQBXr6YWKi/QQZCruPQy740oD7mm0tq
tSJVD6z+HaTaIIwyLGLzTIuMlkrTrXAtFjSKmAUewsbyIoU5H/THDW1Qic/U+iYH
P75thAoVWKVHdfY8608lZOeeusThlNXz9hWTPvg4ynqR0f0xnBXVP0Aq16BgCE2F
xGsEmZF6aEpMxd4l8+0qo7Qmoh8/UJC0pTEi6RpZZy6i5Tns1GVuq/3wU3uZoB9v
uaf7uJdC8Wjv8IcFOa7VSqb5v2N9r8eYK0+7w9YPL04f0BJkK0e7nBowpO7avuMZ
DwIDAQAB
-----END PUBLIC KEY-----
Binary file not shown.
+58 -46
View File
@@ -1,5 +1,6 @@
// #ifdef APP-PLUS
import showDialog from '@/common/dialogMessage' import showDialog from '@/common/dialogMessage'
// #endif
function msg(title, duration = 1000) { function msg(title, duration = 1000) {
uni.showToast({ uni.showToast({
title: title, title: title,
@@ -10,40 +11,49 @@ function msg(title, duration = 1000) {
} }
function show(title, msg, showCancel = true, cancelText = '取消', confirmText = '确定') { function show(title, msg, showCancel = true, cancelText = '取消', confirmText = '确定') {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
// 创建通用参数对象 // 创建通用参数对象
const dialogOptions = { const dialogOptions = {
title, title,
content: msg, content: msg,
showCancel, showCancel,
cancelText, cancelText,
confirmText, confirmText,
success: (res) => { success: (res) => {
// 统一处理成功回调,解析为布尔值 // 统一处理成功回调,解析为布尔值
console.log('res.confirm', res.confirm); console.log('res.confirm', res.confirm);
resolve(!!res.confirm); resolve(!!res.confirm);
} }
}; };
// #ifdef APP-PLUS
if (getPhoneEnvBool('AND')) { if (getPhoneEnvBool('AND')) {
// 安卓环境使用showDialog,补充cancel回调 // 安卓环境使用showDialog,补充cancel回调
showDialog({ showDialog({
...dialogOptions, ...dialogOptions,
cancel: () => { cancel: () => {
console.log('用户点击取消'); console.log('用户点击取消');
resolve(false); // 取消时也返回Promise结果 resolve(false); // 取消时也返回Promise结果
} }
}); });
} else { } else {
// 其他环境使用uni.showModal,补充fail回调 // 其他环境使用uni.showModal,补充fail回调
uni.showModal({ uni.showModal({
...dialogOptions, ...dialogOptions,
fail: (res) => { fail: (res) => {
reject(res); reject(res);
} }
}); });
} }
}); // #endif
// #ifdef H5
uni.showModal({
...dialogOptions,
fail: (res) => {
reject(res);
}
});
// #endif
});
} }
const loading = (title = '加载中', mask = true) => uni.showLoading({ const loading = (title = '加载中', mask = true) => uni.showLoading({
@@ -140,18 +150,20 @@ export const getUserInfo = (key = '') => {
* @returns {boolean} 如果当前平台匹配指定标识返回true,否则返回false * @returns {boolean} 如果当前平台匹配指定标识返回true,否则返回false
*/ */
export const getPhoneEnvBool = (flag) => { export const getPhoneEnvBool = (flag) => {
// 获取当前设备的平台信息 // 获取当前设备的平台信息
const { platform } = uni.getSystemInfoSync();
// 平台与标识的映射关系
const platformMap = {
ios: 'IOS',
android: 'AND',
};
// 根据当前平台返回匹配结果 const {
return platformMap[platform] === flag; platform
} = uni.getSystemInfoSync();
// 平台与标识的映射关系
const platformMap = {
ios: 'IOS',
android: 'AND',
};
// 根据当前平台返回匹配结果
return platformMap[platform] === flag;
}; };
+4 -2
View File
@@ -1,4 +1,5 @@
export default function showDialog(options) { export default function showDialog(options) {
const view = new plus.nativeObj.View('customModal', { const view = new plus.nativeObj.View('customModal', {
top: '0', top: '0',
left: '0', left: '0',
@@ -7,7 +8,7 @@ export default function showDialog(options) {
backgroundColor: 'rgba(0,0,0,0.1)', backgroundColor: 'rgba(0,0,0,0.1)',
position: 'fixed' position: 'fixed'
}); });
const screenWidth = plus.screen.resolutionWidth; const screenWidth = plus.screen.resolutionWidth;
const screenHeight = plus.screen.resolutionHeight; const screenHeight = plus.screen.resolutionHeight;
const borderRadius = 10; const borderRadius = 10;
@@ -212,7 +213,7 @@ export default function showDialog(options) {
} }
} }
}, false); }, false);
view.show(); view.show();
return { return {
@@ -220,4 +221,5 @@ export default function showDialog(options) {
view.close(); view.close();
} }
}; };
} }
+22 -6
View File
@@ -134,9 +134,17 @@
reply_data.parentBbsId = parentBbsId reply_data.parentBbsId = parentBbsId
reply_data.bbsId = item.bbsId reply_data.bbsId = item.bbsId
reply_data.index = index reply_data.index = index
const systemInfo = uni.getSystemInfoSync();
// 安全区域底部到屏幕底部的高度(即底部安全区域高度)
const safeAreaBottomHeight = systemInfo.screenHeight - systemInfo.safeArea.bottom;
nextTick(() => { nextTick(() => {
uni.onKeyboardHeightChange(res => { uni.onKeyboardHeightChange(res => {
popup_input_bottom.value = `${res.height}px`; let keyboardHeight = res.height;
// 仅在iOS端补偿安全区域高度
if (systemInfo.platform === 'ios') {
keyboardHeight = Math.max(0, keyboardHeight - safeAreaBottomHeight); // 避免负数
}
popup_input_bottom.value = `${keyboardHeight}px`;
console.log(res); console.log(res);
}); });
}) })
@@ -167,10 +175,18 @@
} }
} }
const getData = () => { const getData = (from = '') => {
if (status.value !== 'loadmore' && status.value !== '') return if (from == 'submit') {
status.value = 'loading' status.value = ''
page.value++ total.value = -1
page.value = 1
message_list.length = 0
} else {
if (status.value !== 'loadmore' && status.value !== '') return
status.value = 'loading'
page.value++
}
queryTraCrsBbsInfoByCrsId({ queryTraCrsBbsInfoByCrsId({
crsId: props.crsId, crsId: props.crsId,
page: page.value, page: page.value,
@@ -222,7 +238,7 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.popup { .popup {
z-index: 1200; z-index: 18000;
} }
.empty_message_div { .empty_message_div {
+8 -16
View File
@@ -37,30 +37,22 @@
:inactive-style="{ color: '#666666', 'font-size': '30rpx' }"></uv-tabs> :inactive-style="{ color: '#666666', 'font-size': '30rpx' }"></uv-tabs>
</view> </view>
</uv-sticky> </uv-sticky>
<!-- <swiper class="body-swiper" @change="swiper_change" :current="tabAct"><swiper-item> -->
<!-- <swiper class="body-swiper" @change="swiper_change" :current="tabAct">
<swiper-item> -->
<view class="course-info" v-if="tabAct == 0"> <view class="course-info" v-if="tabAct == 0">
<introduceVue v-model="form"></introduceVue> <introduceVue v-model="form"></introduceVue>
</view> </view>
<!-- </swiper-item> <!--</swiper-item><swiper-item>-->
<swiper-item> -->
<view class="point" v-if="tabAct == 1"> <view class="point" v-if="tabAct == 1">
<knowledge v-model="form" @toStudyPrgh="toStudyPrgh"></knowledge> <knowledge v-model="form" @toStudyPrgh="toStudyPrgh"></knowledge>
</view> </view>
<!-- </swiper-item> <!--</swiper-item><swiper-item>-->
<swiper-item> -->
<view class="evaluate" v-if="tabAct == 2 && form"> <view class="evaluate" v-if="tabAct == 2 && form">
<comment ref="commentRef" :crsNum="form.crsNum" :crsId="form.crsId" :imgId="form.imgId"> <comment ref="commentRef" :crsNum="form.crsNum" :crsId="form.crsId" :imgId="form.imgId">
</comment> </comment>
</view> </view>
<!-- </swiper-item> <!--</swiper-item></swiper>-->
</swiper> -->
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
<view class="btn-box btn-box-height font_pf"> <view class="btn-box btn-box-height font_pf">
<template v-if="[0,1].includes(tabAct)"> <template v-if="[0,1].includes(tabAct)">
@@ -74,9 +66,8 @@
@click="common.navigateTo('/pages/courseDetail/submit?crsNum='+crsNum+'&imgId='+form.imgId)">发布评价</uv-button> @click="common.navigateTo('/pages/courseDetail/submit?crsNum='+crsNum+'&imgId='+form.imgId)">发布评价</uv-button>
</template> </template>
</view> </view>
</view> </view>
</template> </template>
<script setup> <script setup>
@@ -171,7 +162,8 @@
onMounted(async () => { onMounted(async () => {
uni.$on('refresh_comment_data', () => { uni.$on('refresh_comment_data', () => {
commentRef.value?.getData(); console.log('发评论了刷新');
commentRef.value?.getData('submit');
tabAct.value = 2 tabAct.value = 2
}) })
}) })
@@ -315,7 +307,7 @@
.evaluate { .evaluate {
min-height: calc(100vh - 92rpx - 22rpx - 245rpx - var(--status-bar-height)); min-height: calc(100vh - 92rpx - 22rpx - 245rpx - var(--status-bar-height));
} }
.btn-box-height { .btn-box-height {
height: 187rpx; height: 187rpx;
} }
+1 -1
View File
@@ -86,7 +86,7 @@
publishCrsEvaluation(formData).then(res => { publishCrsEvaluation(formData).then(res => {
common.msg('发表成功') common.msg('发表成功')
setTimeout(() => { setTimeout(() => {
uni.$emit('setMascot') uni.$emit('refresh_comment_data')
if(from.value === 'study'){ if(from.value === 'study'){
} else { } else {
} }