重点工程(不包括AI报警和视频监控)

pull/1/head
zhangqihang 2024-01-25 18:05:58 +08:00
parent 3c06405a40
commit ca7eadbb19
21 changed files with 2632 additions and 0 deletions

View File

@ -732,6 +732,190 @@ export default [
meta: { title: "排班管理", model: MODEL["1"], isSubMenu: false },
component: "workforce_management/index",
},
{
path: "/keyprojects",
redirect: "/keyprojects/units",
meta: { title: "重点工程", model: MODEL["1"] },
component: "children",
children: [
{
path: "/keyprojects/units",
meta: { title: "相关方管理", isSubMenu: false },
component: "children",
children: [
{
path: "",
component: "keyprojects/units/index",
},
{
path: "/keyprojects/units/add",
meta: {
title: "新增",
activeMenu: "/keyprojects/units",
},
component: "keyprojects/units/add",
},
{
path: "/keyprojects/units/edit",
meta: {
title: "修改",
activeMenu: "/keyprojects/units",
},
component: "keyprojects/units/add",
},
],
},
{
path: "/keyprojects/personnelmanagement",
meta: { title: "相关方人员管理", isSubMenu: false },
component: "keyprojects/personnelmanagement/index",
},
{
path: "/keyprojects/outsourced",
meta: { title: "重点工程管理", isSubMenu: false },
component: "children",
children: [
{
path: "",
component: "keyprojects/outsourced/index",
},
{
path: "/keyprojects/outsourced/add",
meta: {
title: "新增",
activeMenu: "/keyprojects/outsourced",
},
component: "keyprojects/outsourced/add",
},
{
path: "/keyprojects/outsourced/add",
meta: {
title: "编辑",
activeMenu: "/keyprojects/outsourced",
},
component: "keyprojects/outsourced/add",
},
{
path: "/keyprojects/outsourced/view",
meta: {
title: "查看",
activeMenu: "/keyprojects/outsourced",
},
component: "keyprojects/outsourced/view",
},
],
},
{
path: "/keyprojects/inspection",
meta: { title: "安全、环保检查", isSubMenu: false },
component: "children",
children: [
{
path: "",
component: "keyprojects/inspection/index",
},
{
path: "/keyprojects/inspection/record_list",
meta: {
title: "查看列表",
activeMenu: "/keyprojects/inspection"
},
component: "children",
children: [
{
path: "",
component: "keyprojects/inspection/record_list"
},
{
path: "/keyprojects/inspection/record_view",
meta: {
title: "查看详情",
activeMenu: "/keyprojects/inspection",
},
component: "keyprojects/inspection/record_view",
},
]
},
]
},
{
path: "/keyprojects/hidden",
meta: { title: "隐患排查", isSubMenu: false },
component: "children",
children: [
{
path: "",
component: "keyprojects/hidden/index",
},
{
path: "/keyprojects/hidden/record_list",
meta: {
title: "查看列表",
activeMenu: "/keyprojects/hidden"
},
component: "children",
children: [
{
path: "",
component: "keyprojects/hidden/record_list"
},
{
path: "/keyprojects/hidden/record_view",
meta: {
title: "查看详情",
activeMenu: "/keyprojects/hidden",
},
component: "keyprojects/hidden/record_view",
},
]
},
]
},
{
path: "/keyprojects/punish",
meta: { title: "处罚管理", isSubMenu: false },
component: "children",
children: [
{
path: "",
component: "keyprojects/punish/index",
},
{
path: "/keyprojects/punish/record_list",
meta: {
title: "查看列表",
activeMenu: "/keyprojects/punish"
},
component: "children",
children: [
{
path: "",
component: "keyprojects/punish/record_list"
},
{
path: "/keyprojects/punish/record_view",
meta: {
title: "查看详情",
activeMenu: "/keyprojects/punish",
},
component: "keyprojects/punish/record_view",
},
]
},
]
},
{
path: "/keyprojects/aiwarning",
meta: { title: "AI报警", isSubMenu: false },
component: "keyprojects/aiwarning/index",
},
{
path: "/keyprojects/videomanager",
meta: { title: "视频监控", isSubMenu: false },
component: "keyprojects/videomanager/index",
},
],
},
{
path: "/off_duty_management",
redirect: "/off_duty_management/leave",

View File

@ -252,3 +252,11 @@ export const layoutFnGetLevelsAndChildrenNumber = async (DICTIONARIES_ID) => {
const resData = await getLevelsAndChildrenNumber({ DICTIONARIES_ID });
return ref(resData.list);
};
// 相关方作业类别
export const layoutFnGetPersonnelmanagementJobType = async () => {
const resData = await getLevels({
DICTIONARIES_ID: "a8bfd4554af54ee2b816f3007d8baea6",
});
return ref(resData.list);
};

View File

@ -0,0 +1,52 @@
import { post, upload } from "@/request/axios.js";
export const getUnitsListAll = () => post("/units/listAll"); // 施工相关方全部
export const getUnitsList = (params) => post("/units/list", params); // 相关方列表
export const setUnitsAdd = (params) => upload("/units/add", params); // 相关方添加
export const setUnitsGoEdit = (params) => post("/units/goEdit", params); // 相关方修改获取
export const setUnitsEdit = (params) => upload("/units/edit", params); // 相关方修改
export const setUnitsDelete = (params) => post("/units/delete", params); // 相关方删除
export const setUnitsDeleteAll = (params) => post("/units/deleteAll", params); // 相关方删除(多选)
export const setIsTrueDelete = (params) =>
post("/personnelmanagement/isTrueDelete", params); // 查看是否可删除
export const setIsTrueDeleteAll = (params) =>
post("/personnelmanagement/isTrueDeleteAll", params); // 查看是否可删除(全部)
export const getPersonnelmanagementList = (params) =>
post("/personnelmanagement/list", params); // 相关方人员列表
export const setPersonnelmanagementResetPwd = (params) =>
post("/personnelmanagement/resetPwd", params); // 相关方人员重置密码
export const setPersonnelmanagementAdd = (params) =>
post("/personnelmanagement/add", params); // 相关方人员添加
export const setPersonnelmanagementEdit = (params) =>
post("/personnelmanagement/edit", params); // 相关方人员编辑
export const setPersonnelmanagementGoEdit = (params) =>
post("/personnelmanagement/goEdit", params); // 相关方人员编辑获取
export const setPersonnelmanagementDelete = (params) =>
post("/personnelmanagement/delete", params); // 相关方人员删除
export const setPersonnelmanagementDeleteAll = (params) =>
post("/personnelmanagement/deleteAll", params); // 相关方人员批量删除
export const setPersonnelmanagementListAll = (params) =>
post("/personnelmanagement/listAll", params); // 相关方人员列表
export const getOutsourcedList = (params) => post("/outsourced/list", params); // 重点工程列表
export const setOutsourcedAdd = (params) => upload("/outsourced/add", params); // 重点工程添加
export const setOutsourcedEdit = (params) => upload("/outsourced/edit", params); // 重点工程修改
export const setOutsourcedGoEdit = (params) =>
post("/outsourced/goEdit", params); // 重点工程修改获取
export const setOutsourcedDelete = (params) =>
post("/outsourced/delete", params); // 重点工程修改获取
export const getKeyprojectcheckList = (params) =>
post("/keyprojectcheck/list", params); // 安全环保检查列表
export const getKeyprojectcheckGoEdit = (params) =>
post("/keyprojectcheck/goEdit", params); // 安全环保检查详情
export const getKeyprojectcheckListHidden = (params) =>
post("/keyprojectcheck/listHidden", params); // 安全环保检查隐患列表
export const getKeyprojectcheckFindHidden = (params) =>
post("/keyprojectcheck/findHidden", params); // 安全环保检查隐患详情
export const getKeyprojectpunishList = (params) =>
post("/keyprojectpunish/list", params); // 处罚列表
export const getKeyprojectpunishGoEdit = (params) =>
post("/keyprojectpunish/goEdit", params); // 处罚列表详情

View File

@ -0,0 +1,106 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="CREATOR_CORP_NAME" label="添加单位" />
<el-table-column prop="CREATOR_NAME" label="添加人" width="200" />
<el-table-column prop="UNITS_NAME" label="单位名称" width="150" />
<el-table-column prop="JOBTYPE" label="作业类别" width="100" />
<el-table-column prop="OPERATIONITEM" label="操作项目" />
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="SEX" label="性别" />
<el-table-column prop="CERTIFICATE_NUM" label="作业证书编号" />
<el-table-column prop="REVIEWTIME" label="复审时间" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="fnView(row.PERSONNELMANAGEMENT_ID)"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import {
getPersonnelmanagementList,
setPersonnelmanagementGoEdit,
} from "@/request/keyprojects.js";
import { reactive } from "vue";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getPersonnelmanagementList);
const data = reactive({
type: "",
title: "",
editDialog: {
visible: false,
form: {},
},
});
const fnGoEdit = async (id) => {
const resData = await setPersonnelmanagementGoEdit({
PERSONNELMANAGEMENT_ID: id,
});
data.editDialog.form = resData.pd;
};
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
const fnView = async (id) => {
data.editDialog.form = {};
data.editDialog.visible = true;
data.editDialog.type = "view";
data.editDialog.title = "查看";
fnGoEdit(id);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,91 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门" width="250" />
<el-table-column
prop="MANAGE_CORPS_NAME"
label="监理单位"
width="250"
/>
<el-table-column
prop="UNITS_PIC_NAME"
label="相关方单位负责人"
width="200"
/>
<el-table-column prop="UNITS_PHONE" label="电话" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/hidden/record_list',
query: {
OUTSOURCED_ID: row.OUTSOURCED_ID,
},
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import { getOutsourcedList } from "@/request/keyprojects.js";
import router from "@/router";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getOutsourcedList);
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,128 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="验收状态" prop="KEYWORDS">
<el-select v-model="searchForm.ISCHECK">
<el-option label="待验收隐患" value="1" />
<el-option label="已验收隐患" value="2" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column label="重点工程名称">
<template v-slot="{ row }">
{{
row.OUTSOURCED_NAME ? row.OUTSOURCED_NAME : row.AIOUTSOURCED_NAME
}}
</template>
</el-table-column>
<el-table-column label="隐患来源" width="200">
<template v-slot="{ row }">
<span v-if="row.SOURCE === 1">AI</span>
<span v-if="row.SOURCE === 2">AI</span>
<span v-if="row.SOURCE === 3">()</span>
<span v-if="row.SOURCE === 4">()</span>
</template>
</el-table-column>
<el-table-column label="隐患发现人" width="150">
<template v-slot="{ row }">
{{ row.CREATOR_NAME || row.CREATOR_NAMES }}
</template>
</el-table-column>
<el-table-column prop="CREATTIME" label="隐患发现时间" width="100" />
<el-table-column prop="RECTIFICATIONOR_NAME" label="隐患整改人" />
<el-table-column prop="RECTIFICATIONTIME" label="整改时间" />
<el-table-column prop="CREATOR_NAME" label="隐患验收人" width="100" />
<el-table-column prop="CHECKTIME" label="验收时间" width="100" />
<el-table-column label="隐患状态" width="100">
<template v-slot="{ row }">
<span v-if="row.SOURCE === 1"></span>
<span v-if="row.SOURCE === 2"></span>
<span v-if="row.SOURCE === 4"></span>
</template>
</el-table-column>
<el-table-column label="是否处罚" width="100">
<template v-slot="{ row }">
{{ row.ISPUNISH && (row.ISPUNISH === "1" ? "是" : "否") }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/hidden/record_view',
query: {
HIDDEN_ID: row.HIDDEN_ID,
},
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import { getKeyprojectcheckListHidden } from "@/request/keyprojects.js";
import router from "@/router";
import { useRoute } from "vue-router";
const route = useRoute();
const { OUTSOURCED_ID } = route.query;
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getKeyprojectcheckListHidden, {
otherParams: { OUTSOURCED_ID },
});
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,71 @@
<template>
<div>
<layout-card>
<div id="printContent">
<el-divider content-position="left">检查信息</el-divider>
<el-descriptions border>
<el-descriptions-item label="隐患照片 ">
{{ data.info.INSPECTION_CATEGORY }}
</el-descriptions-item>
<el-descriptions-item label="隐患描述">
{{ data.info.HIDDENDESCR }}
</el-descriptions-item>
<el-descriptions-item label="隐患部位 ">
{{ data.info.HIDDENPART }}
</el-descriptions-item>
<el-descriptions-item label="隐患级别">
{{ data.info.HIDDENLEVEL_NAME }}
</el-descriptions-item>
<el-descriptions-item label="隐患类型 ">
限期整改
</el-descriptions-item>
<el-descriptions-item label="整改期限">
{{ data.info.RECTIFICATIONDEADLINE }}
</el-descriptions-item>
<el-descriptions-item label="整改部门 ">
{{ data.info.RECTIFICATIONDEPT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="整改人">
{{ data.info.RECTIFICATIONOR_NAME }}
</el-descriptions-item>
<el-descriptions-item label="整改时间">
{{ data.info.RECTIFICATIONTIME }}
</el-descriptions-item>
<el-descriptions-item label="整改照片">
{{ data.info.RECTIFICATIONTIME }}
</el-descriptions-item>
<el-descriptions-item label="验收时间">
{{ data.info.CHECKTIME }}
</el-descriptions-item>
<el-descriptions-item label="验收图片">
{{ data.info.CHECKTIME }}
</el-descriptions-item>
<el-descriptions-item label="是否进行罚款">
{{ pd.ISPUNISH === "1" ? "是" : "否" }}
</el-descriptions-item>
</el-descriptions>
</div>
</layout-card>
</div>
</template>
<script setup>
import { getKeyprojectcheckFindHidden } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
const route = useRoute();
const data = reactive({
info: {},
});
const fnGetData = async () => {
const resData = await getKeyprojectcheckFindHidden({
HIDDEN_ID: route.query.HIDDEN_ID,
});
data.info = resData.pd;
};
fnGetData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,92 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门" width="200" />
<el-table-column
prop="MANAGE_CORPS_NAME"
label="监理单位"
width="200"
/>
<el-table-column
prop="UNITS_PIC_NAME"
label="相关方单位负责人"
width="200"
/>
<el-table-column prop="UNITS_PHONE" label="电话" />
<el-table-column prop="CHECK_COUNT" label="安全环保检查次数" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/inspection/record_list',
query: {
OUTSOURCED_ID: row.OUTSOURCED_ID,
},
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import { getOutsourcedList } from "@/request/keyprojects.js";
import router from "@/router";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getOutsourcedList);
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,103 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="INSPECTION_PLACE" label="检查场所" />
<el-table-column
prop="INSPECTION_STATUS"
label="检查状态"
width="200"
/>
<el-table-column
prop="INSPECTION_TYPE_NAME"
label="检查类型"
width="150"
/>
<el-table-column prop="INSPECTION_USERS" label="检查人" width="100" />
<el-table-column prop="PERSON_NAME" label="被检查人" />
<el-table-column label="检查时间">
<template v-slot="{ row }">
{{ row.INSPECTION_TIME_START }}-{{ row.INSPECTION_TIME_END }}
</template>
</el-table-column>
<el-table-column prop="HIDDEN_COUNT" label="检查隐患数" width="100" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/inspection/record_view',
query: {
KEYPROJECTCHECK_ID: row.KEYPROJECTCHECK_ID,
},
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import { getKeyprojectcheckList } from "@/request/keyprojects.js";
import router from "@/router";
import { useRoute } from "vue-router";
const route = useRoute();
const { OUTSOURCED_ID } = route.query;
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getKeyprojectcheckList, {
otherParams: { OUTSOURCED_ID },
});
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,85 @@
<template>
<div>
<layout-card>
<div id="printContent">
<el-divider content-position="left">检查信息</el-divider>
<el-descriptions border :column="2">
<el-descriptions-item label="检查题目 ">
{{ data.info.INSPECTION_CATEGORY }}
</el-descriptions-item>
<el-descriptions-item label="记录填写时间">
{{ data.info.CREATTIME }}
</el-descriptions-item>
<el-descriptions-item label="被检查单位 ">
{{ data.info.UNITS_NAME }}
</el-descriptions-item>
<el-descriptions-item label="被检查单位现场负责人">
{{ data.info.PERSON_NAME }}
</el-descriptions-item>
<el-descriptions-item label="检查场所 ">
{{ data.info.INSPECTION_PLACE }}
</el-descriptions-item>
<el-descriptions-item label="检查类型">
{{ data.info.INSPECTION_TYPE_NAME }}
</el-descriptions-item>
<el-descriptions-item label="检查开始时间 ">
{{ data.info.INSPECTION_TIME_START }}
</el-descriptions-item>
<el-descriptions-item label="检查结束时间">
{{ data.info.INSPECTION_TIME_END }}
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">检查情况</el-divider>
<layout-table :data="data.info.situationList" :show-pagination="false">
<el-table-column label="序号" width="70" type="index" />
<el-table-column prop="SITUATION" label="检查情况" />
</layout-table>
<el-divider content-position="left">检查人员</el-divider>
<el-descriptions border :column="1">
<el-descriptions-item label="检查人员">
{{ data.info.INSPECTION_USERS }}
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">发现问题</el-divider>
<layout-table :data="data.info.hiddenList" :show-pagination="false">
<el-table-column label="序号" width="70" type="index" />
<el-table-column prop="HIDDENPART" label="隐患部位" />
<el-table-column prop="HIDDENDESCR" label="隐患描述" />
<el-table-column label="状态" width="100">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="row"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</div>
</layout-card>
</div>
</template>
<script setup>
import { getKeyprojectcheckGoEdit } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
const route = useRoute();
const data = reactive({
info: {},
});
const fnGetData = async () => {
const resData = await getKeyprojectcheckGoEdit({
KEYPROJECTCHECK_ID: route.query.KEYPROJECTCHECK_ID,
});
data.info = resData.pd;
};
fnGetData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,366 @@
<template>
<layout-card>
<el-form
ref="formRef"
:model="data.form"
:rules="rules"
label-width="175px"
>
<el-divider content-position="left">工商信息</el-divider>
<el-row>
<el-col :span="8">
<el-form-item label="企业监督部门" prop="DEPARTMENT_ID">
<layout-department
v-model="data.form.DEPARTMENT_ID"
multiple
show-checkbox
root-disabled="Y"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="企业主管部门" prop="COMPETENT_DEPT_ID">
<layout-department v-model="data.form.COMPETENT_DEPT_ID" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="企业辖区部门" prop="INVOLVING_CORPS_DEPART_ID">
<layout-department
v-model="data.form.INVOLVING_CORPS_DEPART_ID"
multiple
show-checkbox
root-disabled="Y"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="重点工程名称" prop="OUTSOURCED_NAME">
<el-input
v-model="data.form.OUTSOURCED_NAME"
placeholder="请输入内容"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="计划工期起止时间">
<el-date-picker
v-model="data.form.STARTTIME_TIMES"
type="daterange"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
range-separator="至"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合同号">
<el-input
v-model="data.form.CONTRACT_NUM"
placeholder="请输入内容"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="施工相关方" prop="UNITS_ID">
<el-select
v-model="data.form.UNITS_ID"
clearable
placeholder="请选择相关方"
@change="fnGetUnitUser"
>
<el-option
v-for="item in data.unitsList"
:key="item.UNITS_ID"
:label="item.UNITS_NAME"
:value="item.UNITS_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="相关方单位工程负责人" prop="UNITS_PIC">
<el-select
v-model="data.form.UNITS_PIC"
clearable
placeholder="请选择人员"
@change="fnSelectUnitsUser($event)"
>
<el-option
v-for="item in data.unitsUserList"
:key="item.PERSONNELMANAGEMENT_ID"
:label="item.NAME"
:value="item.PERSONNELMANAGEMENT_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="相关方单位负责人手机" prop="UNITS_PHONE">
<el-input
disabled
v-model="data.form.UNITS_PHONE"
placeholder="请输入内容"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="监理单位名称">
<el-input
v-model="data.form.MANAGE_NAME"
placeholder="请输入内容"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="监理单位工程负责人">
<el-input v-model="data.form.MANAGE_PIC" placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="监理单位负责人手机">
<el-input
v-model="data.form.MANAGE_PHONE"
placeholder="请输入内容"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="集团单位">
<el-input v-model="data.form.GROUP_UNIT" placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="状态" prop="STATE">
<el-select v-model="data.form.STATE" placeholder="请选择状态">
<el-option label="进行中" value="1" />
<el-option label="已结束" value="2" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否发送短信">
<el-input v-model="data.form.IS_SMS" placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="安全管理协议(附件)" prop="CONTACTS">
<el-input v-model="data.form.CONTACTS" placeholder="请输入内容" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="left">
处罚相关&nbsp;&nbsp;
<el-button size="small" @click="addInspector"> </el-button>
</el-divider>
<template>
<template>
<template
v-for="(item, index) in data.form.acceptanceList"
:key="item.id"
>
<el-col :span="11">
<el-form-item
label="验收部门"
:prop="'acceptanceList.' + index + '.DEPARTMENT_ID'"
:rules="{
required: true,
message: '请选择验收部门',
trigger: 'change',
}"
>
<layout-department
v-model="item.DEPARTMENT_ID"
@update:model-value="fnInspectDepartmentChange($event, index)"
/>
</el-form-item>
</el-col>
<el-col :span="11">
<el-form-item
label="验收人"
:prop="'acceptanceList.' + index + '.USER_ID'"
:rules="{
required: true,
message: '请选择验收人',
trigger: 'change',
}"
>
<el-select
:model-value="item.USER_ID"
@change="
verifyDuplicateSelection(
data.form.acceptanceList,
index,
'USER_ID',
$event
)
"
>
<el-option
v-for="item in item.userList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item label-width="10px">
<el-button
type="primary"
v-if="index === 0"
@click="fnAddInspectedList"
>
添加
</el-button>
<el-button
type="danger"
v-if="index !== 0"
@click="data.form.acceptanceList.splice(index, 1)"
>
删除
</el-button>
</el-form-item>
</el-col>
</template>
</template>
</template>
<div class="tc mt-10">
<el-button type="primary" @click="fnSubmit"> </el-button>
</div>
</layout-card>
</template>
<script setup>
import useFormValidate from "@/assets/js/useFormValidate";
import {
getUnitsListAll,
setOutsourcedAdd,
setOutsourcedEdit,
setOutsourcedGoEdit,
setPersonnelmanagementListAll,
} from "@/request/keyprojects";
import { ElMessage } from "element-plus";
import { debounce } from "throttle-debounce";
import { reactive, ref } from "vue";
import { useRoute, useRouter } from "vue-router";
import LayoutDepartment from "@/components/department/index.vue";
import { getUserListAll } from "@/request/data_dictionary";
const router = useRouter();
const route = useRoute();
const formRef = ref(null);
const rules = {
DEPARTMENT_ID: [
{ required: true, message: "请选择相关部门", trigger: "blur" },
],
COMPETENT_DEPT_ID: [
{ required: true, message: "请选择相关部门", trigger: "blur" },
],
INVOLVING_CORPS_DEPART_ID: [
{ required: true, message: "请选择相关部门", trigger: "blur" },
],
OUTSOURCED_NAME: [
{ required: true, message: "请输入重点工程名称", trigger: "blur" },
],
UNITS_ID: [{ required: true, message: "请选择相关方", trigger: "blur" }],
UNITS_PIC: [
{ required: true, message: "请选择相关方负责人", trigger: "blur" },
],
UNITS_PHONE: [
{ required: true, message: "请输入负责人手机号", trigger: "blur" },
],
STATE: [{ required: true, message: "请选择状态", trigger: "blur" }],
};
const data = reactive({
form: {
acceptanceList: [
{
id: Math.random(),
DEPARTMENT_ID: "",
USER_ID: "",
userList: [],
},
],
},
inspectorList: [
{ INSPECTION_DEPARTMENT_ID: "", INSPECTION_USER_ID: "", USER_SIDE: "" },
],
INSPECTOR_List: [],
unitsList: [],
});
const addInspector = () => {
data.inspectorList.push({
INSPECTION_DEPARTMENT_ID: "",
INSPECTION_USER_ID: "",
USER_SIDE: "",
});
data.INSPECTOR_List.push([]);
};
const fnGetData = async () => {
const resData = await setOutsourcedGoEdit({
OUTSOURCED_ID: route.query.outsourcedId,
});
data.form = resData.pd;
data.form.acceptanceList = resData.punishThePerson;
};
if (route.query.type === "edit") fnGetData();
const fnGetUnitsList = async () => {
const resData = await getUnitsListAll({});
data.unitsList = resData.varList;
};
fnGetUnitsList();
const fnGetUnitUser = async () => {
const resData = await setPersonnelmanagementListAll({
UNITS_ID: data.form.UNITS_ID,
});
data.form.UNITS_PIC = "";
data.form.UNITS_PHONE = "";
data.unitsUserList = resData.varList;
};
const fnSelectUnitsUser = (event) => {
data.unitsUserList.forEach((item) => {
if (item.PERSONNELMANAGEMENT_ID === event) {
data.form.UNITS_PHONE = item.PHONENUM;
}
});
};
const fnInspectDepartmentChange = async (event, index) => {
data.form.acceptanceList[index].USER_ID = "";
const resData = await getUserListAll({
DEPARTMENT_ID: event,
});
data.form.acceptanceList[index].userList = resData.userList;
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const formData = new FormData();
Object.keys(data.form).forEach((key) => {
formData.append(key, data.form[key]);
});
if (data.form.STARTTIME_TIMES && data.form.STARTTIME_TIMES.length > 0) {
formData.append("STARTTIME", data.form.STARTTIME_TIMES[0]);
formData.append("ENDTIME", data.form.STARTTIME_TIMES[1]);
}
route.query.type === "edit"
? await setOutsourcedEdit(formData)
: await setOutsourcedAdd(formData);
ElMessage.success("保存成功");
router.back();
},
{ atBegin: true }
);
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,201 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="创建单位" prop="CORP_NAME">
<el-input v-model="searchForm.CORP_NAME" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="施工相关方" prop="UNITS_ID">
<el-select
v-model="searchForm.UNITS_ID"
clearable
placeholder="请选择状态"
>
<el-option
v-for="item in data.unitsList"
:key="item.UNITS_ID"
:label="item.UNITS_NAME"
:value="item.UNITS_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column
show-overflow-tooltip
prop="CORP_NAME"
label="创建单位"
/>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="UNITS_NAME" label="施工相关方" />
<el-table-column prop="UNITS_NAME" label="辖区单位">
<template v-slot="{ row }">
<span v-if="row.JURISDICTION_UNIT_NAME">
{{ row.JURISDICTION_UNIT_NAME }}
</span>
<span v-else>{{ row.INVOLVING_CORPS_DEPART_NAME }}</span>
</template>
</el-table-column>
<el-table-column prop="UNITS_NAME" label="主管部门">
<template v-slot="{ row }">
<span v-if="row.Q_COMPETENT_DEPT_NAME">
{{ row.Q_COMPETENT_DEPT_NAME }}
</span>
<span v-else>{{ row.MANAGER_DEPARTMENT_NAME }}</span>
</template>
</el-table-column>
<el-table-column prop="DEPARTMENT_NAME" label="监管部门">
<template v-slot="{ row }">
<span v-if="row.Q_DEPARTMENT_NAME">
{{ row.Q_DEPARTMENT_NAME }}
</span>
<span v-else>{{ row.DEPARTMENT_NAME }}</span>
</template>
</el-table-column>
<el-table-column prop="MANAGE_CORPS_NAME" label="监理单位" />
<el-table-column prop="STATE" label="状态">
<template v-slot="{ row }">
<span v-if="row.STATE === '1'"></span>
<span v-if="row.STATE === '2'"></span>
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_CREATOR_NAME" label="创建人" />
<el-table-column label="操作" align="center" width="200">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/outsourced/view',
query: {
outsourcedId: row.OUTSOURCED_ID,
},
})
"
>
查看
</el-button>
<el-button type="primary" text link v-if="row.STATE === '1'">
结束
</el-button>
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/outsourced/add',
query: {
type: 'edit',
outsourcedId: row.OUTSOURCED_ID,
},
})
"
>
编辑
</el-button>
<el-button
type="primary"
text
link
@click="fnHandleDelete(row.OUTSOURCED_ID)"
>
删除
</el-button>
</template>
</el-table-column>
<template #button>
<el-button
type="primary"
@click="
router.push({
path: '/keyprojects/outsourced/add',
query: {
type: 'add',
},
})
"
>
新增
</el-button>
</template>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import {
getOutsourcedList,
getUnitsListAll,
setOutsourcedDelete,
} from "@/request/keyprojects.js";
import { reactive } from "vue";
import router from "@/router";
import { ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getOutsourcedList);
const data = reactive({
unitsList: [],
});
const fnGetUnitsList = async () => {
const resData = await getUnitsListAll({});
data.unitsList = resData.varList;
};
fnGetUnitsList();
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
const fnHandleDelete = async (OUTSOURCED_ID) => {
await ElMessageBox.confirm("确定要删除吗?", {
type: "warning",
});
await setOutsourcedDelete({ OUTSOURCED_ID });
fnGetData();
};
</script>
<style scoped></style>

View File

@ -0,0 +1,108 @@
<template>
<div>
<layout-card>
<div id="printContent">
<el-divider content-position="left">工程信息</el-divider>
<el-descriptions border :column="2">
<el-descriptions-item label="重点工程名称" :span="2">
{{ data.info.OUTSOURCED_NAME }}
</el-descriptions-item>
<el-descriptions-item
label="股份主管部门"
v-if="data.info.IS_CORP_TYPE === '0'"
>
{{ data.info.MANAGER_DEPARTMENT_NAME }}
</el-descriptions-item>
<el-descriptions-item
label="股份监管部门"
v-if="data.info.IS_CORP_TYPE === '0'"
>
{{ data.info.DEPARTMENT_NAME }}
</el-descriptions-item>
<el-descriptions-item
:span="2"
label="辖区单位"
v-if="data.info.IS_CORP_TYPE === '0'"
>
{{ data.info.JURISDICTION_UNIT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="企业监督部门">
{{ data.info.DEPARTMENT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="企业辖区部门" :span="2">
{{ data.info.INVOLVING_CORPS_DEPART_NAME }}
</el-descriptions-item>
<el-descriptions-item label="集团单位" :span="2">
{{ data.info.GROUP_UNIT_NAME }}
</el-descriptions-item>
<el-descriptions-item label="计划工期" :span="2">
{{ data.info.STARTTIME }} {{ data.info.ENDTIME }}
</el-descriptions-item>
<el-descriptions-item label="施工相关方" :span="2">
{{ data.info.UNITS_NAME }}
</el-descriptions-item>
<el-descriptions-item label="合同号">
{{ data.info.CONTRACT_NUM }}
</el-descriptions-item>
<el-descriptions-item label="监理单位名称">
{{ data.info.MANAGE_CORPS_NAME }}
</el-descriptions-item>
<el-descriptions-item label="相关方单位工程负责人">
{{ data.info.UNITS_PIC_NAME }}
</el-descriptions-item>
<el-descriptions-item label="相关方单位负责人手机">
{{ data.info.UNITS_PHONE }}
</el-descriptions-item>
<el-descriptions-item label="监理单位工程负责人">
{{ data.info.MANAGE_PIC }}
</el-descriptions-item>
<el-descriptions-item label="监理单位负责人手机">
{{ data.info.MANAGE_PHONE }}
</el-descriptions-item>
<el-descriptions-item label="是否发送短信">
{{ data.info.IS_SMS === "0" ? "是" : "否" }}
</el-descriptions-item>
<el-descriptions-item label="状态">
{{ data.info.STATE === "1" ? "进行中" : "已结束" }}
</el-descriptions-item>
</el-descriptions>
<el-divider content-position="left">处罚相关</el-divider>
<el-descriptions border :column="2">
<div v-for="(item, index) in punishThePerson" :key="index">
<el-descriptions-item label="处罚人员部门">
{{ item.punishname }}
</el-descriptions-item>
<el-descriptions-item label="处罚人员">
{{ item.NAME }}
</el-descriptions-item>
</div>
</el-descriptions>
</div></layout-card
>
</div>
</template>
<script setup>
import { setOutsourcedGoEdit } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
const route = useRoute();
const data = reactive({
info: {},
punishThePerson: [],
file: {},
});
const fnGetData = async () => {
const resData = await setOutsourcedGoEdit({
OUTSOURCED_ID: route.query.outsourcedId,
});
data.info = resData.pd;
data.punishThePerson = resData.punishThePerson;
data.file = resData.file9;
};
fnGetData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,172 @@
<template>
<el-dialog v-model="visible" :title="title" width="600" :on-close="fnClose">
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
<el-form-item label="单位名称" prop="UNITS_ID">
<el-select
:disabled="type === 'view'"
v-model="form.UNITS_ID"
placeholder="请选择状态"
>
<el-option
v-for="item in data.unitsnameList"
:key="item.UNITS_ID"
:label="item.UNITS_NAME"
:value="item.UNITS_ID"
/>
</el-select>
</el-form-item>
<el-form-item label="作业类别">
<el-select
:disabled="type === 'view'"
v-model="form.JOB_TYPE"
placeholder="请选择状态"
>
<el-option
v-for="item in jobtypeList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
<el-form-item label="操作项目">
<el-input v-model="form.OPERATIONITEM" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="手机号码" prop="PHONENUM">
<el-input v-model="form.PHONENUM" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="姓名" prop="NAME">
<el-input v-model="form.NAME" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="性别">
<el-select
:disabled="type === 'view'"
v-model="form.SEX"
placeholder="请选择性别"
>
<el-option label="男" value="0" />
<el-option label="女" value="1" />
</el-select>
</el-form-item>
<el-form-item label="作业证书编号">
<el-input v-model="form.CERTIFICATE_NUM" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="复审时间">
<el-input v-model="form.REVIEWTIME" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="身份证号码">
<el-input v-model="form.IDENTITYCARD" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="发证机关">
<el-input v-model="form.LICENSING" :disabled="type === 'view'" />
</el-form-item>
<el-form-item label="有效期">
<el-date-picker
:disabled="type === 'view'"
v-model="form.VALID_TIME"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
/>
</el-form-item>
</el-form>
<template #footer>
<el-button @click="fnClose"> </el-button>
<el-button type="primary" @click="fnSubmit"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import { useVModels } from "@vueuse/core";
import { reactive, ref } from "vue";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
import { layoutFnGetPersonnelmanagementJobType } from "@/assets/js/data_dictionary";
import {
getUnitsListAll,
setPersonnelmanagementAdd,
setPersonnelmanagementEdit,
} from "@/request/keyprojects";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
form: {
type: Object,
required: true,
default: () => ({}),
},
type: {
type: String,
required: true,
default: () => "",
},
title: {
type: String,
required: true,
default: () => "",
},
});
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits);
const rules = {
UNITS_ID: [{ required: true, message: "请选择单位名称", trigger: "change" }],
NAME: [{ required: true, message: "请输入姓名", trigger: "blur" }],
PHONENUM: [
{ required: true, message: "请输入手机号码", trigger: "blur" },
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
{
pattern:
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
message: "请输入正确的手机号码",
},
],
};
const data = reactive({
unitsnameList: [],
});
const formRef = ref(null);
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
if (form.VALID_TIME && form.VALID_TIME.length !== 0) {
form.VALID_STIME = form.VALID_TIME[0];
form.VALID_ETIME = form.VALID_TIME[1];
}
props.type === "add"
? await setPersonnelmanagementAdd(props.form)
: await setPersonnelmanagementEdit(props.form);
ElMessage.success("提交成功");
fnClose();
emits("get-data");
},
{ atBegin: true }
);
const jobtypeList = await layoutFnGetPersonnelmanagementJobType();
const fnUnitsListAll = async () => {
const resData = await getUnitsListAll();
data.unitsnameList = resData.varList;
};
fnUnitsListAll();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,216 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="作业类别" prop="JOB_TYPE">
<el-select
v-model="searchForm.JOB_TYPE"
clearable
placeholder="请选择状态"
>
<el-option
v-for="item in jobtypeList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="CREATOR_CORP_NAME" label="添加单位" />
<el-table-column prop="CREATOR_NAME" label="添加人" width="200" />
<el-table-column prop="UNITS_NAME" label="单位名称" width="150" />
<el-table-column prop="JOBTYPE" label="作业类别" width="100" />
<el-table-column prop="OPERATIONITEM" label="操作项目" />
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="SEX" label="性别" />
<el-table-column prop="CERTIFICATE_NUM" label="作业证书编号" />
<el-table-column prop="REVIEWTIME" label="复审时间" />
<el-table-column label="操作" align="center" width="240">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="resetPwd(row.PERSONNELMANAGEMENT_ID, row.NAME)"
>
重置密码
</el-button>
<el-button
type="primary"
text
link
@click="fnView(row.PERSONNELMANAGEMENT_ID)"
>
查看
</el-button>
<el-button
type="primary"
text
link
@click="fnEdit(row.PERSONNELMANAGEMENT_ID)"
>
编辑
</el-button>
<el-button
type="primary"
text
link
@click="handleDelete(row.PERSONNELMANAGEMENT_ID)"
>
删除
</el-button>
</template>
</el-table-column>
<template #button>
<el-button type="primary" @click="fnAdd(row)"> </el-button>
<el-button type="danger" @click="batchDel()"> </el-button>
</template>
</layout-table>
</layout-card>
<edit
v-model:visible="data.editDialog.visible"
v-model:form="data.editDialog.form"
:type="data.editDialog.type"
:title="data.editDialog.title"
@get-data="fnResetPaginationTransfer"
/>
</div>
</template>
<script setup>
import { layoutFnGetPersonnelmanagementJobType } from "@/assets/js/data_dictionary";
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import {
getPersonnelmanagementList,
setPersonnelmanagementResetPwd,
setPersonnelmanagementGoEdit,
setPersonnelmanagementDelete,
setPersonnelmanagementDeleteAll,
} from "@/request/keyprojects.js";
import { ElMessage, ElMessageBox } from "element-plus";
import { reactive } from "vue";
import Edit from "./components/edit.vue";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getPersonnelmanagementList);
const jobtypeList = await layoutFnGetPersonnelmanagementJobType();
const data = reactive({
type: "",
title: "",
editDialog: {
visible: false,
form: {},
},
});
const resetPwd = async (PERSONNELMANAGEMENT_ID, NAME) => {
await ElMessageBox.confirm(
"是否将[" + NAME + "]的密码重置为 Aa@123456789 吗?",
{
type: "warning",
}
);
await setPersonnelmanagementResetPwd({ PERSONNELMANAGEMENT_ID });
ElMessage.success("重置成功");
};
const handleDelete = async (PERSONNELMANAGEMENT_ID) => {
await ElMessageBox.confirm("确定要删除吗?", {
type: "warning",
});
await setPersonnelmanagementDelete({ PERSONNELMANAGEMENT_ID });
fnGetData();
};
const batchDel = async () => {
const selectionData = tableRef.value.getSelectionRows();
if (selectionData.length === 0) {
ElMessage.warning("请选中要删除的项");
return;
}
await ElMessageBox.confirm("确定要删除吗?", {
type: "warning",
});
const ids = selectionData
.map((item) => {
return item.PERSONNELMANAGEMENT_ID;
})
.join(",");
await setPersonnelmanagementDeleteAll({ DATA_IDS: ids });
fnGetData();
};
const fnGoEdit = async (id) => {
const resData = await setPersonnelmanagementGoEdit({
PERSONNELMANAGEMENT_ID: id,
});
data.editDialog.form = resData.pd;
};
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
const fnAdd = () => {
data.editDialog.form = {};
data.editDialog.visible = true;
data.editDialog.type = "add";
data.editDialog.title = "新增";
};
const fnEdit = async (id) => {
data.editDialog.form = {};
data.editDialog.visible = true;
data.editDialog.type = "edit";
data.editDialog.title = "编辑";
fnGoEdit(id);
};
const fnView = async (id) => {
data.editDialog.form = {};
data.editDialog.visible = true;
data.editDialog.type = "view";
data.editDialog.title = "查看";
fnGoEdit(id);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,92 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="DEPARTMENT_NAME" label="监管部门" width="200" />
<el-table-column
prop="MANAGE_CORPS_NAME"
label="监理单位"
width="200"
/>
<el-table-column
prop="UNITS_PIC_NAME"
label="相关方单位负责人"
width="200"
/>
<el-table-column prop="UNITS_PHONE" label="电话" />
<el-table-column prop="CHECK_COUNT" label="安全环保检查次数" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/punish/record_list',
query: {
OUTSOURCED_ID: row.OUTSOURCED_ID,
},
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import { getOutsourcedList } from "@/request/keyprojects.js";
import router from "@/router";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getOutsourcedList);
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,106 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="处罚状态">
<el-select v-model="searchForm.HANDLED">
<el-option label="待反馈处罚" value="1" />
<el-option label="已完成处罚" value="2" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" />
<el-table-column prop="REASON" label="处罚原因" width="200" />
<el-table-column prop="CREATOR_NAME" label="下发人" width="150" />
<el-table-column
prop="OUTSOURCED_NAME"
label="被处罚单位"
width="100"
/>
<el-table-column prop="PERSON_NAME" label="被处罚人" />
<el-table-column label="处罚处理状态">
<template v-slot="{ row }">
{{ row.HANDLED === "0" ? "待处理" : "已处理" }}
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/inspection/record_view',
query: {
KEYPROJECTPUNISH_ID: row.KEYPROJECTPUNISH_ID,
},
})
"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import { getKeyprojectpunishList } from "@/request/keyprojects.js";
import router from "@/router";
import { useRoute } from "vue-router";
const route = useRoute();
const { OUTSOURCED_ID } = route.query;
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getKeyprojectpunishList, {
otherParams: { OUTSOURCED_ID },
});
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
</script>
<style scoped></style>

View File

@ -0,0 +1,59 @@
<template>
<div>
<layout-card>
<div id="printContent">
<el-divider content-position="left">检查信息</el-divider>
<el-descriptions border>
<el-descriptions-item label="处罚原因 ">
{{ data.info.REASON }}
</el-descriptions-item>
<el-descriptions-item label="处罚金额">
{{ data.info.AMOUT }}
</el-descriptions-item>
<el-descriptions-item label="被处罚单位 ">
{{ data.info.OUTSOURCED_NAME }}
</el-descriptions-item>
<el-descriptions-item label="被处罚人">
{{ data.info.PERSON_NAME }}
</el-descriptions-item>
<el-descriptions-item label="下发人 ">
{{ data.info.CREATOR_NAME }}
</el-descriptions-item>
<el-descriptions-item label="下发处罚时间">
{{ data.info.DATE }}
</el-descriptions-item>
<el-descriptions-item label="罚款缴纳单 ">
{{ data.info.INSPECTION_TIME_START }}
</el-descriptions-item>
<el-descriptions-item label="处罚处理人">
{{ data.info.PERSON_NAME }}
</el-descriptions-item>
<el-descriptions-item label="处罚处理时间">
{{ data.info.HANLDE_TIME }}
</el-descriptions-item>
</el-descriptions>
</div>
</layout-card>
</div>
</template>
<script setup>
import { getKeyprojectpunishGoEdit } from "@/request/keyprojects";
import { reactive } from "vue";
import { useRoute } from "vue-router";
const route = useRoute();
const data = reactive({
info: {},
});
const fnGetData = async () => {
const resData = await getKeyprojectpunishGoEdit({
KEYPROJECTPUNISH_ID: route.query.KEYPROJECTPUNISH_ID,
});
data.info = resData.pd;
};
fnGetData();
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,107 @@
<template>
<layout-card>
<el-form
ref="formRef"
:model="data.form"
:rules="rules"
label-width="150px"
>
<el-row>
<el-col :span="12">
<el-form-item label="相关方单位名称" prop="UNITS_NAME">
<el-input v-model="data.form.UNITS_NAME" placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="统一社会信用代码" prop="CODE">
<el-input v-model="data.form.CODE" placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人" prop="CONTACTS">
<el-input v-model="data.form.CONTACTS" placeholder="请输入内容" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人电话" prop="CONTACTS_PHONE">
<el-input
v-model="data.form.CONTACTS_PHONE"
placeholder="请输入内容"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="tc mt-10">
<el-button type="primary" @click="fnSubmit"> </el-button>
</div>
</layout-card>
</template>
<script setup>
import useFormValidate from "@/assets/js/useFormValidate";
import {
setUnitsAdd,
setUnitsEdit,
setUnitsGoEdit,
} from "@/request/keyprojects";
import { ElMessage } from "element-plus";
import { debounce } from "throttle-debounce";
import { reactive, ref } from "vue";
import { useRoute, useRouter } from "vue-router";
const router = useRouter();
const route = useRoute();
const formRef = ref(null);
const rules = {
UNITS_NAME: [
{ required: true, message: "请输入相关方单位名称", trigger: "blur" },
],
CODE: [
{ required: true, message: "请输入统一社会信用代码", trigger: "blur" },
{
pattern: /^[^_IOZSVa-z\W]{2}\d{6}[^_IOZSVa-z\W]{10}$/,
message: "请输入正确的统一社会信用代码",
},
],
CONTACTS: [{ required: true, message: "请输入联系人", trigger: "blur" }],
CONTACTS_PHONE: [
{ required: true, message: "请输入联系人电话", trigger: "blur" },
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
{
pattern:
/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/,
message: "请输入正确的手机号码",
},
],
};
const data = reactive({
form: [],
});
const fnGoEdit = async () => {
const resData = await setUnitsGoEdit({ UNITS_ID: route.query.UNITS_ID });
data.form = resData.pd;
};
if (route.query.type === "edit") fnGoEdit();
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const formData = new FormData();
Object.keys(data.form).forEach((key) => {
formData.append(key, data.form[key]);
});
route.query.type === "edit"
? await setUnitsEdit(formData)
: await setUnitsAdd(formData);
ElMessage.success("保存成功");
router.back();
},
{ atBegin: true }
);
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,179 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column
prop="UNITS_NAME"
label="相关方单位名称"
show-overflow-tooltip
/>
<el-table-column prop="CODE" label="统一社会信用代码" width="200" />
<el-table-column
prop="CONTACTS"
label="联系人"
width="150"
show-overflow-tooltip
/>
<el-table-column prop="CONTACTS_PHONE" label="联系人电话" width="100" />
<el-table-column
prop="CORP_NAME"
label="创建单位"
show-overflow-tooltip
/>
<el-table-column
prop="CREATOR_NAME"
label="创建人"
show-overflow-tooltip
/>
<el-table-column label="操作" align="center" width="140">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/keyprojects/units/add',
query: {
type: 'edit',
UNITS_ID: row.UNITS_ID,
},
})
"
>
编辑
</el-button>
<el-button
type="primary"
text
link
@click="isTrueDelete(row.UNITS_ID)"
>
删除
</el-button>
</template>
</el-table-column>
<template #button>
<el-button
type="primary"
@click="
router.push({
path: '/keyprojects/units/add',
query: {
type: 'add',
},
})
"
>
新增
</el-button>
<el-button type="danger" @click="isTrueDeleteAll">
批量删除
</el-button>
</template>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import {
getUnitsList,
setIsTrueDelete,
setIsTrueDeleteAll,
setUnitsDelete,
setUnitsDeleteAll,
} from "@/request/keyprojects.js";
import router from "@/router";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getUnitsList);
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
const isTrueDelete = async (UNITS_ID) => {
const resData = await setIsTrueDelete({ UNITS_ID });
if (resData.result === "success" && resData.number === 0) {
handleDelete(UNITS_ID);
} else {
ElMessage.info("相关方下还有人员不能进行删除");
}
};
const isTrueDeleteAll = async () => {
const selectionData = tableRef.value.getSelectionRows();
if (selectionData.length === 0) {
ElMessage.warning("请选中要删除的项");
return;
}
const ids = selectionData
.map((item) => {
return item.UNITS_ID;
})
.join(",");
const resData = await setIsTrueDeleteAll({ UNITS_ID: ids });
if (resData.result === "success" && resData.number === 0) {
batchDel(ids);
} else {
ElMessage.warning("相关方下还有人员不能进行删除");
}
};
const batchDel = async (ids) => {
await ElMessageBox.confirm("确定要删除吗?", {
type: "warning",
});
await setUnitsDeleteAll({ DATA_IDS: ids });
fnGetData();
};
const handleDelete = async (UNITS_ID) => {
await ElMessageBox.confirm("确定要删除吗?", {
type: "warning",
});
await setUnitsDelete({ UNITS_ID });
fnGetData();
};
</script>
<style scoped></style>

View File

@ -0,0 +1,106 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="4">
<el-form-item label="关键字搜索" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
:data="list"
@get-data="fnGetData"
v-model:pagination="pagination"
row-key="UNITS_ID"
>
<el-table-column reserve-selection type="selection" width="55" />
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="CREATOR_CORP_NAME" label="添加单位" />
<el-table-column prop="CREATOR_NAME" label="添加人" width="200" />
<el-table-column prop="UNITS_NAME" label="单位名称" width="150" />
<el-table-column prop="JOBTYPE" label="作业类别" width="100" />
<el-table-column prop="OPERATIONITEM" label="操作项目" />
<el-table-column prop="NAME" label="姓名" />
<el-table-column prop="SEX" label="性别" />
<el-table-column prop="CERTIFICATE_NUM" label="作业证书编号" />
<el-table-column prop="REVIEWTIME" label="复审时间" />
<el-table-column label="操作" align="center" width="120">
<template v-slot="{ row }">
<el-button
type="primary"
text
link
@click="fnView(row.PERSONNELMANAGEMENT_ID)"
>
查看
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
</template>
<script setup>
import useListData from "@/assets/js/useListData";
import { serialNumber } from "@/assets/js/utils";
import {
getPersonnelmanagementList,
setPersonnelmanagementGoEdit,
} from "@/request/keyprojects.js";
import { reactive } from "vue";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
useListData(getPersonnelmanagementList);
const data = reactive({
type: "",
title: "",
editDialog: {
visible: false,
form: {},
},
});
const fnGoEdit = async (id) => {
const resData = await setPersonnelmanagementGoEdit({
PERSONNELMANAGEMENT_ID: id,
});
data.editDialog.form = resData.pd;
};
const fnResetPaginationTransfer = () => {
fnGetData(searchForm);
};
const fnView = async (id) => {
data.editDialog.form = {};
data.editDialog.visible = true;
data.editDialog.type = "view";
data.editDialog.title = "查看";
fnGoEdit(id);
};
</script>
<style scoped></style>