Merge branch 'develop' of http://25.13.9.101:9000/K17_AITS/tra-app into develop
This commit is contained in:
@@ -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.
@@ -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。
|
||||||
@@ -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.
@@ -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.
Executable → Regular
+58
-46
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user