合并提交

This commit is contained in:
yanghang
2025-07-09 14:17:55 +08:00
16 changed files with 387 additions and 11683 deletions
+2 -2
View File
@@ -5,9 +5,9 @@ ENV = 'development'
# base api
# 苗扬
VITE_APP_BASE_API_Url = 'http://25.64.16.133:9786'
# VITE_APP_BASE_API_Url = 'http://25.64.16.133:9786'
# VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7001'
# http://25.18.122.65:7001/download/dev-jax.apk
# app入口
#VITE_APP_BASE_API_Url = 'http://25.18.122.65:7001'
+1 -1
View File
@@ -3,4 +3,4 @@ ENV = 'production'
# base api
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002'
VITE_APP_BASE_API_Url = ''
+6
View File
@@ -0,0 +1,6 @@
# SIT环境
ENV = 'sit'
# base api
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7002'
+6
View File
@@ -0,0 +1,6 @@
# UAT环境
ENV = 'uat'
# base api
VITE_APP_BASE_API_Url = 'https://aitstest.jlbank.com.cn:7003'
-2
View File
@@ -1,5 +1,3 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
maven {url 'https://maven.aliyun.com/repository/google'}
-1
View File
@@ -62,4 +62,3 @@ dependencies {
implementation 'com.alibaba:fastjson:1.2.83'
implementation 'androidx.webkit:webkit:1.5.0'
}
+3
View File
@@ -0,0 +1,3 @@
SDK_DIR="/data/jenkins/agent/workspace/tra-app-build-test/android-sdk"
APK_ENV_PREFIX="dev"
-11379
View File
File diff suppressed because it is too large Load Diff
+8 -33
View File
@@ -3,40 +3,15 @@
"version": "0.0.1",
"description": "",
"scripts": {
"dev:custom": "uni -p",
"dev:h5": "uni",
"dev:h5:ssr": "uni --ssr",
"dev:mp-alipay": "uni -p mp-alipay",
"dev:mp-baidu": "uni -p mp-baidu",
"dev:mp-jd": "uni -p mp-jd",
"dev:mp-kuaishou": "uni -p mp-kuaishou",
"dev:mp-lark": "uni -p mp-lark",
"dev:mp-qq": "uni -p mp-qq",
"dev:mp-toutiao": "uni -p mp-toutiao",
"dev:mp-harmony": "uni -p mp-harmony",
"dev:mp-weixin": "uni -p mp-weixin",
"dev:mp-xhs": "uni -p mp-xhs",
"dev:quickapp-webview": "uni -p quickapp-webview",
"dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
"dev:quickapp-webview-union": "uni -p quickapp-webview-union",
"build:app-plus2": "cross-env vue-cli-service uni-build",
"build:custom": "uni build -p",
"dev:h5:sit": "uni -p h5 --mode sit",
"dev:h5:uat": "uni -p h5 --mode uat",
"dev:h5:production": "uni -p h5 --mode production",
"build:app-plus:dev": "uni build -p app-plus --mode development",
"build:app-plus:sit": "uni build -p app-plus --mode sit",
"build:app-plus:uat": "uni build -p app-plus --mode uat",
"build:app-plus": "uni build -p app-plus",
"build:h5": "uni build",
"build:h5:ssr": "uni build --ssr",
"build:mp-alipay": "uni build -p mp-alipay",
"build:mp-baidu": "uni build -p mp-baidu",
"build:mp-jd": "uni build -p mp-jd",
"build:mp-kuaishou": "uni build -p mp-kuaishou",
"build:mp-lark": "uni build -p mp-lark",
"build:mp-qq": "uni build -p mp-qq",
"build:mp-toutiao": "uni build -p mp-toutiao",
"build:mp-harmony": "uni build -p mp-harmony",
"build:mp-weixin": "uni build -p mp-weixin",
"build:mp-xhs": "uni build -p mp-xhs",
"build:quickapp-webview": "uni build -p quickapp-webview",
"build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
"build:quickapp-webview-union": "uni build -p quickapp-webview-union"
"build:h5": "uni build"
},
"dependencies": {
"@dcloudio/uni-app": "3.0.0-4060620250520001",
@@ -69,7 +44,7 @@
"@dcloudio/uni-stacktracey": "3.0.0-4060620250520001",
"@dcloudio/vite-plugin-uni": "3.0.0-4060620250520001",
"@vue/runtime-core": "^3.4.21",
"sass": "^1.77.8",
"sass": "^1.77.0",
"vite": "5.2.8"
}
}
+3 -3
View File
@@ -6,7 +6,7 @@ import common from '@/common/common.js'
const ENV = import.meta.env
export const get_base_url = url => {
if (process.env.NODE_ENV === 'development') { // 开发环境
if (ENV.MODE === 'development') { // 开发环境
// H5必须用非https,手机端必须用https
// #ifdef H5
const baseUrl = ENV.VITE_APP_BASE_API_Url
@@ -16,9 +16,9 @@ export const get_base_url = url => {
return baseUrl
// #endif
// #ifdef APP-PLUS
return ENV.VITE_APP_BASE_API_Url
return ENV.VITE_APP_BASE_API_Url
// #endif
} else if (process.env.NODE_ENV === 'production') { // 生产环境
} else { // 其他环境,包括生产环境,sit环境,uat环境
return ENV.VITE_APP_BASE_API_Url
}
}
+2 -2
View File
@@ -2,8 +2,8 @@
"name" : "tra-app",
"appid" : "__UNI__EDE0E52",
"description" : "",
"versionName" : "0.0.3",
"versionCode" : 3,
"versionName" : "0.0.1",
"versionCode" : 1,
"transformPx" : false,
/* 5+App */
"app-plus" : {
+226 -222
View File
@@ -6,31 +6,22 @@
<image src="/static/images/login/profile.png" class="profile"></image>
</view>
<view class="title_logo">
<image src="/static/images/login/logo_text.png" class="log_img"></image>
<image src="/static/images/login/logo_text.png" class="log_img" @click="goTest"></image>
<view class="fl1"></view>
</view>
<view class="title_text_div">
<view class="title_text font_pf">
欢迎登录
</view>
<view class="title_text font_pf">欢迎登录</view>
<image src="/static/images/login/clap.png" class="title_text_img"></image>
</view>
<view class="title_text_tip font_pf">
登录账号即可查看更多精彩咨询
</view>
<view class="title_text_tip font_pf">登录账号即可查看更多精彩咨询</view>
</view>
<view class="account_password_div">
<view class="title1 font_pf">
账号
</view>
<view class="title1 font_pf">账号</view>
<uv-input class="account_input" v-model="account" :maxlength="30" placeholder="请输入账号"></uv-input>
<view class="title2 font_pf">
密码
</view>
<uv-input class="account_input" v-model="password" :maxlength="20" placeholder="请输入密码"
:type="show_password ? 'text' : 'password'" :password-icon="true">
<view class="title2 font_pf">密码</view>
<uv-input class="account_input" v-model="password" :maxlength="20" placeholder="请输入密码" :type="show_password ? 'text' : 'password'" :password-icon="true">
<template v-slot:suffix>
<view class="show_password" @click="show_password=!show_password">
<view class="show_password" @click="show_password = !show_password">
<image v-if="show_password" class="img_100" src="@/static/images/login/show.png"></image>
<image v-else class="img_100" src="@/static/images/login/no_show.png"></image>
</view>
@@ -40,8 +31,7 @@
<view class="fl1"></view>
<view class="bottom_login_div">
<view class="" @click="login_fun">
<uv-button class="bottom_login_button" type="primary" :throttleTime="500"
:disabled="login_button_status">登录</uv-button>
<uv-button class="bottom_login_button" type="primary" :throttleTime="500" :disabled="login_button_status">登录</uv-button>
</view>
<view class="ysxy_div">
<uv-checkbox-group v-model="read_text_state">
@@ -49,53 +39,68 @@
</uv-checkbox-group>
<view class="ysxy_tip font_pf">
已阅读并同意
<span class="ysxy_term" @click="common.navigateTo('/pages/login/ysxy?page=1')">服务条款</span>
<span class="ysxy_term" @click="common.navigateTo('/pages/login/ysxy?page=2')">隐私权政策</span>
</view>
</view>
</view>
</view>
</template>
<script lang="ts" setup>
// import { v4 as uuid4 } from 'uuid'
import {onBackPress} from '@dcloudio/uni-app'
import { ref, computed, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue'
import common from '@/common/common'
import { useAccountLoginApp, queryCurrentUser } from '@/api/login.js'
import { encryptByAES } from '@/api/encryptAndDecryptData.js'
import { useSocketStore } from "@/store/socket.js"
import { storeToRefs } from 'pinia'
const socketStore = useSocketStore()
const { taskSocket } = storeToRefs(socketStore)
const show_password = ref<Boolean>(false)
const account = ref<string>('')
const password = ref<string>('')
const read_text_state = ref<Array<unknown>>([])
const back_state = ref(true)
// 登录按钮状态
const login_button_status = computed<boolean>(() => !read_text_state.value.length)
// import { v4 as uuid4 } from 'uuid'
import { onBackPress } from '@dcloudio/uni-app';
import { ref, computed, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';
import common from '@/common/common';
import { useAccountLoginApp, queryCurrentUser } from '@/api/login.js';
import { encryptByAES } from '@/api/encryptAndDecryptData.js';
// 登录方法
const login_fun = () : void => {
// 验证
if (login_button_status.value) return common.msg('请阅读并同意《隐私政策》')
if (account.value === '') return common.msg('账号不能为空')
if (password.value === '') return common.msg('密码不能为空')
try {
common.loading('登录中')
const secretKey = 'EtBzqj+ln5tSTof1SDhpTg==';
const cipherText = encryptByAES(password.value, secretKey);
useAccountLoginApp({ loginName: account.value, password: cipherText }).then(async () => {
common.hideLoading()
common.msg('登录成功')
import { useSocketStore } from '@/store/socket.js';
import { storeToRefs } from 'pinia';
const socketStore = useSocketStore();
const { taskSocket } = storeToRefs(socketStore);
const show_password = ref<Boolean>(false);
const account = ref<string>('');
const password = ref<string>('');
const read_text_state = ref<Array<unknown>>([]);
const back_state = ref(true);
// 登录按钮状态
const login_button_status = computed<boolean>(() => !read_text_state.value.length);
const clickCount = ref(0);
const lastClickTime = ref(0);
const goTest = () => {
const now = Date.now();
if (now - lastClickTime.value > 500) {
clickCount.value = 0;
}
clickCount.value++;
lastClickTime.value = now;
if (clickCount.value == 6) {
if (!account.value && password.value == '20010307' && !show_password.value) {
common.navigateTo('/pages/test/index');
}
clickCount.value = 0;
}
};
// 登录方法
const login_fun = (): void => {
// 验证
if (login_button_status.value) return common.msg('请阅读并同意《隐私政策》');
if (account.value === '') return common.msg('账号不能为空');
if (password.value === '') return common.msg('密码不能为空');
try {
common.loading('登录中');
const secretKey = 'EtBzqj+ln5tSTof1SDhpTg==';
const cipherText = encryptByAES(password.value, secretKey);
useAccountLoginApp({ loginName: account.value, password: cipherText })
.then(async () => {
common.hideLoading();
common.msg('登录成功');
// 登陆成功,缓存账号密码
common.setValue('loginAccountData', {
account: account.value,
@@ -104,187 +109,186 @@
// setTimeout(() => {
// this.$common.reLaunch('/pages/homepage/index');
// }, this.GLOBAL_TIMER_SUBMIT_DELAY_TIME);
socketStore.creatSocket()
const pages = getCurrentPages()
if (pages.length >= 2) { // 页面栈只有一页,没有返回页,那就返回首页
socketStore.creatSocket();
const pages = getCurrentPages();
if (pages.length >= 2) {
// 页面栈只有一页,没有返回页,那就返回首页
console.log('返回登录的上一页');
back_state.value = false
common.navigateBack() // 返回登录的上一页
back_state.value = false;
common.navigateBack(); // 返回登录的上一页
} else {
common.switchTab('/pages/index/index')
}
}).catch(res => {
console.log(res);
common.hideLoading()
if (res.rtnCode === "0002") {
common.msg('账号或密码错误,如忘记密码,请去统一身份认证平台修改。')
}else if (res.rtnCode !== "0005") {
common.msg('登录出错,请稍后再试')
common.switchTab('/pages/index/index');
}
})
} catch (e) {
common.hideLoading()
}
.catch((res) => {
console.log(res);
common.hideLoading();
if (res.rtnCode === '0002') {
common.msg('账号或密码错误,如忘记密码,请去统一身份认证平台修改。');
} else if (res.rtnCode !== '0005') {
common.msg('登录出错,请稍后再试');
}
});
} catch (e) {
common.hideLoading();
}
onMounted(() => {
let loginAccountData = common.getValue('loginAccountData');
if (loginAccountData) {
account.value = loginAccountData.account;
password.value = loginAccountData.password;
}
back_state.value = true
})
// 跳进了登录页,禁止返回操作
onBackPress(() => back_state.value)
};
onMounted(() => {
let loginAccountData = common.getValue('loginAccountData');
if (loginAccountData) {
account.value = loginAccountData.account;
password.value = loginAccountData.password;
}
back_state.value = true;
});
// 跳进了登录页,禁止返回操作
onBackPress(() => back_state.value);
</script>
<style lang="scss" scoped>
.bottom_login_div {
padding: 0 58rpx;
margin-bottom: 93rpx;
.bottom_login_div {
padding: 0 58rpx;
margin-bottom: 93rpx;
.ysxy_div {
margin-top: 27rpx;
display: flex;
align-items: center;
.ysxy_tip {
font-size: 23rpx;
color: #999999;
.ysxy_term {
color: #0066FF;
}
}
:deep(.uv-checkbox-group) {
flex: 0;
}
}
.bottom_login_button {
border: none;
border-radius: 16rpx;
background-color: #0066FF;
color: #FFFFFF;
overflow: hidden;
:deep(.uv-button) {
height: 100rpx;
}
}
}
.account_password_div {
padding: 0 58rpx;
z-index: 50;
.title1 {
font-size: 28rpx;
font-weight: 600;
height: 40rpx;
margin-top: 8rpx;
margin-bottom: 20rpx;
}
.title2 {
font-size: 28rpx;
font-weight: 600;
height: 40rpx;
margin-top: 54rpx;
margin-bottom: 20rpx;
}
.account_input {
height: 100rpx;
background-color: #F4F8FF;
border: none;
border-radius: 16rpx;
::v-deep .u-input__content__field-wrapper__field {
font-size: 26rpx !important;
}
.show_password {
margin-right: 6rpx;
width: 40rpx;
height: 40rpx;
}
}
}
.bg_div {
.ysxy_div {
margin-top: 27rpx;
display: flex;
flex-direction: column;
position: relative;
padding: 0 50rpx;
height: 496rpx;
// border: 1px solid red;
align-items: center;
.bg_img {
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: -1;
}
.profile_div {
position: absolute;
bottom: -96rpx;
right: 0;
width: 100%;
display: flex;
justify-content: flex-end;
z-index: 10;
.profile {
width: 328rpx;
height: 424rpx;
}
}
.title_logo {
display: flex;
margin-top: 120rpx;
.log_img {
width: 380rpx;
height: 70rpx;
}
}
.title_text_div {
display: flex;
align-items: center;
margin-top: 84rpx;
.title_text {
font-weight: 700;
font-size: 46rpx;
}
.title_text_img {
width: 48rpx;
height: 62rpx;
}
}
.title_text_tip {
margin-top: 10rpx;
font-size: 26rpx;
.ysxy_tip {
font-size: 23rpx;
color: #999999;
.ysxy_term {
color: #0066ff;
}
}
:deep(.uv-checkbox-group) {
flex: 0;
}
}
.main_div {
display: flex;
flex-direction: column;
.bottom_login_button {
border: none;
border-radius: 16rpx;
background-color: #0066ff;
color: #ffffff;
overflow: hidden;
:deep(.uv-button) {
height: 100rpx;
}
}
</style>
}
.account_password_div {
padding: 0 58rpx;
z-index: 50;
.title1 {
font-size: 28rpx;
font-weight: 600;
height: 40rpx;
margin-top: 8rpx;
margin-bottom: 20rpx;
}
.title2 {
font-size: 28rpx;
font-weight: 600;
height: 40rpx;
margin-top: 54rpx;
margin-bottom: 20rpx;
}
.account_input {
height: 100rpx;
background-color: #f4f8ff;
border: none;
border-radius: 16rpx;
::v-deep .u-input__content__field-wrapper__field {
font-size: 26rpx !important;
}
.show_password {
margin-right: 6rpx;
width: 40rpx;
height: 40rpx;
}
}
}
.bg_div {
display: flex;
flex-direction: column;
position: relative;
padding: 0 50rpx;
height: 496rpx;
// border: 1px solid red;
.bg_img {
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: -1;
}
.profile_div {
position: absolute;
bottom: -96rpx;
right: 0;
width: 100%;
display: flex;
justify-content: flex-end;
z-index: 10;
.profile {
width: 328rpx;
height: 424rpx;
}
}
.title_logo {
display: flex;
margin-top: 120rpx;
.log_img {
width: 380rpx;
height: 70rpx;
}
}
.title_text_div {
display: flex;
align-items: center;
margin-top: 84rpx;
.title_text {
font-weight: 700;
font-size: 46rpx;
}
.title_text_img {
width: 48rpx;
height: 62rpx;
}
}
.title_text_tip {
margin-top: 10rpx;
font-size: 26rpx;
color: #999999;
}
}
.main_div {
display: flex;
flex-direction: column;
}
</style>
-12
View File
@@ -169,18 +169,6 @@
background-color: #F6F8FF;
}
// .detail-body {
// box-sizing: border-box;
// min-height: calc(100vh - (var(--status-bar-height)+50rpx));
// // padding: 29rpx 37rpx;
// width: 100%;
// display: flex;
// flex-direction: column;
// padding-top: 0rpx;
// }
.title {
color: #000000;
font-size: 34rpx;
+46
View File
@@ -0,0 +1,46 @@
<template>
<view class="max_page detail-main" style="overflow: hidden">
<nav-bar :is_seat="false"></nav-bar>
<view class="cell_div">
<uv-cell-group>
<uv-cell title="根域名" :value="url" ></uv-cell>
<uv-cell title="版本号" ></uv-cell>
<uv-cell title="版本名称" ></uv-cell>
<uv-cell title="当前环境:" :value="ENV.MODE"></uv-cell>
<!-- <uv-cell title="竞赛记录" :clickable="false" :border="false"></uv-cell> -->
</uv-cell-group>
</view>
</view>
</template>
<script setup>
import { reactive, ref } from 'vue';
import { onLoad, onShow } from '@dcloudio/uni-app';
import common from '@/common/common';
import { get_base_url } from '../../api/request';
const url = get_base_url();
const ENV = import.meta.env
</script>
<style lang="scss" scoped>
$bg-margin-left: 50rpx;
// 下方单元格
.cell_div {
margin: 30rpx $bg-margin-left 0 $bg-margin-left;
background: #ffffff;
border-radius: 15rpx;
z-index: 101;
overflow: hidden;
// 为了让线缩进来24单位
:deep(.uv-line) {
width: calc(100% - 48rpx) !important;
margin: 0 24rpx !important;
}
:deep(.uv-cell__body) {
padding: 12px 15px;
}
}
</style>
+84 -26
View File
@@ -1,45 +1,103 @@
<template>
<view class="max_page detail-main" style="overflow: hidden">
<view class="max_page detail-main">
<nav-bar :is_seat="false"></nav-bar>
<view class="cell_div">
<uv-cell-group>
<view class="fixed_search_div">
<view class="back_div" @click="common.navigateBack()">
<view class="back-icon"></view>
</view>
<view class="title font_pf">系统参数</view>
</view>
<view class="detail-body">
<uv-cell-group :border="false">
<uv-cell title="根域名" :value="url" ></uv-cell>
<uv-cell title="版本" ></uv-cell>
<uv-cell title="版本名称" ></uv-cell>
<uv-cell title="当前环境NODE_ENV" :value="env"></uv-cell>
<!-- <uv-cell title="竞赛记录" :clickable="false" :border="false"></uv-cell> -->
<uv-cell title="版本名称" :value="appBaseInfo.appVersion"></uv-cell>
<uv-cell title="版本" :value="appBaseInfo.appVersionCode"></uv-cell>
<uv-cell title="当前环境:" :value="ENV.MODE" :border="false"></uv-cell>
</uv-cell-group>
</view>
</view>
</template>
<script setup>
import { reactive, ref } from 'vue';
import { onLoad, onShow } from '@dcloudio/uni-app';
import common from '@/common/common';
import { get_base_url } from '../../api/request';
const url = get_base_url();
const env = process.env.NODE_ENV;
const ENV = import.meta.env
const appBaseInfo = uni.getAppBaseInfo()
</script>
<style lang="scss" scoped>
$bg-margin-left: 50rpx;
// 下方单元格
.cell_div {
margin: 30rpx $bg-margin-left 0 $bg-margin-left;
background: #ffffff;
border-radius: 15rpx;
z-index: 101;
overflow: hidden;
$bg-margin-left: 50rpx;
// 为了让线缩进来24单位
:deep(.uv-line) {
width: calc(100% - 48rpx) !important;
margin: 0 24rpx !important;
.detail-body {
margin: 30rpx $bg-margin-left 0 $bg-margin-left;
background: #ffffff;
border-radius: 15rpx;
z-index: 101;
overflow: hidden;
// 为了让线缩进来24单位
:deep(.uv-line) {
width: calc(100% - 48rpx) !important;
margin: 0 24rpx !important;
}
:deep(.uv-cell__body) {
padding: 12px 15px;
}
:deep(.uv-cell__title) {
flex: none !important;
}
}
:deep(.uv-cell__body) {
padding: 12px 15px;
.detail-main {
background-color: #F6F8FF;
}
}
</style>
.title {
color: #000000;
font-size: 34rpx;
height: 34rpx;
font-weight: 600;
// margin-bottom: 30rpx;
line-height: 34rpx;
}
.fixed_search_div {
padding: calc(10rpx + var(--status-bar-height)) 15rpx 24rpx 30rpx;
display: flex;
align-items: center;
background-color: #f6f7f8;
.back_div {
margin-right: 10rpx;
.back-icon {
position: relative;
width: 40rpx;
height: 40rpx;
cursor: pointer;
display: flex;
align-items: center;
}
.back-icon::before,
.back-icon::after {
content: '';
position: absolute;
transition: all 0.3s ease;
}
.back-icon::after {
top: 25%;
left: 25%;
width: 40%;
height: 40%;
border-top: 4rpx solid #2b2c2e;
border-left: 4rpx solid #2b2c2e;
transform: rotate(-45deg);
}
}
}
</style>
BIN
View File
Binary file not shown.