diff --git a/src/views/accident/event/components/addOrEdit.vue b/src/views/accident/event/components/addOrEdit.vue new file mode 100644 index 0000000..c971ec2 --- /dev/null +++ b/src/views/accident/event/components/addOrEdit.vue @@ -0,0 +1,480 @@ +<template> + <div class="app-container"> + <el-form + ref="form" + :model="infoForm" + :rules="rules" + label-width="180px" + style="width: 900px" + > + <el-form-item :label-width="formLabelWidth" label="事件案号" prop="incidentNumber"> + <el-input v-model="infoForm.incidentNumber" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="事件名称" prop="incidentName"> + <el-input v-model="infoForm.incidentName" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="事件类型" prop="incidentType"> + <el-select v-model="infoForm.incidentType" :disabled="isDisabled" placeholder="请选择"> + <el-option v-for="item in incidentTypes" :key="item.id" :label="item.name" :value="item.id"/> + </el-select> + </el-form-item> + <!-- <el-form-item :label-width="formLabelWidth" label="事件级别" prop="incidentLevel">--> + <!-- <el-select v-model="infoForm.incidentLevel" :disabled="isDisabled" placeholder="请选择">--> + <!-- <el-option v-for="item in incidentLevels" :key="item.id" :label="item.name" :value="item.id"/>--> + <!-- </el-select>--> + <!-- </el-form-item>--> + <el-form-item :label-width="formLabelWidth" label="事件发生地点" prop="location"> + <el-input v-model="infoForm.location" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="事件发生时间" prop="incidentDate"> + <el-date-picker + :disabled="isDisabled" + v-model="infoForm.incidentDate" + type="datetime" + placeholder="选择事件发生时间" + format="yyyy-MM-dd HH:mm:ss" + value-format="yyyy-MM-dd HH:mm:ss" + style="width: 100%;" + /> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="直接经济损失(万元)" prop="directLoss"> + <el-input v-model="infoForm.directLoss" :disabled="isDisabled" type="number" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="受伤人数" prop="injured"> + <el-input v-model="infoForm.injured" :disabled="isDisabled" type="number" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="死亡人数" prop="fatalities"> + <el-input v-model="infoForm.fatalities" :disabled="isDisabled" type="number" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="重伤人数" prop="seriouslyInjured"> + <el-input v-model="infoForm.seriouslyInjured" :disabled="isDisabled" type="number" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="事件起因" prop="cause"> + <el-input v-model="infoForm.cause" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="事件概述" prop="summary"> + <el-input v-model="infoForm.summary" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="原因分析及责任认定" prop="analysis"> + <el-input v-model="infoForm.analysis" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="考核建议" prop="suggestions"> + <el-input v-model="infoForm.suggestions" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="整改措施" prop="measures"> + <el-input v-model="infoForm.measures" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="填表人" prop="creator"> + <el-input v-model="infoForm.creator" :disabled="isDisabled" autocomplete="off"/> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="报出日期" prop="reportDate"> + <el-date-picker + v-model="infoForm.reportDate" + :disabled="isDisabled" + type="datetime" + placeholder="请选择报出日期" + style="width: 100%;" + format="yyyy-MM-dd HH:mm:ss" + value-format="yyyy-MM-dd HH:mm:ss" + /> + </el-form-item> + <el-form-item :label-width="formLabelWidth" label="事故照片" prop="fileList"> + <el-upload + ref="upload" + :disabled="isDisabled" + :file-list="infoForm.fileList" + :multiple="false" + :auto-upload="true" + :limit="limitNum" + :on-remove="handleRemovePicture" + :on-preview="handlePictureCardPreview" + :before-upload="beforeAccidentUpload" + :on-error="handleError" + :on-exceed="handleExceed" + name="file" + action="#" + accept=".jpg,.jpeg,.png" + list-type="picture-card"> + <i class="el-icon-plus"/> + </el-upload> + </el-form-item> + <el-form-item v-if="!isDisabled" :label-width="formLabelWidth" label="附件" prop="fileAddressList"> + <el-upload + ref="upload" + :disabled="isDisabled" + :file-list="infoForm.fileAddressList" + :multiple="false" + :auto-upload="true" + :limit="limitNum" + :on-remove="handleRemoveAnnex" + :before-upload="beforeEventUpload" + :on-error="handleError" + :on-exceed="handleExceed" + name="file" + action="#" + accept=".doc,.docx,.pdf,.xlsx"> + <el-button :disabled="isDisabled" size="small" type="primary">点击上传</el-button> + </el-upload> + </el-form-item> + <el-form-item v-if="isDisabled" :label-width="formLabelWidth" label="附件" prop="fileAddressList"> + <a + v-if="infoForm.fileAddressList != null && infoForm.fileAddressList.length !== 0" + :href="infoForm.fileAddressList[0].url" + style="display: flex;flex-wrap: wrap;gap: 10px;" + + >{{ infoForm.fileAddressList[0].name }}</a> + </el-form-item> + </el-form> + + <el-dialog :visible.sync="dialogImgVisible"> + <div v-if="infoForm.fileList.length > 0"> + <img :src="infoForm.fileList[0].url" width="100%" alt=""> + </div> + </el-dialog> + + <div class="ui-height"/> + <div class="ui-foot"> + <el-button + type="primary" + icon="el-icon-arrow-left" + plain + @click="goBack">返回 + </el-button> + <el-button type="primary" @click="confirm">确 定</el-button> + </div> + </div> +</template> + +<script> +import { requestFN } from '@/utils/request' +import { upload } from '@/utils/upload' +import formatDate from '@/utils/dateformat' + +export default { + data() { + return { + config: config, + infoForm: { + id: '', // 主键ID + incidentNumber: '', // 事件案号 + incidentName: '', // 事件名称 + incidentType: null, // 事件类型 + companyName: '', // 所属公司 + incidentLevel: '', // 事件级别 + incidentNature: '', // 事件性质 + location: '', // 事件发生地点 + incidentDate: null, // 事件发生时间 + directLoss: '', // 直接经济损失(万元) + injured: null, // 受伤人数 + fatalities: null, // 死亡人数 + seriouslyInjured: null, // 重伤人数 + cause: '', // 事件起因 + summary: '', // 事件概述 + fileList: [], // 事件照片 + fileAddressList: [], // 附件地址 + analysis: '', // 原因分析及责任认定 + suggestions: '', // 考核建议 + measures: '', // 整改措施 + creator: '', // 填表人 + reportDate: null // 报出日期 + }, + formLabelWidth: '140px', + /** 事件类型 */ + incidentTypes: [], + /** 事件等级 */ + incidentLevels: [], + tableName: '', + /** 图片上传限制个数 */ + limitNum: 1, + /** 预览弹窗 */ + dialogImgVisible: false, + rules: { + incidentNumber: [{ required: true, message: '事件案号不能为空', trigger: 'blur' }], + incidentName: [{ required: true, message: '事件名称不能为空', trigger: 'blur' }], + incidentType: [{ required: true, message: '事件类型不能为空', trigger: 'blur' }], + incidentNature: [{ required: true, message: '事件性质不能为空', trigger: 'blur' }], + location: [{ required: true, message: '事件发生地点不能为空', trigger: 'blur' }], + incidentDate: [{ required: true, message: '事件发生时间不能为空', trigger: 'blur' }], + cause: [{ required: true, message: '事件起因不能为空', trigger: 'blur' }], + summary: [{ required: true, message: '事件概述不能为空', trigger: 'blur' }], + fileList: [{ required: true, message: '事件照片不能为空', trigger: 'blur' }], + analysis: [{ required: true, message: '原因分析及责任认定不能为空', trigger: 'blur' }], + suggestions: [{ required: true, message: '考核建议不能为空', trigger: 'blur' }], + measures: [{ required: true, message: '整改措施不能为空', trigger: 'blur' }], + creator: [{ required: true, message: '填表人不能为空', trigger: 'blur' }], + reportDate: [{ required: true, message: '报出日期不能为空', trigger: 'blur' }] + } + } + }, + + computed: { + isDisabled() { + return this.$parent.tableName === '查看' + } + }, + + created() { + this.getDict() + const id = this.$parent.id + this.tableName = this.$parent.tableName + if (id == null || id === '') { + this.infoForm = this.$options.data().infoForm + } else { + // 若有数据项的ID, 则请求接口并回显表单 + requestFN('/accident/' + id, {}).then((data) => { + this.infoForm = { + ...data.info, + fileList: [ + { + name: 'photo', + url: config.fileUrl + data.info.photos, + remotePathName: data.info.photos + } + ], + fileAddressList: [ + { + name: '附件', + url: config.fileUrl + data.info.attachmentAddress, + remotePathName: data.info.attachmentAddress + } + ] + } + const fileAddress = this.infoForm.fileAddressList[0].remotePathName + if (fileAddress == null || fileAddress === '') { + this.infoForm.fileAddressList = [] + } + this.infoForm.incidentDate = new Date(data.info.incidentDate) + this.infoForm.reportDate = new Date(data.info.reportDate) + }).catch((e) => { + }) + } + }, + + methods: { + /** + * 文件列表移除文件时的钩子 + */ + handleRemovePicture(file) { + if (file.remotePathName) { + requestFN(`/accident/delete/photos`, { + path: file.remotePathName + }).then((res) => { + if (res.result === 'success') { + this.infoForm.fileList = [] + this.$message({ + message: '文件删除成功', + type: 'info', + duration: 2000 + }) + } + }) + } + }, + + /** + * 文件列表移除文件时的钩子 + */ + handleRemoveAnnex(file) { + if (file.remotePathName) { + requestFN(`/accident/delete/photos`, { + path: file.remotePathName + }).then((res) => { + if (res.result === 'success') { + this.infoForm.fileAddressList = [] + this.$message({ + message: '文件删除成功', + type: 'info', + duration: 2000 + }) + } + }) + } + }, + + /** + * 点击文件列表中已上传的文件时的钩子 + */ + handlePictureCardPreview(file) { + this.dialogImgVisible = true + this.dialogImageUrl = file.url + }, + + /** + * 文件上传失败时的钩子处理 + */ + // eslint-disable-next-line handle-callback-err + handleError(err, file, fileList) { + this.$message({ + message: `${file.name}上传失败, 请稍后重试`, + type: 'error', + duration: 2000 + }) + }, + + /** + * 文件超出个数限制的钩子处理 + */ + handleExceed(files, fileList) { + this.$message.warning(`当前限制选择 ${this.limitNum} 个文件,本次选择了 ${files.length} 个文件`) + }, + + /** + * 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。 + */ + beforeAccidentUpload(file) { + if (!file) { + this.$message({ + message: '请上传图片', + type: 'error' + }) + return false + } + const types = ['image/jpeg', 'image/jpg', 'image/png'] + const isImage = types.includes(file.type) + if (!isImage) { + this.$message.error('上传图片只能是 JPG、JPEG、PNG 格式!') + return false + } else { + const formData = new FormData() + formData.append('file', file) + upload('/accident/import/photos', formData).then((data) => { + if (data.result === 'success') { + this.infoForm = { + ...this.infoForm, + fileList: [{ + name: file.name, + url: config.fileUrl + data.path, + remotePathName: data.path + }] + } + } + }) + return false + } + }, + + /** + * 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。 + */ + beforeEventUpload(file) { + if (!file) { + this.$message({ + message: '请上传附件', + type: 'error' + }) + return false + } + const formData = new FormData() + formData.append('file', file) + upload('/accident/import/photos', formData).then((data) => { + if (data.result === 'success') { + this.infoForm = { + ...this.infoForm, + fileAddressList: [{ + name: file.name, + url: config.fileUrl + data.path, + remotePathName: data.path + }] + } + } + }) + return false + }, + + /** + * 返回到列表页面 + */ + goBack() { + this.handleResetInitForm() + this.image = [] + this.dialogImageUrl = '' + this.$parent.activeName = 'List' + }, + + /** + * 表单清空处理 + */ + handleResetInitForm() { + this.infoForm = { + id: '', // 主键ID + incidentNumber: '', // 事件案号 + incidentName: '', // 事件名称 + incidentType: null, // 事件类型 + companyName: '', // 所属公司 + incidentLevel: '', // 事件级别 + incidentNature: '', // 事件性质 + location: '', // 事件发生地点 + incidentDate: null, // 事件发生时间 + directLoss: '', // 直接经济损失(万元) + injured: null, // 受伤人数 + fatalities: null, // 死亡人数 + seriouslyInjured: null, // 重伤人数 + cause: '', // 事件起因 + summary: '', // 事件概述 + fileList: [], // 事件照片 + fileAddressList: [], // 附件 + analysis: '', // 原因分析及责任认定 + suggestions: '', // 考核建议 + measures: '', // 整改措施 + creator: '', // 填表人 + reportDate: null // 报出日期 + } + }, + + /** + * 表单确认按钮 + */ + confirm() { + this.$refs.form.validate(valid => { + if (!valid) { + return false + } + this.infoForm.incidentDate = formatDate(this.infoForm.incidentDate, 'YYYY-MM-DD HH:mm:ss') + this.infoForm.reportDate = formatDate(this.infoForm.reportDate, 'YYYY-MM-DD HH:mm:ss') + const address = this.infoForm.fileAddressList[0] + console.log(address) + const params = { + ...this.infoForm, + photos: this.infoForm.fileList[0].remotePathName, + attachmentAddress: address == null ? '' : address.remotePathName, + type: 1 + } + delete params.fileList + requestFN('/accident' + (this.tableName === '修改' ? '/update' : '/save'), params) + .then((response) => { + // 删除成功后的处理 + this.$message.success(this.tableName + '成功') + this.infoForm = this.$options.data().infoForm + this.$parent.activeName = 'List' + // eslint-disable-next-line handle-callback-err + }).catch((error) => { + this.$message.error(this.tableName + '失败') + }) + }) + }, + + /** + * 获取字典 + */ + getDict() { + const url = '/dictionaries/listSelectTree' + requestFN(url, + { + DICTIONARIES_ID: '8d4140a900184b60836ad1a6490fd510' + } + ).then((data) => { + this.incidentTypes = JSON.parse(data.zTreeNodes) + }) + requestFN(url, + { + DICTIONARIES_ID: 'b61a1edc59c0430c8741c5f51aa26c3c' + } + ).then((data) => { + this.incidentLevels = JSON.parse(data.zTreeNodes) + }) + } + } +} +</script> + +<style scoped lang="scss"></style> diff --git a/src/views/accident/event/components/list.vue b/src/views/accident/event/components/list.vue new file mode 100644 index 0000000..b0acb2a --- /dev/null +++ b/src/views/accident/event/components/list.vue @@ -0,0 +1,354 @@ +<template> + <div class="app-container"> + <el-form ref="searchForm" :model="searchForm" label-width="100px"> + <el-row :gutter="22"> + <el-col :span="4"> + <el-form-item label="事件名称" prop="incidentName"> + <el-input v-model="searchForm.incidentName" placeholder="请输入事件名称" class="filter-item"/> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="发生时间" prop="incidentDates"> + <el-date-picker + v-model="searchForm.incidentDates" + :default-time="['00:00:00', '23:59:59']" + value-format="yyyy-MM-dd HH:mm:ss" + format="yyyy-MM-dd" + style="width: 100%" + type="daterange" + range-separator="-" + start-placeholder="开始日期" + end-placeholder="结束日期" + /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="发生地点" prop="location"> + <el-input v-model="searchForm.location" placeholder="请输入发生地点" /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="事件类型" prop="incidentType"> + <el-select v-model="searchForm.incidentType" placeholder="请选择"> + <el-option v-for="item in incidentTypes" :key="item.id" :label="item.name" :value="item.id" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col> + <el-button v-waves type="primary" icon="el-icon-search" @click="searchList">查询</el-button> + <el-button v-waves icon="el-icon-refresh" @click="handleReset">重置</el-button> + </el-col> + </el-row> + <!-- 搜索查询 end --> + </el-form> + + <!-- table 表格 start --> + <div style="margin-top: 16px;"> + <el-table + v-loading="listLoading" + ref="multipleTable" + :data="varList" + tooltip-effect="dark" + style="width: 100%" + border + @selection-change="handleSelectionChange" + > + <el-table-column type="selection" width="55"/> + <el-table-column label="事件名称" prop="incidentName"/> + <el-table-column label="所属公司" prop="companyName"/> + <el-table-column label="发生时间" prop="incidentDate"> + <template v-slot="{row}"> + {{ formatDate(row.incidentDate,'YYYY-MM-DD HH:mm:ss') }} + </template> + </el-table-column> + <el-table-column label="发生地点" prop="location"/> + <el-table-column label="操作" width="300"> + <template v-slot="{row}"> + <el-button icon="el-icon-view" type="success" size="mini" @click="goView(row.id, '查看')">查看</el-button> + <el-button icon="el-icon-edit" type="primary" size="mini" @click="goEdit(row.id, '修改')">修改</el-button> + <el-button icon="el-icon-delete-solid" type="danger" size="mini" @click="deleteRow(row.id)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <!-- table 表格 end --> + + <div class="pagination-group"> + <el-row :gutter="20"> + <el-col :span="16"> + <el-button type="primary" icon="el-icon-circle-plus" @click="goView('', '新增')">新增</el-button> + <el-button icon="el-icon-s-promotion" @click="handleAllExport">全部导出</el-button> + <el-button type="danger" icon="el-icon-delete-solid" @click="handleBatchDel">批量删除</el-button> + </el-col> + <el-col :span="8"> + <pagination :total="listQuery.total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="searchList" /> + </el-col> + </el-row> + </div> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' +import waves from '@/directive/waves' +import formatDate from '@/utils/dateformat' +import { requestFN } from '@/utils/request' + +export default { + components: { Pagination }, + directives: { waves }, + + data() { + return { + // 搜索查询条件 + searchForm: { + /** 事件名称 */ + incidentName: '', + /** 发生时间 */ + incidentDates: [], + /** 开始时间 */ + startTime: null, + /** 结束时间 */ + endTime: null, + /** 发生地点 */ + location: '', + /** 事件类型 */ + incidentType: '', + /** 事件等级 */ + incidentLevel: '', + /** 类型 */ + type: '' + }, + /** 当前选中行 */ + multipleSelection: [], + /** 列表加载态 */ + listLoading: false, + /** 源列表数据项 */ + varList: [], + /** 事件类型 */ + incidentTypes: [], + /** 事件等级 */ + incidentLevels: [], + // 列表分页参数 + listQuery: { + /** 当前页数 */ + page: 1, + /** 分页数 */ + limit: 20, + /** 总页数 */ + total: 0 + } + } + }, + + created() { + this.getDict() + this.searchList() + }, + + methods: { + /** + * 查询搜索 + */ + searchList() { + this.listLoading = true + const dates = this.searchForm.incidentDates + this.searchForm.type = 1 + if (dates != null && dates.length === 2) { + this.searchForm.startTime = dates[0] + this.searchForm.endTime = dates[1] + } + const url = '/accident/page?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page + requestFN(url, { ...this.searchForm }).then((data) => { + this.listLoading = false + this.varList = data.varList + this.listQuery.total = data.page.totalResult + }).catch((e) => { + this.listLoading = false + }) + }, + + /** + * 重置搜索条件 + */ + handleReset() { + this.searchForm = this.$options.data().searchForm + this.searchList() + }, + + /** + * 表格行选择器处理 + */ + handleSelectionChange(val) { + this.multipleSelection = val + }, + + /** + * 跳转查看详情页面 + */ + goView(id, name) { + this.$parent.id = id + this.$parent.tableName = name + this.$parent.activeName = 'AddOrEdit' + }, + + /** + * 跳转修改页面 + */ + goEdit(id, name) { + this.$parent.id = id + this.$parent.tableName = name + this.$parent.activeName = 'AddOrEdit' + }, + + /** + * 删除行数据 + */ + deleteRow(id) { + if (id === null || id === '') { + this.$message.warning('请选择要删除的行') + return + } + + // 弹出确认框 + this.$confirm('确定要删除这调记录吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + // 发送删除请求 + const url = '/accident/delete/' + '' + id + requestFN(url).then((response) => { + // 删除成功后的处理 + this.$message.success('删除成功') + this.searchList() + // eslint-disable-next-line handle-callback-err + }).catch((error) => { + this.$message.error('删除失败') + }) + }).catch(() => { + this.$message({ + type: 'info', + message: '已取消删除' + }) + }) + }, + + /** + * 全部导出 + */ + handleAllExport() { + this.$confirm('确定要下载excel模板吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = false + window.location.href = config.httpurl + '/accident/export/excel?type=1' + }).catch(() => { + this.listLoading = false + }) + this.listLoading = false + }, + + /** + * 下载附件 + */ + downloadTheAttachment(attachmentAddress) { + this.$confirm('确定要下载附件吗?', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + this.listLoading = false + window.location.href = config.fileUrl + attachmentAddress + }).catch(() => { + this.listLoading = false + }) + this.listLoading = false + }, + + /** + * 刷新 + */ + handleRefresh() { + this.searchForm = this.$options.data().searchForm + this.searchList() + // this.toggleSelection() + }, + + /** + * 批量删除 + */ + handleBatchDel() { + // 获取选中的行数据 + const selectedRows = this.multipleSelection + // 如果没有选中任何行,则提示用户 + if (this.multipleSelection === '' || selectedRows.length === 0) { + this.$message.warning('请选择要删除的行') + return + } + // 弹出确认框 + this.$confirm('确定要删除这些记录吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }).then(() => { + // 获取所有选中行的 ID + let ids = '' + selectedRows.forEach(row => { + ids += row.id + ',' + }) + // 发送批量删除请求 + const url = '/accident/delete/' + '' + ids + requestFN(url).then((response) => { + // 删除成功后的处理 + this.$message.success('删除成功') + this.searchList() + // eslint-disable-next-line handle-callback-err + }).catch(() => { + this.$message.error('删除失败') + }) + }).catch(() => { + this.$message({ + type: 'info', + message: '已取消删除' + }) + }) + }, + + /** + * 查询字典 + */ + getDict() { + const url = '/dictionaries/listSelectTree' + requestFN(url, + { + DICTIONARIES_ID: '8d4140a900184b60836ad1a6490fd510' + } + ).then((data) => { + this.incidentTypes = JSON.parse(data.zTreeNodes) + }) + requestFN(url, + { + DICTIONARIES_ID: 'b61a1edc59c0430c8741c5f51aa26c3c' + } + ).then((data) => { + this.incidentLevels = JSON.parse(data.zTreeNodes) + }) + }, + + formatDate(date, format) { + return formatDate(date, format) + } + } +} +</script> + +<style lang="scss" scoped> +.pagination-group { + margin-top: 14px; +} +</style> diff --git a/src/views/accident/event/index.vue b/src/views/accident/event/index.vue new file mode 100644 index 0000000..498683d --- /dev/null +++ b/src/views/accident/event/index.vue @@ -0,0 +1,39 @@ +<template> + <div> + <keep-alive> + <List v-if="activeName === 'List'" ref="List" /> + </keep-alive> + <Add v-if="activeName === 'AddOrEdit'" ref="AddOrEdit" /> + </div> +</template> + +<script> +import List from './components/list.vue' +import Add from './components/addOrEdit.vue' + +export default { + components: { + List: List, + Add: Add + }, + data() { + return { + activeName: 'List', + id: '', + tableName: '' + } + }, + watch: { + activeName(val) { + if (val === 'List') { + this.$nextTick(() => { + this.$refs.List.searchList() + }) + } + } + } +} +</script> + +<style scoped> +</style> diff --git a/src/views/accident/records/components/addOrEdit.vue b/src/views/accident/records/components/addOrEdit.vue index eb91097..9ebe882 100644 --- a/src/views/accident/records/components/addOrEdit.vue +++ b/src/views/accident/records/components/addOrEdit.vue @@ -32,9 +32,9 @@ v-model="infoForm.incidentDate" type="datetime" placeholder="选择事故发生时间" - style="width: 100%;" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" + style="width: 100%;" /> </el-form-item> <el-form-item :label-width="formLabelWidth" label="直接经济损失(万元)" prop="directLoss"> @@ -55,26 +55,6 @@ <el-form-item :label-width="formLabelWidth" label="事故概述" prop="summary"> <el-input v-model="infoForm.summary" :disabled="isDisabled" autocomplete="off"/> </el-form-item> - <el-form-item :label-width="formLabelWidth" label="事故照片" prop="fileList"> - <el-upload - ref="upload" - :disabled="isDisabled" - :file-list="infoForm.fileList" - :multiple="false" - :auto-upload="true" - :limit="limitNum" - :on-remove="handleRemovePicture" - :on-preview="handlePictureCardPreview" - :before-upload="beforeAccidentUpload" - :on-error="handleError" - :on-exceed="handleExceed" - name="file" - action="#" - accept=".jpg,.jpeg,.png" - list-type="picture-card"> - <i class="el-icon-plus"/> - </el-upload> - </el-form-item> <el-form-item :label-width="formLabelWidth" label="原因分析及责任认定" prop="analysis"> <el-input v-model="infoForm.analysis" :disabled="isDisabled" autocomplete="off"/> </el-form-item> @@ -98,6 +78,52 @@ value-format="yyyy-MM-dd HH:mm:ss" /> </el-form-item> + <el-form-item :label-width="formLabelWidth" label="事故照片" prop="fileList"> + <el-upload + ref="upload" + :disabled="isDisabled" + :file-list="infoForm.fileList" + :multiple="false" + :auto-upload="true" + :limit="limitNum" + :on-remove="handleRemovePicture" + :on-preview="handlePictureCardPreview" + :before-upload="beforeAccidentUpload" + :on-error="handleError" + :on-exceed="handleExceed" + name="file" + action="#" + accept=".jpg,.jpeg,.png" + list-type="picture-card"> + <i class="el-icon-plus"/> + </el-upload> + </el-form-item> + <el-form-item v-if="!isDisabled" :label-width="formLabelWidth" label="附件" prop="fileAddressList"> + <el-upload + ref="upload" + :disabled="isDisabled" + :file-list="infoForm.fileAddressList" + :multiple="false" + :auto-upload="true" + :limit="limitNum" + :on-remove="handleRemoveAnnex" + :before-upload="beforeEventUpload" + :on-error="handleError" + :on-exceed="handleExceed" + name="file" + action="#" + accept=".doc,.docx,.pdf,.xlsx"> + <el-button :disabled="isDisabled" size="small" type="primary">点击上传</el-button> + </el-upload> + </el-form-item> + <el-form-item v-if="isDisabled" :label-width="formLabelWidth" label="附件" prop="fileAddressList"> + <a + v-if="infoForm.fileAddressList != null && infoForm.fileAddressList.length !== 0" + :href="infoForm.fileAddressList[0].url" + style="display: flex;flex-wrap: wrap;gap: 10px;" + + >{{ infoForm.fileAddressList[0].name }}</a> + </el-form-item> </el-form> <el-dialog :visible.sync="dialogImgVisible"> @@ -120,7 +146,7 @@ </template> <script> -import { requestFN } from '../../../../utils/request' +import { requestFN } from '@/utils/request' import { upload } from '@/utils/upload' import formatDate from '@/utils/dateformat' @@ -145,6 +171,8 @@ export default { cause: '', // 事故起因 summary: '', // 事故概述 fileList: [], // 事故照片 + fileAddressList: [], // 附件地址 + attachmentAddress: '', // 附件地址url analysis: '', // 原因分析及责任认定 suggestions: '', // 考核建议 measures: '', // 整改措施 @@ -165,13 +193,9 @@ export default { incidentNumber: [{ required: true, message: '事故案号不能为空', trigger: 'blur' }], incidentName: [{ required: true, message: '事故名称不能为空', trigger: 'blur' }], incidentType: [{ required: true, message: '事故类型不能为空', trigger: 'blur' }], - incidentLevel: [{ required: true, message: '事故级别不能为空', trigger: 'blur' }], incidentNature: [{ required: true, message: '事故性质不能为空', trigger: 'blur' }], location: [{ required: true, message: '事故发生地点不能为空', trigger: 'blur' }], incidentDate: [{ required: true, message: '事故发生时间不能为空', trigger: 'blur' }], - directLoss: [{ required: true, message: '直接经济损失(万元)不能为空', trigger: 'blur' }], - injured: [{ required: true, message: '受伤人数不能为空', trigger: 'blur' }], - seriouslyInjured: [{ required: true, message: '重伤人数不能为空', trigger: 'blur' }], cause: [{ required: true, message: '事故起因不能为空', trigger: 'blur' }], summary: [{ required: true, message: '事故概述不能为空', trigger: 'blur' }], fileList: [{ required: true, message: '事故照片不能为空', trigger: 'blur' }], @@ -207,8 +231,19 @@ export default { url: config.fileUrl + data.info.photos, remotePathName: data.info.photos } + ], + fileAddressList: [ + { + name: '附件', + url: config.fileUrl + data.info.attachmentAddress, + remotePathName: data.info.attachmentAddress + } ] } + const fileAddress = this.infoForm.fileAddressList[0].remotePathName + if (fileAddress == null || fileAddress === '') { + this.infoForm.fileAddressList = [] + } this.infoForm.incidentDate = new Date(data.info.incidentDate) this.infoForm.reportDate = new Date(data.info.reportDate) }).catch((e) => { @@ -237,6 +272,26 @@ export default { } }, + /** + * 文件列表移除文件时的钩子 + */ + handleRemoveAnnex(file) { + if (file.remotePathName) { + requestFN(`/accident/delete/photos`, { + path: file.remotePathName + }).then((res) => { + if (res.result === 'success') { + this.infoForm.fileAddressList = [] + this.$message({ + message: '文件删除成功', + type: 'info', + duration: 2000 + }) + } + }) + } + }, + /** * 点击文件列表中已上传的文件时的钩子 */ @@ -299,6 +354,34 @@ export default { } }, + /** + * 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。 + */ + beforeEventUpload(file) { + if (!file) { + this.$message({ + message: '请上传附件', + type: 'error' + }) + return false + } + const formData = new FormData() + formData.append('file', file) + upload('/accident/import/photos', formData).then((data) => { + if (data.result === 'success') { + this.infoForm = { + ...this.infoForm, + fileAddressList: [{ + name: file.name, + url: config.fileUrl + data.path, + remotePathName: data.path + }] + } + } + }) + return false + }, + /** * 返回到列表页面 */ @@ -346,13 +429,14 @@ export default { if (!valid) { return false } - this.infoForm.incidentDate = formatDate(this.infoForm.incidentDate, 'YYYY-MM-DD HH:mm:ss') this.infoForm.reportDate = formatDate(this.infoForm.reportDate, 'YYYY-MM-DD HH:mm:ss') - + const address = this.infoForm.fileAddressList[0] const params = { ...this.infoForm, - photos: this.infoForm.fileList[0].remotePathName + photos: this.infoForm.fileList[0].remotePathName, + attachmentAddress: address == null ? '' : address.remotePathName, + type: 2 } delete params.fileList requestFN('/accident' + (this.tableName === '修改' ? '/update' : '/save'), params) diff --git a/src/views/accident/records/components/list.vue b/src/views/accident/records/components/list.vue index b2e52e8..332c2ca 100644 --- a/src/views/accident/records/components/list.vue +++ b/src/views/accident/records/components/list.vue @@ -1,7 +1,7 @@ <template> <div class="app-container"> <el-form ref="searchForm" :model="searchForm" label-width="100px"> - <el-row :gutter="12"> + <el-row :gutter="22"> <el-col :span="4"> <el-form-item label="事故名称" prop="incidentName"> <el-input v-model="searchForm.incidentName" placeholder="请输入事故名称" class="filter-item"/> @@ -27,36 +27,28 @@ <el-input v-model="searchForm.location" placeholder="请输入发生地点" /> </el-form-item> </el-col> - <el-col :span="3"> + <el-col :span="4"> <el-form-item label="事故类型" prop="incidentType"> <el-select v-model="searchForm.incidentType" placeholder="请选择"> <el-option v-for="item in incidentTypes" :key="item.id" :label="item.name" :value="item.id" /> </el-select> </el-form-item> </el-col> - <el-col :span="3"> + <el-col :span="4"> <el-form-item label="事故等级" prop="incidentLevel"> <el-select v-model="searchForm.incidentLevel" placeholder="请选择"> <el-option v-for="item in incidentLevels" :key="item.id" :label="item.name" :value="item.id" /> </el-select> </el-form-item> </el-col> - <el-col :span="3"> + </el-row> + <el-row> + <el-col> <el-button v-waves type="primary" icon="el-icon-search" @click="searchList">查询</el-button> <el-button v-waves icon="el-icon-refresh" @click="handleReset">重置</el-button> </el-col> </el-row> <!-- 搜索查询 end --> - - <!-- 顶部操作按钮 start --> - <el-row :gutter="24"> - <el-col :span="24"> - <el-button type="primary" icon="el-icon-circle-plus" @click="goView('', '新增')">新增</el-button> - <el-button icon="el-icon-s-promotion" @click="handleAllExport">全部导出</el-button> - <el-button type="danger" icon="el-icon-delete-solid" @click="handleBatchDel">批量删除</el-button> - </el-col> - </el-row> - <!-- 顶部操作按钮 end --> </el-form> <!-- table 表格 start --> @@ -81,8 +73,8 @@ <el-table-column label="发生地点" prop="location"/> <el-table-column label="操作" width="300"> <template v-slot="{row}"> - <el-button icon="el-icon-view" size="mini" @click="goView(row.id, '查看')">查看</el-button> - <el-button icon="el-icon-edit" size="mini" @click="goEdit(row.id, '修改')">修改</el-button> + <el-button icon="el-icon-view" type="success" size="mini" @click="goView(row.id, '查看')">查看</el-button> + <el-button icon="el-icon-edit" type="primary" size="mini" @click="goEdit(row.id, '修改')">修改</el-button> <el-button icon="el-icon-delete-solid" type="danger" size="mini" @click="deleteRow(row.id)">删除</el-button> </template> </el-table-column> @@ -91,7 +83,16 @@ <!-- table 表格 end --> <div class="pagination-group"> - <pagination :total="listQuery.total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="searchList" /> + <el-row :gutter="20"> + <el-col :span="16"> + <el-button type="primary" icon="el-icon-circle-plus" @click="goView('', '新增')">新增</el-button> + <el-button icon="el-icon-s-promotion" @click="handleAllExport">全部导出</el-button> + <el-button type="danger" icon="el-icon-delete-solid" @click="handleBatchDel">批量删除</el-button> + </el-col> + <el-col :span="8"> + <pagination :total="listQuery.total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="searchList" /> + </el-col> + </el-row> </div> </div> </template> @@ -100,7 +101,7 @@ import Pagination from '@/components/Pagination' import waves from '@/directive/waves' import formatDate from '@/utils/dateformat' -import { requestFN } from '../../../../utils/request' +import { requestFN } from '@/utils/request' export default { components: { Pagination }, @@ -123,7 +124,11 @@ export default { /** 事故类型 */ incidentType: '', /** 事故等级 */ - incidentLevel: '' + incidentLevel: '', + /** 附件地址 */ + attachmentAddress: '', + /** 类型 */ + type: '' }, /** 当前选中行 */ multipleSelection: [], @@ -159,6 +164,7 @@ export default { searchList() { this.listLoading = true const dates = this.searchForm.incidentDates + this.searchForm.type = 2 if (dates != null && dates.length === 2) { this.searchForm.startTime = dates[0] this.searchForm.endTime = dates[1] @@ -249,22 +255,13 @@ export default { type: 'warning' }).then(() => { this.listLoading = false - window.location.href = config.httpurl + '/accident/export/excel' + window.location.href = config.httpurl + '/accident/export/excel?type=2' }).catch(() => { this.listLoading = false }) this.listLoading = false }, - /** - * 刷新 - */ - handleRefresh() { - this.searchForm = this.$options.data().searchForm - this.searchList() - // this.toggleSelection() - }, - /** * 批量删除 */ diff --git a/src/views/accident/records/index.vue b/src/views/accident/records/index.vue index 33eb176..498683d 100644 --- a/src/views/accident/records/index.vue +++ b/src/views/accident/records/index.vue @@ -1,6 +1,8 @@ <template> <div> - <List v-if="activeName === 'List'" ref="List" /> + <keep-alive> + <List v-if="activeName === 'List'" ref="List" /> + </keep-alive> <Add v-if="activeName === 'AddOrEdit'" ref="AddOrEdit" /> </div> </template> diff --git a/src/views/corpInfo/user/components/edit.vue b/src/views/corpInfo/user/components/edit.vue index 21765ab..2837e11 100644 --- a/src/views/corpInfo/user/components/edit.vue +++ b/src/views/corpInfo/user/components/edit.vue @@ -42,7 +42,7 @@ </el-select> </el-form-item> <el-form-item label="用户名" prop="USERNAME"> - <el-input v-model="form.USERNAME" placeholder="默认用户手机号码..." @change="goCheck()"/> + <el-input v-model="form.USERNAME" placeholder="默认用户手机号码..." @blur="goCheck()"/> <a style="color: red"> <span>如果修改手机号,登录密码则会变成初始密码“Aa@123456789”</span></a> </el-form-item> @@ -64,7 +64,7 @@ </div> </el-form-item> <el-form-item label="身份证号" prop="USER_ID_CARD"> - <el-input v-model="form.USER_ID_CARD" placeholder="这里输入身份证号..." @change="goCheck()"/> + <el-input v-model="form.USER_ID_CARD" placeholder="这里输入身份证号..."/> </el-form-item> <el-row :gutter="20"> <el-col :span="12"> @@ -717,10 +717,11 @@ export default { data() { var hasUser = (rule, value, callback) => { requestFN( - '/user/hasUser', + '/user/goCheck', { USERNAME: value, - VERIFYUSER_ID: this.form.USER_ID + VERIFYUSER_ID: this.form.USER_ID, + USER_ID: this.form.USER_ID } ).then((data) => { if (data.result == 'success') { @@ -1517,10 +1518,12 @@ export default { if (this.form.ISSTUDENT) { this.uploadImgByZhengshu(this.form.USER_ID) this.uploadImgByFace(this.form.USER_ID) - this.goPush(this.form) + // this.goPush(this.form) + this.$parent.activeName = 'List' } else { this.uploadImgByFace(this.form.USER_ID) - this.goPush(this.form) + // this.goPush(this.form) + this.$parent.activeName = 'List' } }).catch((e) => { this.listLoading = false @@ -1541,10 +1544,12 @@ export default { if (this.form.ISSTUDENT) { this.uploadImgByZhengshu(this.form.USER_ID) this.uploadImgByFace(this.form.USER_ID) - this.goPush(this.form) + // this.goPush(this.form) + this.$parent.activeName = 'List' } else { this.uploadImgByFace(this.form.USER_ID) - this.goPush(this.form) + // this.goPush(this.form) + this.$parent.activeName = 'List' } }).catch((e) => { this.listLoading = false diff --git a/src/views/corpInfo/user/components/list.vue b/src/views/corpInfo/user/components/list.vue index 0509a79..38cb96c 100644 --- a/src/views/corpInfo/user/components/list.vue +++ b/src/views/corpInfo/user/components/list.vue @@ -798,7 +798,7 @@ export default { SHIFTDUTYTWO: this.SHIFTDUTYTWO, IS_HAZARDCONFIRMER: this.IS_HAZARDCONFIRMER, USER_ID: this.USER_ID, - ISPUSH: '2' + ISPUSH: '1' } ).then((data) => { this.listLoading = false diff --git a/src/views/evaluate/initialevaluate/index.vue b/src/views/evaluate/initialevaluate/index.vue index 9fdbf12..2d22d3c 100644 --- a/src/views/evaluate/initialevaluate/index.vue +++ b/src/views/evaluate/initialevaluate/index.vue @@ -1,9 +1,11 @@ <template> <div> - <List v-if="activeName=='List'" ref="list" /> - <hiddenList v-else-if="activeName=='hiddenList'" ref="HiddenList" /> - <Detail v-else-if="activeName=='Detail'" ref="Detail" /> - <Evaluate v-else-if="activeName=='Evaluate'" ref="Evaluate" /> + <keep-alive> + <List v-if="activeName=='List'" ref="list" /> + </keep-alive> + <hiddenList v-if="activeName=='hiddenList'" ref="HiddenList" /> + <Detail v-if="activeName=='Detail'" ref="Detail" /> + <Evaluate v-if="activeName=='Evaluate'" ref="Evaluate" /> </div> </template> diff --git a/src/views/evaluate/publicity/components/list.vue b/src/views/evaluate/publicity/components/list.vue index b755a65..25b334f 100644 --- a/src/views/evaluate/publicity/components/list.vue +++ b/src/views/evaluate/publicity/components/list.vue @@ -93,6 +93,7 @@ export default { } }, created() { + console.log('------------------ 初始化 ------------------') this.getParam() this.getList() }, diff --git a/src/views/evaluate/publicity/index.vue b/src/views/evaluate/publicity/index.vue index bc96be7..60ef26c 100644 --- a/src/views/evaluate/publicity/index.vue +++ b/src/views/evaluate/publicity/index.vue @@ -1,6 +1,8 @@ <template> <div> - <List v-if="activeName=='List'" ref="List" /> + <keep-alive> + <List v-if="activeName=='List'" ref="List" /> + </keep-alive> <Detail v-if="activeName=='detail'" ref="Detail" /> <SumDetail v-if="activeName=='sumDetail'" ref="SumDetail" /> </div> diff --git a/src/views/evaluate/reviewevaluate/index.vue b/src/views/evaluate/reviewevaluate/index.vue index c813383..0223a54 100644 --- a/src/views/evaluate/reviewevaluate/index.vue +++ b/src/views/evaluate/reviewevaluate/index.vue @@ -1,6 +1,8 @@ <template> <div> - <List v-if="activeName=='List'" ref="list" /> + <keep-alive> + <List v-if="activeName=='List'" ref="list" /> + </keep-alive> <HiddenList v-if="activeName=='hiddenList'" ref="HiddenList" /> <InitialDetail v-if="activeName=='initialDetail'" ref="InitialDetail" /> <Detail v-if="activeName=='Detail'" ref="Detail" /> diff --git a/src/views/evaluate/workersevaluate/index.vue b/src/views/evaluate/workersevaluate/index.vue index 46e48c1..7b9886c 100644 --- a/src/views/evaluate/workersevaluate/index.vue +++ b/src/views/evaluate/workersevaluate/index.vue @@ -1,6 +1,8 @@ <template> <div> - <List v-if="activeName=='List'" ref="List" /> + <keep-alive> + <List v-if="activeName=='List'" ref="List" /> + </keep-alive> <Detail v-if="activeName=='detail'" ref="Detail" /> <SumDetail v-if="activeName=='sumDetail'" ref="SumDetail" /> </div> diff --git a/src/views/firefighting/points/components/list.vue b/src/views/firefighting/points/components/list.vue index 966cb81..decdf53 100644 --- a/src/views/firefighting/points/components/list.vue +++ b/src/views/firefighting/points/components/list.vue @@ -29,11 +29,7 @@ <el-col :span="4"> <el-form-item label="是否标点" label-width="110px"> <el-select v-model="IS_PUNCTUATION" clearable placeholder="请选择" style="width: 100%;"> - <el-option - v-for="item in punctuationStatusList" - :key="item.value" - :label="item.label" - :value="item.value"/> + <el-option v-for="item in punctuationStatusList" :key="item.value" :label="item.label" :value="item.value" /> </el-select> </el-form-item> </el-col> @@ -71,22 +67,16 @@ <el-table-column prop="DEVICE_COUNT" label="点位下消防器材数"/> <el-table-column prop="DEPARTMENT_NAME" label="负责部门"/> <el-table-column prop="USERNAME" label="负责人"/> - <el-table-column prop="ISPUNCTUATION" label="是否标点"> + <el-table-column label="操作" width="380"> <template slot-scope="{row}"> - <el-tag v-if="row.ISPUNCTUATION == 0" type="success">是</el-tag> - <el-tag v-else type="danger">否</el-tag> - </template> - </el-table-column> - <el-table-column label="操作" width="450"> - <template slot-scope="{row}"> - <!-- <el-button--> - <!-- v-show="true"--> - <!-- class="tiffany-btn"--> - <!-- icon="el-icon-picture"--> - <!-- type="primary"--> - <!-- size="mini"--> - <!-- @click="handleShowQr(row)">点位二维码--> - <!-- </el-button>--> + <el-button + v-show="true" + class="tiffany-btn" + icon="el-icon-picture" + type="primary" + size="mini" + @click="handleShowQr(row)">点位二维码 + </el-button> <el-button v-show="edit" type="primary" @@ -101,22 +91,6 @@ size="mini" @click="handleDelete(row)">删除 </el-button> - <!-- 新增按钮:检查记录二维码 --> - <!-- <el-button--> - <!-- class="tiffany-btn"--> - <!-- icon="el-icon-document"--> - <!-- type="info"--> - <!-- size="mini"--> - <!-- @click="handleShowRecordQr(row)">检查记录二维码--> - <!-- </el-button>--> - <el-button - class="tiffany-btn" - icon="el-icon-document" - type="info" - size="mini" - @click="handleShowNotificationCard(row)"> - 告知卡 - </el-button> </template> </el-table-column> </el-table> @@ -124,7 +98,6 @@ <div> <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button> <el-button type="danger" icon="el-icon-delete" @click="handleDelete">批量删除</el-button> - <el-button type="info" icon="el-icon-plus" @click="handleEditUser">批量修改负责人</el-button> </div> <pagination :total="total" @@ -135,91 +108,27 @@ </div> </div> - <!-- <el-dialog :visible.sync="dialogFormShow" title="查看二维码" width="680px" class="top-dialog">--> - <!-- <div id="printTest" style="border: 1px solid #fff;">--> - <!-- <div class="level-title" style="margin-top:20px">--> - <!-- <h1>消防点位信息</h1>--> - <!-- </div>--> - <!-- <table class="table-ui">--> - <!-- <tr>--> - <!-- <td class="tbg">消防区域</td>--> - <!-- <td >{{ qrInfo.FIRE_REGION_NAME }}</td>--> - <!-- <td class="tbg">消防点位</td>--> - <!-- <td>{{ qrInfo.FIRE_POINT_NAME }}</td>--> - <!-- </tr>--> - <!-- <tr>--> - <!-- <td class="tbg">负责部门</td>--> - <!-- <td>{{ qrInfo.DEPARTMENT_NAME }}</td>--> - <!-- <td class="tbg">负责人</td>--> - <!-- <td>{{ qrInfo.USERNAME }}</td>--> - <!-- </tr>--> - <!-- </table>--> - <!-- <div class="table-qrcode">--> - <!-- <vue-qr :text="qrcodeStr" :margin="0" :size="300" color-dark="#000" color-light="#fff" />--> - <!-- </div>--> - <!-- </div>--> - <!-- <div slot="footer" class="dialog-footer">--> - <!-- <el-button @click="dialogFormShow = false">关 闭</el-button>--> - <!-- <el-button v-print="'#printTest'" type="primary">打 印</el-button>--> - <!-- </div>--> - <!-- </el-dialog>--> - - <el-dialog :visible.sync="dialogFormShow" title="消防点位维护信息告知牌" width="780px" class="top-dialog"> - <el-tabs v-model="tabsActive"> - <el-tab-pane label="横版" name="horizontal"/> - <el-tab-pane label="竖版" name="vertical"/> - </el-tabs> - <div id="printTest"> - <div class="main_title">消防点位维护信息告知牌</div> - <div v-if="tabsActive === 'horizontal'" class="horizontal"> - <div class="info"> - <div class="row"> - <div class="title">消防点位</div> - <div class="value">{{ qrInfo.FIRE_POINT_NAME }}</div> - </div> - <div class="row"> - <div class="title">点位编号</div> - <div class="value">{{ qrInfo.FIRE_POINT_CODE }}</div> - </div> - </div> - <div class="qr_info"> - <div class="row"> - <div class="title">检查码</div> - <div class="qr"> - <vue-qr :text="qrcodeStr_jianchama" :margin="0" :size="280" color-dark="#000" color-light="#fff"/> - </div> - <div class="title">查询码</div> - <div class="qr"> - <vue-qr :text="qrcodeStr_chaxunma" :margin="0" :size="280" color-dark="#000" color-light="#fff"/> - </div> - </div> - </div> + <el-dialog :visible.sync="dialogFormShow" title="查看二维码" width="680px" class="top-dialog"> + <div id="printTest" style="border: 1px solid #fff;"> + <div class="level-title" style="margin-top:20px"> + <h1>消防点位信息</h1> </div> - <div v-if="tabsActive === 'vertical'" class="vertical"> - <div class="info"> - <div class="row"> - <div class="title">消防点位</div> - <div class="value">{{ qrInfo.FIRE_POINT_NAME }}</div> - </div> - <div class="row"> - <div class="title">点位编号</div> - <div class="value">{{ qrInfo.FIRE_POINT_CODE }}</div> - </div> - </div> - <div class="qr_info"> - <div class="row"> - <div class="title">检查码</div> - <div class="qr"> - <vue-qr :text="qrcodeStr_jianchama" :margin="0" :size="280" color-dark="#000" color-light="#fff"/> - </div> - </div> - <div class="row"> - <div class="title">查询码</div> - <div class="qr"> - <vue-qr :text="qrcodeStr_chaxunma" :margin="0" :size="280" color-dark="#000" color-light="#fff"/> - </div> - </div> - </div> + <table class="table-ui"> + <tr> + <td class="tbg">消防区域</td> + <td >{{ qrInfo.FIRE_REGION_NAME }}</td> + <td class="tbg">消防点位</td> + <td>{{ qrInfo.FIRE_POINT_NAME }}</td> + </tr> + <tr> + <td class="tbg">负责部门</td> + <td>{{ qrInfo.DEPARTMENT_NAME }}</td> + <td class="tbg">负责人</td> + <td>{{ qrInfo.USERNAME }}</td> + </tr> + </table> + <div class="table-qrcode"> + <vue-qr :text="qrcodeStr" :margin="0" :size="300" color-dark="#000" color-light="#fff" /> </div> </div> <div slot="footer" class="dialog-footer"> @@ -227,45 +136,6 @@ <el-button v-print="'#printTest'" type="primary">打 印</el-button> </div> </el-dialog> - - <el-dialog :visible.sync="dialogRecordFormShow" title="查看检查记录二维码" width="680px" class="top-dialog"> - <div id="recordPrintTest" style="border: 1px solid #fff;"> - <div class="level-title" style="margin-top:20px"> - <h1>检查记录二维码</h1> - </div> - <div class="table-qrcode"> - <vue-qr :text="recordQrcodeStr" :margin="0" :size="300" color-dark="#000" color-light="#fff"/> - </div> - </div> - <div slot="footer" class="dialog-footer"> - <el-button @click="dialogRecordFormShow = false">关 闭</el-button> - <el-button v-print="'#recordPrintTest'" type="primary">打 印</el-button> - </div> - </el-dialog> - - <el-dialog v-loading="listLoading" :visible.sync="dialogEditUser" title="批量修改负责人" width="800px"> - <el-form - ref="firefightingBatchEditDept" - :model="dialogEditUserForm" - :rules="dialogEditUserRules" - label-width="150px"> - <el-row> - <el-form-item label="负责人员" prop="USER_ID"> - <el-select - v-model="dialogEditUserForm.USER_ID" - placeholder="请选择人员" - class="filter-item" - style="width: 80%;"> - <el-option v-for="item in userList" :key="item.USER_ID" :label="item.NAME" :value="item.USER_ID"/> - </el-select> - </el-form-item> - </el-row> - </el-form> - <div slot="footer" class="dialog-footer"> - <el-button @click="dialogEditUser = false">取 消</el-button> - <el-button type="primary" @click="dialogEditUserConfirm">确 定</el-button> - </div> - </el-dialog> </div> </template> @@ -278,7 +148,9 @@ import waves from '@/directive/waves' // waves directive import SelectTree from '@/components/SelectTree' export default { + components: { Pagination, SelectTree, vueQr }, + directives: { waves }, data() { return { @@ -286,11 +158,7 @@ export default { addBtnType: true, listLoading: true, dialogFormShow: false, - dialogRecordFormShow: false, - qrcodeStr_jianchama: '', - qrcodeStr_chaxunma: '', - tabsActive: 'horizontal', - recordQrcodeStr: '', + qrcodeStr: '', qrInfo: {}, add: false, del: false, @@ -305,9 +173,6 @@ export default { KEYWORDS: '', FIRE_POINT_NAME: '', FIRE_POINT_CODE: '', - selectForm: { - DEPARTMENT_ID: '' - }, // 树形菜单 filterText: '', varList: [], @@ -316,28 +181,7 @@ export default { value: 'id', children: 'nodes', label: 'name' - }, - editDataIds: [], - dialogEditUser: false, - dialogEditUserForm: { - USER_ID: '' - }, - dialogEditUserRules: { - USER_ID: [{ required: true, message: '请选择负责人', trigger: 'change' }] - }, - deptTreeData: [], - userList: [], - punctuationStatusList: [ - { - value: 0, - label: '是' - }, - { - value: 1, - label: '否' - } - ], - IS_PUNCTUATION: '' + } } }, watch: { @@ -349,44 +193,36 @@ export default { created() { this.getList() this.hasButton() - this.getTreeData() }, methods: { - handleShowNotificationCard(ROW) { + handleShowQr(ROW) { this.dialogFormShow = true this.qrInfo = ROW - // 检查码 - this.qrcodeStr_chaxunma = JSON.stringify({ - MANAGER_TYPE: 'checkRecordManager', - USER_ID: ROW.USER_ID, - DEPARTMENT_ID: ROW.DEPARTMENT_ID, - FIRE_POINT_ID: ROW.FIRE_POINT_ID - }) - // 查询码 - this.qrcodeStr_jianchama = JSON.stringify({ - MANAGER_TYPE: 'fireListManager', - FIRE_POINT_ID: ROW.FIRE_POINT_ID - }) + this.qrcodeStr = this.config.weburlWaiwang + 'static/qrcode/views/bsbw/point_list.html?id=' + ROW.FIRE_POINT_ID }, handleEdit(FIRE_POINT_ID) { this.$parent.FIRE_POINT_ID = FIRE_POINT_ID this.$parent.activeName = 'Edit' }, selectable(row, index) { - return true + return row.DEVICE_COUNT == 0 }, getRowKey(row) { return row.FIRE_POINT_ID }, + // 添加 handleAdd() { this.$parent.activeName = 'Edit' this.$parent.FIRE_POINT_ID = '' this.$parent.FIRE_POINT_CODE = '' this.$parent.FIRE_POINT_NAME = '' }, + // 搜索 getQuery() { + // this.$refs.multipleTable.clearSelection() this.getList() }, + // 获取列表 getList(pid) { this.listLoading = true this.varList = [] @@ -395,9 +231,7 @@ export default { '/firePoint/list?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, { FIRE_POINT_NAME: this.FIRE_POINT_NAME, - FIRE_POINT_CODE: this.FIRE_POINT_CODE, - DEPARTMENT_ID: this.selectForm.DEPARTMENT_ID, - IS_PUNCTUATION: this.IS_PUNCTUATION + FIRE_POINT_CODE: this.FIRE_POINT_CODE } ).then((data) => { this.listLoading = false @@ -407,14 +241,9 @@ export default { }).catch((e) => { this.listLoading = false }) - }, - goKeyReset() { + }, goKeyReset() { this.FIRE_POINT_NAME = '' this.FIRE_POINT_CODE = '' - this.IS_PUNCTUATION = '' - this.selectForm = { - DEPARTMENT_ID: '' - } this.getList() }, getDict() { @@ -454,88 +283,6 @@ export default { this.listLoading = false }) }, - getTreeData() { - requestFN( - '/department/listTreeV2', - {} - ).then((data) => { - this.deptTreeData = JSON.parse(data.zTreeNodes) - }).catch((e) => { - }) - }, - handleEditUser(row) { - this.editDataIds = [] - if (row.FIRE_POINT_ID) { - this.editDataIds.push(row.FIRE_POINT_ID) - } else { - const selection = this.$refs.multipleTable.selection - if (!selection.length > 0) { - this.$message({ - type: 'warning', - message: '请选择要修改的数据' - }) - return - } - selection.forEach(item => { - this.editDataIds.push(item.FIRE_POINT_ID) - }) - } - const selection = this.$refs.multipleTable.selection - const DEPARTMENT_ID = selection[0].DEPARTMENT_ID - if (selection.length > 1) { - let flag = false - selection.forEach(item => { - if (DEPARTMENT_ID !== item.DEPARTMENT_ID) { - this.$message({ - type: 'warning', - message: '只能选择同一部门下的数据' - }) - flag = true - } - }) - if (flag) { - return - } - } - this.getUserList(DEPARTMENT_ID) - this.dialogEditUserForm = { - USER_ID: '' - } - this.dialogEditUser = true - }, - getUserList(DEPARTMENT_ID) { - requestFN( - '/user/listAll', - { - DEPARTMENT_ID: DEPARTMENT_ID - } - ).then((data) => { - this.userList = data.userList - }).catch((e) => { - }) - }, - dialogEditUserConfirm() { - this.$refs.firefightingBatchEditDept.validate((valid) => { - if (valid) { - this.listLoading = true - requestFN( - '/firePoint/batchEditFirePointUser', - { - DATA_IDS: this.editDataIds.join(','), - USER_ID: this.dialogEditUserForm.USER_ID - } - ).then(() => { - this.$message({ - message: '修改成功', - type: 'success' - }) - this.dialogEditUser = false - this.getList() - }).catch(() => { - }) - } - }) - }, handleDelete(row) { const DATA_IDS = [] if (row.FIRE_POINT_ID) { @@ -549,19 +296,6 @@ export default { }) return } - var flag = true - selection.forEach(item => { - if (item.DEVICE_COUNT > 0) { - flag = false - } - }) - if (!flag) { - this.$message({ - type: 'warning', - message: '选择的点位中有子数据,不能删除' - }) - return - } selection.forEach(item => { DATA_IDS.push(item.FIRE_POINT_ID) }) @@ -613,17 +347,15 @@ export default { } </script> -<style scoped> +<style scoped > .returnBtn { float: right; } - .app-container { - display: flex; + display: flex; /**/ align-items: baseline; } - -.table-qrcode { +.table-qrcode{ text-align: center; padding-top: 20px; width: 100%; @@ -633,139 +365,3 @@ export default { width: 100% } </style> - -<style scoped lang="scss"> -#printTest { - border: 1px solid #ccc; - padding: 20px; - margin: 10px; - - .main_title { - font-weight: bold; - font-size: 30px; - text-align: center; - color: #000; - } - - .horizontal { - .info { - color: #000; - font-size: 16px; - margin-top: 30px; - - .row { - display: flex; - align-items: center; - - .title { - width: 120px; - text-align: center; - border: 1px solid #000; - padding: 5px; - letter-spacing: 6px; - } - - .value { - border: 1px solid #000; - border-left: none; - flex: 1; - padding: 5px 5px 5px 10px; - } - - & + .row { - .title, .value { - border-top: none; - } - } - } - } - - .qr_info { - color: #000; - font-size: 16px; - - .row { - display: flex; - - .title { - width: 30px; - line-height: 22px; - writing-mode: vertical-rl; - text-align: center; - letter-spacing: 15px; - border: 1px solid #000; - border-top: none; - padding: 4px; - } - - .qr { - flex: 1; - border: 1px solid #000; - border-top: none; - border-left: none; - padding: 5px; - display: flex; - align-items: center; - justify-content: center; - - & + .title { - border-left: none; - } - } - } - } - } - - .vertical { - .info, .qr_info { - color: #000; - font-size: 16px; - margin-top: 30px; - - .row { - display: flex; - - .title { - width: 200px; - text-align: center; - padding: 5px; - border: 1px solid #000; - letter-spacing: 6px; - } - - .value, .qr { - padding: 5px 5px 5px 10px; - border: 1px solid #000; - border-left: none; - flex: 1; - } - - & + .row { - .title, .value, .qr { - border-top: none; - } - } - } - } - - .qr_info { - margin-top: 0; - - .row { - .title { - letter-spacing: 12px; - line-height: 280px; - border-top: none; - } - - .qr { - display: flex; - align-items: center; - justify-content: center; - border-top: none; - } - } - } - } -} -</style> diff --git a/src/views/index/index.vue b/src/views/index/index.vue index e9711ba..96db313 100644 --- a/src/views/index/index.vue +++ b/src/views/index/index.vue @@ -118,9 +118,10 @@ export default { this.jinduData[1] = nowYear + '-12-31' this.getJindu() this.getQingdan() - this.getWorkNumber() + // this.getWorkNumber() this.getRiskNumber() - this.getHiddenTypeCount()/* + // this.getHiddenTypeCount() + /* this.getNoticeList() this.getNoticeCorpList()*/ }, diff --git a/src/views/keyprojects/outsourced/components/edit.vue b/src/views/keyprojects/outsourced/components/edit.vue index 7d1fbc6..f3c2177 100644 --- a/src/views/keyprojects/outsourced/components/edit.vue +++ b/src/views/keyprojects/outsourced/components/edit.vue @@ -46,14 +46,26 @@ </el-col> <el-col :span="8"> <el-form-item prop="COMPETENT_DEPT_ID" label="企业主管部门:"> - <SelectTree - ref="deptTree" - :clearable="false" + <!-- <SelectTree--> + <!-- ref="deptTree"--> + <!-- :clearable="false"--> + <!-- :options="treeDataInspectDept"--> + <!-- :normalizer="normalizer"--> + <!-- :props="defaultProps"--> + <!-- :default-expand-level="1"--> + <!-- v-model="form.COMPETENT_DEPT_ID"--> + <!-- placeholder="请选择企业主管部门"--> + <!-- style="width: 100%"/>--> + <Treeselect + :flat="true" + :default-expand-level="1" :options="treeDataInspectDept" + :normalizer="normalizer" :props="defaultProps" v-model="form.COMPETENT_DEPT_ID" placeholder="请选择企业主管部门" - style="width: 100%"/> + style="width: 100%;" + /> </el-form-item> </el-col> <el-col :span="8"> diff --git a/src/views/login/index.vue b/src/views/login/index.vue index d627a9e..62c9294 100644 --- a/src/views/login/index.vue +++ b/src/views/login/index.vue @@ -320,11 +320,12 @@ export default { ).then((data) => { if (data.list && data.list.length > 0) { setTimeout(() => { - console.log(data) - console.log('???????--sparrow') this.$notify.info({ title: '消息', - message: '您有【' + data.list.length + '】条相关方人员数据待审核' + message: '您有【' + data.list.length + '】条相关方人员数据待审核', + onClick: () => { + this.$router.push('/xgf/flow') + } }) }, 3000) } diff --git a/src/views/risk/identificationparts/index.vue b/src/views/risk/identificationparts/index.vue index f08f9cd..eae29f4 100644 --- a/src/views/risk/identificationparts/index.vue +++ b/src/views/risk/identificationparts/index.vue @@ -1,7 +1,8 @@ <template> <div> - <!-- <component :is="activeName"/>--> - <List v-show="activeName=='List'" ref="list" /> + <keep-alive> + <List v-show="activeName=='List'" ref="list" /> + </keep-alive> <Info v-if="activeName=='Info'" /> </div> </template> diff --git a/src/views/risk/riskpoint/index.vue b/src/views/risk/riskpoint/index.vue index 6e9132f..6f505f9 100644 --- a/src/views/risk/riskpoint/index.vue +++ b/src/views/risk/riskpoint/index.vue @@ -1,7 +1,9 @@ <template> <!-- <component :is="activeName"/>--> <div> - <List v-show="activeName=='List'" ref="list" /> + <keep-alive> + <List v-show="activeName=='List'" ref="list" /> + </keep-alive> <Info v-if="activeName=='Info'" /> </div> </template> diff --git a/src/views/risk/riskunit/index.vue b/src/views/risk/riskunit/index.vue index dcbfcc2..16606b6 100644 --- a/src/views/risk/riskunit/index.vue +++ b/src/views/risk/riskunit/index.vue @@ -1,7 +1,9 @@ <template> <!-- <component :is="activeName"/>--> <div> - <List v-show="activeName=='List'" ref="list" /> + <keep-alive> + <List v-show="activeName=='List'" ref="list" /> + </keep-alive> <Info v-if="activeName=='Info'" /> </div> </template> diff --git a/src/views/safetyenvironmental/inspection/components/list.vue b/src/views/safetyenvironmental/inspection/components/list.vue index 7d38400..507fb54 100644 --- a/src/views/safetyenvironmental/inspection/components/list.vue +++ b/src/views/safetyenvironmental/inspection/components/list.vue @@ -24,6 +24,16 @@ placeholder="请选择检查部门"/> </el-form-item> </el-col> + <el-col :span="4"> + <el-form-item label="检查人员"> + <el-input v-model="search.INSPECTION_USER_NAME" placeholder="检查人员..." /> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="检查人手机"> + <el-input v-model="search.INSPECTION_USER_PHONE" placeholder="检查人手机..." /> + </el-form-item> + </el-col> <el-col :span="4"> <el-form-item label="检查发起人"> <el-input v-model="search.INSPECTION_ORIGINATOR_NAME" placeholder="检查发起人..." /> @@ -42,6 +52,8 @@ children-name="nodes" /> </el-form-item> </el-col> + </el-row> + <el-row> <el-col :span="8"> <el-form-item label="检查时间"> <el-date-picker @@ -54,8 +66,6 @@ end-placeholder="结束日期"/> </el-form-item> </el-col> - </el-row> - <el-row> <el-col :span="4"> <el-form-item label="检查状态"> <el-select v-model="search.INSPECTION_STATUS" placeholder="检查状态" clearable style="width: 100%"> @@ -75,6 +85,11 @@ </el-select> </el-form-item> </el-col> + <el-col :span="4"> + <el-form-item label="检查情况"> + <el-input v-model="search.INSPECTION_CASE" placeholder="检查情况..." /> + </el-form-item> + </el-col> <el-col :span="4"> <el-form-item label-width="10px"> <el-button v-waves type="primary" icon="el-icon-search" @click="getQuery"> @@ -259,11 +274,14 @@ export default { INSPECTION_ORIGINATOR_NAME: '', // 检查发起人 INSPECTION_TYPE: '', // 检查类型 INSPECTION_TIME: ['', ''], // 检查时间 + INSPECTION_USER_NAME: '', // 检查人员 + INSPECTION_USER_PHONE: '', // 检查人员手机 + INSPECTION_CASE: '', // 检查情况 INSPECTION_STATUS: '', // 检查状态 INSPECTION_SUBJECT: '' // 检查题目 }, statusList: [ - { ID: '', NAME: '请选择' }, + // { ID: '', NAME: '请选择' }, { ID: '0', NAME: '待检查人核实' }, { ID: '1', NAME: '检查人核实中' }, { ID: '2', NAME: '待被检查人确认' }, diff --git a/src/views/xgf/flowApply/components/userInfo.vue b/src/views/xgf/flowApply/components/userInfo.vue index 1851837..f806b9a 100644 --- a/src/views/xgf/flowApply/components/userInfo.vue +++ b/src/views/xgf/flowApply/components/userInfo.vue @@ -62,7 +62,7 @@ <tr> <th>民族</th> - <td>{{ userDetailForm.minzuName ? userDetailForm.minzuName : '暂无信息' }}</td> + <td>{{ userDetailForm.NATIONALITY_NAME ? userDetailForm.NATIONALITY_NAME : '暂无信息' }}</td> <th>婚姻状况</th> <td>{{ userDetailForm.MARITALSTATUS === '0' ? '未婚' : '已婚' }}</td> <th>政治面貌</th> diff --git a/src/views/xgf/insert/index.vue b/src/views/xgf/insert/index.vue index a3a7ad0..9249e0f 100644 --- a/src/views/xgf/insert/index.vue +++ b/src/views/xgf/insert/index.vue @@ -1,5 +1,7 @@ <template> - <component :is="activeName" /> + <keep-alive include="CorpInfoList" exclude="CorpInfoEdit,CorpInfoAdd"> + <component :is="activeName" /> + </keep-alive> </template> <script>