代码完善

This commit is contained in:
BianLzhaoMin 2025-09-03 09:25:57 +08:00
parent be91de996e
commit bd19e3fc5f
34 changed files with 433 additions and 148 deletions

View File

@ -1,4 +1,4 @@
# VITE_API_BASE_URL = http://112.29.103.165:1616
# VITE_API_BASE_URL = /api
VITE_API_BASE_URL = http://192.168.0.14:1999/hd-realname/prod-api
VITE_API_BASE_URL = /api
# VITE_API_BASE_URL = http://192.168.0.14:1999/hd-realname/prod-api
# VITE_API_BASE_URL = http://192.168.0.234:38080

View File

@ -46,10 +46,13 @@
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
"<uses-permission android:name=\"android.permission.INTERNET\"/>"
"<uses-permission android:name=\"android.permission.INTERNET\"/>",
"<uses-permission android:name=\"android.permission.READ_MEDIA_IMAGES\" />",
"<uses-permission android:name=\"android.permission.READ_MEDIA_VIDEO\" />"
],
"minSdkVersion" : 24,
"abiFilters" : [ "armeabi-v7a" ]
"targetSdkVersion" : 33,
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86_64" ]
},
"webview" : {
"allowFileAccess" : true,

View File

@ -197,8 +197,8 @@
{
"pagePath": "pages/attendance/index",
"text": "考勤",
"iconPath": "static/image/home.png",
"selectedIconPath": "static/image/home-active.png"
"iconPath": "static/image/attendance.png",
"selectedIconPath": "static/image/attendance-active.png"
},
{
"pagePath": "pages/my/index",

View File

@ -3,60 +3,113 @@
<view class="contract-details">
<view> 合同见证照片 </view>
<view class="contract-image">
<view class="contract-image-item" v-for="item in 5" :key="item">
<view
:key="item.id"
class="contract-image-item"
v-for="(item, index) in contractInfo?.files"
>
<up-image
src="https://cdn.uviewui.com/uview/album/1.jpg"
height="100px"
:width="'calc((100% - 40rpx) / 5)' + 'px'"
:src="item.lsUrl"
mode="scaleToFill"
@tap="onTapViewImage(index)"
:width="'calc((100% - 40rpx) / 5)' + 'px'"
/>
<text> 工作内容页 </text>
<text> {{ contractFileTitle[item.sourceType] }} </text>
</view>
</view>
<view class="contract-content">
<view v-for="item in contractContent" :key="item.title" class="contract-content-item">
<text>{{ item.title }}</text>
<text>{{ item.content }}</text>
<text>{{ contractInfo[item.contentKey] || '-' }}</text>
</view>
</view>
</view>
</template>
<script setup name="ContractDetails">
import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue'
const contractInfo = ref({})
const contractFileTitle = {
1: '人员手持合同照',
2: '工作内容页',
3: '薪酬约定页',
4: '本人签名页',
5: '其他照片',
}
const contractContent = [
{
title: '合同编号',
content: '1234567890',
contentKey: 'contractCode',
},
{
title: '合同期限类型',
content: '长期',
contentKey: 'contractTermType',
},
{
title: '合同签订日期',
content: '2021-01-01',
contentKey: 'contractStartDate',
},
{
title: '合同终止日期',
content: '2021-01-01',
contentKey: 'contractStopDate',
},
{
title: '工资核定方式',
content: '2021-01-01',
contentKey: 'wageApprovedWay',
},
{
title: '工资核定标准',
content: '2021-01-01',
contentKey: 'wageCriterion',
},
{
title: '合同类型',
content: '2021-01-01',
contentKey: 'contractType',
},
]
const onTapViewImage = (index) => {
uni.previewImage({
loop: true,
current: index,
urls: contractInfo.value.files.map((item) => item.lsUrl),
})
}
onLoad(() => {
const app = getApp()
const contractParams = app.globalData.contractParams
if (contractParams) {
const {
files,
contractCode,
wageCriterion,
wageApprovedWay,
contractStopDate,
contractTermType,
contractStartDate,
} = contractParams
contractInfo.value = {
files,
contractCode,
wageCriterion,
wageApprovedWay,
contractTermType,
contractStopDate,
contractStartDate,
contractType: '纸质合同',
}
}
})
</script>
<style lang="scss" scoped>
@ -83,7 +136,9 @@ const contractContent = [
flex-direction: column;
text {
margin-top: 10rpx;
font-size: 12px;
text-align: center;
}
}

View File

@ -3,44 +3,82 @@
<view class="wage-card-details">
<view> 工资卡见证照片 </view>
<view class="wage-card-image">
<view class="wage-card-image-item" v-for="item in 4" :key="item">
<view
:key="item.id"
class="wage-card-image-item"
v-for="(item, index) in wageCardInfo?.files"
>
<up-image
src="https://cdn.uviewui.com/uview/album/1.jpg"
:src="item.lsUrl"
height="100px"
:width="'calc((100% - 40rpx) / 5)' + 'px'"
mode="scaleToFill"
@tap="onTapViewImage(index)"
:width="'calc((100% - 40rpx) / 4)' + 'px'"
/>
<text> 工作内容页 </text>
<text> {{ wageCardFileTitle[item.sourceType] }} </text>
</view>
</view>
<view class="wage-card-content">
<view v-for="item in wageCardContent" :key="item.title" class="wage-card-content-item">
<text>{{ item.title }}</text>
<text>{{ item.content }}</text>
<text>{{ wageCardInfo[item.contentKey] || '-' }}</text>
</view>
</view>
</view>
</template>
<script setup name="WageCardDetails">
import { onLoad } from '@dcloudio/uni-app'
import { ref } from 'vue'
const wageCardInfo = ref({})
const wageCardFileTitle = {
1: '手持银行卡、承诺书',
2: '银行卡照片',
3: '个人工资卡承诺书',
4: '其它照片',
}
const wageCardContent = [
{
title: '银行卡号',
content: '1234567890',
contentKey: 'bankCardCode',
},
{
title: '银行名称',
content: '中国银行',
contentKey: 'bankName',
},
{
title: '支行名称',
content: '中国银行',
contentKey: 'bankBranchName',
},
]
const onTapViewImage = (index) => {
uni.previewImage({
loop: true,
current: index,
urls: wageCardInfo.value.files.map((item) => item.lsUrl),
})
}
onLoad(() => {
const app = getApp()
const contractParams = app.globalData.contractParams
if (contractParams) {
const { wageFiles, bankName, bankCardCode, bankBranchName } = contractParams
wageCardInfo.value = {
bankName,
bankCardCode,
bankBranchName,
files: wageFiles,
}
}
})
</script>
<style lang="scss" scoped>
@ -67,7 +105,9 @@ const wageCardContent = [
flex-direction: column;
text {
margin-top: 10rpx;
font-size: 12px;
text-align: center;
}
}

View File

@ -25,9 +25,9 @@
<up-input
clearable
prefixIcon="account"
class="custom-input"
placeholder="请输入用户名"
v-model="opinionModel.username"
class="custom-input"
/>
</up-form-item>
@ -36,10 +36,10 @@
<up-input
clearable
prefixIcon="lock"
class="custom-input"
placeholder="请输入密码"
:password="!showPassword"
v-model="opinionModel.password"
class="custom-input"
>
<template #suffix>
<!-- <u-icon
@ -65,10 +65,10 @@
<view style="width: 35%" class="img-content" ref="imgContentRef">
<up-image
:src="codeUrl"
mode="scaleToFill"
@tap="onHandleCodeImg"
:width="imgWidth + 'px'"
:height="imgHeight + 'px'"
mode="scaleToFill"
/>
</view>
</up-form-item>
@ -77,10 +77,11 @@
<up-form-item prop="remember" class="remember-item">
<up-checkbox
usedAlone
size="16"
name="agree"
iconSize="14"
label="记住密码"
v-model:checked="remember"
iconSize="14"
>
</up-checkbox>
</up-form-item>
@ -88,12 +89,12 @@
<!-- 登录按钮 -->
<up-form-item class="login-btn-item">
<up-button
type="primary"
text="登录"
@tap="onSubmitLogin"
type="primary"
shape="circle"
color="linear-gradient(135deg, #2979ff, #5e35b1)"
class="login-btn"
@tap="onSubmitLogin"
color="linear-gradient(135deg, #2979ff, #5e35b1)"
/>
</up-form-item>
</up-form>

View File

@ -64,11 +64,11 @@
v-model="editPasswordAgainModel.newPassword"
>
<template #suffix>
<u-icon
<!-- <u-icon
:name="!showPassword_2 ? 'eye-fill' : 'eye'"
@tap="showPassword_2 = !showPassword_2"
size="20"
/>
/> -->
</template>
</up-input>
</up-form-item>
@ -81,11 +81,11 @@
v-model="editPasswordAgainModel.newPasswordAgain"
>
<template #suffix>
<u-icon
<!-- <u-icon
:name="!showPassword_3 ? 'eye-fill' : 'eye'"
@tap="showPassword_3 = !showPassword_3"
size="20"
/>
/> -->
</template>
</up-input>
</up-form-item>
@ -245,7 +245,9 @@ const onHandleSubmit = () => {
//
const editParams = {
password: editPasswordAgainModel.value.newPassword,
id: memberStore.userInfo.id,
phonenumber: editPasswordModel.value.username,
oldPassword: editPasswordModel.value.oldPassword,
// id: memberStore.userInfo.id,
}
console.log(
'%c🔍 修改密码请求入参 %c',

View File

@ -1,93 +1,132 @@
<template>
<!-- 人员资质查询 -->
<view class="aptitude-query">
<view class="taps-container">
<view class="aptitude-query app-container">
<!-- <view class="taps-container">
<view :class="{ active: activeName === '姓名' }" @tap="activeName = '姓名'">
姓名
</view>
<view :class="{ active: activeName === '组织' }" @tap="activeName = '组织'">
组织
</view>
</view>
</view> -->
<view class="search-container" v-if="activeName === '姓名'">
<view class="search-container">
<up-search
bgColor="#fff"
placeholder="请输入"
v-model="nameValue"
:show-action="false"
borderColor="#3c9cff"
@search="onSearchName"
searchIconColor="#3c9cff"
@clickIcon="onSearchName"
v-model="queryParams.workerName"
/>
</view>
<view class="list-container" v-if="activeName === '姓名'">
<view class="list-item" v-for="item in 10" :key="item" @tap="onPersonDetails(item)">
<scroll-view
scroll-y
v-if="total > 0"
class="list-container"
@scrolltolower="onHandleScrollToLower"
>
<view
class="list-item"
v-for="item in personList"
:key="item.workerId"
@tap="onPersonDetails(item)"
>
<view>
<text>姓名</text>
<text>李思思</text>
<text>{{ item.workerName }}</text>
</view>
<view>
<text>身份证</text>
<text>李思思</text>
<text>{{ item.idNumber }}</text>
</view>
<view>
<text>工种</text>
<text>李思思</text>
<text>{{ item.postName }}</text>
</view>
</view>
<view class="loading-text">
{{ !hasMore ? '没有更多数据了~' : '正在加载...' }}
</view>
</scroll-view>
<view v-if="total === 0" class="empty-content">
<up-empty :icon="Empty" />
</view>
<view v-if="activeName === '组织'">
<!-- <view v-if="activeName === '组织'">
<u-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick" />
</view>
</view> -->
</view>
</template>
<script setup name="AptitudeQuery">
import { ref } from 'vue'
import { onMounted, ref, computed } from 'vue'
import { getAttendanceRecordAPI } from '@/services/attendance.js'
import { useCommonStore } from '@/stores'
import { debounce } from 'lodash-es'
import Empty from '@/static/image/Empty.png'
const activeName = ref('姓名')
const nameValue = ref('')
const personList = ref([])
const total = ref(0)
const commonStore = useCommonStore() //
const defaultProps = {
children: 'children',
label: 'label',
nodeKey: 'id',
const queryParams = ref({
pageNum: 1,
pageSize: 12,
workerName: '',
proName: commonStore?.activeProjectName,
})
//
const getPersonList = async () => {
const res = await getAttendanceRecordAPI(queryParams.value)
total.value = res?.total
personList.value = [...personList.value, ...res?.rows]
}
const treeData = ref([
{
id: 1,
label: '一级 1',
children: [
{
id: 2,
label: '二级 1-1',
children: [
{ id: 3, label: '三级 1-1-1' },
{ id: 4, label: '三级 1-1-2' },
],
},
],
},
])
//
const onHandleScrollToLower = debounce(() => {
if (hasMore.value) {
queryParams.value.pageNum++
getPersonList()
}
}, 1000)
const onSearchName = () => {
queryParams.value.pageNum = 1
personList.value = []
getPersonList()
}
//
const hasMore = computed(() => {
return personList.value.length < total.value
})
//
const onPersonDetails = (item) => {
uni.navigateTo({
url: `/pages/person-details/index?id=${item.id}`,
url: `/pages/person-details/index?id=${item.workerId}`,
})
}
onMounted(() => {
getPersonList()
})
</script>
<style scoped lang="scss">
.aptitude-query {
height: 100%;
display: flex;
padding: 20rpx;
box-sizing: border-box;
flex-direction: column;
// height: 100%;
// display: flex;
// padding: 20rpx;
// box-sizing: border-box;
// flex-direction: column;
background-color: #fff;
}
.taps-container {

View File

@ -3,19 +3,11 @@
<view class="person-check">
<view class="person-check-item">
<view @tap="onFaceRecognition">
<up-image
width="80px"
height="80px"
src="https://cdn.uviewui.com/uview/album/1.jpg"
/>
<up-image width="60px" height="60px" :src="FaceIcon" />
<text>人脸识别</text>
</view>
<view @tap="onPersonCheck">
<up-image
width="80px"
height="80px"
src="https://cdn.uviewui.com/uview/album/1.jpg"
/>
<up-image width="60px" height="60px" :src="CheckIcon" />
<text>人员资质查询</text>
</view>
</view>
@ -24,9 +16,11 @@
<script setup name="PersonCheck">
import { ref } from 'vue'
import FaceIcon from '@/static/image/face.png'
import CheckIcon from '@/static/image/person-qua.png'
const onFaceRecognition = () => {
uni.$u.toast('功能正在开发中,敬请期待...')
// uni.$u.toast('...')
// console.log('onFaceRecognition')
//
@ -36,6 +30,21 @@ const onFaceRecognition = () => {
// console.log(result)
// },
// })
uni.chooseImage({
count: 1, // 1
sizeType: ['original', 'compressed'],
sourceType: ['camera', 'album'], //
success: (res) => {
console.log(res, '----选取的文件')
},
fail: (err) => {
uni.$u.toast({
title: '选择图片失败',
icon: 'none',
})
},
})
}
//

View File

@ -5,17 +5,17 @@
<view class="person-info">
<view class="person-info-left">
<up-image
src="https://cdn.uviewui.com/uview/album/1.jpg"
width="100px"
height="140px"
mode="scaleToFill"
:src="personDetails?.facePhoto"
/>
</view>
<view class="person-info-right">
<view class="name">
<text>李思思</text>
<text class="ellipsis-text">{{ personDetails?.name }}</text>
<text :style="{ color: initColor }">
{{ statusName }}
{{ initLightStatus }}
</text>
<up-icon
size="16"
@ -25,13 +25,14 @@
name="question-circle-fill"
/>
</view>
<view class="job"> 高空作业人员 </view>
<view class="company"> xxxj建设有限公司 </view>
<view class="project"> 66332g工程66332g工程66332g工程66332g工程 </view>
<view class="job"> {{ personDetails?.postName }} </view>
<view class="company"> {{ personDetails?.proName }} </view>
<view class="project"> {{ personDetails?.subName }} </view>
<view class="project"> {{ personDetails?.teamName }} </view>
</view>
<view class="status-light">
<up-image :src="YellowLight" width="60px" height="60px" mode="scaleToFill" />
</view>
<view class="status-light">
<up-image :src="initLightImage" width="60px" height="60px" mode="scaleToFill" />
</view>
</view>
<TitleTipModal TitleTip="今日考勤" />
@ -39,63 +40,97 @@
<view class="att-content">
<view>
<text> 打卡时间 </text>
<text>10:00:00</text>
<text>{{ todayAttTime || '无' }}</text>
</view>
<view class="info-card" :class="todayAttTime ? 'success-card' : 'error-card'">
{{ todayAttTime ? '已打卡' : '未打卡' }}
</view>
<view class="info-card success-card"> 已打卡 </view>
</view>
</view>
<TitleTipModal TitleTip="合同信息" />
<view class="attendance-info">
<view class="att-content" @click="onContractDetails">
<view class="info-item">
<up-icon size="24" name="checkmark-circle-fill" color="#4cd964" />
<up-icon
size="24"
:name="
lightStatusList[1]?.value == '1'
? 'checkmark-circle-fill'
: 'close-circle-fill'
"
:color="initContractColor"
/>
<text>纸质合同</text>
</view>
<view class="info-card success-card"> 已签订 </view>
<view
class="info-card"
:class="lightStatusList[1]?.value == '1' ? 'success-card' : 'error-card'"
>
{{ lightStatusList[1]?.value == '1' ? '已签订' : '未签订' }}
</view>
</view>
</view>
<TitleTipModal TitleTip="工资卡信息" />
<view class="attendance-info">
<view class="att-content" @click="onWageCardDetails">
<view class="info-item">
<up-icon size="24" name="close-circle-fill" color="#dd524d" />
<up-icon
size="24"
:name="
lightStatusList[0]?.value == '1'
? 'checkmark-circle-fill'
: 'close-circle-fill'
"
:color="initWageCardColor"
/>
<text>工资卡见证</text>
</view>
<view class="info-card error-card"> 未签订 </view>
<view
class="info-card"
:class="lightStatusList[0]?.value == '1' ? 'success-card' : 'error-card'"
>
{{ lightStatusList[0]?.value == '1' ? '已上传' : '未上传' }}
</view>
</view>
</view>
<!-- 红绿灯说明 -->
<up-popup
mode="center"
@open="onOpen"
@close="onClose"
:show="redLightShow"
closeOnClickOverlay
>
<view class="red-light-popup">
<view class="title"> 红绿灯说明 </view>
<view class="red-light-content">
<view
:class="lightStatusList[1]?.value == '1' ? 'green-light' : 'yellow-light'"
>
<text>
{{ lightStatusList[1]?.value == '1' ? '绿灯' : '黄灯' }}
</text>
<text>
{{
lightStatusList[1]?.value == '1'
? '合同和工资卡已上传'
: '合同或工资卡未上传'
}}
</text>
</view>
</view>
<up-icon
color="#fff"
size="20"
class="close-icon"
name="close-circle"
@click="onClose"
/>
</view>
</up-popup>
</view>
<!-- 红绿灯说明 -->
<up-popup
mode="center"
@open="onOpen"
@close="onClose"
:show="redLightShow"
closeOnClickOverlay
>
<view class="red-light-popup">
<view class="title"> 红绿灯说明 </view>
<view class="red-light-content">
<view class="yellow-light">
<text>黄灯</text>
<text>合同或工资卡未上传</text>
</view>
<view class="green-light">
<text>绿灯</text>
<text>合同和工资卡已上传</text>
</view>
</view>
<up-icon
color="#fff"
size="20"
class="close-icon"
name="close-circle"
@click="onClose"
/>
</view>
</up-popup>
</template>
<script setup name="PersonDetails">
@ -103,13 +138,41 @@ import { ref, computed } from 'vue'
import TitleTipModal from '@/components/TitleTipModal/index'
import GreenLight from '@/static/image/person/green_light.png'
import YellowLight from '@/static/image/person/yellow_light.png'
import { getPersonDetailsByIdAPI, getPersonContractAndWageCardAPI } from '@/services/attendance.js'
import { onLoad } from '@dcloudio/uni-app'
import dayjs from 'dayjs'
const statusName = ref('黄灯')
const redLightShow = ref(false)
const todayAttTime = ref(null)
const personDetails = ref({})
const personDetailsAll = ref({})
const lightStatusList = ref([])
const initColor = computed(() => {
if (statusName.value === '黄灯') return '#f4c622'
if (statusName.value === '绿灯') return '#00ff00'
if (personDetails.value.lightStatus == 1) return '#f4c622'
if (personDetails.value.lightStatus == 2) return '#00ff00'
})
const initLightStatus = computed(() => {
if (personDetails.value.lightStatus == 1) return '黄灯'
if (personDetails.value.lightStatus == 2) return '绿灯'
})
const initLightImage = computed(() => {
if (personDetails.value.lightStatus == 1) return YellowLight
if (personDetails.value.lightStatus == 2) return GreenLight
})
const initContractColor = computed(() => {
if (lightStatusList.value[1]?.value == '1') return '#4cd964'
if (lightStatusList.value[1]?.value == '0') return '#dd524d'
})
const initWageCardColor = computed(() => {
if (lightStatusList.value[0]?.value == '1') return '#4cd964'
if (lightStatusList.value[0]?.value == '0') return '#dd524d'
})
const onClose = () => {
@ -121,16 +184,65 @@ const onOpen = () => {
}
const onContractDetails = () => {
if (lightStatusList.value[1]?.value == 0) {
uni.$u.toast('请先签订合同')
return
}
const app = getApp()
app.globalData.contractParams = personDetailsAll.value
uni.navigateTo({
url: '/pages/ContractDetails/index',
})
}
const onWageCardDetails = () => {
if (lightStatusList.value[0]?.value == 0) {
uni.$u.toast('请先上传工资卡')
return
}
const app = getApp()
app.globalData.contractParams = personDetailsAll.value
uni.navigateTo({
url: '/pages/WageCardDetails/index',
url: `/pages/WageCardDetails/index?params=${JSON.stringify(personDetailsAll.value)}`,
})
}
//
const getPersonDetailsByIdFun = async (id) => {
const res = await getPersonDetailsByIdAPI({ id })
const { name, lightStatus, postName, subName, teamName, proName, facePhoto, attTime } = res.data
personDetailsAll.value = res.data
personDetails.value = {
name,
postName,
subName,
teamName,
proName,
facePhoto,
lightStatus,
}
const result = await getPersonContractAndWageCardAPI({ id })
lightStatusList.value = result?.data
const date = attTime?.split(' ')[0] || null
const time = attTime?.split(' ')[1] || null
//
const isToday = dayjs(date).format('YYYY-MM-DD') === dayjs().format('YYYY-MM-DD')
if (isToday) {
todayAttTime.value = time
}
}
onLoad((options) => {
if (options?.id) {
getPersonDetailsByIdFun(options?.id)
}
})
</script>
<style scoped lang="scss">
@ -143,6 +255,7 @@ const onWageCardDetails = () => {
}
.person-info {
width: 100%;
margin: 20rpx 0;
padding: 20rpx;
display: flex;
@ -190,13 +303,13 @@ const onWageCardDetails = () => {
letter-spacing: 2rpx;
font-weight: 500;
}
}
.status-light {
position: absolute;
right: 20rpx;
top: 0;
border-radius: 50%;
}
.status-light {
position: absolute;
right: 20rpx;
top: 140rpx;
border-radius: 50%;
}
.attendance-info {
@ -233,7 +346,7 @@ const onWageCardDetails = () => {
.red-light-popup {
width: 80vw;
height: 36vh;
height: 28vh;
display: flex;
flex-direction: column;
position: relative;

View File

@ -8,3 +8,19 @@ export const getAttendanceRecordAPI = (data) => {
data,
})
}
// 考勤页面 获取人员详情接口
export const getPersonDetailsByIdAPI = (data) => {
return http({
method: 'GET',
url: '/bmw/homePageSub/getWorkerMsgById',
data,
})
}
// 考勤页面 获取人员合同工资卡信息接口
export const getPersonContractAndWageCardAPI = (data) => {
return http({
method: 'GET',
url: '/bmw/homePageSub/getWorkerLightMsg',
data,
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
src/static/image/face.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@ -34,3 +34,10 @@
justify-content: center;
height: 100%;
}
.ellipsis-text {
width: 30%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 857 B

After

Width:  |  Height:  |  Size: 699 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -10,8 +10,8 @@ export default defineConfig({
'/api': {
// target: 'http://112.29.103.165:1616', // 测试环境
// target: 'http://192.168.0.133:58080', // 梁超
// target: 'http://192.168.0.14:1999/hd-realname/prod-api', // 测试环境
target: 'http://192.168.0.234:38080', // 方亮
target: 'http://192.168.0.14:1999/hd-realname/prod-api', // 测试环境
// target: 'http://192.168.0.234:38080', // 方亮
changeOrigin: true,
rewrite: (path) => {
return path.replace(/\/api/, '')