优化
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
import { ContractorVO } from '@/api/project/contractor/types';
|
import { ContractorVO } from '@/api/project/contractor/types';
|
||||||
|
import { ProjectTeamVO } from '@/api/project/projectTeam/types';
|
||||||
|
|
||||||
export interface ConstructionUserVO {
|
export interface ConstructionUserVO {
|
||||||
/**
|
/**
|
||||||
@ -21,6 +22,11 @@ export interface ConstructionUserVO {
|
|||||||
*/
|
*/
|
||||||
facePic: string;
|
facePic: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 人脸照url
|
||||||
|
*/
|
||||||
|
facePicUrl: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 人员姓名
|
* 人员姓名
|
||||||
*/
|
*/
|
||||||
@ -46,6 +52,11 @@ export interface ConstructionUserVO {
|
|||||||
*/
|
*/
|
||||||
teamId: string | number;
|
teamId: string | number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 班组
|
||||||
|
*/
|
||||||
|
teamVo: ProjectTeamVO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 状态(0在职 1离职)
|
* 状态(0在职 1离职)
|
||||||
*/
|
*/
|
||||||
|
@ -42,17 +42,10 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<el-table
|
<el-table v-loading="loading" :data="machineryList" @selection-change="handleSelectionChange">
|
||||||
v-loading="loading"
|
|
||||||
:data="machineryList"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
:row-key="getRowKey"
|
|
||||||
:expand-row-keys="expandedRowKeys"
|
|
||||||
@expand-change="handleExpandChange"
|
|
||||||
>
|
|
||||||
<el-table-column type="expand">
|
<el-table-column type="expand">
|
||||||
<template #default="">
|
<template #default="{ row }">
|
||||||
<machinery-detail-table :machinery-id="expandedRowKeys[0]" />
|
<machinery-detail-table :machinery-id="row.id" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
@ -262,21 +255,6 @@ const handleExport = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
// 存储当前展开行的 key 数组(只允许一个展开)
|
|
||||||
const expandedRowKeys = ref([]);
|
|
||||||
// row-key 函数:返回每一行的唯一标识
|
|
||||||
const getRowKey = (row: any) => row.id;
|
|
||||||
/** 展开选中数据 */
|
|
||||||
const handleExpandChange = async (selection: MachineryVO, expanded: any) => {
|
|
||||||
if (expanded) {
|
|
||||||
// 展开当前行时,将其他展开行关闭,只保留当前行 id
|
|
||||||
expandedRowKeys.value = [selection.id];
|
|
||||||
} else {
|
|
||||||
// 收起当前行时,从 expandedRowKeys 中移除
|
|
||||||
expandedRowKeys.value = expandedRowKeys.value.filter((key) => key !== selection.id);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const dialogRef = ref();
|
const dialogRef = ref();
|
||||||
const currentMachineryId = ref<number | string>(0);
|
const currentMachineryId = ref<number | string>(0);
|
||||||
/** 添加机械出入场详情 */
|
/** 添加机械出入场详情 */
|
||||||
|
@ -44,17 +44,10 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<el-table
|
<el-table v-loading="loading" :data="materialsList" @selection-change="handleSelectionChange">
|
||||||
v-loading="loading"
|
|
||||||
:data="materialsList"
|
|
||||||
@selection-change="handleSelectionChange"
|
|
||||||
:row-key="getRowKey"
|
|
||||||
:expand-row-keys="expandedRowKeys"
|
|
||||||
@expand-change="handleExpandChange"
|
|
||||||
>
|
|
||||||
<el-table-column type="expand">
|
<el-table-column type="expand">
|
||||||
<template #default="">
|
<template #default="{ row }">
|
||||||
<materials-inventory-table :materials-id="expandedRowKeys[0]" :project-id="currentProject.id" />
|
<materials-inventory-table :materials-id="row.id" :project-id="currentProject.id" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
@ -268,21 +261,6 @@ const handleSelectionChange = (selection: MaterialsVO[]) => {
|
|||||||
multiple.value = !selection.length;
|
multiple.value = !selection.length;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 存储当前展开行的 key 数组(只允许一个展开)
|
|
||||||
const expandedRowKeys = ref([]);
|
|
||||||
// row-key 函数:返回每一行的唯一标识
|
|
||||||
const getRowKey = (row: any) => row.id;
|
|
||||||
/** 展开选中数据 */
|
|
||||||
const handleExpandChange = async (selection: MaterialsVO, expanded: any) => {
|
|
||||||
if (expanded) {
|
|
||||||
// 展开当前行时,将其他展开行关闭,只保留当前行 id
|
|
||||||
expandedRowKeys.value = [selection.id];
|
|
||||||
} else {
|
|
||||||
// 收起当前行时,从 expandedRowKeys 中移除
|
|
||||||
expandedRowKeys.value = expandedRowKeys.value.filter((key) => key !== selection.id);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
const handleAdd = () => {
|
const handleAdd = () => {
|
||||||
reset();
|
reset();
|
||||||
|
@ -0,0 +1,87 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-descriptions v-loading="loading" title="用户信息" direction="vertical" border>
|
||||||
|
<el-descriptions-item :rowspan="3" :width="200" label="人脸照">
|
||||||
|
<el-image :src="userDetail?.facePicUrl" style="width: 150px; height: 150px" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="姓名">{{ userDetail?.userName }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="联系电话">{{ userDetail?.phone }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="性别">
|
||||||
|
<dict-tag :options="user_sex_type" :value="userDetail?.sex" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="年龄">{{ dayjs().diff(dayjs(userDetail?.sfzBirth), 'year') }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="民族">{{ userDetail?.nation }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="籍贯">{{ userDetail?.nativePlace }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="身份证号码">{{ userDetail?.sfzNumber }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="身份证有效期">
|
||||||
|
{{ dayjs(userDetail?.sfzStart).format('YYYY 年 MM 月 DD 日') }}
|
||||||
|
—— {{ dayjs(userDetail?.sfzEnd).format('YYYY 年 MM 月 DD 日') }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="身份证地址">{{ userDetail?.sfzSite }}</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
<br />
|
||||||
|
<el-descriptions v-loading="loading" title="银行卡" direction="vertical" border>
|
||||||
|
<el-descriptions-item label="银行卡号">{{ userDetail?.yhkNumber }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="银行开户行">{{ userDetail?.yhkOpeningBank }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="持卡人">{{ userDetail?.yhkCardholder }}</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
<br />
|
||||||
|
<el-descriptions v-loading="loading" title="单位信息" direction="vertical" border>
|
||||||
|
<el-descriptions-item label="施工单位">{{ userDetail?.contractorVo?.name }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="工种">
|
||||||
|
<dict-tag :options="type_of_work" :value="userDetail?.typeOfWork" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
<br />
|
||||||
|
<el-descriptions :column="2" v-loading="loading" title="其他信息" direction="vertical" border>
|
||||||
|
<el-descriptions-item label="班组">{{ userDetail?.teamVo?.teamName }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="打卡状态">
|
||||||
|
<dict-tag :options="user_clock_type" :value="userDetail?.clock" />
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="入场时间">
|
||||||
|
{{ userDetail?.entryDate ? dayjs(userDetail?.entryDate).format('YYYY 年 MM 月 DD 日 HH:mm:ss') : '' }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="离场时间">
|
||||||
|
{{ userDetail?.leaveDate ? dayjs(userDetail?.leaveDate).format('YYYY 年 MM 月 DD 日 HH:mm:ss') : '' }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { getConstructionUser } from '@/api/project/constructionUser';
|
||||||
|
import { ConstructionUserVO } from '@/api/project/constructionUser/types';
|
||||||
|
import dayjs from 'dayjs';
|
||||||
|
|
||||||
|
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>
|
@ -97,6 +97,9 @@
|
|||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-space wrap>
|
<el-space wrap>
|
||||||
|
<el-button link type="primary" icon="View" @click="handleShowDrawer(scope.row)" v-hasPermi="['project:constructionUser:query']">
|
||||||
|
详情
|
||||||
|
</el-button>
|
||||||
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['project:constructionUser:edit']">
|
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['project:constructionUser:edit']">
|
||||||
修改
|
修改
|
||||||
</el-button>
|
</el-button>
|
||||||
@ -190,6 +193,9 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
<el-drawer title="施工人员详情" v-model="showDetailDrawer" :size="'45%'">
|
||||||
|
<construction-user-detail :user-id="currentUserId" />
|
||||||
|
</el-drawer>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -207,6 +213,7 @@ import { listContractor } from '@/api/project/contractor';
|
|||||||
import { listProjectTeam } from '@/api/project/projectTeam';
|
import { listProjectTeam } from '@/api/project/projectTeam';
|
||||||
import { ContractorVO } from '@/api/project/contractor/types';
|
import { ContractorVO } from '@/api/project/contractor/types';
|
||||||
import { ProjectTeamVO } from '@/api/project/projectTeam/types';
|
import { ProjectTeamVO } from '@/api/project/projectTeam/types';
|
||||||
|
import ConstructionUserDetail from '@/views/project/constructionUser/component/ConstructionUserDetail.vue';
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
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'));
|
const { type_of_work, user_sex_type, user_clock_type } = toRefs<any>(proxy?.useDict('type_of_work', 'user_sex_type', 'user_clock_type'));
|
||||||
@ -407,6 +414,14 @@ const handleUpdate = async (row?: ConstructionUserVO) => {
|
|||||||
dialog.title = '修改施工人员';
|
dialog.title = '修改施工人员';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** 展开用户详情抽屉操作 */
|
||||||
|
const currentUserId = ref<string | number>();
|
||||||
|
const showDetailDrawer = ref<boolean>(false);
|
||||||
|
const handleShowDrawer = (row?: ConstructionUserVO) => {
|
||||||
|
currentUserId.value = row.id;
|
||||||
|
showDetailDrawer.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
const submitForm = () => {
|
const submitForm = () => {
|
||||||
constructionUserFormRef.value?.validate(async (valid: boolean) => {
|
constructionUserFormRef.value?.validate(async (valid: boolean) => {
|
||||||
|
@ -51,7 +51,7 @@
|
|||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-space wrap>
|
<el-space wrap>
|
||||||
<el-button link type="primary" icon="Plus" @click="handleContractorFile(scope.row)">文件</el-button>
|
<el-button link type="primary" icon="View" @click="handleContractorFile(scope.row)">文件</el-button>
|
||||||
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['project:contractor:edit']">修改 </el-button>
|
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['project:contractor:edit']">修改 </el-button>
|
||||||
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['project:contractor:remove']">
|
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['project:contractor:remove']">
|
||||||
删除
|
删除
|
||||||
|
@ -68,9 +68,9 @@
|
|||||||
<el-table-column label="打卡范围" align="center" prop="punchRange" />
|
<el-table-column label="打卡范围" align="center" prop="punchRange" />
|
||||||
<el-table-column label="设计总量" align="center" prop="designTotal" />
|
<el-table-column label="设计总量" align="center" prop="designTotal" />
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="备注" align="center" prop="remark" />
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="260">
|
<el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="260">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-space wrap>
|
<el-space>
|
||||||
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['project:project:edit']">修改 </el-button>
|
<el-button link type="success" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['project:project:edit']">修改 </el-button>
|
||||||
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['project:project:remove']">删除 </el-button>
|
<el-button link type="danger" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['project:project:remove']">删除 </el-button>
|
||||||
</el-space>
|
</el-space>
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
</el-button>
|
</el-button>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-table v-loading="loading" :data="projectTeamMemberList" @selection-change="handleSelectionChange">
|
<el-table size="small" v-loading="loading" :data="projectTeamMemberList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="序号" type="index" width="60" align="center" />
|
<el-table-column label="序号" type="index" width="60" align="center" />
|
||||||
<el-table-column label="施工人员" align="center" prop="memberName" />
|
<el-table-column label="施工人员" align="center" prop="memberName" />
|
||||||
@ -73,7 +73,14 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.current" v-model:limit="queryParams.pageSize" @pagination="getList" />
|
<pagination
|
||||||
|
size="small"
|
||||||
|
v-show="total > 0"
|
||||||
|
:total="total"
|
||||||
|
v-model:page="queryParams.current"
|
||||||
|
v-model:limit="queryParams.pageSize"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
|
||||||
<!-- 添加或修改项目班组下的成员对话框 -->
|
<!-- 添加或修改项目班组下的成员对话框 -->
|
||||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
<el-dialog :title="dialog.title" v-model="dialog.visible" width="500px" append-to-body>
|
||||||
@ -82,7 +89,8 @@
|
|||||||
<el-select v-model="form.memberId" clearable placeholder="请选择人员">
|
<el-select v-model="form.memberId" clearable placeholder="请选择人员">
|
||||||
<el-option v-for="item in userNotInTeamOpt" :key="item.value" :label="item.label" :value="item.value" />
|
<el-option v-for="item in userNotInTeamOpt" :key="item.value" :label="item.label" :value="item.value" />
|
||||||
<pagination
|
<pagination
|
||||||
v-show="total > 0"
|
size="small"
|
||||||
|
v-show="userNotInTeamTotal > 0"
|
||||||
:total="userNotInTeamTotal"
|
:total="userNotInTeamTotal"
|
||||||
v-model:page="userQueryParams.current"
|
v-model:page="userQueryParams.current"
|
||||||
v-model:limit="userQueryParams.pageSize"
|
v-model:limit="userQueryParams.pageSize"
|
||||||
|
Reference in New Issue
Block a user