6 changed files with 937 additions and 702 deletions
@ -1,531 +0,0 @@ |
|||||
<template> |
|
||||
<div> |
|
||||
<div class="dialog-h-content scroll-h"> |
|
||||
<el-form ref="ref_form" |
|
||||
:inline="true" |
|
||||
:model="dataForm" |
|
||||
:rules="dataRule" |
|
||||
:disabled="formType === 'detail'" |
|
||||
class="form"> |
|
||||
<el-form-item label="组织名称 " |
|
||||
prop="organizationName" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-input class="item_width_1" |
|
||||
maxlength="50" |
|
||||
show-word-limit |
|
||||
placeholder="请输入组织名称 " |
|
||||
v-model="dataForm.organizationName"> |
|
||||
</el-input> |
|
||||
</el-form-item> |
|
||||
<el-form-item label="分类名称 " |
|
||||
prop="categoryCode" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-select v-model="dataForm.categoryCode" |
|
||||
placeholder="请选择" |
|
||||
clearable> |
|
||||
<el-option v-for="item in categoryList" |
|
||||
:key="item.value" |
|
||||
:label="item.label" |
|
||||
:value="item.value"> |
|
||||
</el-option> |
|
||||
</el-select> |
|
||||
</el-form-item> |
|
||||
<el-form-item label="组织人数 " |
|
||||
prop="organizationPersonCount" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-input class="item_width_1" |
|
||||
type="number" |
|
||||
maxlength="50" |
|
||||
show-word-limit |
|
||||
placeholder="请输入组织人数 " |
|
||||
v-model="dataForm.organizationPersonCount"> |
|
||||
</el-input> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="组织成员 " |
|
||||
prop="organizationPersonnel" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<div class="m-staffs"> |
|
||||
<div class="item" |
|
||||
:key="'staff' + index" |
|
||||
v-for="(item, index) in dataForm.organizationPersonnel"> |
|
||||
<el-input class="item_width_1" |
|
||||
maxlength="50" |
|
||||
show-word-limit |
|
||||
placeholder="成员姓名" |
|
||||
v-model="item.personName" /> |
|
||||
|
|
||||
<el-input style="margin-left: 10px" |
|
||||
class="item_width_1" |
|
||||
maxlength="50" |
|
||||
show-word-limit |
|
||||
placeholder="联系电话" |
|
||||
v-model="item.personPhone" /> |
|
||||
|
|
||||
<el-button style="margin-left: 10px" |
|
||||
size="small" |
|
||||
@click="handleDelStaff(index)">删除</el-button> |
|
||||
</div> |
|
||||
|
|
||||
<div class="item-add"> |
|
||||
<el-button size="small" |
|
||||
@click="handleAddStaff">添加</el-button> |
|
||||
</div> |
|
||||
</div> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="服务事项" |
|
||||
prop="serviceItem" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-input class="item_width_1" |
|
||||
type="textarea" |
|
||||
maxlength="1000" |
|
||||
show-word-limit |
|
||||
:rows="3" |
|
||||
placeholder="请输入服务事项,不超过1000字" |
|
||||
v-model="dataForm.serviceItem"></el-input> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="负责人 " |
|
||||
prop="principalName" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-input class="item_width_1" |
|
||||
maxlength="50" |
|
||||
show-word-limit |
|
||||
placeholder="请输入负责人 " |
|
||||
v-model="dataForm.principalName"> |
|
||||
</el-input> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="联系电话 " |
|
||||
prop="principalPhone" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-input class="item_width_1" |
|
||||
maxlength="50" |
|
||||
show-word-limit |
|
||||
placeholder="请输入联系电话 " |
|
||||
v-model="dataForm.principalPhone"> |
|
||||
</el-input> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="创建时间" |
|
||||
prop="organizationCreatedTime" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-date-picker v-model="dataForm.organizationCreatedTime" |
|
||||
placeholder="创建时间" |
|
||||
value-format="yyyy-MM-dd"> |
|
||||
</el-date-picker> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="位置坐标" |
|
||||
prop="longitude" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<div style="width: 500px"> |
|
||||
<el-input class="item_width_4" |
|
||||
maxlength="50" |
|
||||
placeholder="请输入关键字" |
|
||||
v-model="dataForm.address"> |
|
||||
</el-input> |
|
||||
<el-button style="margin-left: 10px" |
|
||||
type="primary" |
|
||||
size="small" |
|
||||
@click="handleSearchMap">查询</el-button> |
|
||||
<div id="app" |
|
||||
class="div_map"></div> |
|
||||
<div style="margin-top: 10px"> |
|
||||
<span>经度</span> |
|
||||
<el-input class="item_width_3" |
|
||||
maxlength="50" |
|
||||
placeholder="请输入经度" |
|
||||
v-model="dataForm.longitude"> |
|
||||
</el-input> |
|
||||
<span style="margin-left: 20px">纬度</span> |
|
||||
<el-input class="item_width_3" |
|
||||
maxlength="50" |
|
||||
placeholder="请输入纬度" |
|
||||
v-model="dataForm.latitude"> |
|
||||
</el-input> |
|
||||
</div> |
|
||||
</div> |
|
||||
</el-form-item> |
|
||||
|
|
||||
<el-form-item label="备注" |
|
||||
prop="remark" |
|
||||
label-width="150px" |
|
||||
style="display: block"> |
|
||||
<el-input class="item_width_1" |
|
||||
type="textarea" |
|
||||
maxlength="500" |
|
||||
show-word-limit |
|
||||
:rows="3" |
|
||||
placeholder="请输入备注,不超过500字" |
|
||||
v-model="dataForm.remark"></el-input> |
|
||||
</el-form-item> |
|
||||
</el-form> |
|
||||
</div> |
|
||||
<div class="div_btn resi-btns"> |
|
||||
<el-button size="small" |
|
||||
@click="handleCancle">取 消</el-button> |
|
||||
<el-button v-if="formType != 'detail'" |
|
||||
type="primary" |
|
||||
size="small" |
|
||||
:disabled="btnDisable" |
|
||||
@click="handleComfirm">确 定</el-button> |
|
||||
</div> |
|
||||
</div> |
|
||||
</template> |
|
||||
|
|
||||
<script> |
|
||||
import { mapGetters } from "vuex"; |
|
||||
import { Loading } from "element-ui"; // 引入Loading服务 |
|
||||
import { requestPost } from "@/js/dai/request"; |
|
||||
import formVltHelper from "dai-js/tools/formVltHelper"; |
|
||||
|
|
||||
var map; |
|
||||
var search; |
|
||||
var markers; |
|
||||
var infoWindowList; |
|
||||
let loading; // 加载动画 |
|
||||
|
|
||||
export default { |
|
||||
data () { |
|
||||
return { |
|
||||
formType: "add", //表单操作类型 add新增,edit编辑,detail详情 |
|
||||
|
|
||||
btnDisable: false, |
|
||||
|
|
||||
orgId: "", |
|
||||
dataForm: { |
|
||||
organizationName: "", |
|
||||
categoryCode: "", |
|
||||
serviceItem: "", |
|
||||
organizationPersonCount: "", |
|
||||
principalName: "", |
|
||||
principalPhone: "", |
|
||||
organizationCreatedTime: "", |
|
||||
address: "", |
|
||||
remark: "", |
|
||||
longitude: "", |
|
||||
latitude: "", |
|
||||
organizationPersonnel: [], |
|
||||
}, |
|
||||
categoryList: [], |
|
||||
}; |
|
||||
}, |
|
||||
components: {}, |
|
||||
computed: { |
|
||||
dataRule () { |
|
||||
return { |
|
||||
organizationName: [ |
|
||||
{ required: true, message: "组织名称 不能为空", trigger: "blur" }, |
|
||||
{ |
|
||||
min: 1, |
|
||||
max: 50, |
|
||||
message: "组织名称 长度在 1 到 50个字符", |
|
||||
trigger: "blur", |
|
||||
}, |
|
||||
], |
|
||||
categoryCode: [ |
|
||||
{ required: true, message: "分类名称不能为空", trigger: "blur" }, |
|
||||
], |
|
||||
organizationPersonCount: [ |
|
||||
{ required: true, message: "组织人数不能为空", trigger: "blur" }, |
|
||||
], |
|
||||
serviceItem: [ |
|
||||
{ required: true, message: "服务事项不能为空", trigger: "blur" }, |
|
||||
], |
|
||||
principalName: [ |
|
||||
{ required: true, message: "负责人不能为空", trigger: "blur" }, |
|
||||
], |
|
||||
principalPhone: [ |
|
||||
{ required: true, message: "联系电话不能为空", trigger: "blur" }, |
|
||||
], |
|
||||
longitude: [ |
|
||||
{ required: true, message: "位置坐标不能为空", trigger: "blur" }, |
|
||||
], |
|
||||
}; |
|
||||
}, |
|
||||
}, |
|
||||
props: {}, |
|
||||
watch: {}, |
|
||||
|
|
||||
async created () { |
|
||||
this.getCategoryList(); |
|
||||
}, |
|
||||
async mounted () { |
|
||||
this.initMap(); |
|
||||
}, |
|
||||
|
|
||||
methods: { |
|
||||
async getCategoryList () { |
|
||||
const url = "/sys/dict/data/dictlist"; |
|
||||
const params = { |
|
||||
dictType: "self_org_category", |
|
||||
}; |
|
||||
const { data, code, msg } = await requestPost(url, params); |
|
||||
if (code === 0) { |
|
||||
this.categoryList = data; |
|
||||
} else { |
|
||||
this.$message.error(msg); |
|
||||
} |
|
||||
}, |
|
||||
handleAddStaff () { |
|
||||
this.dataForm.organizationPersonnel = [ |
|
||||
...this.dataForm.organizationPersonnel, |
|
||||
{ personName: "", personPhone: "" }, |
|
||||
]; |
|
||||
}, |
|
||||
handleDelStaff (index) { |
|
||||
const { organizationPersonnel } = this.dataForm; |
|
||||
organizationPersonnel.splice(index, 1); |
|
||||
this.dataForm.organizationPersonnel = organizationPersonnel; |
|
||||
}, |
|
||||
// 地图初始化函数,本例取名为init,开发者可根据实际情况定义 |
|
||||
initMap () { |
|
||||
// 定义地图中心点坐标 |
|
||||
var center = new window.TMap.LatLng(36.0722275, 120.38945519); |
|
||||
// 定义map变量,调用 TMap.Map() 构造函数创建地图 |
|
||||
map = new window.TMap.Map(document.getElementById("app"), { |
|
||||
center: center, // 设置地图中心点坐标 |
|
||||
zoom: 17.2, // 设置地图缩放级别 |
|
||||
pitch: 43.5, // 设置俯仰角 |
|
||||
rotation: 45, // 设置地图旋转角度 |
|
||||
}); |
|
||||
|
|
||||
search = new window.TMap.service.Search({ pageSize: 10 }); |
|
||||
// 新建一个地点搜索类 |
|
||||
markers = new TMap.MultiMarker({ |
|
||||
map: map, |
|
||||
geometries: [], |
|
||||
}); |
|
||||
infoWindowList = Array(10); |
|
||||
|
|
||||
// 监听地图平移结束 |
|
||||
map.on("panend", () => { |
|
||||
this.handleMoveCenter(); |
|
||||
}); |
|
||||
this.handleMoveCenter(); |
|
||||
}, |
|
||||
|
|
||||
setMarker (lat, lng) { |
|
||||
markers.setGeometries([]); |
|
||||
markers.add([ |
|
||||
{ |
|
||||
id: "4", |
|
||||
styleId: "marker", |
|
||||
position: new TMap.LatLng(lat, lng), |
|
||||
properties: { |
|
||||
title: "marker4", |
|
||||
}, |
|
||||
}, |
|
||||
]); |
|
||||
}, |
|
||||
|
|
||||
handleSearchMap () { |
|
||||
infoWindowList.forEach((infoWindow) => { |
|
||||
infoWindow.close(); |
|
||||
}); |
|
||||
infoWindowList.length = 0; |
|
||||
markers.setGeometries([]); |
|
||||
// 在地图显示范围内以给定的关键字搜索地点 |
|
||||
search |
|
||||
.searchRectangle({ |
|
||||
keyword: this.dataForm.address, |
|
||||
bounds: map.getBounds(), |
|
||||
}) |
|
||||
.then((result) => { |
|
||||
let { data } = result; |
|
||||
if (Array.isArray(data) && data.length > 0) { |
|
||||
const { |
|
||||
location: { lat, lng }, |
|
||||
} = data[0]; |
|
||||
map.setCenter(new TMap.LatLng(lat, lng)); |
|
||||
this.setMarker(lat, lng); |
|
||||
this.dataForm.latitude = lat; |
|
||||
this.dataForm.longitude = lng; |
|
||||
} else { |
|
||||
this.$message.error("未检索到相关位置坐标"); |
|
||||
} |
|
||||
}); |
|
||||
}, |
|
||||
|
|
||||
handleMoveCenter () { |
|
||||
//修改地图中心点 |
|
||||
const center = map.getCenter(); |
|
||||
const lat = center.getLat(); |
|
||||
const lng = center.getLng(); |
|
||||
this.dataForm.latitude = lat; |
|
||||
this.dataForm.longitude = lng; |
|
||||
this.setMarker(lat, lng); |
|
||||
}, |
|
||||
|
|
||||
async initForm (type, row) { |
|
||||
this.$refs.ref_form.resetFields(); |
|
||||
|
|
||||
this.formType = type; |
|
||||
console.log(row); |
|
||||
if (row) { |
|
||||
this.dataForm = { ...this.dataForm, ...row }; |
|
||||
this.orgId = this.dataForm.orgId; |
|
||||
map.setCenter(new TMap.LatLng(row.latitude, row.longitude)); |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
async handleComfirm () { |
|
||||
this.btnDisable = true; |
|
||||
setTimeout(() => { |
|
||||
this.btnDisable = false; |
|
||||
}, 10000); |
|
||||
this.$refs["ref_form"].validate((valid, messageObj) => { |
|
||||
if (!valid) { |
|
||||
app.util.validateRule(messageObj); |
|
||||
this.btnDisable = false; |
|
||||
} else { |
|
||||
// if (!formVltHelper.userOrMobile(this.dataForm.principalPhone)) { |
|
||||
// return this.$message({ |
|
||||
// type: "error", |
|
||||
// message: "手机号格式有误", |
|
||||
// }); |
|
||||
// } |
|
||||
const { |
|
||||
dataForm: { organizationPersonnel }, |
|
||||
} = this; |
|
||||
let vlt = organizationPersonnel.every((item) => { |
|
||||
return ( |
|
||||
item.personName && |
|
||||
item.personPhone |
|
||||
); |
|
||||
}); |
|
||||
if (!vlt) { |
|
||||
return this.$message({ |
|
||||
type: "error", |
|
||||
message: "成员姓名/手机号为空", |
|
||||
}); |
|
||||
} |
|
||||
this.submit(); |
|
||||
} |
|
||||
}); |
|
||||
}, |
|
||||
|
|
||||
async submit () { |
|
||||
let url = ""; |
|
||||
if (this.formType === "add") { |
|
||||
url = "/heart/iccommunityselforganization/addcommunityselforganization"; |
|
||||
// url = "http://yapi.elinkservice.cn/mock/245/gov/org/neighborhood/neighborhoodadd" |
|
||||
} else { |
|
||||
url = |
|
||||
"/heart/iccommunityselforganization/editcommunityselforganization"; |
|
||||
|
|
||||
this.dataForm.orgId = this.orgId; |
|
||||
} |
|
||||
|
|
||||
const { data, code, msg } = await requestPost(url, this.dataForm); |
|
||||
|
|
||||
if (code === 0) { |
|
||||
this.$message({ |
|
||||
type: "success", |
|
||||
message: "操作成功", |
|
||||
}); |
|
||||
this.resetData(); |
|
||||
this.$emit("dialogOk"); |
|
||||
this.btnDisable = false; |
|
||||
} else { |
|
||||
this.btnDisable = false; |
|
||||
this.$message.error(msg); |
|
||||
} |
|
||||
}, |
|
||||
|
|
||||
handleCancle () { |
|
||||
this.resetData(); |
|
||||
this.$emit("dialogCancle"); |
|
||||
}, |
|
||||
resetData () { |
|
||||
this.orgId = ""; |
|
||||
this.dataForm = { |
|
||||
organizationName: "", |
|
||||
serviceItem: "", |
|
||||
organizationPersonCount: "", |
|
||||
categoryCode: "", |
|
||||
principalName: "", |
|
||||
principalPhone: "", |
|
||||
organizationCreatedTime: "", |
|
||||
address: "", |
|
||||
remark: "", |
|
||||
longitude: "", |
|
||||
latitude: "", |
|
||||
organizationPersonnel: [], |
|
||||
}; |
|
||||
}, |
|
||||
// 开启加载动画 |
|
||||
startLoading () { |
|
||||
loading = Loading.service({ |
|
||||
lock: true, // 是否锁定 |
|
||||
text: "正在加载……", // 加载中需要显示的文字 |
|
||||
background: "rgba(0,0,0,.7)", // 背景颜色 |
|
||||
}); |
|
||||
}, |
|
||||
// 结束加载动画 |
|
||||
endLoading () { |
|
||||
// clearTimeout(timer); |
|
||||
if (loading) { |
|
||||
loading.close(); |
|
||||
} |
|
||||
}, |
|
||||
}, |
|
||||
}; |
|
||||
</script> |
|
||||
|
|
||||
<style lang="scss" scoped> |
|
||||
.item_width_1 { |
|
||||
width: 500px; |
|
||||
} |
|
||||
.item_width_2 { |
|
||||
width: 400px; |
|
||||
} |
|
||||
.item_width_3 { |
|
||||
margin-left: 10px; |
|
||||
width: 200px; |
|
||||
} |
|
||||
.item_width_4 { |
|
||||
width: 200px; |
|
||||
} |
|
||||
|
|
||||
.div_map { |
|
||||
margin-top: 10px; |
|
||||
} |
|
||||
|
|
||||
.div_btn { |
|
||||
// display: flex; |
|
||||
// justify-content: flex-end; |
|
||||
} |
|
||||
.el-tabs { |
|
||||
margin: 0 20px; |
|
||||
} |
|
||||
.el-upload__tip { |
|
||||
color: rgb(155, 155, 155); |
|
||||
margin: 0; |
|
||||
} |
|
||||
.form { |
|
||||
margin-top: 30px; |
|
||||
} |
|
||||
|
|
||||
.m-staffs { |
|
||||
width: 468px; |
|
||||
.item { |
|
||||
display: flex; |
|
||||
justify-content: space-around; |
|
||||
margin-bottom: 7px; |
|
||||
} |
|
||||
.item-add { |
|
||||
} |
|
||||
} |
|
||||
</style> |
|
@ -0,0 +1,536 @@ |
|||||
|
<template> |
||||
|
<div class="m-record" style="padding: 0 20px"> |
||||
|
<h3>巡查记录</h3> |
||||
|
<div class="mt10" v-if="formType == 'edit'"> |
||||
|
<el-button |
||||
|
size="small" |
||||
|
class="diy-button--add" |
||||
|
:disabled="btnDisabled || disabled" |
||||
|
@click="handleAdd" |
||||
|
>新增</el-button |
||||
|
> |
||||
|
</div> |
||||
|
<el-table |
||||
|
:data="tableData" |
||||
|
row-key="id" |
||||
|
border |
||||
|
style="width: 100%" |
||||
|
class="resi-table" |
||||
|
height="400px" |
||||
|
: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" |
||||
|
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="number" |
||||
|
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 |
||||
|
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.patrolTime }}</div> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
|
||||
|
<el-table-column v-if="!disabled" 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)" |
||||
|
> |
||||
|
<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: "", |
||||
|
}, |
||||
|
}, |
||||
|
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); |
||||
|
if (file.response) { |
||||
|
row.imgList = row.imgList.map( |
||||
|
(item) => item !== file.response.data.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