2 changed files with 529 additions and 3 deletions
@ -0,0 +1,503 @@ |
|||||
|
<template> |
||||
|
<div class="m-record" |
||||
|
style="padding: 0 20px"> |
||||
|
<h3>巡查记录</h3> |
||||
|
<div class="mt10" |
||||
|
v-if="formType == 'edit'"> |
||||
|
<el-button size="small" |
||||
|
:class="[source==='manage'?'diy-button--add':'diy-button--export']" |
||||
|
:disabled="btnDisabled || disabled" |
||||
|
@click="handleAdd">新增</el-button> |
||||
|
</div> |
||||
|
<el-table :data="tableData" |
||||
|
row-key="id" |
||||
|
border |
||||
|
style="width: 100%" |
||||
|
:header-cell-style="getRowClass"> |
||||
|
<el-table-column label="序号" |
||||
|
type="index" |
||||
|
align="center" |
||||
|
width="50"> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column prop="patrolTime" |
||||
|
label="巡查时间" |
||||
|
align="center" |
||||
|
width="200px"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-date-picker v-if="scope.row.isEdit" |
||||
|
v-model="scope.row.patrolTime" |
||||
|
type="date" |
||||
|
class="input-width" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="选择日期"> |
||||
|
</el-date-picker> |
||||
|
<div v-else |
||||
|
class="div-content">{{ scope.row.patrolTime }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column prop="staffId" |
||||
|
label="巡查人员" |
||||
|
align="center" |
||||
|
width="200px"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-select v-if="scope.row.isEdit" |
||||
|
filterable |
||||
|
v-model="scope.row.staffId" |
||||
|
placeholder="请选择" |
||||
|
class="input-width" |
||||
|
@change="handleChangeStaff(scope.row)" |
||||
|
clearable> |
||||
|
<el-option v-for="subItem in optionStaff" |
||||
|
:key="subItem.value" |
||||
|
:label="subItem.label" |
||||
|
:value="subItem.value"> |
||||
|
</el-option> |
||||
|
</el-select> |
||||
|
<div v-else |
||||
|
class="div-content">{{ scope.row.staffName }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column prop="mobile" |
||||
|
label="联系电话" |
||||
|
align="center" |
||||
|
width="200px"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-input v-if="scope.row.isEdit" |
||||
|
type="number" |
||||
|
v-model="scope.row.mobile" |
||||
|
placeholder="请输入" |
||||
|
class="input-width" |
||||
|
clearable |
||||
|
disabled></el-input> |
||||
|
<div v-else |
||||
|
class="div-content">{{ scope.row.mobile }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column prop="result" |
||||
|
label="巡查结果" |
||||
|
align="center" |
||||
|
width="200px"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-select v-if="scope.row.isEdit" |
||||
|
v-model="scope.row.result" |
||||
|
placeholder="请选择" |
||||
|
class="input-width" |
||||
|
size="small" |
||||
|
clearable> |
||||
|
<el-option v-for="subItem in optionResult" |
||||
|
:key="subItem.value" |
||||
|
:label="subItem.label" |
||||
|
:value="subItem.value"> |
||||
|
</el-option> |
||||
|
</el-select> |
||||
|
<div v-else |
||||
|
class="div-content">{{ scope.row.resultName }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column prop="detailed" |
||||
|
label="隐患明细" |
||||
|
align="center" |
||||
|
width="200px"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-input v-if="scope.row.isEdit" |
||||
|
type="text" |
||||
|
v-model="scope.row.detailed" |
||||
|
placeholder="请输入" |
||||
|
class="input-width" |
||||
|
maxlength="500" |
||||
|
clearable></el-input> |
||||
|
<div v-else |
||||
|
class="div-content">{{ scope.row.detailed }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column prop="imgList" |
||||
|
label="图片列表" |
||||
|
align="center" |
||||
|
width="150px"> |
||||
|
<template slot-scope="scope"> |
||||
|
<div v-if="scope.row.isEdit"> |
||||
|
<el-upload :headers="$getElUploadHeaders()" |
||||
|
class="avatar-uploader" |
||||
|
:action="uploadUrl" |
||||
|
:data="{ customerId: customerId }" |
||||
|
:show-file-list="true" |
||||
|
:limit="3" |
||||
|
:file-list="scope.row.imgShowList" |
||||
|
:on-success="(res) => handleImgSuccess(res, scope.row)" |
||||
|
:on-remove="(res) => handleImgRemove(res, scope.row)" |
||||
|
list-type="picture" |
||||
|
:before-upload="beforeImgUpload"> |
||||
|
<i class="el-icon-plus avatar-uploader-icon"></i> 最多三张图片 |
||||
|
</el-upload> |
||||
|
</div> |
||||
|
|
||||
|
<div v-else |
||||
|
class="div-content"> |
||||
|
<el-image v-if="scope.row.imgList.length > 0" |
||||
|
style="width: 100px; height: 50px" |
||||
|
:src="scope.row.imgList[0]" |
||||
|
fit="cover" |
||||
|
:preview-src-list="scope.row.imgList"></el-image> |
||||
|
</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column prop="reviewTime" |
||||
|
label="拟复查时间" |
||||
|
align="center" |
||||
|
width="200px"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-date-picker v-if="scope.row.isEdit" |
||||
|
v-model="scope.row.reviewTime" |
||||
|
type="date" |
||||
|
class="input-width" |
||||
|
value-format="yyyy-MM-dd" |
||||
|
placeholder="选择日期"> |
||||
|
</el-date-picker> |
||||
|
<div v-else |
||||
|
class="div-content">{{ scope.row.reviewTime }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column v-if="!disabled" |
||||
|
fixed="right" |
||||
|
label="操作" |
||||
|
align="center" |
||||
|
width="120"> |
||||
|
<template slot-scope="scope"> |
||||
|
<template v-if="scope.row.isEdit"> |
||||
|
<el-button @click="handleEdit(scope.row)" |
||||
|
type="text" |
||||
|
size="small" |
||||
|
class="btn-color-edit">保存</el-button> |
||||
|
<el-button @click="handleChange(scope.row, 'cancle')" |
||||
|
type="text" |
||||
|
size="small" |
||||
|
class="btn-color-edit">取消</el-button> |
||||
|
</template> |
||||
|
<template v-else> |
||||
|
<el-button v-if="formType == 'edit'" |
||||
|
@click="handleChange(scope.row, 'edit')" |
||||
|
type="text" |
||||
|
size="small" |
||||
|
:disabled="disabled" |
||||
|
class="btn-color-edit">修改</el-button> |
||||
|
<el-popconfirm v-if="formType == 'edit'" |
||||
|
title="删除之后无法恢复,确认删除?" |
||||
|
@onConfirm="del(scope.row)" |
||||
|
@confirm="del(scope.row)"> |
||||
|
<el-button slot="reference" |
||||
|
type="text" |
||||
|
size="small" |
||||
|
class="btn-color-del" |
||||
|
style="margin-left: 10px">删除</el-button> |
||||
|
</el-popconfirm> |
||||
|
</template> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import { requestPost } from "@/js/dai/request"; |
||||
|
|
||||
|
export default { |
||||
|
props: { |
||||
|
enterpriseId: { |
||||
|
type: String, |
||||
|
default: "", |
||||
|
}, |
||||
|
enterpriseInfo: { |
||||
|
type: Object, |
||||
|
default: () => ({}), |
||||
|
}, |
||||
|
disabled: { |
||||
|
type: Boolean, |
||||
|
default: false, |
||||
|
}, |
||||
|
formType: { |
||||
|
type: String, |
||||
|
default: "", |
||||
|
}, |
||||
|
source: {//展示来源:manage 管理平台 visiual 可视化平台 |
||||
|
type: String, |
||||
|
default: 'manage' |
||||
|
} |
||||
|
}, |
||||
|
data () { |
||||
|
return { |
||||
|
uploadUrl: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadqrcodeV2", |
||||
|
customerId: localStorage.getItem("customerId"), |
||||
|
|
||||
|
btnDisabled: false, |
||||
|
btnType: "cancle", |
||||
|
isEdit: false, |
||||
|
tableData: [], |
||||
|
tempRow: {}, |
||||
|
|
||||
|
optionResult: [ |
||||
|
{ |
||||
|
label: "合格", |
||||
|
value: "0", |
||||
|
}, |
||||
|
{ |
||||
|
label: "不合格", |
||||
|
value: "1", |
||||
|
}, |
||||
|
], |
||||
|
optionStaff: [ |
||||
|
// { |
||||
|
// label: "人名", |
||||
|
// value: "staffId", |
||||
|
// }, |
||||
|
], |
||||
|
}; |
||||
|
}, |
||||
|
|
||||
|
computed: { |
||||
|
allowOperate () { |
||||
|
const { |
||||
|
enterpriseInfo: { agencyId }, |
||||
|
} = this; |
||||
|
return agencyId && agencyId == this.$store.state.user.agencyId; |
||||
|
}, |
||||
|
}, |
||||
|
watch: { |
||||
|
enterpriseId: { |
||||
|
handler (val) { |
||||
|
console.log("val------points", val); |
||||
|
if (val.length > 0) { |
||||
|
this.btnDisabled = false; |
||||
|
this.getList(); |
||||
|
} else this.btnDisabled = true; |
||||
|
}, |
||||
|
immediate: true, |
||||
|
}, |
||||
|
}, |
||||
|
|
||||
|
created () { |
||||
|
this.getOptionStaff(); |
||||
|
}, |
||||
|
|
||||
|
methods: { |
||||
|
beforeImgUpload (file) { |
||||
|
console.log(file); |
||||
|
const isLt1M = file.size / 1024 / 1024 < 10; |
||||
|
const srcType = file.type; |
||||
|
const format = file.name.split(".").pop(); |
||||
|
|
||||
|
if (!isLt1M) { |
||||
|
this.$message.error("上传文件大小不能超过 10MB!"); |
||||
|
return false; |
||||
|
} |
||||
|
if (srcType.indexOf("image") == -1) { |
||||
|
this.$message.error("仅限图片格式"); |
||||
|
return false; |
||||
|
} |
||||
|
return true; |
||||
|
}, |
||||
|
|
||||
|
handleImgSuccess (res, row) { |
||||
|
console.log("handleImgSuccess", res); |
||||
|
if (res.code === 0 && res.msg === "success") { |
||||
|
row.imgList.push(res.data.url); |
||||
|
this.computeImgShowList(row); |
||||
|
} else { |
||||
|
this.$message.error(res.msg); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
computeImgShowList (row) { |
||||
|
row.imgShowList = row.imgList.map((url) => { |
||||
|
return { name: "", url }; |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
handleImgRemove (file, row) { |
||||
|
console.log("handleImgRemove", file); |
||||
|
let url = file.url || file.response.data.url; |
||||
|
if (url) { |
||||
|
row.imgList = row.imgList.filter((item) => item !== url); |
||||
|
this.computeImgShowList(row); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
getRowClass ({ rowIndex, columnIndex }) { |
||||
|
if (rowIndex === 0) { |
||||
|
return "background: #2195fe; color: #fff;"; |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
handleChange (row, type) { |
||||
|
console.log("type----", type); |
||||
|
if (type == "cancle") { |
||||
|
row = { ...this.tempRow }; |
||||
|
row.isEdit = false; |
||||
|
if (this.btnType == "add") this.tableData.pop(); |
||||
|
this.getList(); |
||||
|
console.log("row----", row); |
||||
|
} else { |
||||
|
this.tempRow = { ...row }; |
||||
|
row.isEdit = true; |
||||
|
} |
||||
|
this.btnType = type; |
||||
|
this.isEdit = !this.isEdit; |
||||
|
}, |
||||
|
|
||||
|
handleChangeStaff (row) { |
||||
|
const { staffId } = row; |
||||
|
const { optionStaff } = this; |
||||
|
let item = optionStaff.find((item) => item.value == staffId); |
||||
|
if (item) { |
||||
|
row.staffName = item.name; |
||||
|
row.mobile = item.mobile; |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
async getOptionStaff () { |
||||
|
let url = `/data/aggregator/org/staff-select-list/${this.$store.state.user.agencyId}`; |
||||
|
const { data, code, msg } = await requestPost(url, {}); |
||||
|
|
||||
|
if (code === 0) { |
||||
|
this.optionStaff = data || []; |
||||
|
} else { |
||||
|
this.$message.error("请求工作人员数据失败!"); |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
async handleEdit (row) { |
||||
|
if (this.btnType == "add") this.save(row); |
||||
|
else this.edit(row); |
||||
|
}, |
||||
|
|
||||
|
handleAdd () { |
||||
|
this.btnType = "add"; |
||||
|
this.isEdit = true; |
||||
|
|
||||
|
const item = { |
||||
|
isEdit: true, |
||||
|
enterpriseId: this.enterpriseId, |
||||
|
patrolTime: "", |
||||
|
staffId: "", |
||||
|
staffName: "", |
||||
|
mobile: "", |
||||
|
result: "", |
||||
|
imgList: [], |
||||
|
reviewTime: "", |
||||
|
}; |
||||
|
this.computeImgShowList(item); |
||||
|
this.tableData.push(item); |
||||
|
}, |
||||
|
|
||||
|
async save (row) { |
||||
|
const params = { |
||||
|
partyMemberId: this.enterpriseId, |
||||
|
...row, |
||||
|
}; |
||||
|
await this.$http |
||||
|
.post("/gov/org/enterprise/addorupdate-patrol", params) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg); |
||||
|
} else { |
||||
|
this.$message.success("保存成功"); |
||||
|
row.isEdit = false; |
||||
|
this.isEdit = false; |
||||
|
this.btnType = "cancle"; |
||||
|
this.getList(); |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log("err", err); |
||||
|
return this.$message.error("网络错误"); |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
async edit (row) { |
||||
|
const params = { |
||||
|
...row, |
||||
|
}; |
||||
|
|
||||
|
await this.$http |
||||
|
.post("/gov/org/enterprise/addorupdate-patrol", params) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg); |
||||
|
} else { |
||||
|
this.$message.success("保存成功"); |
||||
|
row.isEdit = false; |
||||
|
this.isEdit = false; |
||||
|
this.getList(); |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log("err", err); |
||||
|
return this.$message.error("网络错误"); |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
async del (row) { |
||||
|
await this.$http |
||||
|
.post(`/gov/org/enterprise/del-patrol/${row.patrolId}`) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg); |
||||
|
} else { |
||||
|
this.$message.success("删除成功"); |
||||
|
this.getList(); |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log("err", err); |
||||
|
return this.$message.error("网络错误"); |
||||
|
}); |
||||
|
}, |
||||
|
|
||||
|
async getList () { |
||||
|
const { enterpriseId } = this; |
||||
|
|
||||
|
const params = {}; |
||||
|
|
||||
|
await this.$http |
||||
|
.post(`/gov/org/enterprise/patrollist/${enterpriseId}`, { |
||||
|
params, |
||||
|
}) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg); |
||||
|
} else { |
||||
|
this.tableData = res.data.list.map((item) => { |
||||
|
this.computeImgShowList(item); |
||||
|
return { |
||||
|
...item, |
||||
|
isEdit: false, |
||||
|
}; |
||||
|
}); |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log("err", err); |
||||
|
return this.$message.error("网络错误"); |
||||
|
}); |
||||
|
}, |
||||
|
}, |
||||
|
}; |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.m-record { |
||||
|
.mt10 { |
||||
|
margin-bottom: 10px; |
||||
|
} |
||||
|
.input-width { |
||||
|
width: 170px; |
||||
|
} |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue