生产安全事故档案模块开发

dev
WenShiJun 2024-03-15 17:54:28 +08:00
parent 3ec021ff30
commit 9472c26770
41 changed files with 1783 additions and 649 deletions

View File

@ -49,6 +49,24 @@ export const LOCATIONTYPEMENU = [
{ id: "目的地", name: "2" }, { id: "目的地", name: "2" },
]; ];
export const PENALTYMETHODMENU = [
{ id: "罚款", name: "1" },
{ id: "罚钱", name: "2" },
{ id: "赔礼道歉", name: "3" },
];
export const EDUCATIONALMENU = [
{ id: "专科", name: "1" },
{ id: "本科", name: "2" },
{ id: "博士", name: "3" },
];
export const ACCIDENTNATUREMENU = [
{ id: "火灾", name: "1" },
{ id: "车祸", name: "2" },
{ id: "天灾", name: "3" },
];
export const PRINT_STYLE = export const PRINT_STYLE =
'<style type="text/css" media="print">\n' + '<style type="text/css" media="print">\n' +
" @page { size: landscape; }\n" + " @page { size: landscape; }\n" +
@ -60,32 +78,27 @@ export const SPECIAL_ENTERPRISES = [
"13cf0f4ec77e4d98ae8cdd9c3386ae0c", "13cf0f4ec77e4d98ae8cdd9c3386ae0c",
]; ];
export const OPERATING_VEHICLE_TYPE_LIST = [ export const OPERATING_VEHICLE_TYPE_LIST = [
// 运营车型 // 运营车型
{ID:'1',NAME:'运输车辆'}, { ID: "1", NAME: "运输车辆" },
{ID:'2',NAME:'货运挂车'}, { ID: "2", NAME: "货运挂车" },
] ];
export const DUE_STATUS_LIST = [ export const DUE_STATUS_LIST = [
// 到期状态 // 到期状态
{ID:'1',NAME:'未到期'}, { ID: "1", NAME: "未到期" },
{ID:'0',NAME:'已到期'}, { ID: "0", NAME: "已到期" },
{ID:'2',NAME:'即将到期'}, { ID: "2", NAME: "即将到期" },
] ];
export const REMINDER_STATUS_LIST = [ export const REMINDER_STATUS_LIST = [
// 提醒状态 // 提醒状态
{ID:'1',NAME:'开启'}, { ID: "1", NAME: "开启" },
{ID:'0',NAME:'关闭'}, { ID: "0", NAME: "关闭" },
] ];
// export const MAINTENANCE_LEVEL_LIST = [ // export const MAINTENANCE_LEVEL_LIST = [
// //维保等级 // //维保等级
// {ID:'1',NAME:'一级维保'}, // {ID:'1',NAME:'一级维保'},
// {ID:'2',NAME:'二级维保'}, // {ID:'2',NAME:'二级维保'},
// ] // ]

View File

@ -0,0 +1,14 @@
import { post, upload } from "@/request/axios.js";
export const getManagementAgreementList = (params) =>
post("/managementagreement/listForManagementAgreementlist", params); // 相关方安全管理协议列表
export const addManagementAgreementView = (params) =>
upload("/managementagreement/add", params); // 添加 相关方安全管理协议
export const editManagementAgreementView = (params) =>
upload("/managementagreement/edit", params); // 修改 相关方安全管理协议
export const infoManagementAgreementView = (params) =>
upload("/managementagreement/goEdit", params); // 详情 相关方安全管理协议
export const deleteManagementAgreementView = (params) =>
upload("/managementagreement/delete", params); // 删除 相关方安全管理协议

View File

@ -0,0 +1,15 @@
import { post, upload } from "@/request/axios.js";
export const getAccidentInvestigationList = (params) =>
post("/accidentinvestigation/listForAccidentInvestigation", params);
export const setAccidentInvestigationDelete = (params) =>
post("/accidentinvestigation/delete", params);
export const addAccidentInvestigationView = (params) =>
upload("/accidentinvestigation/add", params);
export const editAccidentInvestigation = (params) =>
upload("/accidentinvestigation/edit", params);
export const infoAccidentInvestigation = (params) =>
post("/accidentinvestigation/goEdit", params);

View File

@ -8,3 +8,6 @@ export const editAssessmentView = (params) =>
upload("/assessment/edit", params); // 修改 安全责任制考核 upload("/assessment/edit", params); // 修改 安全责任制考核
export const infoAssessmentView = (params) => export const infoAssessmentView = (params) =>
upload("/assessment/goEdit", params); // 详情 安全责任制考核 upload("/assessment/goEdit", params); // 详情 安全责任制考核
export const deleteAssessmentView = (params) =>
upload("/assessment/delete", params); // 删除 安全责任制考核

View File

@ -8,3 +8,6 @@ export const editProductionView = (params) =>
upload("/production/edit", params); // 修改 安全生产目标 upload("/production/edit", params); // 修改 安全生产目标
export const infoProductionView = (params) => export const infoProductionView = (params) =>
upload("/production/goEdit", params); // 详情 安全生产目标 upload("/production/goEdit", params); // 详情 安全生产目标
export const deleteProductionView = (params) =>
upload("/production/delete", params); // 删除 安全生产目标

View File

@ -9,3 +9,6 @@ export const editStaffingView = (params) =>
upload("/managementstaffing/edit", params); // 修改 管理人员配备 upload("/managementstaffing/edit", params); // 修改 管理人员配备
export const infoStaffingView = (params) => export const infoStaffingView = (params) =>
upload("/managementstaffing/goEdit", params); // 详情 管理人员配备 upload("/managementstaffing/goEdit", params); // 详情 管理人员配备
export const deleteStaffingView = (params) =>
upload("/managementstaffing/delete", params); // 删除 管理人员配备

View File

@ -0,0 +1,15 @@
import { post, upload } from "@/request/axios.js";
export const getViolationRegistrationList = (params) =>
post("/violationregistration/listForViolationRegistration", params); // 登记列表
export const setViolationRegistrationDelete = (params) =>
post("/violationregistration/delete", params); // 登记删除
export const addViolationRegistrationView = (params) =>
upload("/violationregistration/add", params); // 添加登记
export const editViolationRegistration = (params) =>
upload("/violationregistration/edit", params); // 修改登记
export const infoViolationRegistration = (params) =>
post("/violationregistration/goEdit", params); // 详情登记

View File

@ -95,10 +95,11 @@
import { serialNumber } from "@/assets/js/utils"; import { serialNumber } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js"; import useListData from "@/assets/js/useListData.js";
import { onMounted, reactive, ref } from "vue"; import { onMounted, reactive, ref } from "vue";
import router from "@/router/index.js";
import { getSecurityCustomerList } from "@/request/customer_management.js"; import { getSecurityCustomerList } from "@/request/customer_management.js";
import { getSecurityPerson } from "@/request/waybill_registration.js"; import { getSecurityPerson } from "@/request/waybill_registration.js";
import { useRouter } from "vue-router";
const router = useRouter();
const tableRef = ref(null); const tableRef = ref(null);
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSecurityCustomerList); useListData(getSecurityCustomerList);

View File

@ -8,21 +8,6 @@
> >
<el-divider content-position="left">添加</el-divider> <el-divider content-position="left">添加</el-divider>
<el-row :gutter="20"> <el-row :gutter="20">
<!-- <el-col :span="8">-->
<!-- <el-form-item label="运输企业" prop="TRANSPORTATIONCOMPANY">-->
<!-- <el-select-->
<!-- v-model="data.form.TRANSPORTATIONCOMPANY"-->
<!-- placeholder="请选择运输企业"-->
<!-- >-->
<!-- <el-option-->
<!-- v-for="item in data.unitsList"-->
<!-- :key="item.CORPINFO_ID"-->
<!-- :label="item.CORP_NAME"-->
<!-- :value="item.CORP_NAME"-->
<!-- />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="地点类型" prop="LOCATIONTYPE"> <el-form-item label="地点类型" prop="LOCATIONTYPE">
<el-select <el-select

View File

@ -93,10 +93,11 @@
import { serialNumber } from "@/assets/js/utils"; import { serialNumber } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js"; import useListData from "@/assets/js/useListData.js";
import { onMounted, reactive, ref } from "vue"; import { onMounted, reactive, ref } from "vue";
import router from "@/router/index.js";
import { getSecurityPerson } from "@/request/waybill_registration.js"; import { getSecurityPerson } from "@/request/waybill_registration.js";
import { getSecurityLocationList } from "@/request/location_management.js"; import { getSecurityLocationList } from "@/request/location_management.js";
import { useRouter } from "vue-router";
const router = useRouter();
const tableRef = ref(null); const tableRef = ref(null);
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSecurityLocationList); useListData(getSecurityLocationList);

View File

@ -266,7 +266,7 @@ import LayoutDepartment from "@/components/department/index.vue";
import { getPostListAll, getUserListAll } from "@/request/data_dictionary.js"; import { getPostListAll, getUserListAll } from "@/request/data_dictionary.js";
import { getSecurityCustomerList } from "@/request/customer_management.js"; import { getSecurityCustomerList } from "@/request/customer_management.js";
import { getSecurityLocationList } from "@/request/location_management.js"; import { getSecurityLocationList } from "@/request/location_management.js";
import { getOperationVehicleList } from "@/request/operation_vehicle.js"; import { getOperationList } from "@/request/operation_vehicle.js";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
const formRef = ref(null); const formRef = ref(null);
@ -337,7 +337,7 @@ const data = reactive({
}); });
const router = useRouter(); const router = useRouter();
const fnVehicle = async () => { const fnVehicle = async () => {
const res = await getOperationVehicleList(); const res = await getOperationList();
const varList = res.varList || []; const varList = res.varList || [];
data.OperationVehicle = varList.map((item) => item.PLATE_NUMBER); data.OperationVehicle = varList.map((item) => item.PLATE_NUMBER);
}; };

View File

@ -103,15 +103,14 @@ import {
dateteSecurityAllNotice, dateteSecurityAllNotice,
} from "@/request/safety_production_related.js"; } from "@/request/safety_production_related.js";
import { getSecurityWaybillreList } from "@/request/waybill_registration.js"; import { getSecurityWaybillreList } from "@/request/waybill_registration.js";
import router from "@/router/index.js";
import { ElMessageBox, ElMessage } from "element-plus"; import { ElMessageBox, ElMessage } from "element-plus";
import { debounce } from "throttle-debounce"; import { debounce } from "throttle-debounce";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js"; import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { useRouter } from "vue-router";
const router = useRouter();
const buttonJurisdiction = await useButtonJurisdiction("riskunit"); const buttonJurisdiction = await useButtonJurisdiction("riskunit");
const tableRef = ref(null); const tableRef = ref(null);
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSecurityWaybillreList); useListData(getSecurityWaybillreList);
const data = reactive({ const data = reactive({

View File

@ -130,15 +130,14 @@ import {
dateteSecurityAllNotice, dateteSecurityAllNotice,
} from "@/request/safety_production_related.js"; } from "@/request/safety_production_related.js";
import { getSecurityWaybillreList } from "@/request/waybill_registration.js"; import { getSecurityWaybillreList } from "@/request/waybill_registration.js";
import router from "@/router/index.js";
import { ElMessageBox, ElMessage } from "element-plus"; import { ElMessageBox, ElMessage } from "element-plus";
import { debounce } from "throttle-debounce"; import { debounce } from "throttle-debounce";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js"; import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { useRoute } from "vue-router";
const router = useRoute();
const buttonJurisdiction = await useButtonJurisdiction("riskunit"); const buttonJurisdiction = await useButtonJurisdiction("riskunit");
const tableRef = ref(null); const tableRef = ref(null);
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSecurityWaybillreList); useListData(getSecurityWaybillreList);
const data = reactive({ const data = reactive({

View File

@ -24,7 +24,7 @@
v-model:file-list="form.file" v-model:file-list="form.file"
accept=".pdf" accept=".pdf"
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE"> <el-form-item label="到期时间" prop="EXPIRYDATE">
@ -150,15 +150,6 @@ const fnSubmit = async () => {
// //
emits("get-data"); emits("get-data");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -124,8 +124,9 @@ import {
getSafetyContractList, getSafetyContractList,
infoContractView, infoContractView,
} from "@/request/traffic_safety_contract.js"; } from "@/request/traffic_safety_contract.js";
import router from "@/router/index.js"; import { useRouter } from "vue-router";
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyContractList); useListData(getSafetyContractList);
const data = reactive({ const data = reactive({

View File

@ -31,7 +31,7 @@
v-model:file-list="form.file" v-model:file-list="form.file"
accept=".pdf" accept=".pdf"
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE"> <el-form-item label="到期时间" prop="EXPIRYDATE">
@ -155,15 +155,6 @@ const fnSubmit = async () => {
// //
emits("get-data"); emits("get-data");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -88,6 +88,14 @@
> >
编辑 编辑
</el-button> </el-button>
<el-button
text
link
type="primary"
@click="deleteItem(row.STAFFING_ID)"
>
删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
<template #button> <template #button>
@ -117,10 +125,12 @@ import useListData from "@/assets/js/useListData.js";
import Add from "./components/add.vue"; import Add from "./components/add.vue";
import { nextTick, reactive } from "vue"; import { nextTick, reactive } from "vue";
import { import {
deleteStaffingView,
getSafetyStaffingList, getSafetyStaffingList,
infoStaffingView, infoStaffingView,
} from "@/request/traffic_safety_staffing.js"; } from "@/request/traffic_safety_staffing.js";
import ViewInfo from "./components/view.vue"; import ViewInfo from "./components/view.vue";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyStaffingList); useListData(getSafetyStaffingList);
@ -154,6 +164,15 @@ const fnView = async (STAFFING_ID) => {
data.viewDialog.info = resData.pd; data.viewDialog.info = resData.pd;
data.viewDialog.visible = true; data.viewDialog.visible = true;
}; };
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
await deleteStaffingView({ STAFFING_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
</script> </script>
<style scoped></style> <style scoped></style>

View File

@ -0,0 +1,613 @@
<template>
<layout-card>
<el-form
ref="formRef"
:model="data.form"
:rules="rules"
label-width="175px"
>
<el-row>
<el-col :span="24">
<el-divider content-position="left">事故人员信息</el-divider>
</el-col>
<el-col :span="5">
<el-form-item label="事故人员" prop="USER_ID">
<el-select v-model="data.form.USER_ID" placeholder="请选择事故人员">
<el-option
v-for="item in data.unitsList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="人员性别" prop="SEX">
<el-select v-model="data.form.SEX" placeholder="请选择人员性别">
<el-option label="男" :value="'1'" />
<el-option label="女" :value="'0'" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="人员年龄" prop="AGE">
<el-input v-model="data.form.AGE" placeholder="请输入人员年龄" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="文化水平" prop="EDUCATIONALLEVEL">
<el-select
v-model="data.form.EDUCATIONALLEVEL"
placeholder="请选择文化水平"
>
<el-option
v-for="item in EDUCATIONALMENU"
:key="item.id"
:label="item.id"
:value="item.name"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="工作部门" prop="DEPARTMENT">
<el-input
v-model="data.form.DEPARTMENT"
placeholder="请输入工作部门"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="员工工种" prop="JOBTYPE">
<el-input
v-model="data.form.JOBTYPE"
placeholder="请输入员工工种"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="ENTRYDATE" label="入职日期">
<el-date-picker
v-model="data.form.ENTRYDATE"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-divider content-position="left">事故调查</el-divider>
</el-col>
<el-col :span="5">
<el-form-item prop="ACCIDENTDATE" label="事故日期">
<el-date-picker
v-model="data.form.ACCIDENTDATE"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="事故位置" prop="ACCIDENTLOCATION">
<el-input
v-model="data.form.ACCIDENTLOCATION"
placeholder="请输入事故位置"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="受伤部位" prop="INJUREDPART">
<el-input
v-model="data.form.INJUREDPART"
placeholder="请输入受伤部位"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="持证情况" prop="CERTIFICATIONSTATUS">
<el-input
v-model="data.form.CERTIFICATIONSTATUS"
type="textarea"
:rows="3"
placeholder="请输入持证情况"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="教育情况" prop="EDUCATIONSITUATION">
<el-input
v-model="data.form.EDUCATIONSITUATION"
type="textarea"
:rows="3"
placeholder="请输入教育情况"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="故事描述" prop="ACCIDENTDESCRIPTION">
<el-input
v-model="data.form.ACCIDENTDESCRIPTION"
type="textarea"
:rows="3"
placeholder="请输入故事描述"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="事故性质" prop="ACCIDENTNATURE">
<el-select
v-model="data.form.ACCIDENTNATURE"
placeholder="请选择事故性质"
>
<el-option
v-for="item in ACCIDENTNATUREMENU"
:key="item.id"
:label="item.id"
:value="item.name"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="当事人" prop="PARTY">
<el-input v-model="data.form.PARTY" placeholder="请输入当事人" />
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="CONFIRMATIONTIME" label="确认时间">
<el-date-picker
v-model="data.form.CONFIRMATIONTIME"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-divider content-position="left">事故分析</el-divider>
</el-col>
<el-col :span="20">
<el-form-item label="故事分析" prop="ACCIDENTANALYSIS">
<el-input
v-model="data.form.ACCIDENTANALYSIS"
type="textarea"
:rows="3"
placeholder="请输入故事分析"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="惩罚意见" prop="PUNISHMENTOPINION">
<el-input
v-model="data.form.PUNISHMENTOPINION"
type="textarea"
:rows="3"
placeholder="请输入惩罚意见"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="责任人" prop="RESPONSIBLEPERSON">
<el-input
v-model="data.form.RESPONSIBLEPERSON"
placeholder="请输入责任人"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="次要责任人" prop="SECONDARYRESPONSIBLEPERSON">
<el-input
v-model="data.form.SECONDARYRESPONSIBLEPERSON"
placeholder="请输入次要责任人"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-divider content-position="left">整改措施</el-divider>
</el-col>
<el-col :span="20">
<el-form-item label="防范措施" prop="PREVENTIVEMEASURES">
<el-input
v-model="data.form.PREVENTIVEMEASURES"
type="textarea"
:rows="3"
placeholder="请输入防范措施"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="完成情况" prop="COMPLETIONSTATUS">
<el-input
v-model="data.form.COMPLETIONSTATUS"
type="textarea"
:rows="3"
placeholder="请输入完成情况"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item
label="整改责任人"
prop="RECTIFICATIONRESPONSIBLEPERSON"
>
<el-input
v-model="data.form.RECTIFICATIONRESPONSIBLEPERSON"
placeholder="请输入整改责任人"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="RECTIFICATIONTIME" label="整改时间">
<el-date-picker
v-model="data.form.RECTIFICATIONTIME"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="主管意见" prop="SUPERVISOROPINION">
<el-input
v-model="data.form.SUPERVISOROPINION"
type="textarea"
:rows="3"
placeholder="请输入主管意见"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="主管领导" prop="SUPERVISORLEADER">
<el-input
v-model="data.form.SUPERVISORLEADER"
placeholder="请输入主管领导"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="SUPERVISORCONFIRMATIONTIME" label="确认时间">
<el-date-picker
v-model="data.form.SUPERVISORCONFIRMATIONTIME"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-form-item label="安监意见" prop="SAFETYSUPERVISIONOPINION">
<el-input
v-model="data.form.SAFETYSUPERVISIONOPINION"
type="textarea"
:rows="3"
placeholder="请输入安监意见"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="安监部门" prop="SAFETYSUPERVISIONDEPARTMENT">
<el-input
v-model="data.form.SAFETYSUPERVISIONDEPARTMENT"
placeholder="请输入安监部门"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item
prop="SAFETYSUPERVISIONCONFIRMATIONTIME"
label="确认时间"
>
<el-date-picker
v-model="data.form.SAFETYSUPERVISIONCONFIRMATIONTIME"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="校验人" prop="INSPECTOR">
<el-input
v-model="data.form.INSPECTOR"
placeholder="请输入校验人"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="INSPECTORCONFIRMATIONTIME" label="确认时间">
<el-date-picker
v-model="data.form.INSPECTORCONFIRMATIONTIME"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-divider content-position="left">事故认定</el-divider>
</el-col>
<el-col :span="5">
<el-form-item label="工伤等级" prop="WORKINJURYIDENTIFICATIONLEVEL">
<el-input
v-model="data.form.WORKINJURYIDENTIFICATIONLEVEL"
placeholder="请输入工伤等级"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="事故记录人" prop="ACCIDENTRECORDPERSON">
<el-input
v-model="data.form.ACCIDENTRECORDPERSON"
placeholder="请输入事故记录人"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="REGISTRATIONDATE" label="登记日期">
<el-date-picker
v-model="data.form.REGISTRATIONDATE"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="事故报告记录" prop="fileList">
<layout-upload
v-model:file-list="data.form.fileList"
accept=".pdf"
delete-to-server
:limit="9"
:size="100"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="事故报告记录" prop="ACCIDENTANALYSISRECORD">
<layout-upload
v-model:file-list="data.form.ACCIDENTANALYSISRECORD"
accept=".pdf"
delete-to-server
:limit="9"
:size="100"
/>
</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 { getUserListAll } from "@/request/safety_production_related.js";
import { onMounted, reactive, ref, toRaw } from "vue";
import { ACCIDENTNATUREMENU, EDUCATIONALMENU } from "@/assets/js/constant.js";
import LayoutUpload from "@/components/upload/index.vue";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
import { useRouter, useRoute } from "vue-router";
import {
addAccidentInvestigationView,
editAccidentInvestigation,
} from "@/request/production_accident.js";
//
const route = useRoute();
//
const isEditMode = ref(false);
const ACCIDENTINVESTIGATION_ID = ref("");
const formRef = ref(null);
const rules = reactive({
USER_ID: [{ required: true, message: "请选择事故人员", trigger: "change" }],
SEX: [{ required: true, message: "请选择人员性别", trigger: "change" }],
AGE: [{ required: true, message: "请输入人员年龄", trigger: "blur" }],
EDUCATIONALLEVEL: [
{ required: true, message: "请选择文化水平", trigger: "change" },
],
DEPARTMENT: [{ required: true, message: "请输入工作部门", trigger: "blur" }],
JOBTYPE: [{ required: true, message: "请输入员工工种", trigger: "blur" }],
ENTRYDATE: [{ required: true, message: "请选择入职日期", trigger: "change" }],
ACCIDENTDATE: [
{ required: true, message: "请选择事故日期", trigger: "change" },
],
ACCIDENTLOCATION: [
{ required: true, message: "请输入事故位置", trigger: "blur" },
],
INJUREDPART: [{ required: true, message: "请输入受伤部位", trigger: "blur" }],
CERTIFICATIONSTATUS: [
{ required: true, message: "请输入持证情况", trigger: "blur" },
],
EDUCATIONSITUATION: [
{ required: true, message: "请输入教育情况", trigger: "blur" },
],
ACCIDENTDESCRIPTION: [
{ required: true, message: "请输入故事描述", trigger: "blur" },
],
ACCIDENTNATURE: [
{ required: true, message: "请选择事故性质", trigger: "change" },
],
CONFIRMATIONTIME: [
{ required: true, message: "请选择确认时间", trigger: "change" },
],
PARTY: [{ required: true, message: "请输入当事人", trigger: "change" }],
ACCIDENTANALYSIS: [
{ required: true, message: "请输入故事分析", trigger: "blur" },
],
PUNISHMENTOPINION: [
{ required: true, message: "请输入惩罚意见", trigger: "blur" },
],
RESPONSIBLEPERSON: [
{ required: true, message: "请输入责任人", trigger: "blur" },
],
SECONDARYRESPONSIBLEPERSON: [
{ required: true, message: "请输入次要责任人", trigger: "blur" },
],
PREVENTIVEMEASURES: [
{ required: true, message: "请输入防范措施", trigger: "blur" },
],
COMPLETIONSTATUS: [
{ required: true, message: "请输入完成情况", trigger: "blur" },
],
RECTIFICATIONRESPONSIBLEPERSON: [
{ required: true, message: "请输入整改责任人", trigger: "blur" },
],
RECTIFICATIONTIME: [
{ required: true, message: "请选择整改时间", trigger: "change" },
],
SUPERVISOROPINION: [
{ required: true, message: "请输入主管意见", trigger: "blur" },
],
SUPERVISORLEADER: [
{ required: true, message: "请输入主管领导", trigger: "blur" },
],
SUPERVISORCONFIRMATIONTIME: [
{ required: true, message: "请选择确认时间", trigger: "change" },
],
SAFETYSUPERVISIONOPINION: [
{ required: true, message: "请输入安监意见", trigger: "blur" },
],
SAFETYSUPERVISIONDEPARTMENT: [
{ required: true, message: "请输入安监部门", trigger: "blur" },
],
SAFETYSUPERVISIONCONFIRMATIONTIME: [
{ required: true, message: "请选择确认时间", trigger: "change" },
],
INSPECTOR: [{ required: true, message: "请输入校验人", trigger: "blur" }],
INSPECTORCONFIRMATIONTIME: [
{ required: true, message: "请选择确认时间", trigger: "change" },
],
WORKINJURYIDENTIFICATIONLEVEL: [
{ required: true, message: "请输入工伤等级", trigger: "blur" },
],
ACCIDENTRECORDPERSON: [
{ required: true, message: "请输入事故记录人", trigger: "blur" },
],
REGISTRATIONDATE: [
{ required: true, message: "请选择登记日期", trigger: "change" },
],
});
onMounted(() => {
isEditMode.value = route.query.mode === "edit";
ACCIDENTINVESTIGATION_ID.value = route.query.ACCIDENTINVESTIGATION_ID || "";
if (isEditMode.value) {
Object.keys(rules).forEach((key) => {
rules[key] = []; //
});
}
});
const router = useRouter();
const fnGetUnitsList = async () => {
const resData = await getUserListAll({});
data.unitsList = resData.userList;
};
fnGetUnitsList();
const data = reactive({
form: {
USER_ID: "",
SEX: "",
AGE: "",
EDUCATIONALLEVEL: "",
DEPARTMENT: "",
JOBTYPE: "",
ENTRYDATE: "",
ACCIDENTDATE: "",
ACCIDENTLOCATION: "",
INJUREDPART: "",
CERTIFICATIONSTATUS: "",
EDUCATIONSITUATION: "",
ACCIDENTDESCRIPTION: "",
ACCIDENTNATURE: "",
CONFIRMATIONTIME: "",
ACCIDENTANALYSIS: "",
PUNISHMENTOPINION: "",
RESPONSIBLEPERSON: "",
SECONDARYRESPONSIBLEPERSON: "",
PREVENTIVEMEASURES: "",
COMPLETIONSTATUS: "",
RECTIFICATIONRESPONSIBLEPERSON: "",
RECTIFICATIONTIME: "",
SUPERVISOROPINION: "",
SUPERVISORLEADER: "",
SUPERVISORCONFIRMATIONTIME: "",
SAFETYSUPERVISIONOPINION: "",
PARTY: "",
SAFETYSUPERVISIONDEPARTMENT: "",
SAFETYSUPERVISIONCONFIRMATIONTIME: "",
INSPECTOR: "",
INSPECTORCONFIRMATIONTIME: "",
WORKINJURYIDENTIFICATIONLEVEL: "",
ACCIDENTRECORDPERSON: "",
REGISTRATIONDATE: "",
fileList: [],
ACCIDENTANALYSISRECORD: [],
},
});
const fnSubmit = async () => {
await useFormValidate(formRef);
const rawForm = toRaw(data.form);
const formData = new FormData();
Object.keys(rawForm).forEach((key) => {
const value = rawForm[key];
formData.append(key, value);
});
data.form.fileList.forEach((file) => {
if (file.raw) formData.append("FFILEONE", file.raw);
});
data.form.ACCIDENTANALYSISRECORD.forEach((file) => {
if (file.raw) formData.append("FFILETWO", file.raw);
});
if (isEditMode.value && ACCIDENTINVESTIGATION_ID.value) {
formData.append("ACCIDENTINVESTIGATION_ID", ACCIDENTINVESTIGATION_ID.value);
await editAccidentInvestigation(formData);
ElMessage.success("编辑成功");
} else {
await addAccidentInvestigationView(formData);
ElMessage.success("添加成功");
}
router.push("/mechanical_files/production_accident");
};
</script>
<style scoped lang="scss">
.flexBox {
display: flex;
align-items: flex-end;
.addBtn {
margin-left: 12px;
}
}
</style>

View File

@ -0,0 +1,168 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item label="事故人员" prop="USER_ID">
<el-select v-model="searchForm.USER_ID">
<el-option
v-for="item in data.unitsList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="事故日期" prop="ACCIDENTDATE">
<el-date-picker
v-model="searchForm.ACCIDENTDATE"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</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="fnResetPagination">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
v-model:pagination="pagination"
:data="list"
@get-data="fnGetData"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="INCIDENTNUMBER" label="事故编号" width="250" />
<el-table-column prop="NAME" label="事故人员" />
<el-table-column prop="CORP_NAME" label="工作部门" />
<el-table-column prop="JOBTYPE" label="人员工种" />
<el-table-column prop="INJUREDPART" label="受伤部位" />
<el-table-column label="事故性质">
<template #default="{ row }">
{{ convertACCIDENTNATURE(row.ACCIDENTNATURE) }}
</template>
</el-table-column>
<el-table-column
prop="WORKINJURYIDENTIFICATIONLEVEL"
label="工伤等级"
/>
<el-table-column prop="CERTIFICATIONNUMBER" label="认定书编号" />
<el-table-column prop="ACCIDENTRECORDPERSON" label="事故登记人" />
<el-table-column prop="ACCIDENTDATE" label="事故日期" />
<el-table-column prop="REGISTRATIONDATE" label="登记日期" />
<el-table-column prop="CREATETIME" label="创建时间" />
<el-table-column prop="OPERATTIME" label="修改时间" />
<el-table-column label="操作" width="180">
<template #default="{ row }">
<el-button
type="primary"
text
link
@click="fnAddOrEdit(row.ACCIDENTINVESTIGATION_ID)"
>
编辑
</el-button>
<el-button
type="danger"
text
link
@click="deleteItem(row.ACCIDENTINVESTIGATION_ID)"
>
删除
</el-button>
</template>
</el-table-column>
<template #button>
<el-button
type="primary"
@click="
router.push({
path: '/mechanical_files/production_accident/add',
})
"
>
添加
</el-button>
</template>
</layout-table>
</layout-card>
<edit
v-model:visible="data.analysisDialog.visible"
:info="data.analysisDialog.info"
@get-data="fnResetPagination"
/>
</div>
</template>
<script setup>
import { serialNumber } from "@/assets/js/utils.js";
import useListData from "@/assets/js/useListData.js";
import { reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
import { getUserListAll } from "@/request/safety_production_related.js";
import {
getAccidentInvestigationList,
setAccidentInvestigationDelete,
} from "@/request/production_accident.js";
import { ACCIDENTNATUREMENU } from "@/assets/js/constant.js";
const router = useRouter();
const fnGetUnitsList = async () => {
const resData = await getUserListAll({});
data.unitsList = resData.userList;
};
fnGetUnitsList();
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getAccidentInvestigationList);
const data = reactive({
analysisDialog: {
visible: false,
info: {},
},
});
const convertACCIDENTNATURE = (name) => {
const vehicle = ACCIDENTNATUREMENU.find((item) => item.name === name);
return vehicle ? vehicle.id : "未知";
};
const fnAddOrEdit = (ACCIDENTINVESTIGATION_ID) => {
router.push({
path: "/mechanical_files/production_accident/add",
query: {
mode: "edit",
ACCIDENTINVESTIGATION_ID,
},
});
};
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
await setAccidentInvestigationDelete({ ACCIDENTINVESTIGATION_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
</script>
<style scoped></style>

View File

@ -28,7 +28,7 @@
v-model:file-list="form.file" v-model:file-list="form.file"
accept=".pdf" accept=".pdf"
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE"> <el-form-item label="到期时间" prop="EXPIRYDATE">
@ -159,15 +159,6 @@ const fnSubmit = async () => {
// //
emits("get-data"); emits("get-data");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -128,8 +128,9 @@ import {
infoOccupationalHazardsView, infoOccupationalHazardsView,
} from "@/request/traffic_occupational_hazards.js"; } from "@/request/traffic_occupational_hazards.js";
import ViewInfo from "./components/view.vue"; import ViewInfo from "./components/view.vue";
import router from "@/router/index.js"; import { useRouter } from "vue-router";
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyOccupationalHazardsList); useListData(getSafetyOccupationalHazardsList);
const data = reactive({ const data = reactive({

View File

@ -0,0 +1,155 @@
<template>
<el-dialog
v-model="visible"
:title="type === 'edit' ? '修改' : '新增'"
:before-close="fnClose"
>
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
<el-form-item
v-if="type === 'add'"
label="名称"
prop="MANAGEMENTAGREEMENTNAME"
>
<el-input
v-model="form.MANAGEMENTAGREEMENTNAME"
placeholder="请输入名称"
style="width: 300px"
></el-input>
</el-form-item>
<el-form-item
v-if="type === 'edit'"
label="经营企业"
prop="OPERATINGCOMPANY"
>
<span>{{ operatingCompany }}</span>
</el-form-item>
<el-form-item label="会议附件" prop="file">
<layout-upload
v-model:file-list="form.file"
accept=".pdf"
:limit="9"
:size="100"
/>
</el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE">
<el-date-picker
v-model="form.EXPIRYDATE"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择时间"
/>
</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 { onMounted, ref, toRaw } from "vue";
import { useVModels } from "@vueuse/core";
import { ElMessage } from "element-plus";
import LayoutUpload from "@/components/upload/index.vue";
import {
addManagementAgreementView,
editManagementAgreementView,
getManagementAgreementList,
} from "@/request/management_agreement.js";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
form: {
type: {},
required: false,
default: false,
},
loading: {
type: Boolean,
required: true,
default: false,
},
options: {
type: Array,
required: true,
default: () => [],
},
type: {
type: String,
required: true,
default: "",
},
});
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits);
const rules = {
file: [{ required: true, message: "请上传附件", trigger: "change" }],
MANAGEMENTAGREEMENTNAME: [
{ required: true, message: "请输入名称", trigger: "blur" },
],
};
const operatingCompany = ref("");
const operationType = ref("");
onMounted(async () => {
const resData = await getManagementAgreementList();
if (resData && resData.varList && resData.varList.length > 0) {
operatingCompany.value = resData.varList[0].CORP_NAME;
operationType.value = resData.varList[0].OPERATIONTYPE;
}
});
const formRef = ref(null);
const fnClose = () => {
formRef.value.resetFields();
visible.value = false;
};
const fnSubmit = async () => {
await formRef.value.validate();
const rawFormValue = toRaw(form.value);
const formData = new FormData();
//
if (Array.isArray(rawFormValue.file)) {
rawFormValue.file.forEach((fileItem) => {
if (fileItem.raw) {
formData.append("FFILE", fileItem.raw);
}
});
}
Object.keys(rawFormValue).forEach((key) => {
if (key !== "file") {
formData.append(key, rawFormValue[key]);
}
});
//
if (props.type === "add") {
await addManagementAgreementView(formData);
} else {
formData.append(
"MANAGEMENTAGREEMENT_ID",
rawFormValue.MANAGEMENTAGREEMENT_ID
);
await editManagementAgreementView(formData);
}
//
ElMessage.success("操作成功");
//
fnClose();
//
emits("get-data");
};
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,70 @@
<template>
<el-dialog v-model="visible" title="查看">
<el-descriptions :column="1" border>
<el-descriptions-item label="名称">
{{ info.MANAGEMENTAGREEMENTNAME }}
</el-descriptions-item>
<el-descriptions-item label="上传人">
{{ info.CREATORNAME }}
</el-descriptions-item>
<el-descriptions-item label="上传时间">
{{ info.CREATETIME }}
</el-descriptions-item>
<el-descriptions-item label="文件">
<div @click="previewPdf(info.ATTACHMENT_ROUTE)">
{{ getFileName(info.ATTACHMENT_ROUTE) }}
<el-button type="primary" class="ml-10">预览</el-button>
</div>
</el-descriptions-item>
</el-descriptions>
<template #footer>
<el-button @click="visible = false">关闭</el-button>
</template>
</el-dialog>
<layout-pdf
v-if="pdfVisible"
:src="pdfSrc"
:visible="pdfVisible"
@update:visible="pdfVisible = $event"
></layout-pdf>
</template>
<script setup>
import { ref } from "vue"; // ref
import { useVModel } from "@vueuse/core";
import LayoutPdf from "@/components/pdf/index.vue";
const props = defineProps({
visible: {
type: Boolean,
required: true,
default: false,
},
info: {
type: Object,
required: true,
default: () => ({}),
},
labelName: {
type: String,
required: true,
default: "",
},
});
const pdfVisible = ref(false); // pdfVisible
const pdfSrc = ref(""); // pdfSrc
const getFileName = (path) => {
return path.split("/").pop();
};
const previewPdf = (src) => {
pdfSrc.value = src; // PDF
pdfVisible.value = true; // PDF
};
const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits);
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,38 @@
<template>
<div>
<layout-card>
<div v-if="loading">...</div>
<div v-else>
<layout-pdf
v-model:visible="pdfDialog.visible"
:src="pdfDialog.src"
append-to-body
></layout-pdf>
</div>
</layout-card>
</div>
</template>
<script setup>
import { ref, onMounted } from "vue";
import { useRoute } from "vue-router";
import LayoutPdf from "@/components/pdf/index.vue";
import { infoProductionView } from "@/request/traffic_safety_production.js";
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
const route = useRoute();
const SAFETYPRODUCTION_ID = route.query.SAFETYPRODUCTION_ID;
const loading = ref(true); //
const pdfDialog = ref({ visible: false, src: "" });
onMounted(async () => {
const response = await infoProductionView({ SAFETYPRODUCTION_ID });
if (response.pd && response.pd.ATTACHMENT_ROUTE) {
pdfDialog.value.src = VITE_FILE_URL + response.pd.ATTACHMENT_ROUTE;
pdfDialog.value.visible = true;
}
loading.value = false; //
});
</script>
<style scoped></style>

View File

@ -0,0 +1,180 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item label="名称" prop="MANAGEMENTAGREEMENTNAME">
<el-input v-model="searchForm.MANAGEMENTAGREEMENTNAME" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="完成状态" prop="COMPLETIONSTATUS">
<el-select v-model="searchForm.COMPLETIONSTATUS">
<el-option label="已上传" :value="1" />
<el-option label="未上传" :value="0" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="有效状态" prop="VALIDSTATUS">
<el-select v-model="searchForm.VALIDSTATUS">
<el-option label="正常" :value="1" />
<el-option label="未生效" :value="0" />
</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="fnResetPagination">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
ref="tableRef"
v-model:pagination="pagination"
:data="list"
row-key="MANAGEMENTAGREEMENT_ID"
@get-data="fnGetData"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column
prop="MANAGEMENTAGREEMENTNAME"
label="名称"
width="250"
/>
<el-table-column prop="COMPLETIONSTATUS" label="完成状态" width="250">
<template #default="{ row }">
<el-tag v-if="row.COMPLETIONSTATUS === '1'"></el-tag>
<el-tag v-else-if="row.COMPLETIONSTATUS === '0'">未上传</el-tag>
</template>
</el-table-column>
<el-table-column label="有效状态" prop="VALIDSTATUS">
<template #default="{ row }">
<el-tag v-if="row.VALIDSTATUS === '1'"></el-tag>
<el-tag v-else-if="row.VALIDSTATUS === '0'">未生效</el-tag>
</template>
</el-table-column>
<el-table-column prop="CORP_NAME" label="经营企业" width="150" />
<el-table-column prop="EXPIRYDATE" label="到期时间" width="150" />
<el-table-column prop="CREATETIME" label="创建时间" width="150" />
<el-table-column prop="OPERATTIME" label="修改时间" width="150" />
<el-table-column label="操作" width="180">
<template #default="{ row }">
<el-button
type="primary"
text
link
@click="fnView(row.MANAGEMENTAGREEMENT_ID)"
>
查看
</el-button>
<el-button
type="primary"
text
link
@click="fnAddOrEdit(row.MANAGEMENTAGREEMENT_ID, 'edit')"
>
编辑
</el-button>
<el-button
text
link
type="primary"
@click="deleteItem(row.MANAGEMENTAGREEMENT_ID)"
>
删除
</el-button>
</template>
</el-table-column>
<template #button>
<el-button type="primary" @click="fnAddOrEdit('', 'add')">
新增
</el-button>
</template>
</layout-table>
</layout-card>
<add
v-model:visible="data.addOrEditDialog.visible"
v-model:form="data.addOrEditDialog.form"
:type="data.addOrEditDialog.type"
@get-data="fnResetPagination"
/>
<view-info
v-model:visible="data.viewDialog.visible"
:info="data.viewDialog.info"
:label-name="labelName"
/>
</div>
</template>
<script setup>
import { serialNumber } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js";
import Add from "./components/add.vue";
import { nextTick, reactive } from "vue";
import ViewInfo from "./components/view.vue";
import {
deleteManagementAgreementView,
getManagementAgreementList,
infoManagementAgreementView,
} from "@/request/management_agreement.js";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getManagementAgreementList);
const data = reactive({
addOrEditDialog: {
visible: false,
type: "",
form: {},
},
viewDialog: {
visible: false,
info: {},
},
});
const fnAddOrEdit = async (MANAGEMENTAGREEMENT_ID = "", type = "add") => {
data.addOrEditDialog.visible = true;
data.addOrEditDialog.type = type;
if (type === "edit" && MANAGEMENTAGREEMENT_ID) {
data.addOrEditDialog.form.MANAGEMENTAGREEMENT_ID = MANAGEMENTAGREEMENT_ID;
} else {
data.addOrEditDialog.form = {};
}
await nextTick();
};
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
await deleteManagementAgreementView({ MANAGEMENTAGREEMENT_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
const fnView = async (MANAGEMENTAGREEMENT_ID) => {
const resData = await infoManagementAgreementView({
MANAGEMENTAGREEMENT_ID,
});
data.viewDialog.info = resData.pd;
data.viewDialog.visible = true;
};
</script>
<style scoped></style>

View File

@ -0,0 +1,202 @@
<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="5">
<el-form-item label="从业人员" prop="USER_ID">
<el-select v-model="data.form.USER_ID" placeholder="请选择从业人员">
<el-option
v-for="item in data.unitsList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="车牌号" prop="TRANSPORTVEHICLE">
<el-select
v-model="data.form.TRANSPORTVEHICLE"
placeholder="请选择车辆"
>
<el-option
v-for="item in TRUCKMENU"
:key="item.id"
:label="item.id"
:value="item.name"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="处罚方式" prop="PENALTYMETHOD">
<el-select
v-model="data.form.PENALTYMETHOD"
placeholder="请选择会议类型"
>
<el-option
v-for="item in PENALTYMETHODMENU"
:key="item.id"
:label="item.id"
:value="item.name"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item prop="PENALTYTIME" label="处罚时间">
<el-date-picker
v-model="data.form.PENALTYTIME"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="处罚事件" prop="PENALTYEVENT">
<el-input
v-model="data.form.PENALTYEVENT"
placeholder="请输入处罚事件"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="处罚措施" prop="PENALTYMEASURES">
<el-input
v-model="data.form.PENALTYMEASURES"
placeholder="请输入处罚措施"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="处罚登记人" prop="PENALTYREGISTRANT">
<el-input
v-model="data.form.PENALTYREGISTRANT"
placeholder="请输入处罚登记人"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会议文本附件" prop="fileList">
<layout-upload
v-model:file-list="data.form.fileList"
accept=".pdf"
delete-to-server
:limit="9"
:size="100"
/>
</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 { getUserListAll } from "@/request/safety_production_related.js";
import { onMounted, reactive, ref, toRaw } from "vue";
import { PENALTYMETHODMENU, TRUCKMENU } from "@/assets/js/constant.js";
import LayoutUpload from "@/components/upload/index.vue";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
import { useRouter, useRoute } from "vue-router";
import {
addViolationRegistrationView,
editViolationRegistration,
} from "@/request/violation_registration.js";
const formRef = ref(null);
const rules = {
TRANSPORTVEHICLE: [
{ required: true, message: "请选择运行车辆", trigger: "blur" },
],
USER_ID: [{ required: true, message: "请选择从业人员", trigger: "change" }],
PENALTYMETHOD: [
{ required: true, message: "请选择处罚方式", trigger: "blur" },
],
PENALTYEVENT: [
{ required: true, message: "请输入处罚事件", trigger: "change" },
],
PENALTYMEASURES: [
{ required: true, message: "请输入处罚措施", trigger: "blur" },
],
PENALTYREGISTRANT: [
{ required: true, message: "请输入处罚登记人", trigger: "blur" },
],
};
//
const route = useRoute();
//
const isEditMode = ref(false);
const registrationId = ref("");
onMounted(() => {
isEditMode.value = route.query.mode === "edit";
registrationId.value = route.query.registrationId || "";
});
const router = useRouter();
const fnGetUnitsList = async () => {
const resData = await getUserListAll({});
data.unitsList = resData.userList;
};
fnGetUnitsList();
const data = reactive({
form: {
TRANSPORTVEHICLE: "",
USER_ID: "",
PENALTYMETHOD: "",
PENALTYTIME: "",
PENALTYEVENT: "",
PENALTYMEASURES: "",
PENALTYREGISTRANT: "",
fileList: [],
},
});
const fnSubmit = async () => {
await useFormValidate(formRef);
const rawForm = toRaw(data.form);
const formData = new FormData();
Object.keys(rawForm).forEach((key) => {
const value = rawForm[key];
formData.append(key, value);
});
if (isEditMode.value && registrationId.value) {
formData.append("REGISTRATION_ID", registrationId.value);
await editViolationRegistration(formData);
ElMessage.success("编辑成功");
} else {
await addViolationRegistrationView(formData);
ElMessage.success("添加成功");
}
router.push("/production_course_regulate/violation_registration");
};
</script>
<style scoped lang="scss">
.flexBox {
display: flex;
align-items: flex-end;
.addBtn {
margin-left: 12px;
}
}
</style>

View File

@ -0,0 +1,167 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item label="从业人员" prop="USER_ID">
<el-select v-model="searchForm.USER_ID">
<el-option
v-for="item in data.unitsList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="处罚时间" prop="PENALTYTIME">
<el-date-picker
v-model="searchForm.PENALTYTIME"
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="选择日期"
/>
</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="fnResetPagination">
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
<layout-card>
<layout-table
v-model:pagination="pagination"
:data="list"
@get-data="fnGetData"
>
<el-table-column label="序号" width="60">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column label="运输车辆" width="250">
<template #default="{ row }">
{{ convertTransportVehicle(row.TRANSPORTVEHICLE) }}
</template>
</el-table-column>
<el-table-column prop="NAME" label="从业人员" width="250" />
<el-table-column prop="PHONE" label="联系电话" />
<el-table-column label="处罚方式" width="250">
<template #default="{ row }">
{{ convertPENALTYMETHOD(row.PENALTYMETHOD) }}
</template>
</el-table-column>
<el-table-column prop="PENALTYTIME" label="处罚时间" />
<el-table-column prop="CORP_NAME" label="运输企业" />
<el-table-column prop="CREATETIME" label="创建时间" />
<el-table-column label="操作" width="180">
<template #default="{ row }">
<el-button
type="primary"
text
link
@click="fnAddOrEdit(row.REGISTRATION_ID)"
>
编辑
</el-button>
<el-button
type="danger"
text
link
@click="deleteItem(row.REGISTRATION_ID)"
>
删除
</el-button>
</template>
</el-table-column>
<template #button>
<el-button
type="primary"
@click="
router.push({
path: '/production_course_regulate/violation_registration/add',
})
"
>
添加
</el-button>
</template>
</layout-table>
</layout-card>
<edit
v-model:visible="data.analysisDialog.visible"
:info="data.analysisDialog.info"
@get-data="fnResetPagination"
/>
</div>
</template>
<script setup>
import { serialNumber } from "@/assets/js/utils.js";
import useListData from "@/assets/js/useListData.js";
import { PENALTYMETHODMENU, TRUCKMENU } from "@/assets/js/constant.js";
import { reactive } from "vue";
import { ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
import {
getViolationRegistrationList,
setViolationRegistrationDelete,
} from "@/request/violation_registration.js";
import { getUserListAll } from "@/request/safety_production_related.js";
const router = useRouter();
const convertTransportVehicle = (name) => {
const vehicle = TRUCKMENU.find((item) => item.name === name);
return vehicle ? vehicle.id : "未知车牌号";
};
const convertPENALTYMETHOD = (name) => {
const vehicle = PENALTYMETHODMENU.find((item) => item.name === name);
return vehicle ? vehicle.id : "未知处罚方式";
};
const fnGetUnitsList = async () => {
const resData = await getUserListAll({});
data.unitsList = resData.userList;
};
fnGetUnitsList();
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getViolationRegistrationList);
const data = reactive({
analysisDialog: {
visible: false,
info: {},
},
});
const fnAddOrEdit = (registrationId) => {
router.push({
path: "/production_course_regulate/violation_registration/add",
query: {
mode: "edit",
registrationId,
},
});
};
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
await setViolationRegistrationDelete({ REGISTRATION_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
</script>
<style scoped></style>

View File

@ -24,7 +24,7 @@
v-model:file-list="form.file" v-model:file-list="form.file"
accept=".pdf" accept=".pdf"
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE"> <el-form-item label="到期时间" prop="EXPIRYDATE">
@ -141,15 +141,6 @@ const fnSubmit = async () => {
// //
emits("get-data"); emits("get-data");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -87,6 +87,14 @@
> >
编辑 编辑
</el-button> </el-button>
<el-button
text
link
type="primary"
@click="deleteItem(row.SAFETYASSESSMENT_ID)"
>
删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
<template #button> <template #button>
@ -116,10 +124,12 @@ import useListData from "@/assets/js/useListData.js";
import Add from "./components/add.vue"; import Add from "./components/add.vue";
import { nextTick, reactive } from "vue"; import { nextTick, reactive } from "vue";
import { import {
deleteAssessmentView,
getSafetyAssessmentList, getSafetyAssessmentList,
infoAssessmentView, infoAssessmentView,
} from "@/request/traffic_safety_assessment.js"; } from "@/request/traffic_safety_assessment.js";
import ViewInfo from "./components/view.vue"; import ViewInfo from "./components/view.vue";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyAssessmentList); useListData(getSafetyAssessmentList);
@ -153,6 +163,16 @@ const fnView = async (SAFETYASSESSMENT_ID) => {
data.viewDialog.info = resData.pd; data.viewDialog.info = resData.pd;
data.viewDialog.visible = true; data.viewDialog.visible = true;
}; };
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
await deleteAssessmentView({ SAFETYASSESSMENT_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
</script> </script>
<style scoped></style> <style scoped></style>

View File

@ -24,7 +24,7 @@
v-model:file-list="form.file" v-model:file-list="form.file"
accept=".pdf" accept=".pdf"
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE"> <el-form-item label="到期时间" prop="EXPIRYDATE">
@ -141,15 +141,6 @@ const fnSubmit = async () => {
// //
emits("get-data"); emits("get-data");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -87,6 +87,14 @@
> >
编辑 编辑
</el-button> </el-button>
<el-button
text
link
type="primary"
@click="deleteItem(row.SAFETYPRODUCTION_ID)"
>
删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
<template #button> <template #button>
@ -116,10 +124,12 @@ import useListData from "@/assets/js/useListData.js";
import Add from "./components/add.vue"; import Add from "./components/add.vue";
import { nextTick, reactive } from "vue"; import { nextTick, reactive } from "vue";
import { import {
deleteProductionView,
getSafetyProductionList, getSafetyProductionList,
infoProductionView, infoProductionView,
} from "@/request/traffic_safety_production.js"; } from "@/request/traffic_safety_production.js";
import ViewInfo from "./components/view.vue"; import ViewInfo from "./components/view.vue";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyProductionList); useListData(getSafetyProductionList);
@ -153,6 +163,15 @@ const fnView = async (SAFETYPRODUCTION_ID) => {
data.viewDialog.info = resData.pd; data.viewDialog.info = resData.pd;
data.viewDialog.visible = true; data.viewDialog.visible = true;
}; };
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
await deleteProductionView({ SAFETYPRODUCTION_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
</script> </script>
<style scoped></style> <style scoped></style>

View File

@ -30,9 +30,9 @@
</el-card> </el-card>
<layout-card> <layout-card>
<layout-table <layout-table
v-model:pagination="pagination"
:data="list" :data="list"
@get-data="fnGetData" @get-data="fnGetData"
v-model:pagination="pagination"
> >
<el-table-column label="序号" width="60"> <el-table-column label="序号" width="60">
<template #default="{ $index }"> <template #default="{ $index }">
@ -55,7 +55,7 @@
<el-table-column prop="ARRIVALTIME" label="收车时间" /> <el-table-column prop="ARRIVALTIME" label="收车时间" />
<el-table-column prop="TRANSPORTCOMPANY" label="运输企业" /> <el-table-column prop="TRANSPORTCOMPANY" label="运输企业" />
<el-table-column label="操作" width="180"> <el-table-column label="操作" width="180">
<template v-slot:default="{ row }"> <template #default="{ row }">
<el-button <el-button
type="primary" type="primary"
text text
@ -71,18 +71,7 @@
> >
查看 查看
</el-button> </el-button>
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_production_related/safety_meeting/add',
})
"
>
添加
</el-button>
<el-button <el-button
type="danger" type="danger"
text text
@ -93,6 +82,18 @@
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
<template #button>
<el-button
type="primary"
@click="
router.push({
path: '/safety_production_related/safety_meeting/add',
})
"
>
添加
</el-button>
</template>
</layout-table> </layout-table>
</layout-card> </layout-card>
<edit <edit
@ -111,9 +112,10 @@ import {
getSafetyDrivingLogList, getSafetyDrivingLogList,
setDrivingLogDelete, setDrivingLogDelete,
} from "@/request/traffic_driving_log.js"; } from "@/request/traffic_driving_log.js";
import router from "@/router/index.js";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyDrivingLogList); useListData(getSafetyDrivingLogList);
const data = reactive({ const data = reactive({

View File

@ -92,7 +92,7 @@
accept=".pdf" accept=".pdf"
delete-to-server delete-to-server
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -103,7 +103,7 @@
accept=".mp4" accept=".mp4"
delete-to-server delete-to-server
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -211,16 +211,6 @@ const fnSubmit = async () => {
ElMessage.success("添加成功"); ElMessage.success("添加成功");
router.push("/safety_production_related/safety_meeting"); router.push("/safety_production_related/safety_meeting");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
const fnSelectPersonSubmit = (selectionData) => { const fnSelectPersonSubmit = (selectionData) => {
const userIds = selectionData.map((item) => item.USER_ID).join(", "); const userIds = selectionData.map((item) => item.USER_ID).join(", ");
const names = selectionData.map((item) => item.NAME).join(", "); const names = selectionData.map((item) => item.NAME).join(", ");

View File

@ -142,9 +142,10 @@ import {
getSafetyMeetingList, getSafetyMeetingList,
setSafetyMeetingDelete, setSafetyMeetingDelete,
} from "@/request/traffic_safety_meeting.js"; } from "@/request/traffic_safety_meeting.js";
import router from "@/router/index.js";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyMeetingList); useListData(getSafetyMeetingList);
const data = reactive({ const data = reactive({

View File

@ -131,13 +131,13 @@ import {
layoutFnGetNotificationsClassification, layoutFnGetNotificationsClassification,
dateteSecurityAllNotice, dateteSecurityAllNotice,
} from "@/request/safety_production_related.js"; } from "@/request/safety_production_related.js";
import router from "@/router/index.js";
import { ElMessageBox, ElMessage } from "element-plus"; import { ElMessageBox, ElMessage } from "element-plus";
import { debounce } from "throttle-debounce"; import { debounce } from "throttle-debounce";
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js"; import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
import { useRouter } from "vue-router";
const router = useRouter();
const buttonJurisdiction = await useButtonJurisdiction("riskunit"); const buttonJurisdiction = await useButtonJurisdiction("riskunit");
const tableRef = ref(null); const tableRef = ref(null);
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSecurityNoticeList); useListData(getSecurityNoticeList);

View File

@ -1,229 +0,0 @@
<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="MEETING_TITLE">
<el-input
v-model="data.form.MEETING_TITLE"
placeholder="请输入会议标题"
/>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="会议类型" prop="MEETING_TYPE">
<el-select
v-model="data.form.MEETING_TYPE"
placeholder="请选择会议类型"
@change="handleMeetingTypeChange"
>
<el-option
v-for="item in relatedClassificationList"
:key="item.BIANMA"
:label="item.NAME"
:value="item.BIANMA"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="运输企业" prop="TRANSPORTATIONCOMPANY">
<el-input
v-model="data.form.TRANSPORTATIONCOMPANY"
placeholder="请输入运输企业"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="会议地点" prop="MEETING_ADDRESS">
<el-input
v-model="data.form.MEETING_ADDRESS"
placeholder="请输入会议地点"
/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item prop="MEETING_DATE" label="会议时间">
<el-date-picker
v-model="data.form.MEETING_DATE"
type="daterange"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
start-placeholder="开始时间"
end-placeholder="结束时间"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="主持人" prop="HOST_PERSON">
<el-input
v-model="data.form.HOST_PERSON"
placeholder="请输入主持人"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="记录人" prop="RECORDER">
<el-input v-model="data.form.RECORDER" placeholder="请输入记录人" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="从业身份" prop="PRACTITIONER_TYPE">
<el-checkbox-group
v-model="data.form.PRACTITIONER_TYPE"
@change="handleCheckedCitiesChange"
>
<el-checkbox v-for="city in cities" :key="city" :label="city">{{
city
}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="会议附件" prop="fileList">
<layout-upload
v-model:file-list="data.form.fileList"
accept=".pdf,.mp4"
delete-to-server
:limit="9"
/>
</el-form-item>
</el-col>
<el-col :span="50">
<el-form-item label="会议记要" prop="MEETING_CONTENT">
<layout-editor
v-model="data.form.MEETING_CONTENT"
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 {
layoutFnGetMEETINGTYPEClassification,
getUserListAll,
} from "@/request/safety_production_related.js";
import { addSafetyMeetingView } from "@/request/traffic_safety_meeting.js";
import { reactive, ref } from "vue";
import LayoutUpload from "@/components/upload/index.vue";
import LayoutEditor from "@/components/editor/index.vue";
import useFormValidate from "@/assets/js/useFormValidate.js";
import { ElMessage } from "element-plus";
const formRef = ref(null);
const cities = [
"驾驶员",
"押运员",
"安全管理员",
"装卸员",
"安全负责人",
"其他",
"监控员",
];
const handleCheckedCitiesChange = () => {};
const rules = {
MEETING_TITLE: [
{ required: true, message: "请输入会议标题", trigger: "blur" },
],
MEETING_TYPE: [
{ required: true, message: "请选择会议类型", trigger: "change" },
],
TRANSPORTATIONCOMPANY: [
{ required: true, message: "请输入运输企业", trigger: "blur" },
],
MEETING_ADDRESS: [
{ required: true, message: "请输入会议地点", trigger: "blur" },
],
MEETING_DATE: [
{ required: true, message: "请选择会议时间", trigger: "change" },
],
HOST_PERSON: [{ required: true, message: "请输入主持人", trigger: "blur" }],
RECORDER: [{ required: true, message: "请输入记录人", trigger: "blur" }],
MEETING_CONTENT: [
{ required: true, message: "请输入会议记要", trigger: "blur" },
],
};
const fnGetUnitsList = async () => {
const resData = await getUserListAll({});
data.unitsList = resData.varList;
};
fnGetUnitsList();
const relatedClassificationTempList =
await layoutFnGetMEETINGTYPEClassification();
const relatedClassificationList = [];
JSON.parse(relatedClassificationTempList.value.zTreeNodes).forEach((e) => {
relatedClassificationList.push({ name: e.id, BIANMA: e.name });
});
const data = reactive({
form: {
MEETING_TITLE: "",
MEETING_TYPE: "",
TRANSPORTATIONCOMPANY: "",
MEETING_ADDRESS: "",
MEETING_DATE: "",
HOST_PERSON: "",
RECORDER: "",
fileList: [],
PRACTITIONER_TYPE: [],
NOTIFICATIONCONTENT: "",
},
});
const handleMeetingTypeChange = (value) => {
data.form.MEETING_TYPE = value;
};
const fnSubmit = async () => {
await useFormValidate(formRef);
const formData = new FormData();
Object.keys(data.form).forEach((key) => {
formData.append(key, data.form[key]);
});
formData.delete("fileList");
for (let i = 0; i < data.form.fileList.length; i++) {
if (data.form.fileList[i].raw)
formData.append("FFILE", data.form.fileList[i].raw);
}
try {
await addSafetyMeetingView(formData);
ElMessage.success("添加成功");
Object.keys(data.form).forEach((key) => {
if (Array.isArray(data.form[key])) {
data.form[key] = [];
} else {
data.form[key] = "";
}
});
} catch (error) {
ElMessage.error("添加失败");
}
};
</script>
<style scoped lang="scss">
.flexBox {
display: flex;
align-items: flex-end;
.addBtn {
margin-left: 12px;
}
}
</style>

View File

@ -1,272 +0,0 @@
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item label="运输企业" prop="TRANSPORTCOMPANY">
<el-input v-model="searchForm.TRANSPORTCOMPANY" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检查项类型" prop="CHECKITEMTYPE">
<el-input v-model="searchForm.CHECKITEMTYPE" />
</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="fnResetPagination">
重置
</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 prop="CHECKITEMNAME" label="检查项名称" width="130" />
<el-table-column prop="CHECKITEMTYPE" label="检查项类型" width="130" />
<el-table-column
prop="CHECKITEMDESCRIPTION"
label="检查项说明"
width="130"
/>
<el-table-column prop="TRANSPORTCOMPANY" label="运输企业" width="130" />
<el-table-column
prop="TRANSPORTCATEGORY"
label="运输类别"
width="130"
/>
<el-table-column prop="CREATETIME" label="创建时间" width="130" />
<el-table-column label="操作" width="180">
<template v-slot:default="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_production_related/driving_log/drivingLog_info',
query: {
DRIVING_LOG_ID: row.DRIVING_LOG_ID,
},
})
"
>
查看
</el-button>
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_production_related/safety_meeting/add',
})
"
>
添加
</el-button>
<el-button
type="danger"
text
link
@click="deleteItem(row.DRIVING_LOG_ID)"
>
删除
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
<edit
v-model:visible="data.analysisDialog.visible"
:info="data.analysisDialog.info"
@get-data="fnResetPagination"
/>
</div>
</template>
<script setup>
import { serialNumber } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js";
import { reactive } from "vue";
import {
getSafetyDrivingLogList,
setDrivingLogDelete,
} from "@/request/traffic_driving_log.js";
import router from "@/router/index.js";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyDrivingLogList);
const data = reactive({
analysisDialog: {
visible: false,
info: {},
},
});
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
console.log("Sent to backend:", { DRIVING_LOG_ID: value });
await setDrivingLogDelete({ DRIVING_LOG_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
</script>
<style scoped></style>
<template>
<div>
<el-card>
<el-form
:model="searchForm"
label-width="100px"
@submit.prevent="fnResetPagination"
>
<el-row>
<el-col :span="6">
<el-form-item label="运输企业" prop="TRANSPORTCOMPANY">
<el-input v-model="searchForm.TRANSPORTCOMPANY" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="检查项类型" prop="CHECKITEMTYPE">
<el-input v-model="searchForm.CHECKITEMTYPE" />
</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="fnResetPagination">
重置
</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 prop="CHECKITEMNAME" label="检查项名称" width="130" />
<el-table-column prop="CHECKITEMTYPE" label="检查项类型" width="130" />
<el-table-column
prop="CHECKITEMDESCRIPTION"
label="检查项说明"
width="130"
/>
<el-table-column prop="TRANSPORTCOMPANY" label="运输企业" width="130" />
<el-table-column
prop="TRANSPORTCATEGORY"
label="运输类别"
width="130"
/>
<el-table-column prop="CREATETIME" label="创建时间" width="130" />
<el-table-column label="操作" width="180">
<template v-slot:default="{ row }">
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_production_related/driving_log/drivingLog_info',
query: {
DRIVING_LOG_ID: row.DRIVING_LOG_ID,
},
})
"
>
查看
</el-button>
<el-button
type="primary"
text
link
@click="
router.push({
path: '/safety_production_related/safety_meeting/add',
})
"
>
添加
</el-button>
<el-button
type="danger"
text
link
@click="deleteItem(row.DRIVING_LOG_ID)"
>
删除
</el-button>
</template>
</el-table-column>
</layout-table>
</layout-card>
<edit
v-model:visible="data.analysisDialog.visible"
:info="data.analysisDialog.info"
@get-data="fnResetPagination"
/>
</div>
</template>
<script setup>
import { serialNumber } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js";
import { reactive } from "vue";
import {
getSafetyDrivingLogList,
setDrivingLogDelete,
} from "@/request/traffic_driving_log.js";
import router from "@/router/index.js";
import { ElMessage, ElMessageBox } from "element-plus";
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyDrivingLogList);
const data = reactive({
analysisDialog: {
visible: false,
info: {},
},
});
//
const deleteItem = async (value) => {
await ElMessageBox.confirm(`确定要删除吗?`, {
type: "warning",
});
console.log("Sent to backend:", { DRIVING_LOG_ID: value });
await setDrivingLogDelete({ DRIVING_LOG_ID: value });
ElMessage.success("删除成功");
fnGetData();
};
</script>
<style scoped></style>

View File

@ -28,7 +28,7 @@
v-model:file-list="form.file" v-model:file-list="form.file"
accept=".pdf" accept=".pdf"
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE"> <el-form-item label="到期时间" prop="EXPIRYDATE">
@ -159,15 +159,6 @@ const fnSubmit = async () => {
// //
emits("get-data"); emits("get-data");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -128,8 +128,9 @@ import {
infoResponsibilityView, infoResponsibilityView,
} from "@/request/traffic_safety_responsibility.js"; } from "@/request/traffic_safety_responsibility.js";
import ViewInfo from "./components/view.vue"; import ViewInfo from "./components/view.vue";
import router from "@/router/index.js"; import { useRouter } from "vue-router";
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyResponsibilityList); useListData(getSafetyResponsibilityList);
const data = reactive({ const data = reactive({

View File

@ -28,7 +28,7 @@
v-model:file-list="form.file" v-model:file-list="form.file"
accept=".pdf" accept=".pdf"
:limit="9" :limit="9"
:before-upload="fnUpload" :size="100"
/> />
</el-form-item> </el-form-item>
<el-form-item label="到期时间" prop="EXPIRYDATE"> <el-form-item label="到期时间" prop="EXPIRYDATE">
@ -160,15 +160,6 @@ const fnSubmit = async () => {
// //
emits("get-data"); emits("get-data");
}; };
const fnUpload = (file) => {
const isLt100M = file.size / 1024 / 1024 < 100;
if (!isLt100M) {
ElMessage.error("文件大小不能超过100M");
return false;
}
return true;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -121,7 +121,6 @@
<script setup> <script setup>
import { serialNumber } from "@/assets/js/utils"; import { serialNumber } from "@/assets/js/utils";
import useListData from "@/assets/js/useListData.js"; import useListData from "@/assets/js/useListData.js";
import router from "@/router/index.js";
import Add from "./components/add.vue"; import Add from "./components/add.vue";
import { reactive, watchEffect } from "vue"; import { reactive, watchEffect } from "vue";
import { import {
@ -129,7 +128,8 @@ import {
infoCommitmentView, infoCommitmentView,
} from "@/request/traffic_safety_commitment.js"; } from "@/request/traffic_safety_commitment.js";
import ViewInfo from "./components/view.vue"; import ViewInfo from "./components/view.vue";
import { useRouter } from "vue-router";
const router = useRouter();
const { list, pagination, searchForm, fnGetData, fnResetPagination } = const { list, pagination, searchForm, fnGetData, fnResetPagination } =
useListData(getSafetyCommitmentList); useListData(getSafetyCommitmentList);
const data = reactive({ const data = reactive({