feat: 政务端劳务实名制功能新增
This commit is contained in:
parent
d8d8063ace
commit
dc52fbbb42
@ -377,6 +377,30 @@ export const workProjectList = (params: any) => {
|
||||
export const unitPageList = (params: any) => {
|
||||
return http.post(BASEURL + `/gov/company/page`, params);
|
||||
};
|
||||
// 参建班组分页数据
|
||||
export const classGroupList = (params: any) => {
|
||||
return http.post(BASEURL + `/gov/teamInfo/page`, params);
|
||||
};
|
||||
// 人员信息统计数据
|
||||
export const memberCountData = (params: any) => {
|
||||
return http.post(BASEURL + `/gov/workerInfo/getByType`, params);
|
||||
};
|
||||
// 人员信息分页数据
|
||||
export const memberPageList = (params: any) => {
|
||||
return http.post(BASEURL + `/gov/workerInfo/page`, params);
|
||||
};
|
||||
// 出勤列表分页数据
|
||||
export const attendancePageList = (params: any) => {
|
||||
return http.post(BASEURL + `/gov/workerInfo/attendStat`, params);
|
||||
};
|
||||
// 在册人员分页数据
|
||||
export const registerdMemberList = (params: any) => {
|
||||
return http.post(BASEURL + `/gov/workerStat/workerPage?current=${params.current}&size=${params.size}`, params);
|
||||
};
|
||||
// 在册人员详情数据
|
||||
export const registerdMemberDetails = (params: any) => {
|
||||
return http.post(BASEURL + `/gov/workerStat/queryDetailBySn`, params);
|
||||
};
|
||||
// 列表查询视频管理表信息
|
||||
// export const getVideo = (params: { projectSn?: string; engineeringSn?: string }) => {
|
||||
// return http.post<ResPage<User.ResUserList>>(BASEURL + `/gov/projectMonitor/engineeringTree`, params);
|
||||
|
||||
BIN
src/assets/images/govermentImg/defaultAvatar.png
Normal file
BIN
src/assets/images/govermentImg/defaultAvatar.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.6 KiB |
BIN
src/assets/images/govermentImg/female.png
Normal file
BIN
src/assets/images/govermentImg/female.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 667 B |
BIN
src/assets/images/govermentImg/male.png
Normal file
BIN
src/assets/images/govermentImg/male.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 669 B |
@ -650,8 +650,6 @@ onMounted(() => {
|
||||
width: stretch;
|
||||
}
|
||||
.overview {
|
||||
// background-color: #fff;
|
||||
flex: 1;
|
||||
.form {
|
||||
background-color: #fff;
|
||||
.form-title {
|
||||
|
||||
@ -8,54 +8,56 @@
|
||||
<div>基本信息</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<el-form-item label="工程名称:" prop="personName">
|
||||
<el-form-item label="姓名:" prop="personName">
|
||||
<el-input placeholder="请输入" v-model="form.personName" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="类别:" prop="sex">
|
||||
<el-input placeholder="请输入" v-model="form.personName" disabled />
|
||||
<el-form-item label="籍贯:" prop="registerAddress">
|
||||
<el-input placeholder="请输入" v-model="form.registerAddress" disabled />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="row">
|
||||
<el-form-item label="建设单位:" prop="birthday">
|
||||
<el-input placeholder="请输入" v-model="form.personName" disabled />
|
||||
<el-form-item label="身份证号码:" prop="idCard">
|
||||
<el-input placeholder="请输入" v-model="form.idCard" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="施工总承包单位:" prop="nation">
|
||||
<el-input placeholder="请输入" v-model="form.personName" disabled />
|
||||
<el-form-item label="性别:" prop="sexName">
|
||||
<el-input placeholder="请输入" v-model="form.sexName" disabled />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="row">
|
||||
<el-form-item label="施工许可证编码:" prop="idCard">
|
||||
<el-input placeholder="请输入" v-model="form.idCard" />
|
||||
<el-form-item label="年龄:" prop="age">
|
||||
<el-input placeholder="请输入" v-model="form.age" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="项目状态:" prop="idCard">
|
||||
<el-input placeholder="请输入" v-model="form.idCard" />
|
||||
<el-form-item label="民族:" prop="nation">
|
||||
<el-input placeholder="请输入" v-model="form.nation" disabled />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="row">
|
||||
<el-form-item label="项目联系人:" prop="issuingAuthorityForIdCard">
|
||||
<el-input placeholder="请输入" v-model="form.issuingAuthorityForIdCard" />
|
||||
<el-form-item label="出生日期:" prop="birthday">
|
||||
<el-input placeholder="请输入" v-model="form.birthday" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="工程总面积:" prop="idCardExpireDate">
|
||||
<el-input placeholder="请输入" v-model="form.issuingAuthorityForIdCard" />
|
||||
<el-form-item label="住址:" prop="address">
|
||||
<el-input placeholder="请输入" v-model="form.address" disabled />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="row">
|
||||
<el-form-item label="工程用途:" prop="issuingAuthorityForIdCard">
|
||||
<el-input placeholder="请输入" v-model="form.issuingAuthorityForIdCard" />
|
||||
<el-form-item label="联系电话:" prop="phone">
|
||||
<el-input placeholder="请输入" v-model="form.phone" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="工程总面积:" prop="idCardExpireDate">
|
||||
<el-date-picker
|
||||
v-model="form.entryTime"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
type="daterange"
|
||||
placeholder="请选择"
|
||||
/>
|
||||
<el-form-item label="政治面貌:" prop="politicsStatusName">
|
||||
<el-input placeholder="请输入" v-model="form.politicsStatusName" disabled />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="row">
|
||||
<el-form-item label="建设地点:" prop="issuingAuthorityForIdCard">
|
||||
<el-input placeholder="请输入" v-model="form.issuingAuthorityForIdCard" />
|
||||
<el-form-item label="学历:" prop="educationLevelName">
|
||||
<el-input placeholder="请输入" v-model="form.educationLevelName" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="紧急联系人:" prop="contacts">
|
||||
<el-input placeholder="请输入" v-model="form.contacts" disabled />
|
||||
</el-form-item>
|
||||
</div>
|
||||
<div class="row">
|
||||
<el-form-item label="紧急联系电话:" prop="contactsTel">
|
||||
<el-input placeholder="请输入" v-model="form.contactsTel" disabled />
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
@ -63,20 +65,32 @@
|
||||
<div>
|
||||
<div class="form-tab">
|
||||
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||
<el-tab-pane label="参建班组" name="first">
|
||||
<el-tab-pane label="从业经历" name="first">
|
||||
<div class="table">
|
||||
<el-table
|
||||
:data="unitData"
|
||||
:data="workExperienceData"
|
||||
border
|
||||
max-height="340"
|
||||
height="300"
|
||||
class="el-table"
|
||||
:header-cell-style="{ backgroundColor: '#EBEEF5', textAlign: 'center' }"
|
||||
:cell-style="{ textAlign: 'center' }"
|
||||
>
|
||||
<el-table-column prop="personName" label="建设单位名称" />
|
||||
<el-table-column prop="personName" label="统一社会信用代码" />
|
||||
<el-table-column prop="personName" label="联系人" />
|
||||
<el-table-column prop="personName" label="联系人电话" />
|
||||
<el-table-column prop="companyName" label="企业名称" />
|
||||
<el-table-column prop="creditCode" label="统一社会信用代码" />
|
||||
<el-table-column prop="projectName" label="参建项目" />
|
||||
<el-table-column prop="projectAddress" label="项目所在地" />
|
||||
<el-table-column prop="workerTypeName" label="工种(岗位)" />
|
||||
<el-table-column prop="entryTime" label="进场时间" />
|
||||
<el-table-column prop="exitTime" label="退场时间" />
|
||||
<!-- 表格无数据情况 -->
|
||||
<template #empty>
|
||||
<div class="table-empty">
|
||||
<slot name="empty">
|
||||
<img src="@/assets/images/notData.png" alt="notData" />
|
||||
<div>暂无数据</div>
|
||||
</slot>
|
||||
</div>
|
||||
</template>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@ -97,9 +111,10 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref, watch, reactive, onBeforeMount } from "vue";
|
||||
import { onMounted, ref, watch } from "vue";
|
||||
import Pagination from "@/components/ProTable/components/Pagination.vue";
|
||||
import type { FormInstance, UploadProps } from "element-plus";
|
||||
import { registerdMemberDetails } from "@/api/modules/goverment";
|
||||
const props = defineProps({
|
||||
detailsDialog: Boolean,
|
||||
title: String,
|
||||
@ -112,31 +127,35 @@ const pageable = ref({
|
||||
total: 30
|
||||
});
|
||||
const activeName = ref("first");
|
||||
const workExperienceData = ref([]);
|
||||
const visible1 = ref(false);
|
||||
const emits = defineEmits(["update:detailsDialog", "confirm"]);
|
||||
const ruleFormRef = ref<FormInstance>();
|
||||
const form = ref();
|
||||
const getListData = async () => {
|
||||
let requestData = {
|
||||
current: pageable.value.pageNo,
|
||||
size: pageable.value.pageSize,
|
||||
idCard: form.value.idCard
|
||||
};
|
||||
const { result } = await registerdMemberDetails(requestData);
|
||||
if (result && result.records) {
|
||||
workExperienceData.value = result.records;
|
||||
pageable.value.total = +result.total;
|
||||
}
|
||||
console.log(result);
|
||||
};
|
||||
const handleClick = (tab: any, event: any) => {
|
||||
console.log(tab, event);
|
||||
};
|
||||
const handleSizeChange = size => {
|
||||
console.log(size);
|
||||
pageable.value.pageSize = size;
|
||||
};
|
||||
const handleCurrentChange = currentPage => {
|
||||
console.log(currentPage);
|
||||
pageable.value.pageNo = currentPage;
|
||||
};
|
||||
const searchForm = ref({
|
||||
projectName: ""
|
||||
});
|
||||
const unitData = ref([
|
||||
{
|
||||
personName: 111
|
||||
}
|
||||
]);
|
||||
const monthColumns = [];
|
||||
const visible1 = ref(false);
|
||||
const changeType = ref(1);
|
||||
const filelist = ref([]);
|
||||
const emits = defineEmits(["update:detailsDialog", "confirm"]);
|
||||
const ruleFormRef = ref<FormInstance>();
|
||||
const educationLevelList: any = ref([]);
|
||||
const form = ref();
|
||||
// 重置表单
|
||||
const resetForm = (formEl: FormInstance | undefined) => {
|
||||
if (!formEl) return;
|
||||
@ -158,23 +177,22 @@ watch(
|
||||
(n, o) => {
|
||||
resetForm(ruleFormRef.value);
|
||||
console.log(props.formData);
|
||||
form.value = reactive(n);
|
||||
form.value = n;
|
||||
form.value.sexName = form.value.sex == 1 ? "男" : "女";
|
||||
form.value.politicsStatusName =
|
||||
form.value.politicsStatus == 1
|
||||
? "中共党员"
|
||||
: form.value.politicsStatus == 2
|
||||
? "共青团团员"
|
||||
: form.value.politicsStatus == 3
|
||||
? "普通居民"
|
||||
: form.value.politicsStatus == 4
|
||||
? "其他党派人士"
|
||||
: "其他";
|
||||
getListData();
|
||||
}
|
||||
);
|
||||
|
||||
onBeforeMount(() => {
|
||||
for (let i = 0; i < 31; i++) {
|
||||
monthColumns.push({
|
||||
prop: "day" + (i + 1),
|
||||
label: "" + (i + 1)
|
||||
});
|
||||
}
|
||||
});
|
||||
onMounted(() => {
|
||||
// 初始化 配置formData
|
||||
console.log(props.formData);
|
||||
form.value = reactive(props.formData);
|
||||
});
|
||||
onMounted(() => {});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@ -372,8 +390,19 @@ onMounted(() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
.table-empty {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
flex-direction: column;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
}
|
||||
.statistics-page {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
@ -3,38 +3,44 @@
|
||||
<div class="statistics-search">
|
||||
<el-card shadow="never" class="topCard">
|
||||
<span style="margin: 0 10px 2px 0; white-space: nowrap">姓名</span>
|
||||
<el-input v-model="searchForm.projectName" placeholder="请选择输入" />
|
||||
<el-button type="primary" style="margin-left: 20px" @click="handleSubmit()">发送</el-button>
|
||||
<el-input v-model="searchForm.personName" style="width: 200px" clearable placeholder="请输入" />
|
||||
<el-button type="primary" style="margin-left: 20px" @click="handleSubmit()">查询</el-button>
|
||||
</el-card>
|
||||
</div>
|
||||
<div class="statistics-list">
|
||||
<el-card shadow="never" class="bottomCard">
|
||||
<div class="statistics-item">
|
||||
<div class="item-child">
|
||||
<div class="statistics-item" v-if="memberList.length > 0">
|
||||
<div class="item-child" v-for="(item, index) in memberList" :key="index">
|
||||
<div class="top-title">
|
||||
<span>万天瑶</span>
|
||||
<img src="@/assets/images/govermentImg/在职人数.png" alt="" />
|
||||
<el-button type="primary" style="margin-left: 20px" @click="showDetails()">查看</el-button>
|
||||
<span>{{ item.personName }}</span>
|
||||
<img src="@/assets/images/govermentImg/male.png" alt="" v-if="item.sex == 1" />
|
||||
<img src="@/assets/images/govermentImg/female.png" alt="" v-if="item.sex == 2" />
|
||||
<el-button type="primary" style="margin-left: 20px" @click="showDetails(item)">查看</el-button>
|
||||
</div>
|
||||
<div class="detail-content">
|
||||
<img src="../../../../assets/images/govermentImg/在职人数.png" alt="" />
|
||||
<img :src="item.portrait" alt="" v-if="item.portrait" />
|
||||
<img src="../../../../assets/images/govermentImg/defaultAvatar.png" alt="" v-else />
|
||||
<div>
|
||||
<div class="content-item">
|
||||
<span>开工时间:2023-01-01</span>
|
||||
<span>身份证号码:{{ item.idCard }}</span>
|
||||
</div>
|
||||
<div class="content-item">
|
||||
<span>计划竣工时间:2023-01-01</span>
|
||||
<span>年龄:{{ item.age }}</span>
|
||||
</div>
|
||||
<div class="content-item">
|
||||
<span>建设单位:2023-01-01</span>
|
||||
<span>民族:{{ item.nation }}</span>
|
||||
</div>
|
||||
<div class="content-item">
|
||||
<span>施工单位:2023-01-01</span>
|
||||
<span>联系电话:{{ item.phone }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="table-empty">
|
||||
<img src="@/assets/images/notData.png" alt="notData" />
|
||||
<div>暂无数据</div>
|
||||
</div>
|
||||
<div class="statistics-page">
|
||||
<Pagination
|
||||
:pageable="pageable"
|
||||
@ -53,8 +59,9 @@
|
||||
import { ref, reactive, nextTick, onMounted } from "vue";
|
||||
import Pagination from "@/components/ProTable/components/Pagination.vue";
|
||||
import memberDetails from "./components/memberDetails.vue";
|
||||
import { registerdMemberList } from "@/api/modules/goverment";
|
||||
const searchForm = ref({
|
||||
projectName: ""
|
||||
personName: ""
|
||||
});
|
||||
const pageable = ref({
|
||||
// 分页参数
|
||||
@ -64,18 +71,42 @@ const pageable = ref({
|
||||
});
|
||||
const detailsDialog = ref(false);
|
||||
const formData = ref({});
|
||||
const showDetails = () => {
|
||||
const memberList = ref([]);
|
||||
const getListData = async () => {
|
||||
let requestData = {
|
||||
personName: searchForm.value.personName,
|
||||
current: pageable.value.pageNo,
|
||||
size: pageable.value.pageSize
|
||||
};
|
||||
const { result } = await registerdMemberList(requestData);
|
||||
if (result && result.records) {
|
||||
memberList.value = result.records;
|
||||
pageable.value.total = +result.total;
|
||||
}
|
||||
};
|
||||
const showDetails = (obj: any) => {
|
||||
formData.value = obj;
|
||||
detailsDialog.value = true;
|
||||
};
|
||||
const handleSizeChange = size => {
|
||||
console.log(size);
|
||||
pageable.value.pageSize = size;
|
||||
getListData();
|
||||
};
|
||||
const handleCurrentChange = currentPage => {
|
||||
console.log(currentPage);
|
||||
pageable.value.pageNo = currentPage;
|
||||
getListData();
|
||||
};
|
||||
// 点击发送按钮
|
||||
const handleSubmit = async () => {};
|
||||
onMounted(() => {});
|
||||
// 点击查询按钮
|
||||
const handleSubmit = async () => {
|
||||
pageable.value.pageNo = 1;
|
||||
pageable.value.pageSize = 10;
|
||||
getListData();
|
||||
};
|
||||
onMounted(() => {
|
||||
getListData();
|
||||
});
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.table-box {
|
||||
@ -91,11 +122,22 @@ onMounted(() => {});
|
||||
}
|
||||
.statistics-list {
|
||||
margin-top: 20px;
|
||||
height: 892px;
|
||||
overflow-y: scroll;
|
||||
height: calc(100% - 92px);
|
||||
.bottomCard {
|
||||
height: 100%;
|
||||
}
|
||||
:deep() {
|
||||
.el-card__body {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.statistics-item {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-content: flex-start;
|
||||
justify-content: space-between;
|
||||
height: calc(100% - 72px);
|
||||
overflow-y: scroll;
|
||||
.item-child {
|
||||
width: 794px;
|
||||
min-width: 794px;
|
||||
@ -103,6 +145,7 @@ onMounted(() => {});
|
||||
background: #ffffff;
|
||||
opacity: 1;
|
||||
border: 1px solid #d9d9d9;
|
||||
margin-bottom: 20px;
|
||||
.top-title {
|
||||
height: 56px;
|
||||
background: #f5f7f9;
|
||||
@ -127,6 +170,7 @@ onMounted(() => {});
|
||||
.detail-content {
|
||||
height: 140px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
img {
|
||||
width: 72px;
|
||||
height: 108px;
|
||||
@ -135,13 +179,16 @@ onMounted(() => {});
|
||||
margin-right: 26px;
|
||||
}
|
||||
> div {
|
||||
margin: 16px 0;
|
||||
// margin: 16px 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
height: 108px;
|
||||
flex: 1;
|
||||
.content-item {
|
||||
width: 80%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 8px;
|
||||
span {
|
||||
font-size: 14px;
|
||||
font-family: Source Han Sans CN-Medium, Source Han Sans CN;
|
||||
@ -153,6 +200,17 @@ onMounted(() => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
.table-empty {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: calc(100% - 72px);
|
||||
flex-direction: column;
|
||||
color: #999;
|
||||
}
|
||||
.statistics-page {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -80,77 +80,117 @@
|
||||
<el-table-column prop="creditCode" label="统一社会信用代码" />
|
||||
<el-table-column prop="leadName" label="联系人" />
|
||||
<el-table-column prop="leadTel" label="联系人电话" />
|
||||
<!-- 表格无数据情况 -->
|
||||
<template #empty>
|
||||
<div class="table-empty">
|
||||
<slot name="empty">
|
||||
<img src="@/assets/images/notData.png" alt="notData" />
|
||||
<div>暂无数据</div>
|
||||
</slot>
|
||||
</div>
|
||||
</template>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="参建班组" name="second">
|
||||
<div class="search">
|
||||
<span>参建班组总数:3</span>
|
||||
<span>参建班组总数:{{ classGroupData.length }}</span>
|
||||
</div>
|
||||
<div class="table">
|
||||
<el-table
|
||||
:data="unitData"
|
||||
:data="classGroupData"
|
||||
border
|
||||
max-height="340"
|
||||
height="300"
|
||||
class="el-table"
|
||||
:header-cell-style="{ backgroundColor: '#EBEEF5', textAlign: 'center' }"
|
||||
:cell-style="{ textAlign: 'center' }"
|
||||
>
|
||||
<el-table-column prop="personName" label="建设单位名称" />
|
||||
<el-table-column prop="personName" label="统一社会信用代码" />
|
||||
<el-table-column prop="personName" label="联系人" />
|
||||
<el-table-column prop="personName" label="联系人电话" />
|
||||
<!-- <el-table-column prop="id" label="班组ID" /> -->
|
||||
<el-table-column prop="teamName" label="班组名称" />
|
||||
<el-table-column prop="companyName" label="企业名称" />
|
||||
<el-table-column prop="leaderName" label="班组长" />
|
||||
<el-table-column prop="leaderTel" label="班组长电话" />
|
||||
<!-- 表格无数据情况 -->
|
||||
<template #empty>
|
||||
<div class="table-empty">
|
||||
<slot name="empty">
|
||||
<img src="@/assets/images/notData.png" alt="notData" />
|
||||
<div>暂无数据</div>
|
||||
</slot>
|
||||
</div>
|
||||
</template>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="人员信息" name="third">
|
||||
<div class="search-two">
|
||||
<span>在册人员:1475</span>
|
||||
<span>在册管理人员:42</span>
|
||||
<span>在册建筑工人:1443</span>
|
||||
<span>在职人员:438</span>
|
||||
<span>在职管理人员:23</span>
|
||||
<span>在职建筑工人:415</span>
|
||||
<span>在册人员:{{ memberCountInfo.person }}</span>
|
||||
<span>在册管理人员:{{ memberCountInfo.manager }}</span>
|
||||
<span>在册建筑工人:{{ memberCountInfo.worker }}</span>
|
||||
<span>在职人员:{{ memberCountInfo.inPerson }}</span>
|
||||
<span>在职管理人员:{{ memberCountInfo.inManager }}</span>
|
||||
<span>在职建筑工人:{{ memberCountInfo.inWorker }}</span>
|
||||
</div>
|
||||
<div class="search-form">
|
||||
<span>企业名称</span>
|
||||
<el-input placeholder="请输入" style="width: 160px; margin-right: 5px" />
|
||||
<el-select v-model="memberSearch.companySn" style="width: 160px; margin-right: 5px" placeholder="请选择">
|
||||
<el-option v-for="item in unitData" :key="item.companySn" :label="item.companyName" :value="item.companySn">
|
||||
</el-option>
|
||||
</el-select>
|
||||
<span>姓名</span>
|
||||
<el-input placeholder="请输入" style="width: 160px; margin-right: 5px" />
|
||||
<el-input v-model="memberSearch.personName" placeholder="请输入" style="width: 160px; margin-right: 5px" />
|
||||
<span>人员类型</span>
|
||||
<el-input placeholder="请输入" style="width: 160px" />
|
||||
<el-button type="primary" style="margin-left: 20px">查询</el-button>
|
||||
<el-select v-model="memberSearch.personType" style="width: 160px" placeholder="请选择">
|
||||
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
||||
</el-select>
|
||||
<el-button type="primary" style="margin-left: 20px" @click="getMemberCountList">查询</el-button>
|
||||
</div>
|
||||
<div class="table">
|
||||
<div class="table-title">人员列表</div>
|
||||
<div class="member-list">
|
||||
<div class="list-item">
|
||||
<div class="member-list" v-if="memberListData.length > 0">
|
||||
<div class="list-item" v-for="(item, index) in memberListData" :key="index">
|
||||
<div class="avater-item">
|
||||
<img src="@/assets/images/govermentImg/在职人数.png" alt="" />
|
||||
<img :src="item.portrait" alt="" />
|
||||
<div class="avater-right">
|
||||
<div>
|
||||
<span>名字</span>
|
||||
<span>{{ item.personName }}</span>
|
||||
<img src="@/assets/images/govermentImg/在职人数.png" alt="" />
|
||||
</div>
|
||||
<span>420581195606192999</span>
|
||||
<span>{{ item.idCard }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="member-type">建筑工人</div>
|
||||
<div class="member-other">公司: 中交隧道工程有限公司</div>
|
||||
<div class="member-other">班组: 主线</div>
|
||||
<div class="member-other">工种: 其他</div>
|
||||
<div class="member-other">电话: 13338237531</div>
|
||||
<div class="member-type">{{ item.personType == 1 ? "管理" : "工人" }}</div>
|
||||
<div class="member-other">公司: {{ item.companyName }}</div>
|
||||
<div class="member-other">班组: {{ item.teamName }}</div>
|
||||
<div class="member-other">工种: {{ item.workerTypeName }}</div>
|
||||
<div class="member-other">电话: {{ item.phone }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="table-empty">
|
||||
<img src="@/assets/images/notData.png" alt="notData" />
|
||||
<div>暂无数据</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="出勤列表" name="fourth">
|
||||
<div class="search-three">
|
||||
<span>角色类型</span>
|
||||
<el-input style="width: 160px" />
|
||||
<span>人员类型</span>
|
||||
<el-select v-model="attendaceSearch.personType" clearable style="width: 160px" placeholder="请选择">
|
||||
<el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
|
||||
</el-select>
|
||||
<span>月份</span>
|
||||
<el-date-picker style="width: 160px" type="month" placeholder="选择月"> </el-date-picker>
|
||||
<el-button type="primary" style="margin-left: 20px; margin-right: auto">查询</el-button>
|
||||
<el-date-picker
|
||||
v-model="attendaceSearch.month"
|
||||
format="YYYY-MM"
|
||||
value-format="YYYY-MM"
|
||||
style="width: 160px"
|
||||
type="month"
|
||||
placeholder="选择月"
|
||||
>
|
||||
</el-date-picker>
|
||||
<el-button type="primary" style="margin-left: 20px; margin-right: auto" @click="getAttendanceCountList"
|
||||
>查询</el-button
|
||||
>
|
||||
<div class="attendance-label">
|
||||
<span class="successCircle"></span>
|
||||
<span class="text">正常出勤</span>
|
||||
@ -160,14 +200,14 @@
|
||||
</div>
|
||||
<div class="table">
|
||||
<el-table
|
||||
:data="unitData"
|
||||
max-height="340"
|
||||
:data="attendanceListData"
|
||||
height="300"
|
||||
class="el-table"
|
||||
:header-cell-style="{ backgroundColor: '#F5F7FA', textAlign: 'center' }"
|
||||
:cell-style="{ textAlign: 'center' }"
|
||||
>
|
||||
<el-table-column prop="personName" label="姓名" />
|
||||
<el-table-column prop="personName" label="职位/班组" />
|
||||
<el-table-column prop="personName" width="100" label="职位/班组" />
|
||||
<el-table-column prop="personName" label="迟到天数" />
|
||||
<el-table-column prop="personName" label="早退天数" />
|
||||
<el-table-column prop="personName" label="总工时" />
|
||||
@ -177,6 +217,15 @@
|
||||
<span class="errorCircle" v-else></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- 表格无数据情况 -->
|
||||
<template #empty>
|
||||
<div class="table-empty">
|
||||
<slot name="empty">
|
||||
<img src="@/assets/images/notData.png" alt="notData" />
|
||||
<div>暂无数据</div>
|
||||
</slot>
|
||||
</div>
|
||||
</template>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@ -200,7 +249,20 @@
|
||||
import { onMounted, ref, watch, reactive, onBeforeMount } from "vue";
|
||||
import Pagination from "@/components/ProTable/components/Pagination.vue";
|
||||
import type { FormInstance } from "element-plus";
|
||||
import { unitPageList } from "@/api/modules/goverment";
|
||||
import { unitPageList, classGroupList, memberCountData, memberPageList, attendancePageList } from "@/api/modules/goverment";
|
||||
const typeOptions = ref([
|
||||
{ label: "管理", value: 1 },
|
||||
{ label: "工人", value: 2 }
|
||||
]);
|
||||
const memberSearch = ref({
|
||||
companySn: "",
|
||||
personName: "",
|
||||
personType: null
|
||||
});
|
||||
const attendaceSearch = ref({
|
||||
personType: null,
|
||||
month: ""
|
||||
});
|
||||
const props = defineProps({
|
||||
detailsDialog: Boolean,
|
||||
title: String,
|
||||
@ -217,11 +279,81 @@ const searchForm = ref({
|
||||
type: ""
|
||||
});
|
||||
const unitData = ref([]);
|
||||
const classGroupData = ref([]);
|
||||
const memberCountInfo = ref({});
|
||||
const memberListData = ref([]);
|
||||
const attendanceListData = ref([]);
|
||||
const monthColumns: any = [];
|
||||
const visible1 = ref(false);
|
||||
const emits = defineEmits(["update:detailsDialog", "confirm"]);
|
||||
const ruleFormRef = ref<FormInstance>();
|
||||
const form = ref({});
|
||||
// 获取人员出勤列表数据
|
||||
const getAttendanceCountList = async () => {
|
||||
console.log(form.value);
|
||||
let requestData = {
|
||||
current: pageable.value.pageNo,
|
||||
size: pageable.value.pageSize,
|
||||
engineeringSn: form.value.engineeringSn,
|
||||
...attendaceSearch.value
|
||||
};
|
||||
console.log(666);
|
||||
const { result } = await attendancePageList(requestData);
|
||||
if (result && result.records) {
|
||||
attendanceListData.value = result.records;
|
||||
pageable.value.total = +result.total;
|
||||
}
|
||||
console.log(result);
|
||||
};
|
||||
// 获取人员信息列表数据
|
||||
const getMemberCountList = async () => {
|
||||
console.log(form.value);
|
||||
let requestData = {
|
||||
current: pageable.value.pageNo,
|
||||
size: pageable.value.pageSize,
|
||||
engineeringSn: form.value.engineeringSn,
|
||||
...memberSearch.value
|
||||
};
|
||||
console.log(666);
|
||||
const { result } = await memberPageList(requestData);
|
||||
if (result && result.records) {
|
||||
memberListData.value = result.records;
|
||||
pageable.value.total = +result.total;
|
||||
}
|
||||
console.log(result);
|
||||
};
|
||||
// 获取人员信息统计数据
|
||||
const getMemberCountData = async () => {
|
||||
console.log(form.value);
|
||||
let requestData = {
|
||||
companySn: "",
|
||||
personType: "",
|
||||
engineeringSn: form.value.engineeringSn
|
||||
};
|
||||
console.log(666);
|
||||
const { result } = await memberCountData(requestData);
|
||||
if (result) {
|
||||
memberCountInfo.value = result;
|
||||
}
|
||||
console.log(result);
|
||||
};
|
||||
// 获取参建班组数据
|
||||
const getClassGroupData = async () => {
|
||||
console.log(form.value);
|
||||
let requestData = {
|
||||
current: pageable.value.pageNo,
|
||||
size: pageable.value.pageSize,
|
||||
engineeringSn: form.value.engineeringSn
|
||||
};
|
||||
console.log(666);
|
||||
const { result } = await classGroupList(requestData);
|
||||
if (result && result.records) {
|
||||
classGroupData.value = result.records;
|
||||
pageable.value.total = +result.total;
|
||||
}
|
||||
console.log(result);
|
||||
};
|
||||
// 获取参建单位数据
|
||||
const getUnitData = async () => {
|
||||
console.log(form.value);
|
||||
let requestData = {
|
||||
@ -239,13 +371,28 @@ const getUnitData = async () => {
|
||||
console.log(result);
|
||||
};
|
||||
const handleClick = (tab: any, event: any) => {
|
||||
console.log(tab, event);
|
||||
console.log(tab.props.name);
|
||||
pageable.value.pageNo = 1;
|
||||
pageable.value.pageSize = 10;
|
||||
let val = tab.props.name;
|
||||
if (val == "first") {
|
||||
getUnitData();
|
||||
} else if (val == "second") {
|
||||
getClassGroupData();
|
||||
} else if (val == "third") {
|
||||
getMemberCountData();
|
||||
getMemberCountList();
|
||||
} else if (val == "fourth") {
|
||||
getAttendanceCountList();
|
||||
}
|
||||
};
|
||||
const handleSizeChange = size => {
|
||||
console.log(size);
|
||||
pageable.value.pageSize = size;
|
||||
};
|
||||
const handleCurrentChange = currentPage => {
|
||||
console.log(currentPage);
|
||||
pageable.value.pageNo = currentPage;
|
||||
};
|
||||
// 重置表单
|
||||
const resetForm = (formEl: FormInstance | undefined) => {
|
||||
@ -418,6 +565,8 @@ onMounted(() => {});
|
||||
}
|
||||
}
|
||||
.table {
|
||||
height: 300px;
|
||||
min-height: 300px;
|
||||
margin-top: 20px;
|
||||
.successCircle {
|
||||
@include successCircle();
|
||||
@ -435,12 +584,15 @@ onMounted(() => {});
|
||||
}
|
||||
.member-list {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
margin-top: 24px;
|
||||
.list-item {
|
||||
width: 352px;
|
||||
min-width: 352px;
|
||||
height: 201px;
|
||||
background: #f8f8f8;
|
||||
margin-right: 13px;
|
||||
margin-bottom: 20px;
|
||||
.avater-item {
|
||||
display: flex;
|
||||
margin-top: 12px;
|
||||
@ -483,8 +635,19 @@ onMounted(() => {});
|
||||
}
|
||||
}
|
||||
}
|
||||
.table-empty {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
flex-direction: column;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
}
|
||||
.statistics-page {
|
||||
margin-top: 10px;
|
||||
}
|
||||
.row {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
</div>
|
||||
<div class="statistics-list">
|
||||
<el-card shadow="never" class="bottomCard">
|
||||
<div class="statistics-item">
|
||||
<div class="statistics-item" v-if="projectList.length > 0">
|
||||
<div class="item-child" v-for="(item, index) in projectList" :key="index">
|
||||
<div class="top-title">
|
||||
<span>{{ item.engineeringName }}</span>
|
||||
@ -52,6 +52,10 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="table-empty">
|
||||
<img src="@/assets/images/notData.png" alt="notData" />
|
||||
<div>暂无数据</div>
|
||||
</div>
|
||||
<div class="statistics-page">
|
||||
<Pagination
|
||||
:pageable="pageable"
|
||||
@ -133,12 +137,22 @@ onMounted(() => {
|
||||
}
|
||||
.statistics-list {
|
||||
margin-top: 20px;
|
||||
height: 892px;
|
||||
overflow-y: scroll;
|
||||
height: calc(100% - 92px);
|
||||
.bottomCard {
|
||||
height: 100%;
|
||||
}
|
||||
:deep() {
|
||||
.el-card__body {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
.statistics-item {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-content: flex-start;
|
||||
justify-content: space-between;
|
||||
height: calc(100% - 72px);
|
||||
overflow-y: scroll;
|
||||
.item-child {
|
||||
width: 794px;
|
||||
min-width: 794px;
|
||||
@ -146,7 +160,7 @@ onMounted(() => {
|
||||
background: #ffffff;
|
||||
opacity: 1;
|
||||
border: 1px solid #d9d9d9;
|
||||
margin-bottom: 15px;
|
||||
margin-bottom: 20px;
|
||||
.top-title {
|
||||
height: 56px;
|
||||
background: #f5f7f9;
|
||||
@ -199,6 +213,17 @@ onMounted(() => {
|
||||
}
|
||||
}
|
||||
}
|
||||
.table-empty {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: calc(100% - 72px);
|
||||
flex-direction: column;
|
||||
color: #999;
|
||||
}
|
||||
.statistics-page {
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -650,8 +650,6 @@ onMounted(() => {
|
||||
width: stretch;
|
||||
}
|
||||
.overview {
|
||||
// background-color: #fff;
|
||||
flex: 1;
|
||||
.form {
|
||||
background-color: #fff;
|
||||
.form-title {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user