33 changed files with 3478 additions and 357 deletions
After Width: | Height: | Size: 237 B |
After Width: | Height: | Size: 274 B |
After Width: | Height: | Size: 4.2 KiB |
@ -0,0 +1,425 @@ |
|||
<template> |
|||
<div> |
|||
<div class="dialog-h-content scroll-h"> |
|||
<el-form ref="ref_form" |
|||
:inline="false" |
|||
:model="dataForm" |
|||
:rules="dataRule" |
|||
:disabled="formType === 'detail'" |
|||
class="form"> |
|||
|
|||
<el-form-item label="所属楼栋" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<span>{{ dataForm.neighborHoodName }}-{{dataForm.label}}</span> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="单元号" |
|||
prop="buildingUnitId" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-select class="item_width_1" |
|||
v-model="dataForm.buildingUnitId" |
|||
placeholder="请选择" |
|||
clearable> |
|||
<el-option v-for="item in unitList" |
|||
:key="item.id" |
|||
:label="item.unitName" |
|||
:value="item.id"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="门牌号" |
|||
prop="doorName" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
placeholder="请输入门牌号" |
|||
v-model="dataForm.doorName"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item v-if="formType != 'detail'" label="房屋编码" |
|||
prop="coding" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_2" |
|||
maxlength="50" |
|||
placeholder="请输入楼栋编码" |
|||
v-model="dataForm.coding"> |
|||
|
|||
</el-input> |
|||
<el-button style="margin-left: 10px" |
|||
type="primary" |
|||
size="small" |
|||
@click="handleCode">生成</el-button> |
|||
</el-form-item> |
|||
<div v-if="formType === 'detail'"> |
|||
<el-form-item label="房屋编码" |
|||
prop="houseCode" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
maxlength="30" |
|||
v-model="dataForm.houseCode"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<div v-if="dataForm.houseQrcodeUrl" |
|||
style="display: flex;flex-direction: column;"> |
|||
<img style="margin-left: 70px;width: 200px;" |
|||
:src="dataForm.houseQrcodeUrl"> |
|||
<a style="margin-left: 80px" |
|||
:href="dataForm.houseQrcodeUrl" |
|||
target="_blank">下载</a> |
|||
</div> |
|||
</div> |
|||
<!-- <el-form-item label="居住人数" |
|||
style="display: block" |
|||
prop="realPerson" |
|||
label-width="150px"> |
|||
<el-input-number class="item_width_4" |
|||
v-model="dataForm.realPerson" |
|||
:min="0" |
|||
:max="9999" |
|||
label="居住人数"></el-input-number> |
|||
</el-form-item> --> |
|||
<el-form-item label="房屋类型" |
|||
prop="houseType" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-radio-group v-model="houseType"> |
|||
|
|||
<el-radio :label="'1'">楼房</el-radio> |
|||
<el-radio :label="'2'">平房</el-radio> |
|||
<el-radio :label="'3'">别墅</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="房屋用途" |
|||
prop="purpose" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-radio-group v-model="purpose"> |
|||
|
|||
<el-radio :label="'1'">住宅</el-radio> |
|||
<el-radio :label="'2'">商业</el-radio> |
|||
<el-radio :label="'3'">办公</el-radio> |
|||
<el-radio :label="'4'">工业</el-radio> |
|||
<el-radio :label="'5'">仓储</el-radio> |
|||
<el-radio :label="'6'">商住混用</el-radio> |
|||
<el-radio :label="'7'">其他</el-radio> |
|||
</el-radio-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="房屋状态" |
|||
prop="rentFlag" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-radio-group v-model="rentFlag"> |
|||
|
|||
<el-radio :label="1">出租</el-radio> |
|||
<el-radio :label="2">闲置</el-radio> |
|||
<el-radio :label="0">自住</el-radio> |
|||
<el-radio :label="3">未出售</el-radio> |
|||
|
|||
</el-radio-group> |
|||
</el-form-item> |
|||
|
|||
<el-form-item label="房主姓名" |
|||
prop="ownerName" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
maxlength="30" |
|||
placeholder="请输入房主姓名" |
|||
v-model="dataForm.ownerName"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="联系方式" |
|||
prop="ownerPhone" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
type='number' |
|||
placeholder="请输入联系方式" |
|||
v-model="dataForm.ownerPhone"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="房主身份证" |
|||
prop="ownerIdCard" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
placeholder="请输入房主身份证" |
|||
v-model="dataForm.ownerIdCard"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="备注" |
|||
prop="remark" |
|||
label-width="150px" |
|||
style="display: block"> |
|||
<el-input class="item_width_1" |
|||
maxlength="30" |
|||
placeholder="请输入备注" |
|||
v-model="dataForm.remark"> |
|||
</el-input> |
|||
</el-form-item> |
|||
</el-form> |
|||
|
|||
</div> |
|||
<div class="div_btn"> |
|||
<el-button size="small" |
|||
@click="handleCancle">取 消</el-button> |
|||
<el-button size="small" |
|||
v-if="formType != 'detail'" |
|||
type="primary" |
|||
:disabled="btnDisable" |
|||
@click="handleComfirm">确 定</el-button> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { Loading } from 'element-ui' // 引入Loading服务 |
|||
import { requestPost } from '@/js/dai/request' |
|||
|
|||
|
|||
let loading // 加载动画 |
|||
export default { |
|||
data () { |
|||
return { |
|||
formType: 'add', //表单操作类型 add新增,edit编辑,detail详情 |
|||
btnDisable: false, |
|||
unitList: [], |
|||
|
|||
houseId: '', //房屋ID |
|||
houseType: '1', |
|||
purpose: '1', |
|||
rentFlag: 0, |
|||
dataForm: { |
|||
neighborHoodId: '', // 所属小区ID |
|||
buildingId: '',//所属楼栋ID |
|||
buildingUnitId: '',//所属单元ID |
|||
doorName: '',//门牌号 |
|||
houseType: '',//房屋类型【楼房,平房,别墅】 |
|||
purpose: '',//房屋用途【住宅,商业,办公,工业,仓储,商住混用,其他】 |
|||
rentFlag: 0,//房屋状态【是:1,否:0】 出租1、闲置2、自住 0 |
|||
ownerPhone: '', //联系方式 |
|||
ownerName: '', //房主名字 |
|||
ownerIdCard: '', //房主身份证 |
|||
remark: '', |
|||
// realPerson: 0, |
|||
coding: '', |
|||
sysCoding: '' |
|||
}, |
|||
|
|||
keyWords: '', |
|||
} |
|||
}, |
|||
components: {}, |
|||
mounted () { |
|||
|
|||
}, |
|||
|
|||
methods: { |
|||
async initForm (type, row, id) { |
|||
|
|||
this.$refs.ref_form.resetFields() |
|||
const url = '/epmetuser/icresicollect/getHouseDetailByCollect' |
|||
const params = { |
|||
id |
|||
} |
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.formType = type |
|||
|
|||
this.dataForm = { ...data } |
|||
// this.dataForm.neighborHoodId = this.agencyObj.neighborHoodId |
|||
// this.dataForm.buildingId = this.agencyObj.id |
|||
|
|||
await this.loadUnitList() |
|||
|
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
|
|||
//加载单元 |
|||
async loadUnitList () { |
|||
const url = '/gov/org/building/buildingunitlist' |
|||
|
|||
let params = { |
|||
buildingId: this.dataForm.buildingId |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.unitList = data |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
async handleCode() { |
|||
if (!this.dataForm.buildingUnitId) return this.$message.error('请选择单元') |
|||
const { data, code, msg } = await requestPost( |
|||
"/gov/org/houseInformation/getHouseCoding/" + this.dataForm.buildingUnitId); |
|||
if (msg == "success" && code == 0) { |
|||
// this.dataForm.coding = data.coding |
|||
this.dataForm.sysCoding = data.sysCoding |
|||
this.$set(this.dataForm, 'coding', data.coding) |
|||
} |
|||
}, |
|||
|
|||
async handleComfirm () { |
|||
this.btnDisable = true |
|||
setTimeout(() => { |
|||
this.btnDisable = false |
|||
}, 10000) |
|||
|
|||
this.dataForm.houseType = this.houseType |
|||
this.dataForm.purpose = this.purpose |
|||
this.dataForm.rentFlag = this.rentFlag |
|||
this.$refs['ref_form'].validate((valid, messageObj) => { |
|||
if (!valid) { |
|||
this.btnDisable = false |
|||
app.util.validateRule(messageObj) |
|||
} else { |
|||
this.addRoom() |
|||
} |
|||
|
|||
}) |
|||
}, |
|||
|
|||
async addRoom () { |
|||
const regCard = /(^\d{15}$)|(^\d{17}(\d|X)$)/; //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X |
|||
if (this.dataForm.ownerIdCard && regCard.test(this.dataForm.ownerIdCard) === false) { |
|||
this.btnDisable = false |
|||
this.$message({ |
|||
type: 'warning', |
|||
message: '请输入正确的身份证号码' |
|||
}) |
|||
return false; |
|||
} |
|||
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //手机号码 |
|||
if (this.dataForm.ownerPhone && regPhone.test(this.dataForm.ownerPhone) === false) { |
|||
this.btnDisable = false |
|||
this.$message({ |
|||
type: 'warning', |
|||
message: '请输入正确的手机号码' |
|||
}) |
|||
return false; |
|||
} |
|||
|
|||
let url = '' |
|||
|
|||
if (this.formType === 'add') { |
|||
url = '/gov/org/house/houseadd' |
|||
} else { |
|||
url = '/gov/org/house/houseupdate' |
|||
this.dataForm.houseId = this.houseId |
|||
} |
|||
const { data, code, msg } = await requestPost(url, this.dataForm) |
|||
this.btnDisable = false |
|||
if (code === 0) { |
|||
this.$message({ |
|||
type: 'success', |
|||
message: '操作成功' |
|||
}) |
|||
this.$emit('dialogOk', { doorName: this.dataForm.doorName, buildingUnitId: this.dataForm.buildingUnitId }) |
|||
this.resetData() |
|||
} else { |
|||
|
|||
this.$message.error(msg) |
|||
} |
|||
|
|||
}, |
|||
|
|||
handleCancle () { |
|||
this.resetData() |
|||
this.$emit('dialogCancle') |
|||
|
|||
}, |
|||
|
|||
resetData () { |
|||
this.houseId = '' //房屋ID |
|||
this.houseType = '1' |
|||
this.purpose = '1' |
|||
this.rentFlag = 0 |
|||
this.dataForm = { |
|||
neighborHoodId: '', // 所属小区ID |
|||
buildingId: '',//所属楼栋ID |
|||
buildingUnitId: '',//所属单元ID |
|||
doorName: '',//门牌号 |
|||
houseType: '1',//房屋类型【楼房,平房,别墅】 |
|||
purpose: '1',//房屋用途【住宅,商业,办公,工业,仓储,商住混用,其他】 |
|||
rentFlag: 0,//是否出租【是:1,否:0】 |
|||
ownerPhone: '', //联系方式 |
|||
ownerName: '', //房主名字 |
|||
ownerIdCard: '', //房主身份证 |
|||
remark: '', // 备注 |
|||
coding: '', |
|||
sysCoding: '' |
|||
} |
|||
|
|||
}, |
|||
// 开启加载动画 |
|||
startLoading () { |
|||
loading = Loading.service({ |
|||
lock: true, // 是否锁定 |
|||
text: '正在加载……', // 加载中需要显示的文字 |
|||
background: 'rgba(0,0,0,.7)' // 背景颜色 |
|||
}) |
|||
}, |
|||
// 结束加载动画 |
|||
endLoading () { |
|||
// clearTimeout(timer); |
|||
if (loading) { |
|||
loading.close() |
|||
} |
|||
} |
|||
}, |
|||
computed: { |
|||
dataRule () { |
|||
return { |
|||
buildingUnitId: [ |
|||
{ required: true, message: '所属单元不能为空', trigger: 'blur' }, |
|||
], |
|||
doorName: [ |
|||
{ required: true, message: '门牌号不能为空', trigger: 'blur' } |
|||
], |
|||
coding: [ |
|||
{ required: true, message: '房屋编码不能为空', trigger: 'blur' } |
|||
], |
|||
houseType: [ |
|||
{ required: true, message: '房屋类型不能为空', trigger: 'blur' } |
|||
], |
|||
purpose: [ |
|||
{ required: true, message: '房屋用途不能为空', trigger: 'blur' } |
|||
], |
|||
rentFlag: [ |
|||
{ required: true, message: '是否出租不能为空', trigger: 'blur' } |
|||
], |
|||
ownerPhone: [ |
|||
{ required: false } |
|||
], |
|||
ownerName: [ |
|||
{ required: false } |
|||
], |
|||
ownerIdCard: [ |
|||
{ required: false } |
|||
], |
|||
remark: [ |
|||
{ required: false } |
|||
], |
|||
} |
|||
}, |
|||
|
|||
}, |
|||
props: {} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped > |
|||
@import "@/assets/scss/modules/visual/communityManageForm.scss"; |
|||
</style> |
@ -0,0 +1,246 @@ |
|||
<template> |
|||
<div class="resi-container"> |
|||
<el-card ref="searchCard" class="search-card"> |
|||
<el-form |
|||
ref="searchForm" |
|||
:inline="true" |
|||
:model="fmData" |
|||
class="demo-form-inline" |
|||
> |
|||
<el-form-item label="填写时间" prop="startTime"> |
|||
<el-date-picker |
|||
v-model="timeRange" |
|||
type="daterange" |
|||
clearable |
|||
size="small" |
|||
range-separator="至" |
|||
start-placeholder="开始日期" |
|||
end-placeholder="结束日期" |
|||
value-format="yyyy-MM-dd" |
|||
> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button |
|||
class="diy-button--search" |
|||
size="small" |
|||
@click="handleSearch" |
|||
>查询</el-button |
|||
> |
|||
<el-button |
|||
class="diy-button--reset" |
|||
size="small" |
|||
@click="resetForm('searchForm')" |
|||
>重置</el-button |
|||
> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-card> |
|||
<el-card class="resi-card-table"> |
|||
<el-table |
|||
:data="tableData" |
|||
border |
|||
style="width: 100%" |
|||
class="resi-table" |
|||
:height="tableHeight" |
|||
> |
|||
<el-table-column label="序号" type="index" align="center" width="50" /> |
|||
<el-table-column |
|||
prop="address" |
|||
width="240" |
|||
label="目的地" |
|||
align="center" |
|||
:show-overflow-tooltip="true" |
|||
/> |
|||
<el-table-column |
|||
prop="name" |
|||
width="150" |
|||
label="姓名" |
|||
align="center" |
|||
/> |
|||
<el-table-column |
|||
prop="mobile" |
|||
width="180" |
|||
label="手机号" |
|||
align="center" |
|||
/> |
|||
<el-table-column |
|||
prop="idCard" |
|||
width="240" |
|||
label="身份证号" |
|||
align="center" |
|||
:show-overflow-tooltip="true" |
|||
/> |
|||
<el-table-column |
|||
prop="comeReason" |
|||
width="320" |
|||
label="来访事由" |
|||
align="center" |
|||
:show-overflow-tooltip="true" |
|||
/> |
|||
<el-table-column |
|||
prop="faceImg" |
|||
min-width="120" |
|||
align="center" |
|||
label="人脸" |
|||
> |
|||
<template slot-scope="scope"> |
|||
<el-image |
|||
style="max-height: 50px; max-width: 50px;" |
|||
:src="scope.row.faceImg" |
|||
:preview-src-list="[scope.row.faceImg]"> |
|||
<div slot="error" class="image-slot"> |
|||
<!-- <i class="el-icon-picture-outline"></i> --> |
|||
</div> |
|||
</el-image> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<div> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:current-page.sync="pageNo" |
|||
:page-sizes="[20, 50, 100, 200]" |
|||
:page-size="parseInt(pageSize)" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total" |
|||
> |
|||
</el-pagination> |
|||
</div> |
|||
</el-card> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { requestPost } from "@/js/dai/request" |
|||
import { mapGetters } from "vuex" |
|||
|
|||
export default { |
|||
data() { |
|||
return { |
|||
openSearch: false, |
|||
|
|||
pageNo: 1, |
|||
pageSize: window.localStorage.getItem("pageSize") || 20, |
|||
total: 1, |
|||
|
|||
tableData: [], |
|||
timeRange: "", |
|||
fmData: { |
|||
startTime: "", |
|||
endTime: "", |
|||
}, |
|||
} |
|||
}, |
|||
computed: { |
|||
...mapGetters(["clientHeight", "iframeHeight"]), |
|||
tableHeight() { |
|||
const h = this.clientHeight - 360 + this.iframeHeigh |
|||
const _h = this.clientHeight - 360 |
|||
return this.$store.state.inIframe ? h : _h |
|||
} |
|||
}, |
|||
watch: { |
|||
timeRange(val) { |
|||
if (Array.isArray(val) && val.length == 2) { |
|||
this.fmData.startTime = val[0] |
|||
this.fmData.endTime = val[1] |
|||
} else { |
|||
this.fmData.startTime = "" |
|||
this.fmData.endTime = "" |
|||
} |
|||
}, |
|||
}, |
|||
mounted() { |
|||
this.getTableData() |
|||
}, |
|||
methods: { |
|||
handleSizeChange(val) { |
|||
console.log(`每页 ${val} 条`) |
|||
this.pageSize = val |
|||
window.localStorage.setItem("pageSize", val) |
|||
this.getTableData() |
|||
}, |
|||
handleCurrentChange(val) { |
|||
console.log(`当前页: ${val}`) |
|||
this.pageNo = val |
|||
this.getTableData() |
|||
}, |
|||
|
|||
handleSearch(val) { |
|||
console.log(this.fmData) |
|||
this.pageNo = 1 |
|||
this.getTableData() |
|||
}, |
|||
resetForm(formName) { |
|||
this.$refs[formName].resetFields() |
|||
this.timeRange = "" |
|||
this.fmData.startTime = "" |
|||
this.fmData.endTime = "" |
|||
this.handleSearch() |
|||
}, |
|||
async getTableData() { |
|||
const url = "/epmetuser/icResiCollectVisitor/list" |
|||
const { pageSize, pageNo, fmData } = this |
|||
const { data, code, msg } = await requestPost(url, { |
|||
pageSize, |
|||
pageNo, |
|||
...fmData, |
|||
}) |
|||
if (code === 0) { |
|||
console.log("列表请求成功!!!!!!!!!!!!!!") |
|||
this.total = data.total || 0 |
|||
this.tableData = data.list |
|||
} |
|||
} |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
|
|||
.resi-container .resi-card-table { |
|||
::v-deep .el-table th { |
|||
color: #fff; |
|||
background-color: rgba(33, 149, 254, 1); |
|||
// border-right: 1px solid rgba(33, 149, 254, 1); |
|||
} |
|||
} |
|||
.resi-table { |
|||
::v-deep .el-button--text { |
|||
text-decoration: underline; |
|||
} |
|||
} |
|||
.resi-card-table { |
|||
margin-top: 20px; |
|||
} |
|||
.resi-row-btn { |
|||
margin-bottom: 13px; |
|||
.upload-btn { |
|||
display: inline-block; |
|||
margin: 0 10px; |
|||
} |
|||
} |
|||
|
|||
.resi-btns { |
|||
margin-top: 20px; |
|||
text-align: center; |
|||
} |
|||
|
|||
.resi-container .resi-card { |
|||
position: relative; |
|||
overflow: visible; |
|||
} |
|||
.wd50 { |
|||
min-width: 200px; |
|||
} |
|||
.badge { |
|||
display: block; |
|||
color: #F1F2E5; |
|||
background-color: #D7000F; |
|||
border-radius: 12px; |
|||
width: 70px; |
|||
} |
|||
</style> |
@ -0,0 +1,466 @@ |
|||
<template> |
|||
<div class="mode-block resi-container"> |
|||
<el-card ref="searchCard" class="search-card"> |
|||
<el-form ref="searchForm" :inline="true" :model="dataForm" size="small"> |
|||
<el-form-item label="所属组织" label-width="100px" |
|||
prop="agencyId"> |
|||
<el-cascader ref="cascaderUnit" v-model="dataForm.agencyId" :options="optionsA" :props="{ checkStrictly: true, emitPath: false,children:'subAgencyList',label:'agencyName',value:'agencyId'}" clearable /> |
|||
<!-- <template slot-scope="{ node, data }"> |
|||
<div @click="cascaderClick(data)"> |
|||
<span>{{ data.objectName }}</span> |
|||
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span> |
|||
</div> |
|||
</template> --> |
|||
</el-form-item> |
|||
<el-form-item label="统计类型" |
|||
prop="endTime" label-width="100px"> |
|||
<el-radio v-model="dataForm.type" label="end" @change="handleRadioCHange">截止累计值</el-radio> |
|||
<el-radio v-model="dataForm.type" label="Interval" @change="handleRadioCHange">区间新增值</el-radio> |
|||
<el-date-picker v-show="dataForm.type == 'end'" |
|||
v-model="dataForm.endTime" |
|||
type="datetime" |
|||
:clearable="false" |
|||
size="small" |
|||
:picker-options="pickerOptions" |
|||
value-format="yyyy-MM-dd HH:mm:ss" |
|||
/> |
|||
<el-date-picker v-show="dataForm.type == 'Interval'" v-model="timeRange" |
|||
type="datetimerange" |
|||
clearable |
|||
size="small" |
|||
:picker-options="pickerOptions" |
|||
range-separator="至" |
|||
start-placeholder="选择日期" |
|||
end-placeholder="选择日期" |
|||
value-format="yyyy-MM-dd HH:mm:ss" |
|||
/> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" size="small" class="diy-button--search" @click="handleSearch">查询</el-button> |
|||
<el-button |
|||
class="diy-button--reset" |
|||
size="small" |
|||
@click="resetForm('searchForm')" |
|||
>重置</el-button> |
|||
</el-form-item> |
|||
</el-form> |
|||
</el-card> |
|||
<el-card class="resi-card-table"> |
|||
<div class="resi-row-btn"> |
|||
<el-button @click="totalHandle" |
|||
class="diy-button--add" |
|||
size="small">总计</el-button> |
|||
<el-button @click="exportHandle" |
|||
class="diy-button--reset" |
|||
size="small" :loading="exportLoading">导出</el-button> |
|||
</div> |
|||
<el-table class="resi-table" v-loading="dataListLoading" :data="dataList" border style="width: 100%" |
|||
:height="tableHeight"> |
|||
<!-- <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column> --> |
|||
<el-table-column type="index" label="序号" header-align="center" align="center" width="50"></el-table-column> |
|||
<el-table-column min-width="100" prop="orgName" label="所属组织" header-align="center" align="center" > |
|||
<template slot-scope="scope"> |
|||
<a class="name-a" style="color: #2195fe;" @click="handleClick(scope.row)">{{scope.row.orgName}}</a> |
|||
</template> |
|||
</el-table-column> |
|||
<el-table-column min-width="100" prop="resiUserCount" label="注册居民数" header-align="center" align="center" > |
|||
<!-- <template slot-scope="scope"> |
|||
<span v-if="scope.row.orgType==='agency'"><a class="name-a" style="color: #2195fe;" @click="handleClick(scope.row)">{{scope.row.orgName}}</a></span> |
|||
<span v-else>{{scope.row.orgName}}</span> |
|||
</template> --> |
|||
</el-table-column> |
|||
<el-table-column min-width="100" prop="partyMemberCount" label="注册党员数" header-align="center" align="center" /> |
|||
|
|||
<el-table-column min-width="100" prop="icEventCount" label="事件总数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="resiEventCount" label="居民上报事件数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="pcEventCount" label="平台录入事件数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="projectCount" label="项目总数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="issueProjectCount" label="议题转项目数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="icEventProjectCount" label="事件立项数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="agencyProjectCount" label="立项数" header-align="center" align="center" /> |
|||
</el-table> |
|||
<!-- <div> |
|||
<el-pagination |
|||
@size-change="handleSizeChange" |
|||
@current-change="handleCurrentChange" |
|||
:current-page="pageNo" |
|||
:page-sizes="[20, 50, 100, 200]" |
|||
:page-size="pageSize" |
|||
layout="sizes, prev, pager, next, total" |
|||
:total="total" |
|||
> |
|||
</el-pagination> |
|||
</div> --> |
|||
</el-card> |
|||
<el-dialog |
|||
title="总计" |
|||
:visible.sync="totalVisible" |
|||
width="60%"> |
|||
<template> |
|||
<el-table |
|||
:data="tableData" |
|||
style="width: 100%" |
|||
height="200"> |
|||
<!-- <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column> --> |
|||
<el-table-column min-width="100" prop="orgName" label="组织名称" header-align="center" align="center" /> |
|||
<el-table-column min-width="100" prop="resiUserCount" label="注册居民数" header-align="center" align="center" /> |
|||
<el-table-column min-width="100" prop="partyMemberCount" label="注册党员数" header-align="center" align="center" /> |
|||
|
|||
<el-table-column min-width="100" prop="icEventCount" label="事件总数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="resiEventCount" label="居民上报事件数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="pcEventCount" label="平台录入事件数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="projectCount" label="项目总数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="issueProjectCount" label="议题转项目数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="icEventProjectCount" label="事件立项数" header-align="center" align="center" /> |
|||
<el-table-column min-width="110" prop="agencyProjectCount" label="立项数" header-align="center" align="center" /> |
|||
</el-table> |
|||
</template> |
|||
</el-dialog> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { mapGetters } from "vuex"; |
|||
// import AddOrUpdate from './factagencyuserhousedaily-add-or-update' |
|||
import { dateFormats } from '@/utils/index' |
|||
export default { |
|||
data () { |
|||
return { |
|||
exportLoading: false, |
|||
dataListLoading: false, |
|||
optionsA: [], |
|||
totalVisible: false, |
|||
pickerOptions: { |
|||
disabledDate(time) { |
|||
return time.getTime() > Date.now(); |
|||
}, |
|||
}, |
|||
dataList: [], |
|||
timeRange: '', |
|||
dataForm: { |
|||
customerId: this.$store.state.user.customerId, |
|||
agencyId: this.$store.state.user.agencyId, |
|||
startTime: '', |
|||
endTime: dateFormats('YYYY-mm-dd HH:MM:SS', new Date()), |
|||
type: 'end' |
|||
}, |
|||
total: 0, |
|||
tableData: [], |
|||
pageNo: 1, |
|||
pageSize: 20 |
|||
} |
|||
}, |
|||
components: { |
|||
// AddOrUpdate |
|||
}, |
|||
created () { |
|||
this.getGridList() |
|||
this.getTableList() |
|||
// this.getValiheList() |
|||
}, |
|||
watch: { |
|||
timeRange (val) { |
|||
if (Array.isArray(val) && val.length == 2) { |
|||
this.dataForm.startTime = val[0]; |
|||
this.dataForm.endTime = val[1]; |
|||
} else { |
|||
this.dataForm.startTime = ""; |
|||
this.dataForm.endTime = ""; |
|||
} |
|||
console.log('startTime----w', this.dataForm.startTime) |
|||
} |
|||
}, |
|||
computed: { |
|||
...mapGetters(["clientHeight", "iframeHeight"]), |
|||
tableHeight() { |
|||
const h = this.clientHeight - 330 + this.iframeHeigh; |
|||
const _h = this.clientHeight - 330; |
|||
return this.$store.state.inIframe ? h : _h; |
|||
}, |
|||
}, |
|||
methods: { |
|||
handleClick(row) { |
|||
this.dataForm.agencyId = row.orgId |
|||
this.handleSearch() |
|||
}, |
|||
resetForm(formName) { |
|||
this.$refs[formName].resetFields(); |
|||
this.timeRange = ""; |
|||
this.dataForm.startTime = ""; |
|||
this.dataForm.endTime = dateFormats('YYYY-mm-dd HH:MM:SS', new Date()) |
|||
this.dataForm.type = 'end'; |
|||
this.pageNo = 1 |
|||
this.getTableList() |
|||
}, |
|||
handleSearch() { |
|||
// this.dataForm.type = 1 |
|||
this.pageNo = 1 |
|||
this.getTableList() |
|||
}, |
|||
handleSizeChange(val) { |
|||
console.log(`每页 ${val} 条`); |
|||
this.pageSize = val; |
|||
this.getTableList(); |
|||
}, |
|||
handleCurrentChange(val) { |
|||
console.log(`当前页: ${val}`); |
|||
this.pageNo = val; |
|||
this.getTableList(); |
|||
}, |
|||
handleRadioCHange(val) { |
|||
console.log('val----', val) |
|||
this.timeRange = '' |
|||
this.dataForm.startTime = '' |
|||
this.dataForm.endTime = '' |
|||
if (val == 'end') { |
|||
this.$nextTick(() => { |
|||
this.dataForm.endTime = dateFormats('YYYY-mm-dd HH:MM:SS', new Date()) |
|||
}) |
|||
console.log('endTime----', this.dataForm.endTime) |
|||
} |
|||
}, |
|||
exportHandle () { |
|||
const url = '/data/aggregator/datastats/nowstatsdataexport' |
|||
// this.dataForm.type = 1 |
|||
this.exportLoading = true |
|||
this.$http({ |
|||
method: 'Post', |
|||
url, |
|||
responseType: 'blob', |
|||
data: this.dataForm |
|||
}).then(res => { |
|||
// this.download(res.data, title + '.xls') |
|||
if (res.headers["content-disposition"]) { |
|||
let fileName = window.decodeURI(res.headers["content-disposition"].split(";")[1].split("=")[1]) |
|||
console.log('filename', fileName) |
|||
let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' }) |
|||
var url = window.URL.createObjectURL(blob) |
|||
var aLink = document.createElement('a') |
|||
aLink.style.display = 'none' |
|||
aLink.href = url |
|||
aLink.setAttribute('download', fileName) |
|||
document.body.appendChild(aLink) |
|||
aLink.click() |
|||
document.body.removeChild(aLink) //下载完成移除元素 |
|||
window.URL.revokeObjectURL(url) //释放掉blob对象 |
|||
// this.exportLoading = false |
|||
} else this.$message.error('下载失败') |
|||
this.exportLoading = false |
|||
}).catch(err => { |
|||
console.log('err', err) |
|||
this.exportLoading = false |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
cascaderClick (nodeData) { |
|||
this.dataForm.agencyId = nodeData.objectId; |
|||
this.dataForm.level = nodeData.objectType |
|||
this.$refs.cascaderUnit.checkedValue = nodeData.objectId; |
|||
this.$refs.cascaderUnit.computePresentText(); |
|||
this.$refs.cascaderUnit.toggleDropDownVisible(false); |
|||
|
|||
}, |
|||
totalHandle () { |
|||
this.tableData = [] |
|||
let resiUserCount = 0, |
|||
partyMemberCount = 0, |
|||
icEventCount = 0, |
|||
resiEventCount = 0, |
|||
pcEventCount = 0, |
|||
projectCount = 0, |
|||
issueProjectCount = 0, |
|||
icEventProjectCount = 0, |
|||
agencyProjectCount = 0 |
|||
if (this.dataList.length > 0) { |
|||
this.dataList.forEach(item => { |
|||
resiUserCount += item.resiUserCount |
|||
partyMemberCount += item.partyMemberCount |
|||
icEventCount += item.icEventCount |
|||
resiEventCount += item.resiEventCount |
|||
pcEventCount += item.pcEventCount |
|||
projectCount += item.projectCount |
|||
issueProjectCount += item.issueProjectCount |
|||
icEventProjectCount += item.icEventProjectCount |
|||
agencyProjectCount += item.agencyProjectCount |
|||
}) |
|||
} |
|||
|
|||
this.tableData.push({ |
|||
orgName: this.$store.state.user.agencyName, |
|||
resiUserCount, |
|||
partyMemberCount, |
|||
icEventCount, |
|||
resiEventCount, |
|||
pcEventCount, |
|||
projectCount, |
|||
issueProjectCount, |
|||
icEventProjectCount, |
|||
agencyProjectCount |
|||
}) |
|||
// this.$http |
|||
// .post('/data/aggregator/org/orgProjectDetailList', this.dataForm) |
|||
// .then(({ data: res }) => { |
|||
// if (res.code !== 0) { |
|||
// return this.$message.error(res.msg) |
|||
// } else { |
|||
// console.log('获取查询详情成功', res.data.list) |
|||
// this.tableData = res.data.list |
|||
// } |
|||
// }) |
|||
// .catch(() => { |
|||
// return this.$message.error('网络错误') |
|||
// }) |
|||
|
|||
this.totalVisible = true |
|||
}, |
|||
getTableList() { |
|||
const { user } = this.$store.state |
|||
const _data = { |
|||
...this.dataForm, |
|||
// pageNo: this.pageNo, |
|||
// pageSize: this.pageSize |
|||
} |
|||
this.$http |
|||
.post('/data/aggregator/datastats/nowstatsdata', _data) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
this.dataList = res.data |
|||
// this.total = res.data.total |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
getGridList() { |
|||
const { user } = this.$store.state |
|||
this.dataListLoading = true |
|||
const params = { |
|||
agencyId: user.agencyId, |
|||
client: 'gov' |
|||
} |
|||
this.$http |
|||
// .post('/gov/org/userhouse/service/serviceScopeTree') |
|||
// .post('/data/aggregator/org/agencytree', params) |
|||
.post('/gov/org/customeragency/staffinagencylist') |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取查询详情成功', res.data) |
|||
let { agencyList, subAgencyList } = res.data |
|||
// this.optionsA = res.data |
|||
// console.log(this.optionsA); |
|||
// this.dataForm.agencyId = agencyList.agencyId |
|||
const _arr = [{...agencyList, subAgencyList: [...subAgencyList] }] |
|||
this.optionsA = this.deepTree(_arr) |
|||
console.log('optionsA----', this.optionsA) |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
this.dataListLoading = false |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
this.dataListLoading = false |
|||
}, |
|||
deepTree(arr) { |
|||
if (Array.isArray(arr)) { |
|||
return arr.map(item => { |
|||
return { |
|||
...item, |
|||
subAgencyList: item.subAgencyList.length > 0 && this.deepTree(item.subAgencyList) || null |
|||
} |
|||
}) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style> |
|||
.block{ |
|||
position: absolute; |
|||
left: 0px; |
|||
display: inline-block; |
|||
width: 35px; |
|||
height: 50px; |
|||
background: #fff; |
|||
} |
|||
.cascader-block .el-cascader-node>.el-radio{ |
|||
display: none; |
|||
} |
|||
</style> |
|||
<style lang="scss" scoped> |
|||
.blacklist-reason { |
|||
width: 100%; |
|||
height: 80px; |
|||
border: 1px solid #e4e4e4; |
|||
border-radius: 4px; |
|||
resize: none; |
|||
padding: 8px; |
|||
box-sizing: border-box; |
|||
} |
|||
</style> |
|||
<style lang="scss" scoped> |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
|
|||
.resi-container .resi-card-table { |
|||
::v-deep .el-table th { |
|||
color: #fff; |
|||
background-color: rgba(33, 149, 254, 1); |
|||
// border-right: 1px solid rgba(33, 149, 254, 1); |
|||
} |
|||
} |
|||
.resi-table { |
|||
::v-deep .el-button--text { |
|||
text-decoration: underline; |
|||
} |
|||
::v-deep .btn-color-del { |
|||
margin-left: 10px; |
|||
color: rgba(213, 16, 16, 1); |
|||
} |
|||
::v-deep .btn-color-edit { |
|||
color: rgba(0, 167, 169, 1); |
|||
} |
|||
} |
|||
.form-wr { |
|||
.input-width { |
|||
width: 260px; |
|||
|
|||
} |
|||
.input-width-textarea { |
|||
width: 500px; |
|||
} |
|||
.imsg-list { |
|||
display: flex; |
|||
align-items: center; |
|||
.imgs-item { |
|||
position: relative; |
|||
margin-right: 10px; |
|||
.el-icon-delete { |
|||
position: absolute; |
|||
top: 0; |
|||
right: 0; |
|||
font-size: 18px; |
|||
color: red; |
|||
z-index: 3; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.div-content { |
|||
width: 100%; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; |
|||
} |
|||
.resi-row-btn { |
|||
margin-bottom: 13px; |
|||
.upload-btn { |
|||
display: inline-block; |
|||
margin: 0 10px; |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,309 @@ |
|||
<template> |
|||
<div class="m-menu"> |
|||
<div class="list"> |
|||
<div |
|||
class="item" |
|||
:key="'menu1' + item.coverageType" |
|||
v-for="item in menuList.slice(0, 2)" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': item.selected }" |
|||
@click="selectAll(item)" |
|||
> |
|||
<div class="name"> |
|||
{{ item.coverageName }} |
|||
<i v-if="item.quantity">({{ item.quantity }})</i> |
|||
</div> |
|||
|
|||
<div |
|||
class="i-arrow" |
|||
:class="{ 'z-unfold': !item.folded }" |
|||
@click.stop="item.folded = !item.folded" |
|||
> |
|||
<img src="@/assets/img/shuju/command/arrow-right.png" /> |
|||
</div> |
|||
</div> |
|||
|
|||
<div |
|||
v-show="!item.folded" |
|||
class="granditem" |
|||
:key="'menu3' + granditem.categoryKey" |
|||
v-for="granditem in item.categories" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': granditem.selected }" |
|||
@click="granditem.selected = !granditem.selected" |
|||
> |
|||
<div class="i-ico"> |
|||
<img |
|||
v-if="grandIcoList[granditem.categoryKey]" |
|||
:src="grandIcoList[granditem.categoryKey]" |
|||
/> |
|||
</div> |
|||
|
|||
<div class="name"> |
|||
{{ granditem.categoryName }} |
|||
<i v-if="granditem.quantity">({{ granditem.quantity }})</i> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div |
|||
v-show="!item.folded" |
|||
class="subitem" |
|||
:key="'menu2' + subitem.placeType" |
|||
v-for="subitem in item.placeTypesInAnalysis" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': subitem.selected }" |
|||
@click="selectAll(subitem)" |
|||
> |
|||
<div class="i-ico"> |
|||
<img |
|||
v-if="subitem.placeType == 'xxxxx'" |
|||
src="@/assets/img/shuju/command/fuwusheshi.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'enterprise_patrol'" |
|||
src="@/assets/img/shuju/command/qishiyedanweixuncha.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'group_rent'" |
|||
src="@/assets/img/shuju/command/qunzufang.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'community_org'" |
|||
src="@/assets/img/shuju/command/shequzizhuzi.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'superior_resource'" |
|||
src="@/assets/img/shuju/command/youshiziyuan.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'volunteer'" |
|||
src="@/assets/img/shuju/command/zhiyuanzhe.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'dangerous_chemicals'" |
|||
src="@/assets/img/shuju/command/zhongdianweihuapinqiye.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'party_unit'" |
|||
src="@/assets/img/shuju/command/lianjiandanwei.png" |
|||
/> |
|||
</div> |
|||
|
|||
<div class="name"> |
|||
{{ subitem.placeTypeName }} |
|||
<i v-if="subitem.quantity">({{ subitem.quantity }})</i> |
|||
</div> |
|||
|
|||
<div |
|||
class="i-arrow" |
|||
:class="{ 'z-unfold': !subitem.folded }" |
|||
@click.stop="subitem.folded = !subitem.folded" |
|||
> |
|||
<img src="@/assets/img/shuju/command/arrow-right.png" /> |
|||
</div> |
|||
</div> |
|||
|
|||
<div |
|||
v-show="!subitem.folded" |
|||
class="granditem" |
|||
:key="'menu3' + granditem.categoryKey" |
|||
v-for="granditem in subitem.categories" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': granditem.selected }" |
|||
@click="granditem.selected = !granditem.selected" |
|||
> |
|||
<div class="i-ico"> |
|||
<img |
|||
v-if="grandIcoList[granditem.categoryKey]" |
|||
:src="grandIcoList[granditem.categoryKey]" |
|||
/> |
|||
</div> |
|||
|
|||
<div class="name"> |
|||
{{ granditem.categoryName }} |
|||
<i v-if="granditem.quantity">({{ granditem.quantity }})</i> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { requestPost } from "@/js/dai/request"; |
|||
|
|||
export default { |
|||
name: "sidemenu", |
|||
|
|||
props: { |
|||
grandIcoList: { |
|||
type: Object, |
|||
default: () => ({}), |
|||
}, |
|||
orgId: { |
|||
type: String, |
|||
default: "", |
|||
}, |
|||
}, |
|||
|
|||
data() { |
|||
return { |
|||
menuList: [], |
|||
}; |
|||
}, |
|||
|
|||
computed: {}, |
|||
watch: { |
|||
menuList: { |
|||
handler(newValue, oldValue) { |
|||
// console.log("菜单改变拉------------------------------------", newValue); |
|||
if (oldValue.length != 0) { |
|||
this.$emit("change", newValue); |
|||
} |
|||
}, |
|||
deep: true, |
|||
// immediate: true |
|||
}, |
|||
orgId() { |
|||
this.requestList(); |
|||
}, |
|||
}, |
|||
|
|||
mounted() { |
|||
this.requestList(); |
|||
}, |
|||
|
|||
methods: { |
|||
selectAll(item) { |
|||
item.selected = !item.selected; |
|||
item.categories.forEach((subitem) => { |
|||
subitem.selected = item.selected; |
|||
}); |
|||
if (item.placeTypesInAnalysis) { |
|||
item.placeTypesInAnalysis.forEach((subitem) => { |
|||
subitem.selected = item.selected; |
|||
subitem.categories.forEach((subitem2) => { |
|||
subitem2.selected = item.selected; |
|||
}); |
|||
}); |
|||
} |
|||
}, |
|||
//加载组织数据 |
|||
async requestList() { |
|||
const url = "/data/aggregator/coverage/analysis/resourceCategories"; |
|||
let params = { |
|||
agencyId: this.orgId, |
|||
}; |
|||
|
|||
const { data, code, msg } = await requestPost(url, params); |
|||
|
|||
if (code === 0) { |
|||
this.menuList = data.map((item) => { |
|||
item.selected = false; |
|||
item.folded = true; |
|||
item.categories.forEach((subitem) => { |
|||
subitem.selected = false; |
|||
}); |
|||
item.placeTypesInAnalysis.forEach((subitem) => { |
|||
subitem.selected = false; |
|||
subitem.folded = true; |
|||
subitem.categories.forEach((granditem) => { |
|||
granditem.selected = false; |
|||
}); |
|||
}); |
|||
return item; |
|||
}); |
|||
} else { |
|||
this.$message.error(msg); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.m-menu { |
|||
padding-top: 10px; |
|||
|
|||
.list { |
|||
.item { |
|||
position: relative; |
|||
z-index: 2; |
|||
line-height: 60px; |
|||
color: rgba(#fff, 0.8); |
|||
|
|||
.z-on { |
|||
color: #ffffff; |
|||
background-color: #041267; |
|||
font-weight: bold; |
|||
box-shadow: 0 0 30px 5px inset #22f; |
|||
} |
|||
|
|||
.info { |
|||
position: relative; |
|||
font-size: 18px; |
|||
width: 100%; |
|||
padding-left: 10px; |
|||
display: flex; |
|||
align-items: center; |
|||
cursor: pointer; |
|||
|
|||
.i-ico { |
|||
position: relative; |
|||
width: 35px; |
|||
height: 35px; |
|||
margin-right: 4px; |
|||
|
|||
img { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
right: 0; |
|||
bottom: 2px; |
|||
margin: auto; |
|||
} |
|||
} |
|||
|
|||
.i-arrow { |
|||
margin-left: auto; |
|||
margin-right: 20px; |
|||
|
|||
&.z-unfold { |
|||
transform: rotate(90deg); |
|||
} |
|||
} |
|||
|
|||
&:hover { |
|||
box-shadow: 0 0 30px 5px inset #22f; |
|||
background-color: darken(#104ba4, 12); |
|||
} |
|||
} |
|||
|
|||
.subitem, |
|||
.granditem { |
|||
> .info { |
|||
padding-left: 20px; |
|||
font-size: 16px; |
|||
} |
|||
|
|||
.granditem { |
|||
> .info { |
|||
padding-left: 40px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,309 @@ |
|||
<template> |
|||
<div class="m-menu"> |
|||
<div class="list"> |
|||
<div |
|||
class="item" |
|||
:key="'menu1' + item.coverageType" |
|||
v-for="item in menuList.slice(2)" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': item.selected }" |
|||
@click="selectAll(item)" |
|||
> |
|||
<div class="name"> |
|||
{{ item.coverageName }} |
|||
<i v-if="item.quantity">({{ item.quantity }})</i> |
|||
</div> |
|||
|
|||
<div |
|||
class="i-arrow" |
|||
:class="{ 'z-unfold': !item.folded }" |
|||
@click.stop="item.folded = !item.folded" |
|||
> |
|||
<img src="@/assets/img/shuju/command/arrow-right.png" /> |
|||
</div> |
|||
</div> |
|||
|
|||
<div |
|||
v-show="!item.folded" |
|||
class="granditem" |
|||
:key="'menu3' + granditem.categoryKey" |
|||
v-for="granditem in item.categories" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': granditem.selected }" |
|||
@click="granditem.selected = !granditem.selected" |
|||
> |
|||
<div class="i-ico"> |
|||
<img |
|||
v-if="grandIcoList[granditem.categoryKey]" |
|||
:src="grandIcoList[granditem.categoryKey]" |
|||
/> |
|||
</div> |
|||
|
|||
<div class="name"> |
|||
{{ granditem.categoryName }} |
|||
<i v-if="granditem.quantity">({{ granditem.quantity }})</i> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<div |
|||
v-show="!item.folded" |
|||
class="subitem" |
|||
:key="'menu2' + subitem.placeType" |
|||
v-for="subitem in item.placeTypesInAnalysis" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': subitem.selected }" |
|||
@click="selectAll(subitem)" |
|||
> |
|||
<div class="i-ico"> |
|||
<img |
|||
v-if="subitem.placeType == 'xxxxx'" |
|||
src="@/assets/img/shuju/command/fuwusheshi.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'enterprise_patrol'" |
|||
src="@/assets/img/shuju/command/qishiyedanweixuncha.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'group_rent'" |
|||
src="@/assets/img/shuju/command/qunzufang.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'community_org'" |
|||
src="@/assets/img/shuju/command/shequzizhuzi.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'superior_resource'" |
|||
src="@/assets/img/shuju/command/youshiziyuan.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'volunteer'" |
|||
src="@/assets/img/shuju/command/zhiyuanzhe.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'dangerous_chemicals'" |
|||
src="@/assets/img/shuju/command/zhongdianweihuapinqiye.png" |
|||
/> |
|||
<img |
|||
v-if="subitem.placeType == 'party_unit'" |
|||
src="@/assets/img/shuju/command/lianjiandanwei.png" |
|||
/> |
|||
</div> |
|||
|
|||
<div class="name"> |
|||
{{ subitem.placeTypeName }} |
|||
<i v-if="subitem.quantity">({{ subitem.quantity }})</i> |
|||
</div> |
|||
|
|||
<div |
|||
class="i-arrow" |
|||
:class="{ 'z-unfold': !subitem.folded }" |
|||
@click.stop="subitem.folded = !subitem.folded" |
|||
> |
|||
<img src="@/assets/img/shuju/command/arrow-right.png" /> |
|||
</div> |
|||
</div> |
|||
|
|||
<div |
|||
v-show="!subitem.folded" |
|||
class="granditem" |
|||
:key="'menu3' + granditem.categoryKey" |
|||
v-for="granditem in subitem.categories" |
|||
> |
|||
<div |
|||
class="info" |
|||
:class="{ 'z-on': granditem.selected }" |
|||
@click="granditem.selected = !granditem.selected" |
|||
> |
|||
<div class="i-ico"> |
|||
<img |
|||
v-if="grandIcoList[granditem.categoryKey]" |
|||
:src="grandIcoList[granditem.categoryKey]" |
|||
/> |
|||
</div> |
|||
|
|||
<div class="name"> |
|||
{{ granditem.categoryName }} |
|||
<i v-if="granditem.quantity">({{ granditem.quantity }})</i> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</template> |
|||
|
|||
<script> |
|||
import { requestPost } from "@/js/dai/request"; |
|||
|
|||
export default { |
|||
name: "sidemenu", |
|||
|
|||
props: { |
|||
grandIcoList: { |
|||
type: Object, |
|||
default: () => ({}), |
|||
}, |
|||
orgId: { |
|||
type: String, |
|||
default: "", |
|||
}, |
|||
}, |
|||
|
|||
data() { |
|||
return { |
|||
menuList: [], |
|||
}; |
|||
}, |
|||
|
|||
computed: {}, |
|||
watch: { |
|||
menuList: { |
|||
handler(newValue, oldValue) { |
|||
// console.log("菜单改变拉------------------------------------", newValue); |
|||
if (oldValue.length != 0) { |
|||
this.$emit("change", newValue); |
|||
} |
|||
}, |
|||
deep: true, |
|||
// immediate: true |
|||
}, |
|||
orgId() { |
|||
this.requestList(); |
|||
}, |
|||
}, |
|||
|
|||
mounted() { |
|||
this.requestList(); |
|||
}, |
|||
|
|||
methods: { |
|||
selectAll(item) { |
|||
item.selected = !item.selected; |
|||
item.categories.forEach((subitem) => { |
|||
subitem.selected = item.selected; |
|||
}); |
|||
if (item.placeTypesInAnalysis) { |
|||
item.placeTypesInAnalysis.forEach((subitem) => { |
|||
subitem.selected = item.selected; |
|||
subitem.categories.forEach((subitem2) => { |
|||
subitem2.selected = item.selected; |
|||
}); |
|||
}); |
|||
} |
|||
}, |
|||
//加载组织数据 |
|||
async requestList() { |
|||
const url = "/data/aggregator/coverage/analysis/resourceCategories"; |
|||
let params = { |
|||
agencyId: this.orgId, |
|||
}; |
|||
|
|||
const { data, code, msg } = await requestPost(url, params); |
|||
|
|||
if (code === 0) { |
|||
this.menuList = data.map((item) => { |
|||
item.selected = false; |
|||
item.folded = true; |
|||
item.categories.forEach((subitem) => { |
|||
subitem.selected = false; |
|||
}); |
|||
item.placeTypesInAnalysis.forEach((subitem) => { |
|||
subitem.selected = false; |
|||
subitem.folded = true; |
|||
subitem.categories.forEach((granditem) => { |
|||
granditem.selected = false; |
|||
}); |
|||
}); |
|||
return item; |
|||
}); |
|||
} else { |
|||
this.$message.error(msg); |
|||
} |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.m-menu { |
|||
padding-top: 10px; |
|||
|
|||
.list { |
|||
.item { |
|||
position: relative; |
|||
z-index: 2; |
|||
line-height: 60px; |
|||
color: rgba(#fff, 0.8); |
|||
|
|||
.z-on { |
|||
color: #ffffff; |
|||
background-color: #041267; |
|||
font-weight: bold; |
|||
box-shadow: 0 0 30px 5px inset #22f; |
|||
} |
|||
|
|||
.info { |
|||
position: relative; |
|||
font-size: 18px; |
|||
width: 100%; |
|||
padding-left: 10px; |
|||
display: flex; |
|||
align-items: center; |
|||
cursor: pointer; |
|||
|
|||
.i-ico { |
|||
position: relative; |
|||
width: 35px; |
|||
height: 35px; |
|||
margin-right: 4px; |
|||
|
|||
img { |
|||
position: absolute; |
|||
top: 0; |
|||
left: 0; |
|||
right: 0; |
|||
bottom: 2px; |
|||
margin: auto; |
|||
} |
|||
} |
|||
|
|||
.i-arrow { |
|||
margin-left: auto; |
|||
margin-right: 20px; |
|||
|
|||
&.z-unfold { |
|||
transform: rotate(90deg); |
|||
} |
|||
} |
|||
|
|||
&:hover { |
|||
box-shadow: 0 0 30px 5px inset #22f; |
|||
background-color: darken(#104ba4, 12); |
|||
} |
|||
} |
|||
|
|||
.subitem, |
|||
.granditem { |
|||
> .info { |
|||
padding-left: 20px; |
|||
font-size: 16px; |
|||
} |
|||
|
|||
.granditem { |
|||
> .info { |
|||
padding-left: 40px; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</style> |
@ -0,0 +1,404 @@ |
|||
<template> |
|||
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : formType==='detail' ? '查看' : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false"> |
|||
<el-form :model="dataForm" :disabled="formType==='detail'" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'"> |
|||
<el-form-item label="所属网格" |
|||
prop="gridId"> |
|||
<el-select |
|||
v-model.trim="dataForm.gridId" |
|||
placeholder="请选择" |
|||
clearable |
|||
> |
|||
<el-option |
|||
v-for="item in optionsG" |
|||
:key="item.gridId" |
|||
:label="item.gridName" |
|||
:value="item.gridId" |
|||
:disabled="item.disabled" |
|||
> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="标题" prop="title"> |
|||
<el-input v-model="dataForm.title" placeholder="标题"></el-input> |
|||
</el-form-item> |
|||
<el-form-item label="日志类型" prop="logType"> |
|||
<el-select v-model="dataForm.logType" |
|||
placeholder="请选择" |
|||
size="small" |
|||
clearable> |
|||
<el-option v-for="item in logTypeArr" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="日志时间" prop="logDate"> |
|||
<el-date-picker |
|||
v-model="dataForm.logDate" |
|||
format="yyyy-MM-dd" |
|||
value-format="yyyy-MM-dd" |
|||
type="date" |
|||
placeholder="选择日期"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label="内容" prop="content"> |
|||
<el-input type="textarea" :autosize="{ minRows: 3, maxRows: 5 }" v-model="dataForm.content" placeholder="内容"></el-input> |
|||
</el-form-item> |
|||
<el-form-item label="备注" prop="remark"> |
|||
<el-input type="textarea" v-model="dataForm.remark" placeholder="备注"></el-input> |
|||
</el-form-item> |
|||
<!-- <el-form-item class="block" |
|||
label="照片" |
|||
label-width="150px" |
|||
prop="attach"> |
|||
<el-upload class="upload-demo" |
|||
:action="uploadUlr" |
|||
accept=".jpg,.png,.jpeg,.bmp" |
|||
:on-success="handleFileSuccess" |
|||
:on-remov·e="handleFileRemove" |
|||
:on-preview="handleFileDownload" |
|||
:limit="3" |
|||
:before-upload="beforeUpload" |
|||
:file-list="dataForm.fileList"> |
|||
<el-button size="small" |
|||
:disabled="dataForm.fileList.length===3" |
|||
type="primary">点击上传</el-button> |
|||
<div slot="tip" |
|||
class="el-upload__tip">支持jpg、png、bmp</div> |
|||
</el-upload> |
|||
</el-form-item> --> |
|||
|
|||
<el-form-item label="照片" |
|||
style="display:block"> |
|||
<el-upload :class="['avatar-uploader', {'hide': hideUploadBtn}] " |
|||
ref="uploadPic" |
|||
:action="uploadUlr" |
|||
list-type="picture-card" |
|||
:on-exceed="exceedPic" |
|||
:on-remove="removePic" |
|||
:file-list="dataForm.fileList" |
|||
:on-change="handleEditChange" |
|||
:on-success="handleSuccess" |
|||
:limit="3"> |
|||
<span class="font-14">选择图片</span> |
|||
<div slot="tip" |
|||
class="upload_tip">最多上传3张图片,图片支持jpg、jpeg、bmp、git或png格式</div> |
|||
</el-upload> |
|||
</el-form-item> |
|||
</el-form> |
|||
<template slot="footer" v-if="formType != 'detail'"> |
|||
<el-button @click="visible = false">{{ $t('cancel') }}</el-button> |
|||
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button> |
|||
</template> |
|||
</el-dialog> |
|||
</template> |
|||
|
|||
<script> |
|||
import debounce from 'lodash/debounce' |
|||
import { requestPost } from "@/js/dai/request" |
|||
export default { |
|||
data () { |
|||
return { |
|||
formType: '', |
|||
visible: false, |
|||
gridState: true, |
|||
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile', |
|||
logTypeArr: [], |
|||
optionsG: [], |
|||
dataForm: { |
|||
id: '', |
|||
agencyId: '', |
|||
pids: '', |
|||
gridId: '', |
|||
title: '', |
|||
logType: '', |
|||
logDate: '', |
|||
content: '', |
|||
remark: '', |
|||
mobile: '', |
|||
fileList: [], |
|||
// imageList: [],// 图片集合 |
|||
}, |
|||
hideUploadBtn: false |
|||
} |
|||
}, |
|||
created () { |
|||
this.getCategrayList() |
|||
}, |
|||
computed: { |
|||
dataRule () { |
|||
return { |
|||
title: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
logType: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
logDate: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
], |
|||
content: [ |
|||
{ required: true, message: this.$t('validate.required'), trigger: 'blur' } |
|||
] |
|||
} |
|||
} |
|||
}, |
|||
methods: { |
|||
init () { |
|||
this.visible = true |
|||
this.getGridList() |
|||
this.$nextTick(() => { |
|||
this.$refs['dataForm'].resetFields() |
|||
this.dataForm.fileList = [] |
|||
if (this.dataForm.id) { |
|||
this.getInfo() |
|||
} |
|||
}) |
|||
}, |
|||
// 获取信息 |
|||
getInfo () { |
|||
this.$http.get(`/gov/org/icWorkLog/${this.dataForm.id}`).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.dataForm = { |
|||
...this.dataForm, |
|||
...res.data |
|||
} |
|||
|
|||
const grid = this.optionsG.filter(item => item.gridId === res.data.gridId) |
|||
if (grid.length < 1 && res.data.gridId !== '') { |
|||
this.gridState = false |
|||
this.optionsG.push({gridName:res.data.gridName, gridId:res.data.gridId, disabled: true}) |
|||
} else { |
|||
this.gridState = true |
|||
} |
|||
|
|||
const { id } = this.$store.state.user |
|||
if (this.dataForm.createdBy == id) { // 是本人可以修改 |
|||
this.formType = 'update' |
|||
} else { // 不是本人只能查看 |
|||
this.formType = 'detail' |
|||
} |
|||
}).catch(() => {}) |
|||
}, |
|||
// 字典 |
|||
async getCategrayList () { |
|||
console.log(localStorage.getItem('token')) |
|||
const url = "/sys/dict/data/dictlist" |
|||
|
|||
let params = { |
|||
dictType: 'log_type' |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.logTypeArr = data |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
getGridList() { |
|||
this.$http |
|||
.post('/gov/mine/agency/getmygrids') |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取查询详情成功', res.data) |
|||
this.optionsG = res.data |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
// beforeUpload (file) { |
|||
// const array = file.name.split('.') |
|||
// const extension = array[array.length - 1] |
|||
|
|||
// const formatarray = ['jpg', 'png', 'jpeg', 'bmp'] |
|||
|
|||
// if (formatarray.indexOf(extension) === -1) { |
|||
// this.$message.error('只支持图片、word、pdf') |
|||
// return false |
|||
// } |
|||
|
|||
// }, |
|||
|
|||
// handleFileRemove (file) { |
|||
|
|||
// if (file && file.status === "success") { |
|||
// this.dataForm.fileList.splice(this.dataForm.fileList.findIndex(item => item.uid === file.uid), 1) |
|||
// } |
|||
// }, |
|||
|
|||
// handleFileSuccess (res, file) { |
|||
|
|||
// if (res.code === 0 && res.msg === 'success') { |
|||
// const array = file.name.split('.') |
|||
// const fileType = array[array.length - 1] |
|||
|
|||
// const picArray = ['jpg', 'png', 'jpeg', 'bmp'] |
|||
// const videoarray = ['mp4', 'wma', 'm4a'] |
|||
// const docArray = ['doc', 'docx', 'xls', 'xlsx', 'pdf'] |
|||
// const mp3Array = ['mp3'] |
|||
|
|||
// if (picArray.indexOf(fileType) > -1) { |
|||
// file.attachmentFormat = 'image' |
|||
// } else if (videoarray.indexOf(fileType) > -1) { |
|||
// file.attachmentFormat = 'video' |
|||
// } else if (docArray.indexOf(fileType) > -1) { |
|||
// file.attachmentFormat = 'doc' |
|||
// } else if (mp3Array.indexOf(fileType) > -1) { |
|||
// file.attachmentFormat = 'voice' |
|||
// } |
|||
|
|||
// file.url = res.data.url |
|||
// file.type = fileType |
|||
|
|||
// file.fileName = file.name |
|||
// file.fileType = file.type |
|||
|
|||
// this.dataForm.fileList.push(file) |
|||
// console.log(this.dataForm.fileList) |
|||
// } else this.$message.error(res.msg) |
|||
// }, |
|||
//下载 |
|||
// handleFileDownload (file) { |
|||
|
|||
// var a = document.createElement('a'); |
|||
// var event = new MouseEvent('click'); |
|||
// a.download = file.name; |
|||
// console.log(a) |
|||
// a.href = file.url; |
|||
// a.dispatchEvent(event); |
|||
|
|||
|
|||
// }, |
|||
|
|||
exceedPic () { |
|||
this.$message.warning("最多上传3张预览图片") |
|||
|
|||
}, |
|||
removePic (file, fileList) { |
|||
|
|||
// this.formData.imageList.splice(this.formData.imageList.findIndex(item => item === file.url), 1) |
|||
if (file && file.status === "success") { |
|||
this.dataForm.fileList.splice(this.dataForm.fileList.findIndex(item => item.uid === file.uid), 1) |
|||
} |
|||
this.hideUploadBtn = fileList.length >= 3; |
|||
|
|||
}, |
|||
handleSuccess (res, file) { |
|||
if (res.code === 0 && res.msg === 'success') { |
|||
const array = file.name.split('.') |
|||
const fileType = array[array.length - 1] |
|||
|
|||
const picArray = ['jpg', 'png', 'jpeg', 'bmp'] |
|||
const videoarray = ['mp4', 'wma', 'm4a'] |
|||
const docArray = ['doc', 'docx', 'xls', 'xlsx', 'pdf'] |
|||
const mp3Array = ['mp3'] |
|||
|
|||
if (picArray.indexOf(fileType) > -1) { |
|||
file.attachmentFormat = 'image' |
|||
} else if (videoarray.indexOf(fileType) > -1) { |
|||
file.attachmentFormat = 'video' |
|||
} else if (docArray.indexOf(fileType) > -1) { |
|||
file.attachmentFormat = 'doc' |
|||
} else if (mp3Array.indexOf(fileType) > -1) { |
|||
file.attachmentFormat = 'voice' |
|||
} |
|||
|
|||
file.url = res.data.url |
|||
file.type = fileType |
|||
|
|||
file.fileName = file.name |
|||
file.fileType = file.type |
|||
|
|||
this.dataForm.fileList.push(file) |
|||
console.log(this.dataForm.fileList) |
|||
} else this.$message.error(res.msg) |
|||
|
|||
}, |
|||
// 最多上传3张图,超过时隐藏上传按钮 |
|||
handleEditChange (file, fileList) { |
|||
|
|||
this.hideUploadBtn = fileList.length >= 3; |
|||
}, |
|||
// 表单提交 |
|||
dataFormSubmitHandle: debounce(function () { |
|||
if (!this.gridState) { |
|||
this.dataForm.gridId = '' |
|||
this.gridState = true |
|||
return this.$message.error("请重新选择网格") |
|||
} |
|||
if (this.dataForm.content.length < 70) { |
|||
return this.$message.error("内容不能少于70字") |
|||
} |
|||
if (this.dataForm.fileList.length < 1) { |
|||
return this.$message.error("照片不能为空") |
|||
} |
|||
this.$refs['dataForm'].validate((valid) => { |
|||
if (!valid) { |
|||
return false |
|||
} |
|||
this.$http[!this.dataForm.id ? 'post' : 'put']('/gov/org/icWorkLog/', this.dataForm).then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} |
|||
this.$message({ |
|||
message: this.$t('prompt.success'), |
|||
type: 'success', |
|||
duration: 500, |
|||
onClose: () => { |
|||
this.visible = false |
|||
this.$emit('refreshDataList') |
|||
} |
|||
}) |
|||
}).catch(() => {}) |
|||
}) |
|||
}, 1000, { 'leading': true, 'trailing': false }) |
|||
} |
|||
} |
|||
</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; |
|||
} |
|||
|
|||
.attachement-list { |
|||
} |
|||
</style> |
@ -0,0 +1,362 @@ |
|||
<template> |
|||
<el-card shadow="never" class="aui-card--fill"> |
|||
<div class="mod-__icWorkLog} resi-container"> |
|||
<el-card ref="searchCard" class="search-card"> |
|||
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()"> |
|||
<el-form-item prop="gridId" label="所属组织"> |
|||
<div class="resi-cell-value"> |
|||
<el-cascader class="customer_cascader" |
|||
ref="myCascader" |
|||
clearable |
|||
v-model="agencyIdArray" |
|||
:options="orgOptions" |
|||
:props="orgOptionProps" |
|||
:show-all-levels="false" |
|||
@change="handleChangeAgency"></el-cascader> |
|||
</div> |
|||
</el-form-item> |
|||
<el-form-item label="日志类型" |
|||
prop="logType"> |
|||
<el-select v-model="dataForm.logType" |
|||
placeholder="请选择" |
|||
size="small" |
|||
clearable> |
|||
<el-option v-for="item in logTypeArr" |
|||
:key="item.value" |
|||
:label="item.label" |
|||
:value="item.value"> |
|||
</el-option> |
|||
</el-select> |
|||
</el-form-item> |
|||
<el-form-item label="网格员" |
|||
prop="createdUser"> |
|||
<el-input v-model="dataForm.createdUser" |
|||
size="small" |
|||
clearable |
|||
placeholder="请输入网格员姓名"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="联系电话" |
|||
prop="createdUser"> |
|||
<el-input v-model="dataForm.mobile" |
|||
size="small" |
|||
clearable |
|||
placeholder="请输入联系电话"> |
|||
</el-input> |
|||
</el-form-item> |
|||
<el-form-item label="日志时间" prop="startTime"> |
|||
<el-date-picker v-model="dataForm.startTime" |
|||
type="date" |
|||
:picker-options="pickerBeginDateBefore" |
|||
value-format="yyyy-MM-dd" |
|||
format="yyyy-MM-dd" |
|||
placeholder="选择日期" |
|||
style="width:200px"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item label="至" prop="endTime"> |
|||
<el-date-picker v-model="dataForm.endTime" |
|||
type="date" |
|||
:picker-options="pickerBeginDateAfter" |
|||
value-format="yyyy-MM-dd" |
|||
format="yyyy-MM-dd" |
|||
placeholder="选择日期" |
|||
style="width:200px"> |
|||
</el-date-picker> |
|||
</el-form-item> |
|||
<el-form-item> |
|||
<el-button type="primary" size="small" class="diy-button--search" @click="getDataList()">{{ $t('query') }}</el-button> |
|||
|
|||
<el-button style="margin-left:10px" |
|||
size="small" |
|||
type="primary" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> |
|||
</el-form-item> |
|||
<!-- <el-button style="margin-left:10px" |
|||
size="small" |
|||
type="primary" |
|||
class="diy-button--reset" |
|||
@click="resetSearch">重置</el-button> --> |
|||
<!-- <el-form-item>--> |
|||
<!-- <el-button type="primary" size="small" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>--> |
|||
<!-- </el-form-item>--> |
|||
<!-- <el-form-item> |
|||
<el-button size="small" style="margin-left:10px" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button> |
|||
</el-form-item> --> |
|||
</el-form> |
|||
</el-card> |
|||
<el-card class="resi-card-table"> |
|||
<div class="resi-row-btn"> |
|||
<el-button |
|||
class="diy-button--add" |
|||
size="small" |
|||
@click="addOrUpdateHandle()" |
|||
>{{ $t('add') }}</el-button |
|||
> |
|||
<el-button @click="exportHandle()" class="diy-button--reset" size="small" |
|||
>导出</el-button |
|||
> |
|||
<el-button size="small" type="danger" @click="deleteHandle()">批量删除</el-button> |
|||
</div> |
|||
<el-table class="resi-table" v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%"> |
|||
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column> |
|||
<el-table-column prop="title" label="标题" header-align="center" align="center"></el-table-column> |
|||
<el-table-column prop="logType" label="日志类型" :formatter="categoryCodeFormatter" header-align="center" align="center"></el-table-column> |
|||
<el-table-column prop="logDate" label="日志时间" header-align="center" align="center"></el-table-column> |
|||
<el-table-column prop="createdUser" label="网格员" header-align="center" align="center"></el-table-column> |
|||
<el-table-column prop="mobile" label="联系电话" header-align="center" align="center"></el-table-column> |
|||
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150"> |
|||
<template slot-scope="scope"> |
|||
<el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)"> {{ userId == scope.row.createdBy ? $t('update') : '查看' }}</el-button> |
|||
<el-button type="text" v-if="userId == scope.row.createdBy" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button> |
|||
</template> |
|||
</el-table-column> |
|||
</el-table> |
|||
<el-pagination |
|||
:current-page="page" |
|||
:page-sizes="[10, 20, 50, 100]" |
|||
:page-size="limit" |
|||
:total="total" |
|||
layout="total, sizes, prev, pager, next, jumper" |
|||
@size-change="pageSizeChangeHandle" |
|||
@current-change="pageCurrentChangeHandle"> |
|||
</el-pagination> |
|||
</el-card> |
|||
<!-- 弹窗, 新增 / 修改 --> |
|||
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update> |
|||
</div> |
|||
</el-card> |
|||
</template> |
|||
|
|||
<script> |
|||
import mixinViewModule from '@/mixins/view-module' |
|||
import AddOrUpdate from './icworklog-add-or-update' |
|||
import { requestPost } from "@/js/dai/request"; |
|||
export default { |
|||
mixins: [mixinViewModule], |
|||
data () { |
|||
return { |
|||
mixinViewModuleOptions: { |
|||
getDataListURL: '/gov/org/icWorkLog/page', |
|||
getDataListIsPage: true, |
|||
deleteURL: '/gov/org/icWorkLog/delete', |
|||
deleteIsBatch: true, |
|||
exportURL: '/gov/org/icWorkLog/export' |
|||
}, |
|||
userId: this.$store.state.user.id, |
|||
agencyIdArray:[], |
|||
orgOptions: [], |
|||
logTypeArr: [], |
|||
orgOptionProps:{ |
|||
multiple: false, |
|||
value: 'agencyId', |
|||
label: 'agencyName', |
|||
children: 'subAgencyList', |
|||
checkStrictly: true |
|||
}, |
|||
dataForm: { |
|||
id: '' |
|||
} |
|||
} |
|||
}, |
|||
components: { |
|||
AddOrUpdate |
|||
}, |
|||
created () { |
|||
this.getGridList() |
|||
this.getCategrayList() |
|||
}, |
|||
methods: { |
|||
getGridList() { |
|||
const { user } = this.$store.state |
|||
this.$http |
|||
.post('/gov/org/customeragency/agencygridtree', {}) |
|||
.then(({ data: res }) => { |
|||
if (res.code !== 0) { |
|||
return this.$message.error(res.msg) |
|||
} else { |
|||
console.log('获取组织树成功', res.data) |
|||
this.orgOptions=[] |
|||
this.orgOptions .push( res.data) |
|||
} |
|||
}) |
|||
.catch(() => { |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
exportHandle () { |
|||
const url = this.mixinViewModuleOptions.exportURL |
|||
this.$http({ |
|||
method: 'GET', |
|||
url, |
|||
responseType: 'blob', |
|||
params: this.dataForm |
|||
}).then(res => { |
|||
// this.download(res.data, title + '.xls') |
|||
if (res.headers["content-disposition"]) { |
|||
let fileName = window.decodeURI(res.headers["content-disposition"].split(";")[1].split("=")[1]) |
|||
console.log('filename', fileName) |
|||
let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' }) |
|||
var url = window.URL.createObjectURL(blob) |
|||
var aLink = document.createElement('a') |
|||
aLink.style.display = 'none' |
|||
aLink.href = url |
|||
aLink.setAttribute('download', fileName) |
|||
document.body.appendChild(aLink) |
|||
aLink.click() |
|||
document.body.removeChild(aLink) //下载完成移除元素 |
|||
window.URL.revokeObjectURL(url) //释放掉blob对象 |
|||
} else this.$message.error('下载失败') |
|||
}).catch(err => { |
|||
console.log('err', err) |
|||
return this.$message.error('网络错误') |
|||
}) |
|||
}, |
|||
//重置搜索条件 |
|||
resetSearch () { |
|||
this.agencyIdArray = [] |
|||
this.dataForm = { |
|||
agencyId: '', |
|||
gridId: '', |
|||
logType: '', |
|||
createdUser: '', |
|||
startTime: '', |
|||
endTime: '', |
|||
mobile: '' |
|||
} |
|||
|
|||
this.getDataList() |
|||
}, |
|||
// 字典 |
|||
async getCategrayList () { |
|||
console.log(localStorage.getItem('token')) |
|||
const url = "/sys/dict/data/dictlist" |
|||
|
|||
let params = { |
|||
dictType: 'log_type' |
|||
} |
|||
|
|||
const { data, code, msg } = await requestPost(url, params) |
|||
|
|||
if (code === 0) { |
|||
this.logTypeArr = data |
|||
} else { |
|||
this.$message.error(msg) |
|||
} |
|||
}, |
|||
categoryCodeFormatter (row) { |
|||
let ca = '' |
|||
this.logTypeArr.forEach((tagCategory) => { |
|||
if (tagCategory.value === row.logType) { |
|||
ca = tagCategory.label |
|||
} |
|||
}) |
|||
return ca |
|||
}, |
|||
handleChangeAgency(val) { |
|||
let obj = this.$refs["myCascader"].getCheckedNodes()[0].data |
|||
|
|||
if (obj) { |
|||
if(obj.level === 'grid'){ |
|||
this.dataForm.gridId = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : ''; |
|||
this.dataForm.agencyId='' |
|||
}else{ |
|||
this.dataForm.agencyId = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : ''; |
|||
this.dataForm.gridId = '' |
|||
} |
|||
|
|||
}else{ |
|||
this.dataForm.agencyId='' |
|||
this.dataForm.gridId = '' |
|||
} |
|||
}, |
|||
pickerBeginDateBefore: { |
|||
disabledDate: (time) => { |
|||
let beginDateVal = this.dataForm.endTime |
|||
if (beginDateVal) { |
|||
return time.getTime() > new Date(beginDateVal + ' 00:00:00').getTime() |
|||
} |
|||
} |
|||
}, |
|||
pickerBeginDateAfter: { |
|||
disabledDate: (time) => { |
|||
let EndDateVal = this.dataForm.startTime |
|||
if (EndDateVal) { |
|||
return time.getTime() < new Date(EndDateVal + ' 00:00:00').getTime() |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
<style lang="scss" scoped> |
|||
@import "@/assets/scss/buttonstyle.scss"; |
|||
|
|||
.resi-container .resi-card-table { |
|||
::v-deep .el-table th { |
|||
color: #fff; |
|||
background-color: rgba(33, 149, 254, 1); |
|||
// border-right: 1px solid rgba(33, 149, 254, 1); |
|||
} |
|||
} |
|||
.resi-table { |
|||
::v-deep .el-button--text { |
|||
text-decoration: underline; |
|||
} |
|||
::v-deep .btn-color-del { |
|||
margin-left: 10px; |
|||
color: rgba(213, 16, 16, 1); |
|||
} |
|||
::v-deep .btn-color-edit { |
|||
color: rgba(0, 167, 169, 1); |
|||
} |
|||
} |
|||
|
|||
.resi-row-btn { |
|||
margin-bottom: 13px; |
|||
.upload-btn { |
|||
display: inline-block; |
|||
margin: 0 10px; |
|||
} |
|||
} |
|||
|
|||
.form-wr { |
|||
.input-width { |
|||
width: 260px; |
|||
|
|||
} |
|||
.input-width-textarea { |
|||
width: 500px; |
|||
} |
|||
.imsg-list { |
|||
display: flex; |
|||
align-items: center; |
|||
.imgs-item { |
|||
position: relative; |
|||
margin-right: 10px; |
|||
.el-icon-delete { |
|||
position: absolute; |
|||
top: 0; |
|||
right: 0; |
|||
font-size: 18px; |
|||
color: red; |
|||
z-index: 3; |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
.div-content { |
|||
width: 100%; |
|||
overflow: hidden; |
|||
text-overflow: ellipsis; |
|||
white-space: nowrap; |
|||
} |
|||
</style> |
|||
|
|||
<style> |
|||
.el-table .warning-row { |
|||
background: #ffe168; |
|||
} |
|||
</style> |
Loading…
Reference in new issue