Compare commits

..

2 Commits

Author SHA1 Message Date
Teo
c069b53636 新增go服务token 2025-07-29 16:24:08 +08:00
7e7e51853d 施工人员添加 2025-07-29 11:33:17 +08:00
11 changed files with 1429 additions and 12 deletions

View File

@ -6,6 +6,9 @@ VITE_APP_ENV = 'development'
# 开发环境
VITE_APP_BASE_API = 'http://192.168.110.119:8899'
# VITE_APP_BASE_API = 'http://58.17.134.85:8899'
# GO开发环境
VITE_APP_BASE_API_GO = 'http://192.168.110.159:8919'
# 无人机接口地址

View File

@ -2,6 +2,7 @@ import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { LoginData, LoginResult, TenantInfo, UserProject, VerifyCodeResult } from './types';
import { UserInfo } from '@/api/system/user/types';
import requestGo from '@/utils/request-go';
// pc端固定客户端授权id
const clientId = import.meta.env.VITE_APP_CLIENT_ID;
@ -119,3 +120,17 @@ export function getUserProject(): AxiosPromise<UserProject[]> {
method: 'get'
});
}
//获取Go服务Token
export function getGoToken(): AxiosPromise<any> {
return requestGo({
url: '/zm/api/v1/system/login',
method: 'post',
data: {
status: 'yjdsj',
verifyCode: '1111',
username: 'admin',
password: 'zmkg@2023A'
}
});
}

View File

@ -1,8 +1,8 @@
import request from '@/utils/request';
// import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { LeaveVO, LeaveForm, LeaveQuery } from '@/api/project/leave/types';
import { AuditReissueCardForm } from '../reissueCard/types';
import request from '@/utils/request-go';
/**
* 查询施工人员请假申请列表
* @param query
@ -11,7 +11,7 @@ import { AuditReissueCardForm } from '../reissueCard/types';
export const listLeave = (query?: LeaveQuery): AxiosPromise<LeaveVO[]> => {
return request({
url: '/project/leave/list',
url: '/zm/api/v1/system/busAskforleave/list',
method: 'get',
params: query
});

View File

@ -115,6 +115,7 @@ export const useUserStore = defineStore('user', () => {
roles.value = [];
permissions.value = [];
removeToken();
$cache.local.remove('goToken'); // 清除Go服务Token缓存
// 清除项目缓存
$cache.local.remove('selectedProject');
$cache.local.remove('ProjectTeamList');

19
src/utils/request-go.ts Normal file
View File

@ -0,0 +1,19 @@
import $cache from '@/plugins/cache';
// src/utils/request-go.ts
import request from '@/utils/request';
const BASE_GO_URL = import.meta.env.VITE_APP_BASE_API_GO;
/**
* 包装 request 请求,统一使用 Go 服务地址作为 baseURL
* @param config 原始请求配置
*/
export default function requestGo(config: any) {
return request({
baseURL: BASE_GO_URL,
...config,
headers: {
'Authorization': `Bearer ${$cache.local.get('goToken') || ''}`
}
});
}

View File

@ -45,7 +45,7 @@ service.interceptors.request.use(
// 是否需要加密
const isEncrypt = config.headers?.isEncrypt === 'true';
if (getToken() && !isToken) {
if (getToken() && !isToken && !config.headers?.Authorization) {
config.headers['Authorization'] = 'Bearer ' + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
}
// get请求映射params参数

View File

@ -79,7 +79,7 @@
</template>
<script setup lang="ts">
import { getCodeImg, getTenantList } from '@/api/login';
import { getCodeImg, getGoToken, getTenantList } from '@/api/login';
import { authBinding } from '@/api/system/social/auth';
import { useUserStore } from '@/store/modules/user';
import { LoginData, TenantVO } from '@/api/types';
@ -151,8 +151,12 @@ const handleLogin = () => {
// 调用action的登录方法
const [err] = await to(userStore.login(loginForm.value));
if (!err) {
//获取Go服务Token保存本地
const goToken = await getGoToken();
proxy.$cache.local.set('goToken', goToken.data.token);
const redirectUrl = redirect.value || '/';
await router.push(redirectUrl);
loading.value = false;
} else {
loading.value = false;

View File

@ -63,7 +63,7 @@
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="序号" align="center" type="index" width="50" />
<el-table-column label="申请人" align="center" prop="userName" />
<el-table-column label="申请请假说明" align="center" prop="userExplain" />
<el-table-column label="申请请假说明" align="center" prop="argument" />
<!-- <el-table-column label="请假申请时间" align="center" prop="userTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.userTime, '{y}-{m}-{d}') }}</span>
@ -74,9 +74,9 @@
<dict-tag :options="user_leave_type" :value="scope.row.teamName" />
</template>
</el-table-column>
<el-table-column label="状态" align="center" prop="status">
<el-table-column label="状态" align="center" prop="cardNumber">
<template #default="scope">
<dict-tag :options="user_review_status_type" :value="scope.row.status" />
<dict-tag :options="user_review_status_type" :value="scope.row.cardNumber" />
</template>
</el-table-column>
<!-- <el-table-column label="班组长意见" align="center" prop="gangerOpinion">
@ -189,7 +189,7 @@
</el-step>
<el-step title="结果" :status="resultsStatus">
<template #description>
<div>{{ user_review_status_type[parseInt(detailObj.status) - 1].label }}</div>
<div>{{ user_review_status_type[parseInt(detailObj.cardNumber) - 1].label }}</div>
</template>
</el-step>
</el-steps>
@ -346,8 +346,8 @@ const resultsStatus = computed(() => {
const getList = async () => {
loading.value = true;
const res = await listLeave(queryParams.value);
leaveList.value = res.rows;
total.value = res.total;
leaveList.value = res.data.list;
total.value = res.data.total;
loading.value = false;
};

View File

@ -0,0 +1,188 @@
<template>
<div>
<div class="block_box">
<span>用户信息</span>
<el-form label-width="130px">
<el-row :gutter="20" justify="space-around">
<el-col :span="12">
<el-form-item label="人脸照">
<el-image :src="userDetail?.facePicUrl" style="width: 150px; height: 150px" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓名">
{{ userDetail?.userName }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话">
{{ userDetail?.phone }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别">
<dict-tag :options="user_sex_type" :value="userDetail?.sex" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年龄">
{{ dayjs().diff(dayjs(userDetail?.sfzBirth), 'year') }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="民族">
{{ userDetail?.nation }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="籍贯">
{{ userDetail?.nativePlace }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号码">
{{ userDetail?.sfzNumber }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号码">
{{ userDetail?.sfzNumber }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证有效开始期">
{{ dayjs(userDetail?.sfzStart).format('YYYY 年 MM 月 DD 日') }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证有效结束期">
{{ dayjs(userDetail?.sfzEnd).format('YYYY 年 MM 月 DD 日') }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证地址">
{{ userDetail?.sfzSite }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="block_box">
<span>银行卡</span>
<el-form label-width="130px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="银行卡号">
{{ userDetail?.yhkNumber }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="银行开户行">
{{ userDetail?.yhkOpeningBank }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="持卡人">
{{ userDetail?.yhkCardholder }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="block_box">
<span>单位信息</span>
<el-form label-width="130px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="施工单位">
{{ userDetail?.contractorVo?.name }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工种">
<dict-tag :options="type_of_work" :value="userDetail?.typeOfWork" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
<div class="block_box">
<span>其他信息</span>
<el-form label-width="130px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="班组">
{{ userDetail?.teamVo?.teamName }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="打卡状态">
<dict-tag :options="user_clock_type" :value="userDetail?.clock" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入场时间">
{{ userDetail?.entryDate ? dayjs(userDetail?.entryDate).format('YYYY 年 MM 月 DD 日 HH:mm:ss') : '' }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="离场时间">
{{ userDetail?.leaveDate ? dayjs(userDetail?.leaveDate).format('YYYY 年 MM 月 DD 日 HH:mm:ss') : '' }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</template>
<script setup lang="ts">
import { getConstructionUser } from '@/api/project/constructionUser';
import { ConstructionUserVO } from '@/api/project/constructionUser/types';
import { dayjs } from 'element-plus';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { type_of_work, user_sex_type, user_clock_type } = toRefs<any>(proxy?.useDict('type_of_work', 'user_sex_type', 'user_clock_type'));
interface Props {
userId?: string | number;
}
const props = defineProps<Props>();
const loading = ref<boolean>(false);
const userDetail = ref<ConstructionUserVO>();
const getUserDetail = async () => {
loading.value = true;
const res = await getConstructionUser(props.userId);
if (res.data && res.code === 200) {
userDetail.value = res.data;
}
loading.value = false;
};
onMounted(() => {
getUserDetail();
});
watch(
() => props.userId,
(newId, oldId) => {
if (newId !== oldId) {
getUserDetail();
}
}
);
</script>
<style lang="scss" scoped>
.block_box {
border: 1px solid #9eccfa;
border-radius: 6px;
padding: 10px 20px 20px 10px;
margin: 15px;
> span {
color: #409eff;
font-weight: 700;
font-size: 14px;
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -53,6 +53,12 @@ export default defineConfig(({ mode, command }: ConfigEnv): UserConfig => {
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '')
},
[env.VITE_APP_BASE_API_GO]: {
target: 'http://192.168.110.159:8919',
changeOrigin: true,
ws: true,
rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API_GO), '')
}
}
},