| | |
| | | <template> |
| | | <TableLayout :permissions="['business:workorder:query']"> |
| | | <!-- 搜索表单 --> |
| | | <SearchFormCollapse slot="search-form"> |
| | | <div slot="search-form"> |
| | | <el-form ref="searchForm" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="所属分类编(关联category)" prop="categoryId"> |
| | | <el-input v-model="searchForm.categoryId" placeholder="请输入所属分类编(关联category)" @keypress.enter.native="search"></el-input> |
| | | <el-form-item label="伤害类型" prop="typeIdPath"> |
| | | <treeselect |
| | | style="width: 200px" |
| | | v-model="searchForm.typeIdPath" |
| | | placeholder="伤害类型" |
| | | clearable |
| | | :options="categorys" |
| | | :normalizer="normalizeOptions" |
| | | :default-expand-level="1" |
| | | @input="search" |
| | | noChildrenText="没有子选项" |
| | | noOptionsText="没有可选项" |
| | | noResultsText="没有匹配的结果" /> |
| | | </el-form-item> |
| | | <el-form-item label="上报人员编码(关联member)" prop="memberId"> |
| | | <el-input v-model="searchForm.memberId" placeholder="请输入上报人员编码(关联member)" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="部门编码" prop="companyId"> |
| | | <el-input v-model="searchForm.companyId" placeholder="请输入部门编码" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="SHE涉及人员类型 0本人 1同事 2供应商" prop="memberType"> |
| | | <el-input v-model="searchForm.memberType" placeholder="请输入SHE涉及人员类型 0本人 1同事 2供应商" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="SHE涉及人员供应商集合" prop="memberNames"> |
| | | <el-input v-model="searchForm.memberNames" placeholder="请输入SHE涉及人员供应商集合" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="发生地点/位置编码(关联category)" prop="localtionId"> |
| | | <el-input v-model="searchForm.localtionId" placeholder="请输入发生地点/位置编码(关联category)" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="风险类型(关联category)" prop="typeId"> |
| | | <el-date-picker v-model="searchForm.typeId" value-format="yyyy-MM-dd" placeholder="请输入风险类型(关联category)" @change="search"/> |
| | | </el-form-item> |
| | | <el-form-item label="位置地点路径名称" prop="locationName"> |
| | | <el-input v-model="searchForm.locationName" placeholder="请输入位置地点路径名称" @keypress.enter.native="search"></el-input> |
| | | <el-form-item label="上报人员" prop="memberName"> |
| | | <el-input v-model="searchForm.memberName" style="width: 150px" clearable placeholder="人员姓名或手机号" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="工单号" prop="code"> |
| | | <el-input v-model="searchForm.code" placeholder="请输入工单号" @keypress.enter.native="search"></el-input> |
| | | <el-input v-model="searchForm.code" clearable style="width: 150px" placeholder="工单号" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="提交时间" prop="queryStartTime"> |
| | | <el-date-picker type="datetime" v-model="searchForm.queryStartTime" style="width: 190px" value-format="yyyy-MM-dd HH:mm:ss" |
| | | placeholder="开始时间" @change="changeRadio" /> |
| | | </el-form-item> |
| | | <el-form-item label="" prop="queryEndTime"> |
| | | <el-date-picker type="datetime" v-model="searchForm.queryEndTime" style="width: 190px" value-format="yyyy-MM-dd HH:mm:ss" |
| | | placeholder="结束时间" @change="changeRadio" /> |
| | | </el-form-item> |
| | | <el-form-item label="" prop="radio"> |
| | | <el-radio-group v-model="searchForm.radio" size="small" @input="changeRadio"> |
| | | <el-radio-button label="0">当天</el-radio-button> |
| | | <el-radio-button label="1">近7天</el-radio-button> |
| | | <el-radio-button label="2">近30天</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">搜索</el-button> |
| | | <el-button @click="reset">重置</el-button> |
| | | </section> |
| | | </el-form> |
| | | </SearchFormCollapse> |
| | | </div> |
| | | <!-- 表格和分页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:workorder:create', 'business:workorder:delete']"> |
| | | <li><el-button type="primary" @click="$refs.operaWorkorderWindow.open('新建工单信息表')" icon="el-icon-plus" v-permissions="['business:workorder:create']">新建</el-button></li> |
| | | <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:workorder:delete']">删除</el-button></li> |
| | | <ul class="toolbar" v-permissions="['business:workorder:exportExcel']"> |
| | | <li> <el-button type="primary" :loading="isWorking.export" @click="exportExcel">导出</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | :height="tableHeightNew" |
| | | v-loading="isWorking.search" |
| | | :data="tableData.list" |
| | | stripe |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="id" label="主键" min-width="100px"></el-table-column> |
| | | <el-table-column prop="creator" label="创建人编码" min-width="100px"></el-table-column> |
| | | <el-table-column prop="createDate" label="创建时间" min-width="100px"></el-table-column> |
| | | <el-table-column prop="editor" label="更新人编码" min-width="100px"></el-table-column> |
| | | <el-table-column prop="editDate" label="更新时间" min-width="100px"></el-table-column> |
| | | <el-table-column prop="isdeleted" label="是否删除0否 1是" min-width="100px"></el-table-column> |
| | | <el-table-column prop="categoryId" label="所属分类编(关联category)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="remark" label="备注" min-width="100px"></el-table-column> |
| | | <el-table-column prop="status" label="状态 0待确认/待初审 1待分配/待终审 2待处理 3 已撤回 4已处理" min-width="100px"></el-table-column> |
| | | <el-table-column prop="sortnum" label="排序码" min-width="100px"></el-table-column> |
| | | <el-table-column prop="type" label="类型 0位置责任人 1班长 2物业主管 3工程师 4SHE负责人 5SHE工单邮箱抄送人" min-width="100px"></el-table-column> |
| | | <el-table-column prop="memberId" label="上报人员编码(关联member)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="companyId" label="部门编码" min-width="100px"></el-table-column> |
| | | <el-table-column prop="submitDate" label="上报时间" min-width="100px"></el-table-column> |
| | | <el-table-column prop="memberType" label="SHE涉及人员类型 0本人 1同事 2供应商" min-width="100px"></el-table-column> |
| | | <el-table-column prop="memberQwids" label="SHE涉及人员企业编码集合" min-width="100px"></el-table-column> |
| | | <el-table-column prop="memberNames" label="SHE涉及人员供应商集合" min-width="100px"></el-table-column> |
| | | <el-table-column prop="localtionId" label="发生地点/位置编码(关联category)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="outJiuyi" label="是否外部就医 0否 1是" min-width="100px"></el-table-column> |
| | | <el-table-column prop="isYiwushi" label="是否医务室 0否 1是" min-width="100px"></el-table-column> |
| | | <el-table-column prop="isHurted" label="是否受伤 0否 1是" min-width="100px"></el-table-column> |
| | | <el-table-column prop="workRelated" label="是否和工作相关" min-width="100px"></el-table-column> |
| | | <el-table-column prop="eventInfo" label="事件说明" min-width="100px"></el-table-column> |
| | | <el-table-column prop="emialMemberIds" label="邮件通知人员编码集合" min-width="100px"></el-table-column> |
| | | <el-table-column prop="qwnoticeMemberIds" label="企业微信通知人员编码集合" min-width="100px"></el-table-column> |
| | | <el-table-column prop="happenTime" label="发现时间" min-width="100px"></el-table-column> |
| | | <el-table-column prop="typeId" label="风险类型(关联category)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="riskInfo" label="风险描述" min-width="100px"></el-table-column> |
| | | <el-table-column prop="managerId" label="当前物业主管编码(关联member)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="dealerId" label="当前处理人员编码(关联member)" min-width="100px"></el-table-column> |
| | | <el-table-column prop="dispatchTime" label="分配时间" min-width="100px"></el-table-column> |
| | | <el-table-column prop="dispatchInfo" label="分配备注" min-width="100px"></el-table-column> |
| | | <el-table-column prop="dealTime" label="处理时间" min-width="100px"></el-table-column> |
| | | <el-table-column prop="dealInfo" label="处理备注" min-width="100px"></el-table-column> |
| | | <el-table-column prop="problemId" label="DCA问题编码" min-width="100px"></el-table-column> |
| | | <el-table-column prop="problemNum" label="DCA问题数量" min-width="100px"></el-table-column> |
| | | <el-table-column prop="locationName" label="位置地点路径名称" min-width="100px"></el-table-column> |
| | | <el-table-column prop="code" label="工单号" min-width="100px"></el-table-column> |
| | | <el-table-column prop="code" label="工单号" min-width="150px" fixed> |
| | | <template slot-scope="{row}"> |
| | | <span style="color: #2E68EC;cursor: pointer" @click="$refs.operaWorkorderWindow.open('SHE事件工单详情', row)" >{{ row.code || '-'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="typeNamePath" label="伤害类型" min-width="100px"></el-table-column> |
| | | <el-table-column prop="submitDate" label="上报时间" min-width="150px"></el-table-column> |
| | | <el-table-column prop="status" label="状态" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <!-- <span :class="'statusInfo'+row.status" v-if="row.status ==0">待处理</span>--> |
| | | <span :class="'statusInfo'+row.status" v-if="row.status ==3 ||row.status ==4||row.status ==5">已处理</span> |
| | | <span :class="'statusInfo'+row.status" v-else>处理中</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="memberType" label="涉及人员" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.memberType == 2">供应商-{{row.memberNames}}</span> |
| | | <span v-else-if="row.memberType == 1">同事-{{row.memberNames}}</span> |
| | | <span v-else>本人</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="happenTime" label="发现时间" min-width="150px"></el-table-column> |
| | | <el-table-column prop="locationName" label="发生地点" min-width="200px"></el-table-column> |
| | | <el-table-column prop="remark" label="具体位置" min-width="100px"></el-table-column> |
| | | <el-table-column prop="outJiuyi" label="就医情况" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.outJiuyi == 0">非外部就医- |
| | | <span v-if="row.isYiwushi == 0">非医务室- |
| | | <span v-if="row.isHurted == 0">未受伤</span> |
| | | <span v-else>受伤</span> |
| | | </span> |
| | | <span v-else>医务室</span> |
| | | </span> |
| | | <span v-else>外部就医</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="workRelated" label="和工作相关" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.workRelated == 1">是</span> |
| | | <span v-else>否</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="eventInfo" label="事件说明" min-width="200px" show-overflow-tooltip ></el-table-column> |
| | | <el-table-column prop="memberName" label="上报人员" min-width="150px"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.memberPhone" >{{row.memberName}} - {{row.memberPhone }}</span> |
| | | <span v-else >{{row.memberName}} </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="companyName" label="所属部门" min-width="150px"></el-table-column> |
| | | <el-table-column prop="createDate" label="提交时间" min-width="150px"></el-table-column> |
| | | <el-table-column |
| | | v-if="containPermissions(['business:workorder:update', 'business:workorder:delete'])" |
| | | label="操作" |
| | |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaWorkorderWindow.open('编辑工单信息表', row)" icon="el-icon-edit" v-permissions="['business:workorder:update']">编辑</el-button> |
| | | <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:workorder:delete']">删除</el-button> |
| | | <el-button type="text" @click="$refs.operaWorkorderWindow.open('SHE事件工单详情', row)" icon="el-icon-zoom-out" >查看详情</el-button> |
| | | <!--<el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:workorder:delete']">删除</el-button>--> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | </pagination> |
| | | </template> |
| | | <!-- 新建/修改 --> |
| | | <OperaWorkorderWindow ref="operaWorkorderWindow" @success="handlePageChange"/> |
| | | <OperaWorkorderDetailSheWindow ref="operaWorkorderWindow" @success="handlePageChange"/> |
| | | </TableLayout> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseTable from '@/components/base/BaseTable' |
| | | import TableLayout from '@/layouts/TableLayout' |
| | | import SearchFormCollapse from '@/components/common/SearchFormCollapse' |
| | | import Pagination from '@/components/common/Pagination' |
| | | import OperaWorkorderWindow from '@/components/business/OperaWorkorderWindow' |
| | | import OperaWorkorderDetailSheWindow from '@/components/business/OperaWorkorderDetailSheWindow' |
| | | import { treeList } from '@/api/business/category' |
| | | import {timeForMat} from "@/utils/util"; |
| | | export default { |
| | | name: 'Workorder', |
| | | extends: BaseTable, |
| | | components: { SearchFormCollapse, TableLayout, Pagination, OperaWorkorderWindow }, |
| | | components: {TableLayout, Pagination, OperaWorkorderDetailSheWindow }, |
| | | data () { |
| | | return { |
| | | // 搜索 |
| | | searchForm: { |
| | | id: '', |
| | | creator: '', |
| | | createDate: '', |
| | | editor: '', |
| | | editDate: '', |
| | | isdeleted: '', |
| | | categoryId: '', |
| | | remark: '', |
| | | status: '', |
| | | sortnum: '', |
| | | type: '', |
| | | memberId: '', |
| | | companyId: '', |
| | | submitDate: '', |
| | | memberType: '', |
| | | memberQwids: '', |
| | | memberNames: '', |
| | | queryStartTime: null, |
| | | queryEndTime: null, |
| | | radio: null, |
| | | type: '0', |
| | | memberName: '', |
| | | memberCompanyId: '', |
| | | localtionId: '', |
| | | outJiuyi: '', |
| | | isYiwushi: '', |
| | | isHurted: '', |
| | | workRelated: '', |
| | | eventInfo: '', |
| | | emialMemberIds: '', |
| | | qwnoticeMemberIds: '', |
| | | happenTime: '', |
| | | typeId: '', |
| | | riskInfo: '', |
| | | managerId: '', |
| | | dealerId: '', |
| | | dispatchTime: '', |
| | | dispatchInfo: '', |
| | | dealTime: '', |
| | | dealInfo: '', |
| | | problemId: '', |
| | | problemNum: '', |
| | | locationName: '', |
| | | code: '' |
| | | } |
| | | typeId: null, |
| | | typeIdPath: null, |
| | | code: '', |
| | | categoryList: [] |
| | | }, |
| | | categoryprops: { |
| | | label: 'name', |
| | | value: 'id', |
| | | checkStrictly: true, |
| | | lazyLoad: this.lazyLoad |
| | | }, |
| | | categorys: [] |
| | | } |
| | | }, |
| | | created () { |
| | |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.loadCategorys() |
| | | this.search() |
| | | }, |
| | | methods: { |
| | | |
| | | changeRadio(e) { |
| | | if (e === '0') { |
| | | this.searchForm.queryStartTime = timeForMat(0)[0] |
| | | this.searchForm.queryEndTime = timeForMat(0)[1] |
| | | } else if (e === '1') { |
| | | this.searchForm.queryStartTime = timeForMat(6)[0] |
| | | this.searchForm.queryEndTime = timeForMat(6)[1] |
| | | } else if (e === '2') { |
| | | this.searchForm.queryStartTime = timeForMat(29)[0] |
| | | this.searchForm.queryEndTime = timeForMat(29)[1] |
| | | } else { |
| | | this.searchForm.radio = '' |
| | | } |
| | | if (this.searchForm.queryStartTime && this.searchForm.endTime && new Date(this.searchForm.startTime).getTime() > new Date(this.searchForm.endTime).getTime()) { |
| | | this.$message.error('开始时间不能大于结束时间') |
| | | this.searchForm.queryStartTime = '' |
| | | return |
| | | } |
| | | this.search() |
| | | }, |
| | | normalizeOptions(node) { |
| | | if (node.childList && !node.childList.length) { |
| | | // 去掉children=[]的children属性 |
| | | delete node.childList; |
| | | } |
| | | return { |
| | | id: node.idPath, |
| | | label: node.name, |
| | | children: node.childList, |
| | | }; |
| | | }, |
| | | handleChangeCategory (value) { |
| | | if (this.searchForm.categoryList && this.searchForm.categoryList.length >= 1) { |
| | | this.searchForm.typeId = this.searchForm.categoryList[this.searchForm.categoryList.length - 1] |
| | | } |
| | | }, |
| | | loadCategorys () { |
| | | treeList({ type: 0 }) |
| | | .then(res => { |
| | | if (res && res.length > 0) { |
| | | res[0].fsStatus = 1 |
| | | this.categorys = this.getCategoryTree(res) |
| | | } |
| | | }) |
| | | }, |
| | | getCategoryTree (tree) { |
| | | if (tree == null) { |
| | | return [] |
| | | } |
| | | return tree.map(item => { |
| | | const newItem = { ...item } |
| | | if (newItem) { |
| | | newItem.children = newItem.childList |
| | | } |
| | | if (item.children && item.children.length === 0) { |
| | | this.$delete(newItem, 'children') |
| | | } else { |
| | | newItem.children = this.getCategoryTree(newItem.children) |
| | | } |
| | | // newItem.disabled = false |
| | | return newItem |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |