|
|
@@ -1,473 +0,0 @@
|
|
|
-<!--事后的检查登记-->
|
|
|
-<template>
|
|
|
- <div class="app-container">
|
|
|
- <el-form
|
|
|
- ref="point_baseInfo"
|
|
|
- :model="info"
|
|
|
- :rules="baseInfoRules"
|
|
|
- label-width="120px"
|
|
|
- >
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">
|
|
|
- <el-form-item label="任务名称" prop="taskName">
|
|
|
- <el-input
|
|
|
- v-model="info.taskName"
|
|
|
- placeholder="请输入任务名称"
|
|
|
- maxlength="50"
|
|
|
- ></el-input> </el-form-item
|
|
|
- ></el-col>
|
|
|
- <el-col :span="6"
|
|
|
- ><el-form-item label="检查主体" prop="checkOrgId">
|
|
|
- <orgDropDown
|
|
|
- v-model="info.checkOrgId"
|
|
|
- placeholder="选择检查主体"
|
|
|
- @select="onCheckOrgSelect"
|
|
|
- orgTreeType="org"
|
|
|
- /> </el-form-item
|
|
|
- ></el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-form-item label="检查人员" prop="checkRoleId">
|
|
|
- <el-select
|
|
|
- v-model="info.checkRoleId"
|
|
|
- placeholder="请选择检查人员"
|
|
|
- style="width: 100%"
|
|
|
- clearable
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="role in roleOptions"
|
|
|
- :key="role.id"
|
|
|
- :label="role.name"
|
|
|
- :value="role.id"
|
|
|
- ></el-option>
|
|
|
- </el-select> </el-form-item
|
|
|
- ></el-col>
|
|
|
- </el-row>
|
|
|
- <el-row>
|
|
|
- <el-col :span="6">
|
|
|
- <el-form-item label="受检机构" prop="beCheckedOrgId">
|
|
|
- <orgDropDown
|
|
|
- v-model="info.beCheckedOrgId"
|
|
|
- placeholder="选择受检机构"
|
|
|
- @select="onBecheckOrgSelect"
|
|
|
- orgTreeType="org"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-form-item label="检查组成员" prop="checkTeam">
|
|
|
- <el-input
|
|
|
- style="width: 100%"
|
|
|
- placeHolder="请输入检查组成员"
|
|
|
- v-model="info.checkTeam"
|
|
|
- maxlength="100"
|
|
|
- clearable
|
|
|
- ></el-input> </el-form-item
|
|
|
- ></el-col>
|
|
|
- <el-col :span="6">
|
|
|
- <el-form-item label="检查日期" prop="planStartTime">
|
|
|
- <el-date-picker
|
|
|
- style="width: 100%"
|
|
|
- v-model="info.planStartTime"
|
|
|
- type="date"
|
|
|
- placeholder="选择检查日期"
|
|
|
- clearable
|
|
|
- >
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form>
|
|
|
- <div style="margin-left: 42px">
|
|
|
- <span style="margin-right: 20px">检查区域</span>
|
|
|
- <el-button type="primary" size="mini" @click="onAddPoint()"
|
|
|
- >选择检查内容</el-button
|
|
|
- >
|
|
|
- </div>
|
|
|
- <div class="content">
|
|
|
- <div class="area_content" v-for="area in info.checkList">
|
|
|
- <div>
|
|
|
- {{ area.areaName }}
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <div class="safetycheck_item" v-for="(item, index) in area.itemList">
|
|
|
- <span>{{ index + 1 }}、{{ item.itemName }}</span>
|
|
|
- <div class="safetycheck_point" v-for="point in item.pointList">
|
|
|
- <div>
|
|
|
- <div class="pointName">
|
|
|
- <i class="circle" />
|
|
|
- <pre>{{ point.pointName }}</pre>
|
|
|
- </div>
|
|
|
- <el-radio-group v-model="point.status" style="margin-top: 5px">
|
|
|
- <el-radio :label="0">正常</el-radio>
|
|
|
- <el-radio :label="1">异常</el-radio>
|
|
|
- </el-radio-group>
|
|
|
- <div>
|
|
|
- <el-button
|
|
|
- type="danger"
|
|
|
- size="mini"
|
|
|
- v-if="point.isAdd"
|
|
|
- style="margin-left: 50px"
|
|
|
- @click="onDeletePoint(area, item, point)"
|
|
|
- >删除</el-button
|
|
|
- >
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <div v-if="point.status == 1">
|
|
|
- <el-form
|
|
|
- :ref="'point_' + point.pointId"
|
|
|
- :model="point"
|
|
|
- :rules="exceptionRules"
|
|
|
- label-width="100px"
|
|
|
- >
|
|
|
- <el-form-item label="情况描述" prop="remark">
|
|
|
- <el-input
|
|
|
- v-model="point.remark"
|
|
|
- style="width: 250px"
|
|
|
- placeholder="请输入情况描述"
|
|
|
- maxlength="255"
|
|
|
- ></el-input>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="整改期限" prop="rectificationDeadline">
|
|
|
- <el-select
|
|
|
- v-model="point.rectificationDeadline"
|
|
|
- placeholder="请选择整改期限"
|
|
|
- >
|
|
|
- <el-option
|
|
|
- v-for="item in dict.type.rectification_deadline"
|
|
|
- :key="item.value"
|
|
|
- :value="item.value"
|
|
|
- :label="item.label"
|
|
|
- ></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="异常图片" prop="image">
|
|
|
- <imgUpload
|
|
|
- type="more"
|
|
|
- :value="
|
|
|
- point.imgData
|
|
|
- ? point.imgData.map((d) => d.imgPath).join(',')
|
|
|
- : ''
|
|
|
- "
|
|
|
- @input="onImageChanged(point, $event)"
|
|
|
- ></imgUpload>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <div class="dialog-footer">
|
|
|
- <el-button @click="onClose">取消</el-button>
|
|
|
- <!-- <el-button @click="onSave" v-if="showSaveBtn">保存</el-button> -->
|
|
|
- <el-button
|
|
|
- type="primary"
|
|
|
- @click="onSubmit()"
|
|
|
- v-hasPermi="['core:safetycheck:tempregister']"
|
|
|
- >提交</el-button
|
|
|
- >
|
|
|
- </div>
|
|
|
- <SelectPoint
|
|
|
- ref="SelectPoint"
|
|
|
- :orgType="[info.beCheckOrgType]"
|
|
|
- @select="onSelectPoint"
|
|
|
- ></SelectPoint>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-<script>
|
|
|
-import { mapGetters } from "vuex";
|
|
|
-import * as api from "@/api/safetycheck/checkRegister.js";
|
|
|
-import dayjs from "dayjs";
|
|
|
-import SelectPoint from "../../ruleManager/dialog.select.point.vue";
|
|
|
-import imgUpload from "@/components/ImageUpload/index.vue";
|
|
|
-import { getLabel } from "@/views/commonOption.js";
|
|
|
-import { getNamesByOrgId } from "@/api/system/role.js";
|
|
|
-import orgDropDown from "@/components/orgTree/orgDropDown.vue";
|
|
|
-export default {
|
|
|
- name: "safetyCheckRegister",
|
|
|
- data() {
|
|
|
- return {
|
|
|
- info: {
|
|
|
- taskName: null,
|
|
|
- checkOrgId: null,
|
|
|
- checkRoleId: null,
|
|
|
- beCheckedOrgId: null,
|
|
|
- beCheckOrgType: null,
|
|
|
- planStartTime: new Date(),
|
|
|
- checkTeam: null,
|
|
|
- checkList: [],
|
|
|
- },
|
|
|
- roleOptions: [],
|
|
|
- prevCheckOrgType: null, //上一个选中检查机构的类型
|
|
|
- prevBecheckedOrgType: null, //上一个受检机构的类型
|
|
|
- exceptionRules: {
|
|
|
- remark: [{ required: true, message: "请输入情况描述" }],
|
|
|
- rectificationDeadline: [{ required: true, message: "请选择整改期限" }],
|
|
|
- },
|
|
|
- baseInfoRules: {
|
|
|
- taskName: [{ required: true, message: "请输入任务名称" }],
|
|
|
- checkOrgId: [{ required: true, message: "请选择检查主体" }],
|
|
|
- checkRoleId: [{ required: true, message: "请选择检查人员" }],
|
|
|
- beCheckedOrgId: [{ required: true, message: "请选择受检机构" }],
|
|
|
- planStartTime: [{ required: true, message: "请选择检查日期" }],
|
|
|
- },
|
|
|
- pointIdsWhenAdd: [],
|
|
|
- mode: null,
|
|
|
- };
|
|
|
- },
|
|
|
- dicts: ["rectification_deadline", "sys_user_is_lock"],
|
|
|
- components: { SelectPoint, imgUpload, orgDropDown },
|
|
|
- computed: {
|
|
|
- ...mapGetters(["orgId", "roleList", "userId"]),
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- this.info.checkOrgId = this.orgId;
|
|
|
- this.info.checkRoleId = this.roleList[0].roleId;
|
|
|
- },
|
|
|
- methods: {
|
|
|
- dayjs,
|
|
|
- getLabel,
|
|
|
- onCheckOrgSelect(node) {
|
|
|
- if (node == null) {
|
|
|
- this.prevCheckOrgType = null;
|
|
|
- this.roleOptions = [];
|
|
|
- this.checkRoleId = null;
|
|
|
- return;
|
|
|
- }
|
|
|
- if (node.type == this.prevCheckOrgType) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- getNamesByOrgId(node.id).then((r) => {
|
|
|
- this.roleOptions = r.data;
|
|
|
- this.prevCheckOrgType = node.type;
|
|
|
- if (!this.roleOptions.find((op) => op.id == this.info.checkRoleId)) {
|
|
|
- this.info.checkRoleId = null;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- onBecheckOrgSelect(node) {
|
|
|
- if (node == null) {
|
|
|
- this.prevBecheckedOrgType = null;
|
|
|
- this.info.checkList = [];
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (node.type == this.prevBecheckedOrgType) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- this.info.checkList = [];
|
|
|
- this.prevBecheckedOrgType = node.type;
|
|
|
- this.info.beCheckOrgType = node.type;
|
|
|
- },
|
|
|
- onAddPoint() {
|
|
|
- if (!this.info.beCheckedOrgId) {
|
|
|
- this.$message.info("请先选择受检机构");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (!this.info.beCheckOrgType) {
|
|
|
- this.$message.warning("受检机构的机构类型未知");
|
|
|
- return;
|
|
|
- }
|
|
|
- this.pointIdsWhenAdd = [];
|
|
|
- this.info.checkList.forEach((a) => {
|
|
|
- a.itemList.forEach((i) => {
|
|
|
- i.pointList.forEach((p) => {
|
|
|
- this.pointIdsWhenAdd.push(p.pointId);
|
|
|
- });
|
|
|
- });
|
|
|
- });
|
|
|
- this.$refs.SelectPoint.show(this.pointIdsWhenAdd);
|
|
|
- },
|
|
|
- onSelectPoint(selectedList) {
|
|
|
- let hasNew = false;
|
|
|
- for (let index in selectedList) {
|
|
|
- let p = selectedList[index];
|
|
|
- if (this.pointIdsWhenAdd.indexOf(p.id) >= 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- let info = this.info;
|
|
|
- let area = info.checkList.find((a) => a.areaId === p.areaId);
|
|
|
- if (!area) {
|
|
|
- area = { areaId: p.areaId, areaName: p.areaName, itemList: [] };
|
|
|
- info.checkList.push(area);
|
|
|
- }
|
|
|
-
|
|
|
- let item = area.itemList.find((i) => i.itemId == p.itemId);
|
|
|
- if (!item) {
|
|
|
- item = { itemId: p.itemId, itemName: p.itemName, pointList: [] };
|
|
|
- area.itemList.push(item);
|
|
|
- }
|
|
|
-
|
|
|
- let point = item.pointList.find((i) => i.pointId == p.id);
|
|
|
- if (!point) {
|
|
|
- point = {
|
|
|
- pointId: p.id,
|
|
|
- pointName: p.pointName,
|
|
|
- mustCheck: 1,
|
|
|
- isAdd: 1,
|
|
|
- status: 0,
|
|
|
- remark: null,
|
|
|
- imgData: null,
|
|
|
- rectificationDeadline: null,
|
|
|
- submitBy: null,
|
|
|
- submitTime: null,
|
|
|
- };
|
|
|
-
|
|
|
- item.pointList.push(point);
|
|
|
- hasNew = true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!hasNew) {
|
|
|
- this.$message.info("没有可新增的检查内容");
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- onDeletePoint(area, item, point) {
|
|
|
- if (point.isAdd === 0) {
|
|
|
- this.$message.warning("不可删除计划的检查内容");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- let index = item.pointList.indexOf(point);
|
|
|
- if (index >= 0) {
|
|
|
- item.pointList.splice(index, 1);
|
|
|
- }
|
|
|
-
|
|
|
- if (item.pointList.length === 0) {
|
|
|
- index = area.itemList.indexOf(item);
|
|
|
- area.itemList.splice(index, 1);
|
|
|
- }
|
|
|
-
|
|
|
- if (area.itemList.length === 0) {
|
|
|
- index = this.info.checkList.indexOf(area);
|
|
|
- this.info.checkList.splice(index, 1);
|
|
|
- }
|
|
|
- },
|
|
|
- onImageChanged(point, value) {
|
|
|
- point.imgData = value
|
|
|
- .split(",")
|
|
|
- .map((img) => ({ id: null, imgPath: img }));
|
|
|
- },
|
|
|
- onClose() {
|
|
|
- this.$tab.closePageAndPushPrev();
|
|
|
- },
|
|
|
- onSave() {
|
|
|
- this.info.isSubmit = 0;
|
|
|
- api.tempSubmit(this.info).then((r) => {
|
|
|
- this.$message.info("保存成功");
|
|
|
- });
|
|
|
- },
|
|
|
- async onSubmit() {
|
|
|
- let isOk = true;
|
|
|
- let rs = this.$refs;
|
|
|
- for (let p in this.$refs) {
|
|
|
- if (p.startsWith("point")) {
|
|
|
- try {
|
|
|
- let form = this.$refs[p];
|
|
|
- if (form.length) {
|
|
|
- isOk &= await this.$refs[p][0].validate();
|
|
|
- } else {
|
|
|
- isOk &= await this.$refs[p].validate();
|
|
|
- }
|
|
|
- } catch (e) {
|
|
|
- isOk &= false;
|
|
|
- console.error(e);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (isOk) {
|
|
|
- this.info.isSubmit = 1;
|
|
|
- let data = { ...this.info };
|
|
|
- data.checkRoles = [{ id: this.info.checkRoleId }];
|
|
|
- api.tempSubmit(data).then((r) => {
|
|
|
- this.$message.info("提交成功");
|
|
|
- this.$tab.closePageAndPushPrev();
|
|
|
- });
|
|
|
- }
|
|
|
- },
|
|
|
- },
|
|
|
-};
|
|
|
-</script>
|
|
|
-<style lang="scss" scoped>
|
|
|
-.content {
|
|
|
- max-height: calc(100% - 300px);
|
|
|
- overflow-y: auto;
|
|
|
- margin-bottom: 20px;
|
|
|
- margin-top: 20px;
|
|
|
-}
|
|
|
-.area_content {
|
|
|
- border: #b8bdc0 1px solid;
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
-}
|
|
|
-
|
|
|
-.content > .area_content:first-child {
|
|
|
- border-bottom: none;
|
|
|
-}
|
|
|
-
|
|
|
-.content > .area_content:last-child {
|
|
|
- border-bottom: #b8bdc0 1px solid;
|
|
|
-}
|
|
|
-
|
|
|
-.area_content > div:nth-child(1) {
|
|
|
- background-color: #e6e6e6;
|
|
|
- border-right: #b8bdc0 1px solid;
|
|
|
- padding-top: auto;
|
|
|
- width: 15%;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- justify-content: center;
|
|
|
- text-align: center;
|
|
|
-}
|
|
|
-
|
|
|
-.area_content > div:nth-child(2) {
|
|
|
- width: 80%;
|
|
|
- padding-left: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.safetycheck_item {
|
|
|
- margin: 10px;
|
|
|
- margin-bottom: 20px;
|
|
|
-}
|
|
|
-
|
|
|
-.safetycheck_point {
|
|
|
- padding-top: 10px;
|
|
|
- padding-left: 30px;
|
|
|
-
|
|
|
- & > div {
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-.pointName {
|
|
|
- width: 200px;
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
-}
|
|
|
-.dialog-footer {
|
|
|
- width: 100%;
|
|
|
- text-align: right;
|
|
|
- border-top: #b8bdc0 1px solid;
|
|
|
- padding-top: 10px;
|
|
|
- padding-right: 30px;
|
|
|
- position: absolute;
|
|
|
- bottom: 30px;
|
|
|
- right: 0px;
|
|
|
-}
|
|
|
-.circle {
|
|
|
- display: inline-block;
|
|
|
- width: 5px;
|
|
|
- height: 5px;
|
|
|
- border-radius: 5px;
|
|
|
- background-color: #000;
|
|
|
- border: none;
|
|
|
- margin-top: 10px;
|
|
|
- margin-right: 10px;
|
|
|
-}
|
|
|
-</style>
|