Browse Source

Merge branch 'yantai_master' of http://git.elinkit.com.cn:7070/r/epmet-oper-gov into yantai_master

dev-烟台0301
jiangyy 3 years ago
parent
commit
8fd6ea164e
  1. BIN
      src/assets/img/shuju/command/arrow-right-green.png
  2. BIN
      src/assets/img/shuju/command/ico2/IS_XJC.png
  3. BIN
      src/assets/img/shuju/command/ico3/IS_XJC.png
  4. 32
      src/assets/scss/modules/shequzhili/project-info.scss
  5. 13
      src/assets/scss/modules/visual/command.scss
  6. 293
      src/views/modules/base/collect.vue
  7. 9
      src/views/modules/base/community/communityForm.vue
  8. 34
      src/views/modules/base/community/communityTable.vue
  9. 9
      src/views/modules/base/diyInfo.vue
  10. 14
      src/views/modules/base/organization/organization.vue
  11. 425
      src/views/modules/base/roomForm.vue
  12. 246
      src/views/modules/base/visitor.vue
  13. 6
      src/views/modules/plugins/change/resideath.vue
  14. 4
      src/views/modules/plugins/visit/visitvisitor.vue
  15. 5
      src/views/modules/shequzhili/event/cpts/event-info.vue
  16. 100
      src/views/modules/shequzhili/event/eventList.vue
  17. 466
      src/views/modules/shequzhili/statics/index.vue
  18. 355
      src/views/modules/shequzhili/xiangmu/cpts/project-info.vue
  19. 17
      src/views/modules/shequzhili/xiangmu/xiangmu-ling.vue
  20. 6
      src/views/modules/visual/command/cpts/eventInfo.vue
  21. 73
      src/views/modules/visual/command/cpts/map.vue
  22. 167
      src/views/modules/visual/command/cpts/popup.vue
  23. 22
      src/views/modules/visual/command/cpts/qsydw.vue
  24. 9
      src/views/modules/visual/command/cpts/sidemenu-left.vue
  25. 1
      src/views/modules/visual/command/cpts/sidemenu.vue
  26. 309
      src/views/modules/visual/command/cpts/yantai-sidemenu1.vue
  27. 309
      src/views/modules/visual/command/cpts/yantai-sidemenu2.vue
  28. 112
      src/views/modules/visual/command/index.vue
  29. 8
      src/views/modules/visual/communityGovern/shijianchuli/event-info.vue
  30. 9
      src/views/modules/visual/cpts/map/index.vue
  31. 16
      src/views/modules/visual/shundeju/controlCount.vue
  32. 404
      src/views/modules/worklog/icworklog-add-or-update.vue
  33. 362
      src/views/modules/worklog/icworklog.vue

BIN
src/assets/img/shuju/command/arrow-right-green.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B

BIN
src/assets/img/shuju/command/ico2/IS_XJC.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 B

BIN
src/assets/img/shuju/command/ico3/IS_XJC.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

32
src/assets/scss/modules/shequzhili/project-info.scss

@ -418,3 +418,35 @@
box-shadow:none
}
.process-form{
margin-top:20px;
.process-title {
margin-bottom: 25px;
margin-left: -5px;
font-size: 16px;
font-family: PingFang SC;
font-weight: bold;
color: #333;
line-height: 18px;
}
.process-title-vis{
color: #fff;
}
}
.form-item::v-deep .el-form-item__label {
color: #fff;
}
.form-item {
.el-radio {
color: #fff;
}
.el-checkbox {
color: #fff;
}
}

13
src/assets/scss/modules/visual/command.scss

@ -63,7 +63,7 @@
.m-search {
position: absolute;
z-index: 200;
z-index: 4;
left: 0;
right: 0;
top: 30px;
@ -193,6 +193,13 @@
width: 360px;
height: calc(825px - 15px);
.menu {
position: relative;
width: 100%;
margin-bottom: 20px;
// height: calc((825px - 15px - 20px) / 2);
}
.title {
margin-bottom: 10px;
padding: 4px 0;
@ -212,9 +219,9 @@
}
}
.list {
.wrap {
margin-right: -8px;
height: calc(825px - 120px);
height: calc(825px - 45px);
overflow-y: auto;
overflow-x: hidden;
@include scrollBar;

293
src/views/modules/base/collect.vue

@ -7,7 +7,7 @@
:model="fmData"
class="demo-form-inline"
>
<el-form-item
<!-- <el-form-item
v-if="communityList.length > 0"
label="所在社区"
prop="orgId"
@ -27,7 +27,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="居住地址" prop="address">
<el-input
v-model="fmData.address"
@ -38,6 +38,16 @@
>
</el-input>
</el-form-item>
<el-form-item label="户籍地址" prop="domicilePlace">
<el-input
v-model="fmData.domicilePlace"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入"
>
</el-input>
</el-form-item>
<el-form-item label="填写时间" prop="startTime">
<el-date-picker
v-model="timeRange"
@ -51,16 +61,6 @@
>
</el-date-picker>
</el-form-item>
<el-form-item label="户籍地址" prop="domicilePlace">
<el-input
v-model="fmData.domicilePlace"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入"
>
</el-input>
</el-form-item>
<el-form-item>
<el-button
class="diy-button--search"
@ -91,7 +91,7 @@
:height="tableHeight"
:span-method="arraySpanMethod"
>
<el-table-column label="序号" prop="desc" align="center" width="50" />
<el-table-column label="序号" prop="desc" align="center" width="50"/>
<el-table-column
prop="houseHolderName"
width="100"
@ -105,7 +105,12 @@
min-width="140"
label="居住地址"
:show-overflow-tooltip="true"
/>
>
<template slot-scope="scope">
<span v-if="scope.row.homeId == 'other'" class="badge">房屋缺失</span>
<span>{{scope.row.address}}</span>
</template>
</el-table-column>
<el-table-column
prop="houseType"
align="center"
@ -146,6 +151,17 @@
label="成员手机号"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="relationship"
min-width="120"
align="center"
label="与户主关系"
:show-overflow-tooltip="true"
>
<template slot-scope="scope">
<span>{{getRelationshipName(scope.row.relationship)}}</span>
</template>
</el-table-column>
<el-table-column
prop="heSuanCount"
width="120"
@ -169,14 +185,14 @@
prop="domicilePlace"
min-width="140"
align="center"
label="户籍所在地"
label="户籍地"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="workPlace"
min-width="120"
align="center"
label="单位或学校 "
label="单位名称"
:show-overflow-tooltip="true"
/>
<el-table-column
@ -186,15 +202,55 @@
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column label="操作" align="center" width="100">
<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-column
prop="checkState"
min-width="120"
align="center"
label="状态"
:show-overflow-tooltip="true"
fixed="right"
>
<template slot-scope="scope">
<span v-if="scope.row.checkState === '0'">未审核</span>
<span v-else-if="scope.row.checkState === '1'">未通过</span>
<span v-else-if="scope.row.checkState === '2'">已通过</span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="100" fixed="right">
<template slot-scope="scope">
<el-button
type="text"
class="div-table-button--detail"
size="small"
@click="handleWatch(scope.row)"
@click="handleWatch('look', scope.row)"
>查看</el-button
>
<el-button
type="text"
class="div-table-button--detail"
size="small"
v-if="scope.row.agencyId == agencyId && scope.row.checkState === '0'"
@click="handleWatch('check', scope.row)"
>审核</el-button
>
</template>
</el-table-column>
</el-table>
@ -248,7 +304,7 @@
</el-form-item>
<div>
<el-form-item
label="自有/租住:"
label="房屋状态:"
prop="houseType"
label-width="150px"
>
@ -274,7 +330,7 @@
border
style="width: 1060px; margin: 20px"
class="resi-table"
:height="tableHeight"
:height="dialogTableHeight"
>
<el-table-column
label="序号"
@ -343,9 +399,44 @@
:show-overflow-tooltip="true"
>
</el-table-column>
<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 class="resi-btns">
<el-button @click="formShow = false">{{ $t('cancel') }}</el-button>
<el-button v-if="dialogType == 'check'" type="danger" @click="checkHandle('1')">{{ $t('checkBTGBtn') }}</el-button>
<el-button v-if="dialogType == 'check'" type="danger" @click="showAddHouse">{{ $t('checkTGBtn') }}</el-button>
</div>
</div>
</el-dialog>
<!-- 新增房屋弹出框 -->
<el-dialog :visible.sync="addHouseShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
title="新增房屋"
width="900px"
top="5vh"
class="dialog-h"
@closed="addHouseShow = false">
<room-form ref="ref_form"
@dialogCancle="addHouseShow = false"
@dialogOk="roomFormOk"></room-form>
</el-dialog>
</div>
</template>
@ -354,10 +445,12 @@ import { requestPost } from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick";
import { mapGetters } from "vuex";
import axios from "axios";
import roomForm from './roomForm'
export default {
data() {
return {
agencyId: '',
openSearch: false,
formShow: false,
@ -381,7 +474,13 @@ export default {
spanIndex: [], //
importBtnTitle: "导入",
importLoading: false,
};
addHouseShow: false,
dialogType: 'look', // checklook
relationshipOptions: []
}
},
components: {
roomForm
},
computed: {
...mapGetters(["clientHeight", "iframeHeight"]),
@ -390,6 +489,11 @@ export default {
const _h = this.clientHeight - 360;
return this.$store.state.inIframe ? h : _h;
},
dialogTableHeight() {
const h = this.clientHeight - 460 + this.iframeHeigh;
const _h = this.clientHeight - 460;
return this.$store.state.inIframe ? h : _h;
},
},
watch: {
timeRange(val) {
@ -402,11 +506,34 @@ export default {
}
},
},
mounted() {
this.getcommunityList();
this.getTableData();
created () {
this.agencyId = localStorage.getItem('agencyId')
},
mounted () {
// this.getcommunityList();
this.getDictList()
this.getTableData()
},
methods: {
async getDictList() {
const url = "/sys/dict/data/relationship"
const { data, code, msg } = await requestPost(url, { formCode: "resi_base_info" })
if (code === 0) {
this.relationshipOptions = [ ...data ]
} else {
this.$message.success("操作失败!")
}
},
getRelationshipName (value) {
let label = ''
this.relationshipOptions.forEach(item => {
if (item.value == value) {
label = item.label
}
})
return label
},
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
// console.log('row-----r', row)
// console.log('column-----c', column)
@ -415,7 +542,9 @@ export default {
columnIndex === 1 ||
columnIndex === 2 ||
columnIndex === 3 ||
columnIndex === 4
columnIndex === 4 ||
columnIndex === 15 ||
columnIndex === 16
) {
let index = this.spanIndex.findIndex(
(item) => item.firstIndex === rowIndex
@ -493,7 +622,8 @@ export default {
this.handleSearch();
},
async handleWatch(row) {
async handleWatch(type, row) {
this.dialogType = type
// this.formShow = true;
await nextTick();
const url = "/epmetuser/icresicollect/detail";
@ -506,7 +636,7 @@ export default {
console.log("data----de", data);
this.dataForm = {
...data,
houseType: data.houseType == "1" ? "自有" : "租住",
houseType: data.houseType == '1' ? '出租' : data.houseType == '2' ? '闲置' : data.houseType == '3' ? '未售出' : '自住' // 1 0 2 3
};
// this.getTableData();
this.formShow = true;
@ -552,33 +682,33 @@ export default {
}
},
async getTableData() {
const url = "/epmetuser/icresicollect/list";
const { pageSize, pageNo, fmData } = this;
const url = "/epmetuser/icresicollect/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;
let _i = 0;
let arr = [];
console.log("列表请求成功!!!!!!!!!!!!!!")
this.total = data.total || 0
let _i = 0
let arr = []
this.spanIndex =
data.list &&
data.list.map((item, index) => {
if (index == 0) _i = 0;
if (index == 0) _i = 0
else _i = _i + data.list[index - 1].list.length;
arr.push(_i);
console.log("_i-----", _i, arr);
arr.push(_i)
// console.log("_i-----", _i, arr)
// if (index === data.list.length - 1) firstIndex = _i - item.list.length
return {
firstIndex: _i,
len: item.list.length,
};
});
this.tableData = data.list && this.formatArr(data.list);
console.log("tableData----0", this.spanIndex);
}
})
this.tableData = data.list && this.formatArr(data.list)
console.log("tableData----0", this.spanIndex)
} else {
}
},
@ -608,6 +738,80 @@ export default {
});
return res;
},
showAddHouse () {
if (this.dataForm.homeId == 'other') {
this.addHouseShow = true
this.$nextTick(() => {
this.$refs.ref_form.initForm('add', null, this.dataForm.id)
})
} else {
this.checkHandle('2')
}
},
//
checkHandle (type) {
const params = {
id: this.dataForm.id,
checkState: type, // 0- 1- 2-
checkReason: '',
buildingUnitId: this.dataForm.buildingUnitId || '',
doorName: this.dataForm.doorName || ''
}
if (type == '1') {
this.$prompt('请输入不通过的原因', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
}).then(({ value }) => {
params.checkReason = value
this.$http.post('/epmetuser/icresicollect/collectCheck', params).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.formShow = false
this.getTableData()
//
// this.fileJurisdiction(params)
}).catch(() => {})
}).catch(() => {
//
})
} else {
this.$http.post('/epmetuser/icresicollect/collectCheck', params).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.addHouseShow = false
this.formShow = false
this.getTableData()
//
// this.fileJurisdiction(params)
}).catch(() => {})
}
},
//
fileJurisdiction (params) {
this.$http.post('/pli/power/rentContractInfo/send', params).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.disabledBtn = false
this.checkVisible = false
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
},
roomFormOk (e) {
this.dataForm.buildingUnitId = e.buildingUnitId
this.dataForm.doorName = e.doorName
this.checkHandle('2')
}
},
};
</script>
@ -650,4 +854,11 @@ export default {
.wd50 {
min-width: 200px;
}
.badge {
display: block;
color: #F1F2E5;
background-color: #D7000F;
border-radius: 12px;
width: 70px;
}
</style>

9
src/views/modules/base/community/communityForm.vue

@ -56,6 +56,15 @@
size="small"
@click="handleCode">生成</el-button>
</el-form-item>
<div v-if="dataForm.qrcodeUrl"
style="display: flex;flex-direction: column;">
<img style="margin-left: 70px;width: 200px;"
:src="dataForm.qrcodeUrl">
<a style="margin-left: 80px"
:href="dataForm.qrcodeUrl"
target="_blank">下载</a>
</div>
<el-form-item label="关联物业"
prop="propertyId"
label-width="150px"

34
src/views/modules/base/community/communityTable.vue

@ -8,6 +8,12 @@
size="small"
:loading="yhymLoading"
@click="handleYhymInfo">补全一房一码信息</el-button>
<el-button v-if="showYhymInfo"
style=""
class="diy-button--export"
size="small"
:loading="yhymLoading"
@click="createBatchNeiQrUrl">补全小程序小区码</el-button>
<el-button style=""
class="diy-button--add"
size="small"
@ -412,6 +418,34 @@ export default {
}
},
//
async createBatchNeiQrUrl () {
this.yhymLoading = true
const url = "/gov/org/neighborhood/createBatchNeiQrUrl"
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.yhymLoading = false
this.$message({
type: "success",
message: "批量生成成功"
});
} else if (code > 8000) {
this.yhymLoading = false
this.$message({
showClose: true,
message: msg,
duration: 0
})
} else {
this.yhymLoading = false
this.$message.error(msg)
}
},
async handleEdit (row) {
this.formTitle = '修改小区'
this.formShow = true

9
src/views/modules/base/diyInfo.vue

@ -6,7 +6,7 @@
<div class="left">
<el-tabs v-model="leftActive" tab-position="left" class="left-h" @tab-click="handleTabsClick">
<el-tab-pane v-for="item in leftList" :key="item.id" :label="item.label" :name="item.id">
<div class="pd10 dialog-h-content scroll-h">
<div class="pd10 check-boxwr scroll-h">
<checkBox v-if="item.queryItemList.length > 0" :ref="'checkbox' + item.id"
:list="item.queryItemList" @change="handleChangeBox" />
</div>
@ -466,6 +466,11 @@ export default {
height: calc(80vh - 120px);
.left {
width: 49%;
height: 100%;
.check-boxwr {
height: calc(80vh - 120px);
overflow: auto;
}
}
.right {
flex-shrink: 0;
@ -498,7 +503,7 @@ export default {
margin-top: 10px;
}
.left-h {
height: 100%;
::v-deep .el-tabs__header.is-left,
::v-deep .el-tabs__nav-wrap.is-left::after {
height: calc(80vh - 120px);

14
src/views/modules/base/organization/organization.vue

@ -794,6 +794,11 @@
</el-select>
</el-form-item>
<!-- 排序 -->
<el-form-item label="排序">
<el-input-number v-model="modifyGridFrom.gridSort" :min="1" label="排序"></el-input-number>
</el-form-item>
<el-form-item label="负责人">
<el-input v-model="modifyGridFrom.contacts"
placeholder="请输入负责人名字"></el-input>
@ -1009,7 +1014,9 @@ export default {
agencyId: '',
gridType: '',
manageDistrict: '',
griId: ''
griId: '',
//
gridSort: 0,
},
judgeOrgInfoLevel: [],
keyWords: '',
@ -1597,6 +1604,7 @@ export default {
this.modifyGridFrom.gridType = '',
this.modifyGridFrom.manageDistrict = '',
this.modifyGridFrom.griId = ''
},
//
cancel () {
@ -2355,6 +2363,7 @@ export default {
this.modifyGridFrom.gridType = data.gridType
this.modifyGridFrom.manageDistrict = data.manageDistrict
this.modifyGridFrom.griId = data.grid
this.modifyGridFrom.gridSort = data.gridSort
} else {
this.$message.error(msg)
}
@ -2424,7 +2433,8 @@ export default {
contacts: this.modifyGridFrom.contacts,
mobile: this.modifyGridFrom.mobile,
code: this.modifyGridFrom.code,
gridType: this.modifyGridFrom.gridType
gridType: this.modifyGridFrom.gridType,
sort:this.modifyGridFrom.gridSort
}
const { data, code, msg } = await requestPost(url, params)

425
src/views/modules/base/roomForm.vue

@ -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', // addeditdetail
btnDisable: false,
unitList: [],
houseId: '', //ID
houseType: '1',
purpose: '1',
rentFlag: 0,
dataForm: {
neighborHoodId: '', // ID
buildingId: '',//ID
buildingUnitId: '',//ID
doorName: '',//
houseType: '',//
purpose: '',//
rentFlag: 0,//10 12 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)$)/; //1518151817X
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,//10
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>

246
src/views/modules/base/visitor.vue

@ -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>

6
src/views/modules/plugins/change/resideath.vue

@ -86,7 +86,7 @@
<el-button @click="joinBlacklist(scope.row)"
type="text"
size="small"
class="div-table-button--detail">迁入死亡人口</el-button>
class="div-table-button--detail">新增死亡人口</el-button>
<!-- <el-button @click="handleLook(scope.row)"
type="text"
size="small"
@ -261,8 +261,8 @@
:userId="lookInfo.userId"
:gridName="lookInfo.gridName"
@close="handleCancleLook" />
<el-dialog title="迁入死亡人口的原因" :visible.sync="blacklistVisible" width="40%">
<textarea v-model="blacklistReason" placeholder="请输入迁入死亡人口的原因" class="blacklist-reason"></textarea>
<el-dialog title="新增死亡人口的原因" :visible.sync="blacklistVisible" width="40%">
<textarea v-model="blacklistReason" placeholder="请输入新增死亡人口的原因" class="blacklist-reason"></textarea>
<div>
<br/>
</div>

4
src/views/modules/plugins/visit/visitvisitor.vue

@ -106,12 +106,12 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getDataList()">{{ $t('query') }}</el-button>
<el-button type="primary" size="small" @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="resi-card-table">
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%">
<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="name" label="姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="idCard" label="身份证" header-align="center" align="center"></el-table-column>

5
src/views/modules/shequzhili/event/cpts/event-info.vue

@ -183,10 +183,8 @@
</div>
</div>
</div>
</el-card>
</div>
</div>
<div v-if="pageTypeCopy == 'project'">
@ -213,10 +211,7 @@ import { Loading } from "element-ui"; // 引入Loading服务
import foldText from "@/views/components/foldText";
import projectInfoOrigin from "../../xiangmu/cpts/project-info";
import demandInfoOrigin from "@/views/modules/communityService/measure/info";
import dateFormat from "dai-js/tools/dateFormat";
import eventAdd from "./add";
import eventDetail from "./event-detail";
import processForm from "./process-form";

100
src/views/modules/shequzhili/event/eventList.vue

@ -46,7 +46,26 @@
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="事件类型"
prop="firstIdList">
<el-cascader ref="cascaderEvent" v-model="eventTypeCheck" :options="cateOptions"
collapse-tags
:show-all-levels="false"
:props="{
multiple: true,
checkStrictly: false,
emitPath: false,
children:'subCategory',
label:'name',
value:'id'
}" clearable class="item_width_2" @change="handleEventType" />
<!-- <template slot-scope="{ node, data }">
<div @click="cascaderClick(node, data)">
<span>{{ data.name }}</span>
</div>
</template>
</el-cascader> -->
</el-form-item>
<el-form-item label="报事人"
prop="name">
<el-input v-model="formData.name"
@ -158,7 +177,17 @@
label="所属网格"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column
prop="categoryName"
label="事件类型"
min-width="140"
align="center"
:show-overflow-tooltip="true"
/>
<!-- <template slot-scope="scope">
{{ scope.row.firstName + '-' + scope.row.secondName }}
</template>
</el-table-column> -->
<el-table-column prop="eventContent"
label="事件内容"
align="center"
@ -419,8 +448,12 @@ export default {
startTime: '',
endTime: '',
status: '',
firstIdList: [],
secondIdList: [],
},
cateOptions: [],
eventTypeCheck: [],
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
@ -465,8 +498,29 @@ export default {
this.agencyId = this.user.agencyId
this.loadGrid();
this.getTableData();
this.getCateOptions()
},
methods: {
handleEventType(val) {
// console.log('val-----eee', val)
console.log('nodes---', this.$refs.cascaderEvent.getCheckedNodes())
const nodes = this.$refs.cascaderEvent.getCheckedNodes()
this.formData.firstIdList = []
this.formData.secondIdList = []
let level1 = nodes.filter(item => item.level === 1)
let level2 = nodes.filter(item => item.level === 2)
console.log('level2----1', level2)
level1.forEach(item => {
console.log('level2----2', level2)
if (item.hasChildren) {
for (let i = level2.length - 1; i >= 0; i--) {
if (level2[i].parent.value === item.value) level2.splice(i, 1)
}
}
})
this.formData.firstIdList = level1.map(item => item.value)
this.formData.secondIdList = level2.map(item => item.value)
},
handleSelectionChange (val) {
this.multipleSelection = [];
val.forEach(element => {
@ -692,6 +746,23 @@ export default {
this.$message.error(msg);
}
},
async getCateOptions() {
const url = "/gov/issue/issueprojectcategorydict/list";
const { data, code, msg } = await requestPost(url, {});
if (code === 0) {
// this.cateOptions = data.map((item) => {
// item.subCategory.forEach((subitem) => {
// delete subitem.subCategory;
// });
// return item;
// });
this.cateOptions = this.deepTree(data, 'subCategory')
} else {
this.$message.error(msg);
}
},
handleSizeChange (val) {
@ -715,12 +786,27 @@ export default {
startTime: '',
endTime: '',
status: '',
firstIdList: [],
secondIdList: [],
}
this.eventTypeCheck = []
// this.pageNo = 1
this.pageNo = 1
this.getTableData();
// this.loadTable()
},
deepTree(arr, child) {
if (Array.isArray(arr) && arr.length > 0) {
return arr.map(item => {
// if (child === 'subAgencyList') item.value = item.orgType + '-' + item.orgId
return {
...item,
[child]: item[child] && item[child].length > 0 && this.deepTree(item[child], child) || null
}
})
}
}
},
};
</script>
@ -729,4 +815,10 @@ export default {
@import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.div_search {
.item_width_2 {
width: 200px;
}
}
</style>

466
src/views/modules/shequzhili/statics/index.vue

@ -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>

355
src/views/modules/shequzhili/xiangmu/cpts/project-info.vue

@ -26,9 +26,17 @@
</div>
<div :class="['info-prop',{'info-prop-vis':source==='visiual'}]"
v-if="projectInfo.departmentNameList.length > 0">
v-if="projectInfo.departmentList.length > 0">
<span class="info-title-2">当前处理部门</span>
<span>{{ projectInfo.departmentNameList.join("、") }}</span>
<div class="div_depart">
<div v-for="(item,index) in projectInfo.departmentList"
:key="index"
class="div_depart">
<span>{{item.departmentName+'('+ item.staffList.join("、")+')' }}</span>
</div>
</div>
</div>
<div :class="['info-prop',{'info-prop-vis':source==='visiual'}]"
@ -173,64 +181,70 @@
</div>
</el-card>
<el-card :class="{'box-card':source==='visiual'}"
v-if="projectInfo.processable && projectInfo.projectStatus == 'pending'">
<h3>处理</h3>
<div class="m-fm">
<el-form ref="fm"
:inline="false"
:model="fmData"
:rules="dataRule"
label-position="left"
label-width="100px">
<el-form-item label="处理方式:"
prop="operateType">
<el-radio-group v-model="fmData.operateType">
<el-radio label="dispose">处理/响应</el-radio>
<el-radio label="close">结案</el-radio>
<el-radio label="turn">转其他机关/科室</el-radio>
<el-radio label="back"
v-if="projectInfo.returnable">退回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="您的身份:"
prop="projectStaffId"
v-if="myDepartmentList.length > 1">
<el-select v-model.trim="fmData.projectStaffId"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in myDepartmentList"
:key="item.projectStaffId"
:label="item.departmentName"
:value="item.projectStaffId">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="fmData.operateType == 'turn'"
label="处理部门:"
prop="staffList">
<el-popover placement="bottom"
width="400"
height="400"
v-model="visibleStaffPanel">
<div class="f">
<select-staff @confirm="(ret) => (fmData.staffList = ret)"
@close="visibleStaffPanel = false" />
</div>
<div slot="reference">
<a v-if="fmData.staffList.length == 0"
style="cursor: pointer">点击选择</a>
<a v-else
style="cursor: pointer">已选 {{ fmData.staffList.length }} </a>
</div>
</el-popover>
</el-form-item>
<!-- <el-form-item v-if="fmData.operateType != 'back'"
<div class="process-form">
<el-card :class="{'box-card':source==='visiual'}"
v-if="projectInfo.processable && projectInfo.projectStatus == 'pending'">
<div :class="['process-title',{'process-title-vis':source==='visiual'}]">处理</div>
<div class="m-fm">
<div :class="{'visiual-form':source==='visiual'}">
<el-form ref="fm"
:inline="false"
:model="fmData"
:rules="dataRule"
label-position="left"
label-width="100px">
<el-form-item label="处理方式:"
:class="{'form-item':source==='visiual'}"
prop="operateType">
<el-radio-group v-model="fmData.operateType">
<el-radio label="dispose">处理/响应</el-radio>
<el-radio label="close">结案</el-radio>
<el-radio label="turn">转其他机关/科室</el-radio>
<el-radio label="back"
v-if="projectInfo.returnable">退回</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="您的身份:"
:class="{'form-item':source==='visiual'}"
prop="projectStaffId"
v-if="myDepartmentList.length > 1">
<el-select v-model.trim="fmData.projectStaffId"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in myDepartmentList"
:key="item.projectStaffId"
:label="item.departmentName"
:value="item.projectStaffId">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="fmData.operateType == 'turn'"
label="处理部门:"
:class="{'form-item':source==='visiual'}"
prop="staffList">
<el-popover placement="bottom"
width="400"
height="400"
v-model="visibleStaffPanel">
<div class="f">
<select-staff @confirm="(ret) => (fmData.staffList = ret)"
@close="visibleStaffPanel = false" />
</div>
<div slot="reference">
<a v-if="fmData.staffList.length == 0"
style="cursor: pointer">点击选择</a>
<a v-else
style="cursor: pointer">已选 {{ fmData.staffList.length }} </a>
</div>
</el-popover>
</el-form-item>
<!-- <el-form-item v-if="fmData.operateType != 'back'"
label="协办单位:"
:class="{'form-item':source==='visiual'}"
prop="assistanceUnitIndex">
<el-select v-model.trim="fmData.assistanceUnitIndex"
placeholder="请选择"
@ -243,79 +257,95 @@
</el-select>
</el-form-item> -->
<el-form-item v-if="fmData.operateType == 'back'"
label="退回到:"
prop="projectProcessId">
<el-select v-model.trim="fmData.projectProcessId"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in returnableList"
:key="item.projectProcessId"
:label="item.processor"
:value="item.projectProcessId">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="fmData.operateType == 'close'"
label="结案状态:"
prop="closedStatus">
<el-select v-model.trim="fmData.closedStatus"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in resolveTypeList"
:key="item.closedStatus"
:label="item.name"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="fmData.operateType == 'close'"
label="结案说明:"
prop="publicReply">
<el-input type="textarea"
:rows="2"
placeholder="您输入的结案说明会向居民公开展示"
v-model="fmData.publicReply">
</el-input>
</el-form-item>
<el-form-item label="内部备注:"
prop="internalRemark">
<el-input type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.internalRemark">
</el-input>
</el-form-item>
<el-form-item v-if="fmData.operateType != 'close'"
label="图片/附件:"
prop="internalFile">
<el-upload class="avatar-uploader"
:action="uploadUrl"
:data="{ customerId: customerId }"
:show-file-list="true"
:on-success="handleImgSuccess"
:on-remove="handleImgRemove"
:before-upload="beforeImgUpload">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item v-if="fmData.operateType != 'close'"
label="公开回复:"
prop="publicReply">
<el-input type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.publicReply">
</el-input>
</el-form-item>
</el-form>
</div>
<!-- <div class="m-btns">
<el-form-item v-if="fmData.operateType == 'back'"
label="退回到:"
:class="{'form-item':source==='visiual'}"
prop="projectProcessId">
<el-select v-model.trim="fmData.projectProcessId"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in returnableList"
:key="item.projectProcessId"
:label="item.processor"
:value="item.projectProcessId">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="fmData.operateType == 'close'"
label="结案状态:"
:class="{'form-item':source==='visiual'}"
prop="closedStatus">
<el-select v-model.trim="fmData.closedStatus"
placeholder="请选择"
class="resi-cell-select">
<el-option v-for="item in resolveTypeList"
:key="item.closedStatus"
:label="item.name"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="fmData.operateType == 'close'"
label="结案说明:"
:class="{'form-item':source==='visiual'}"
prop="publicReply">
<el-input type="textarea"
:rows="2"
placeholder="您输入的结案说明会向居民公开展示"
v-model="fmData.publicReply">
</el-input>
</el-form-item>
<el-form-item label="内部备注:"
:class="{'form-item':source==='visiual'}"
prop="internalRemark">
<el-input type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.internalRemark">
</el-input>
</el-form-item>
<el-form-item
label="图片/附件:"
:class="{'form-item':source==='visiual'}"
prop="internalFile">
<el-upload class="avatar-uploader"
:action="uploadUrl"
:data="{ customerId: customerId }"
:show-file-list="true"
:on-success="handleImgSuccess"
:on-remove="handleImgRemove"
:before-upload="beforeImgUpload">
<i class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item v-if="fmData.operateType == 'dispose'"
label="公开回复:"
:class="{'form-item':source==='visiual'}"
prop="publicReply">
<el-input type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.publicReply">
</el-input>
</el-form-item>
<el-form-item v-if="fmData.operateType != 'close' && fmData.operateType != 'dispose'"
label="公开回复:"
:class="{'form-item':source==='visiual'}"
prop="publicReply">
<el-input type="textarea"
:rows="2"
placeholder="请输入内容"
v-model="fmData.publicReply">
</el-input>
</el-form-item>
</el-form>
</div>
<!-- <div class="m-btns">
<el-button size=""
style="margin-right: 50px"
@click="handleClose">关闭</el-button>
@ -324,24 +354,25 @@
@click="handleSubmit">确定</el-button>
</div> -->
<div v-if="source==='manage'"
class="m-btns ">
<el-button size="small"
@click="handleClose">关闭</el-button>
<el-button size=""
type="danger"
@click="handleSubmit">确定</el-button>
</div>
<div v-else
class="m-btns">
<div class="item_btn"
@click="handleClose">关闭</div>
<div class="item_btn mgl"
@click="handleSubmit">确定</div>
</div>
<div v-if="source==='manage'"
class="m-btns ">
<el-button size="small"
@click="handleClose">关闭</el-button>
<el-button size=""
type="danger"
@click="handleSubmit">确定</el-button>
</div>
<div v-else
class="m-btns">
<div class="item_btn"
@click="handleClose">关闭</div>
<div class="item_btn mgl"
@click="handleSubmit">确定</div>
</el-card>
</div>
</div>
</el-card>
</div>
</div>
<div class="g-right">
<el-card class="m-card"
@ -616,6 +647,10 @@ export default {
obj.internalRemark = [
{ required: true, message: "请填写内部备注", trigger: "blur" },
];
} else if (operateType == "dispose") {
obj.publicReply = [
{ required: true, message: "请填写公开回复", trigger: "blur" },
]
} else {
obj.internalRemark = [
{ required: true, message: "请填写内部备注", trigger: "blur" },
@ -967,6 +1002,17 @@ export default {
if (code === 0) {
this.projectInfo = data;
// this.projectInfo.departmentList = [
// {
// departmentName: "",
// staffList: ["", ""]
// }, {
// departmentName: "",
// staffList: ["", ""]
// }
// ]
if (data.projectStatus == "pending") {
this.getMyDepartmentList();
this.getAssistanceUnitList();
@ -1249,8 +1295,19 @@ export default {
};
</script>
<style lang='scss' scoped>
@import "@/assets/scss/modules/visual/a_customize.scss";
</style>
<style
lang="scss"
src="@/assets/scss/modules/shequzhili/project-info.scss"
scoped
></style>
<style lang="scss" scoped>
.div_depart {
display: flex;
flex-direction: column;
}
</style>

17
src/views/modules/shequzhili/xiangmu/xiangmu-ling.vue

@ -104,10 +104,10 @@
</el-select>
</el-form-item>
<!-- <el-form-item label="解决状态"
<el-form-item label="解决状态"
prop="status">
<el-select class="item_width_2"
v-model="fmData.status"
v-model="fmData.closedStatus"
placeholder="全部"
size="small"
clearable>
@ -118,7 +118,7 @@
</el-option>
</el-select>
</el-form-item> -->
</el-form-item>
<el-form-item label="上报时间"
prop="startTime">
<el-date-picker v-model="fmData.startTime"
@ -282,16 +282,16 @@
<el-table-column prop="address"
align="center"
label="地址 "
label="地址"
:show-overflow-tooltip="true" />
<el-table-column prop="status"
align="center"
label="状态 "
width="70" />
<!-- <el-table-column prop="status"
<el-table-column prop="closedStatus"
align="center"
label="解决状态 "
width="90" /> -->
label="解决状态"
width="90" />
<!-- <template slot-scope="scope">
{{ scope.row.status == 'pending' ? '处理中' : '已结案' }}
</template>
@ -369,7 +369,8 @@ const _form = {
status: '',
firstIdList: [],
secondIdList: [],
staffId: ''
staffId: '',
closedStatus: ''
}
export default {
components: { projectInfo },

6
src/views/modules/visual/command/cpts/eventInfo.vue

@ -30,7 +30,6 @@
<script>
import cptCard from "@/views/modules/visual/cpts/card";
import { requestPost } from "@/js/dai/request";
import eventInfo from "@/views/modules/shequzhili/event/cpts/event-info";
@ -86,10 +85,9 @@ export default {
this.$emit("handleClose");
// this.eventId = ""
},
handleOk() {
this.pageType = "";
// this.eventId = ""
this.pageNo = 1;
this.handleClose();
},
handleEditSuccess() {

73
src/views/modules/visual/command/cpts/map.vue

@ -201,33 +201,35 @@ export default {
const polygon = [
...srcGridData.children
.filter((item) => item.coordinates.length > 0)
.map((item) => ({
type: "Feature",
properties: {
// id: item.id,
// name: item.name,
// level: item.level,
center: [item.longitude, item.latitude],
...item,
dotCount2: 222,
dotCount: gridCountData.find((item2) => item2.id == item.orgId)
? gridCountData.find((item2) => item2.id == item.orgId).total
: "",
},
geometry: {
type: "Polygon",
coordinates: [
item.latitude
? [[item.longitude, item.latitude]]
: spliceIntoChunks(
item.coordinates
.split(",")
.map((item) => parseFloat(item)),
2
).filter((item) => item.length == 2),
],
},
})),
.map((item) => {
let countItem = gridCountData.find(
(item2) => item2.orgId == item.id
);
console.log("countItem", countItem);
return {
type: "Feature",
properties: {
...item,
center: [item.longitude, item.latitude],
dotCount: countItem
? countItem.categoryName + ":" + countItem.total
: "",
},
geometry: {
type: "Polygon",
coordinates: [
item.latitude
? [[item.longitude, item.latitude]]
: spliceIntoChunks(
item.coordinates
.split(",")
.map((item) => parseFloat(item)),
2
).filter((item) => item.length == 2),
],
},
};
}),
];
return { type: "FeatureCollection", features: polygon };
},
@ -497,7 +499,7 @@ export default {
.source(polygonDotData)
.color("name", styleConfig.textColor)
.shape("dotCount", "text")
.size(16)
.size(14)
.style({
textAnchor: "center", // center|left|right|top|bottom|top-left
textOffset: [0, -80], // [, ]
@ -801,13 +803,15 @@ export default {
searchPos(name) {
return new Promise((reslove) => {
window.AMap.plugin("AMap.PlaceSearch", function () {
window.AMap.plugin("AMap.PlaceSearch", () => {
const city = this.$store.state.user.areaCodePath[1] || "全国";
console.log("搜索区域", city);
// Autocomplete
var autoOptions = {
let autoOptions = {
//city
city: "全国",
city,
};
var autoComplete = new window.AMap.PlaceSearch(autoOptions);
let autoComplete = new window.AMap.PlaceSearch(autoOptions);
autoComplete.search(name, function (status, result) {
reslove(result);
});
@ -827,9 +831,12 @@ export default {
/deep/ .l7-popup-content {
background: rgba(#020340, 0.58);
box-shadow: 0 0 20px 3px inset rgba(#22f, 0.1);
}
/deep/ .l7-popup-close-button {
color: #fff;
padding: 4px;
font-size: 36px;
color: rgba(#fff, 0.8);
}
#app {

167
src/views/modules/visual/command/cpts/popup.vue

@ -51,9 +51,10 @@
人员类别
<span>{{ info.resiCategoryNames || "--" }}</span>
</div>
<div class="operate">
<div @click="handleClickBtn('watch-resi')" class="btn">查看更多</div>
<div @click="handleClickBtn('watch-resi')" class="more-btn">更多</div>
<div class="operate">
<div
@click="handleClickBtn('create-demand')"
v-if="info.agencyId == $store.state.user.agencyId"
@ -218,9 +219,7 @@
<span>{{ info.idCard || "--" }}</span>
</div>
<div class="operate">
<div @click="handleClickBtn('watch-event')" class="btn">查看详情</div>
</div>
<div @click="handleClickBtn('watch-event')" class="more-btn">更多</div>
</div>
<div v-if="placeType === 'community_org'">
@ -335,11 +334,7 @@
<span>{{ info.mobile || "--" }}</span>
</div>
<div class="operate">
<div @click="handleClickBtn('watch-xuncha')" class="btn">
查看更多
</div>
</div>
<div @click="handleClickBtn('watch-xuncha')" class="more-btn">更多</div>
</div>
<div v-if="placeType === 'party_unit'">
@ -387,6 +382,27 @@
</div>
<div v-if="placeType === 'grid'">
<div class="info-title">网格信息</div>
<div class="item">
网格名称
<span>{{ info.gridName || "--" }}</span>
</div>
<div class="item">
网格类型
<span>{{ info.gridTypeName || "--" }}</span>
</div>
<div class="item">
联系人
<span>{{ info.contacts || "--" }}</span>
</div>
<div class="item">
联系人电话
<span>{{ info.mobile || "--" }}</span>
</div>
<div class="item">
网格位置
<span>{{ info.centerAddress || "--" }}</span>
</div>
<div class="operate">
<div @click="handleClickBtn('create-service')" class="btn z-yellow">
发起服务
@ -403,7 +419,12 @@
:key="'list' + item.id"
v-for="(item, index) in list"
>
{{ index + 1 }}{{ item.content }}
<div class="item-cnt">{{ index + 1 }}{{ item.content }}</div>
<img
src="@/assets/img/shuju/command/arrow-right-green.png"
alt=""
class="i-arrow"
/>
</div>
</div>
</div>
@ -412,7 +433,7 @@
</template>
<script>
import { requestPost } from "@/js/dai/request";
import { requestPost, requestGet } from "@/js/dai/request";
export default {
name: "popup",
@ -475,7 +496,7 @@ export default {
}
if (placeType === "grid") {
this.info = { ...item };
await this.loadGridInfo(item);
}
if (
@ -507,7 +528,7 @@ export default {
}
if (placeType === "superior_resource") {
//
await this.loadSuperiorResource(item);
await this.loadGridInfo(item);
}
if (placeType === "group_rent") {
//
@ -709,7 +730,7 @@ export default {
}
},
async loadSuperiorResource(info) {
async loadGridInfo(info) {
const url = "/gov/org/icSuperiorResource/detail";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/icSuperiorResource/detail"
@ -783,6 +804,30 @@ export default {
}
},
async loadGridInfo(info) {
const url = "/gov/org/grid/griddetail";
let params = {
gridId: info.id,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.info = {
id: data.grid,
gridId: data.grid,
gridName: data.gridName,
manageDistrict: data.manageDistrict,
mobile: data.mobile,
centerAddress: data.centerAddress,
gridTypeName: data.gridTypeName,
};
} else {
this.$message.error(msg);
}
},
async requestList() {
const url = "/data/aggregator/coverage/analysis/resourceCategories";
let params = {
@ -816,50 +861,27 @@ export default {
</script>
<style lang="scss" scoped>
// @import "@/assets/scss/c/config";
// @import "@/assets/scss/c/function";
// @import "@/assets/scss/modules/visual/c/common";
@mixin toe {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
word-wrap: normal;
}
@mixin scrollBar2 {
&::-webkit-scrollbar {
/*滚动条整体样式*/
width: 8px; /*高宽分别对应横竖滚动条的尺寸*/
height: 1px;
}
&::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/
border-radius: 8px;
box-shadow: inset 0 0 5px rgba(#000, 0.1);
background: linear-gradient(270deg, #999, #ddd);
}
&::-webkit-scrollbar-track {
/*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(#000, 0.1);
border-radius: 8px;
background: darken(#999, 20);
}
}
@import "@/assets/scss/c/config.scss";
@import "@/assets/scss/c/function.scss";
@import "@/assets/scss/modules/visual/c/common.scss";
.m-pop {
@include scrollBar2;
max-width: 380px;
width: 450px;
color: #fff;
font-size: 14px;
line-height: 20px;
max-height: 321px;
max-height: 500px;
overflow-y: auto;
.info {
padding: 10px;
.info-title {
margin-bottom: 10px;
font-size: 16px;
font-size: 24px;
font-weight: bold;
color: #69efff;
line-height: 40px;
}
.item-pics {
@ -876,21 +898,66 @@ export default {
}
.item {
@include toe;
font-size: 18px;
font-family: PingFang SC;
font-weight: 400;
color: #ffffff;
line-height: 34px;
}
.list {
.item {
display: flex;
align-items: center;
margin-bottom: 5px;
padding: 5px;
border-bottom: 1px dashed #124584;
&:last-child {
border-bottom: none;
}
.item-cnt {
@include toe;
width: 90%;
}
.i-arrow {
margin-left: auto;
}
}
}
.operate {
display: flex;
justify-content: center;
}
.more-btn {
position: absolute;
right: 20px;
top: 30px;
width: 60px;
height: 24px;
background: rgba(221, 141, 2, 0.57);
border: 1px solid #dd8d02;
border-radius: 2px;
font-size: 16px;
font-family: PingFang SC;
font-weight: 400;
color: #ffffff;
line-height: 24px;
text-align: center;
cursor: pointer;
}
.btn {
margin-top: 20px;
margin-right: 20px;
width: 80px;
line-height: 24px;
width: 110px;
line-height: 30px;
border: 1px solid #eee;
text-align: center;
font-size: 14px;
font-size: 18px;
border-radius: 2px;
cursor: pointer;
&.z-blue {
background: #09a5ff;
border-color: #09a5ff;

22
src/views/modules/visual/command/cpts/qsydw.vue

@ -65,7 +65,6 @@
<script>
import cptCard from "@/views/modules/visual/cpts/card";
import { requestPost } from "@/js/dai/request";
import record from "@/views/modules/shequzhili/tuceng/anquan/xuncha/cpts/record";
@ -144,6 +143,7 @@ export default {
<style lang="scss" scoped>
@import "@/assets/scss/modules/visual/a_customize.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
@import "@/assets/scss/modules/visual/c/common.scss";
.m-pop {
color: #fff;
@ -215,17 +215,29 @@ export default {
/deep/ .el-table {
color: #ffffff;
border-color: rgba(#000, 0.1) !important;
border-color: transparent !important;
border: none !important;
.el-table__body-wrapper {
// @include scrollBar;
}
th {
background: rgba(8, 37, 134, 0.85) !important;
color: rgba(#fff, 0.8) !important;
background: #082586 !important;
border-color: transparent !important;
border: none !important;
}
tr {
background: rgba(16, 75, 164, 0.85) !important;
background: #021152 !important;
border-color: transparent !important;
border: none !important;
&:hover,
td {
background: rgba(16, 75, 164, 0.85) !important;
background: #021152 !important;
border-color: transparent !important;
border: none !important;
}
.el-button {
color: #e4dc00;

9
src/views/modules/visual/command/cpts/sidemenu-left.vue

@ -113,6 +113,7 @@ export default {
IS_ENSURE_HOUSE: require("@/assets/img/shuju/command/ico2/IS_ENSURE_HOUSE.png"),
IS_CJ: require("@/assets/img/shuju/command/ico2/IS_CJ.png"),
IS_PARTY: require("@/assets/img/shuju/command/ico2/IS_PARTY.png"),
IS_XJC: require("@/assets/img/shuju/command/ico2/IS_XJC.png"),
},
};
},
@ -130,12 +131,6 @@ export default {
mounted() {
// this.requestList();
this.currentKey = "event_tdnd";
this.currentItem = {
categoryKey: "event_tdnd",
coverageType: "csgl",
placeType: "event",
};
},
methods: {
@ -154,6 +149,7 @@ export default {
this.currentKey = "";
this.currentItem = {
categoryKey: "",
categoryName: "",
coverageType: "",
placeType: "",
};
@ -184,6 +180,7 @@ export default {
});
return item;
});
this.handleClickItem(this.menuList[0]);
} else {
this.$message.error(msg);
}

1
src/views/modules/visual/command/cpts/sidemenu.vue

@ -247,6 +247,7 @@ export default {
color: #ffffff;
background-color: #041267;
font-weight: bold;
box-shadow: 0 0 30px 5px inset #22f;
}
.info {

309
src/views/modules/visual/command/cpts/yantai-sidemenu1.vue

@ -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>

309
src/views/modules/visual/command/cpts/yantai-sidemenu2.vue

@ -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>

112
src/views/modules/visual/command/index.vue

@ -16,9 +16,7 @@
</div>
</div>
<people v-if="orgLevel === 'people'" :uid="selUserId" />
<div v-show="orgLevel !== 'people'" class="g-cnt">
<div class="g-cnt">
<div class="m-map" @click="handleClickMapBox">
<grid-map
ref="map"
@ -162,17 +160,36 @@
<div class="m-sidemenu">
<cpt-card>
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>指挥调度</span>
</div>
<div class="wrap">
<div class="menu">
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>指挥调度</span>
</div>
<div class="list">
<sidemenu1
:orgId="orgId"
@change="handleChangeMenu1"
:grandIcoList="dotIcoList"
></sidemenu1>
</div>
</div>
<div class="menu">
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>15分钟生活圈</span>
</div>
<div class="list">
<sidemenu
:orgId="orgId"
@change="handleChangeMenu"
:grandIcoList="dotIcoList"
></sidemenu>
<div class="list">
<sidemenu2
:orgId="orgId"
@change="handleChangeMenu2"
:grandIcoList="dotIcoList"
></sidemenu2>
</div>
</div>
</div>
</cpt-card>
</div>
@ -206,10 +223,6 @@
:enterpriseId="enterpriseId"
@handleClose="handleClose"
/>
<!-- <people v-if="pageType==='watch-resi'"
:uid="icResiUserId"
ref="ref_people"></people> -->
</div>
</template>
@ -221,7 +234,8 @@ import { requestPost } from "@/js/dai/request";
import People from "@/views/modules/visual/basicinfo/people";
import cptCard from "@/views/modules/visual/cpts/card";
import gridMap from "@/views/modules/visual/command/cpts/map";
import sidemenu from "@/views/modules/visual/command/cpts/sidemenu";
import sidemenu1 from "@/views/modules/visual/command/cpts/yantai-sidemenu1";
import sidemenu2 from "@/views/modules/visual/command/cpts/yantai-sidemenu2";
import sidemenuLeft from "@/views/modules/visual/command/cpts/sidemenu-left";
import ScreenLoading from "@/views/modules/visual/cpts/loading";
@ -273,7 +287,8 @@ export default {
cptCard,
ScreenLoading,
gridMap,
sidemenu,
sidemenu1,
sidemenu2,
sidemenuLeft,
eventInfo,
serviceInfo,
@ -303,8 +318,8 @@ export default {
selUserId: "",
dotList: [],
categoryKeys: [],
coverageTypes: [],
categoryKeys: [[], []],
coverageTypes: [[], []],
dotIcoList: {
anzhibangjiao: require("@/assets/img/shuju/command/ico/anzhibangjiao.png"),
@ -392,6 +407,7 @@ export default {
dotList2: [],
categoryKeys2: [],
coverageTypes2: [],
categoryNames2: [],
dotIcoList2: {
event_tdnd: require("@/assets/img/shuju/command/ico3/event_tdnd.png"),
enterprise_patrol_unqualified: require("@/assets/img/shuju/command/ico3/enterprise_patrol_unqualified.png"),
@ -420,6 +436,7 @@ export default {
IS_ENSURE_HOUSE: require("@/assets/img/shuju/command/ico3/IS_ENSURE_HOUSE.png"),
IS_CJ: require("@/assets/img/shuju/command/ico3/IS_CJ.png"),
IS_PARTY: require("@/assets/img/shuju/command/ico3/IS_PARTY.png"),
IS_XJC: require("@/assets/img/shuju/command/ico3/IS_XJC.png"),
},
searchName: "",
@ -480,8 +497,11 @@ export default {
};
}
} else if (type == "watch-resi") {
this.toSubAgency("people", info.icResiUserId);
// this.toSubAgency("people", info.icResiUserId);
this.icResiUserId = info.icResiUserId;
this.$router.push({
path: `/main-shuju/visual-basicinfo-people/${info.icResiUserId}`,
});
//
} else if (type == "watch-event") {
//
@ -547,9 +567,40 @@ export default {
this.coverageTypes2 = [obj.coverageType];
this.categoryKeys2 = [obj.categoryKey];
this.placeType2 = obj.placeType;
this.categoryNames2 = [obj.categoryName];
console.log(obj);
},
handleChangeMenu1(list) {
console.log("handleChangeMenu", list);
let categoryKeys = [];
let coverageTypes = [];
list.forEach((item) => {
if (item.selected) {
coverageTypes.push(item.coverageType);
}
item.categories.forEach((subitem) => {
if (subitem.selected) {
coverageTypes.push(item.coverageType);
categoryKeys.push(subitem.categoryKey);
}
});
item.placeTypesInAnalysis.forEach((subitem) => {
subitem.categories.forEach((subitem2) => {
if (subitem2.selected) {
categoryKeys.push(subitem2.categoryKey);
coverageTypes.push(subitem2.coverageType);
}
});
});
});
this.categoryKeys[0] = [...new Set(categoryKeys)];
this.coverageTypes[0] = [...new Set(coverageTypes)];
this.requestMapDot();
},
handleChangeMenu(list) {
handleChangeMenu2(list) {
console.log("handleChangeMenu", list);
let categoryKeys = [];
let coverageTypes = [];
@ -573,8 +624,8 @@ export default {
});
});
});
this.categoryKeys = [...new Set(categoryKeys)];
this.coverageTypes = [...new Set(coverageTypes)];
this.categoryKeys[1] = [...new Set(categoryKeys)];
this.coverageTypes[1] = [...new Set(coverageTypes)];
this.requestMapDot();
},
@ -584,8 +635,8 @@ export default {
let params = {
orgId: this.orgId,
orgType: "agency",
coverageTypes: this.coverageTypes,
categoryKeys: this.categoryKeys,
coverageTypes: [...this.coverageTypes[0], ...this.coverageTypes[1]],
categoryKeys: [...this.categoryKeys[0], ...this.categoryKeys[1]],
isPage: false,
};
@ -638,7 +689,12 @@ export default {
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.gridCountData = [...data];
this.gridCountData = [
...data.map((item) => ({
...item,
categoryName: this.categoryNames2[0],
})),
];
} else {
this.$message.error(msg);
}

8
src/views/modules/visual/communityGovern/shijianchuli/event-info.vue

@ -97,13 +97,13 @@
<div class="detail-value">{{ item.departmentName }}</div>
</div>
<!-- <div class="detail"
v-if="item.processName != '转项目' && item.wantServiceTime">
<div class="detail"
v-if="item.processName != '转项目' && item.publicReply">
<div class="detail-field"> </div>
<div class="detail-value">
<fold-text :row="3">{{ item.wantServiceTime }}</fold-text>
<fold-text :row="3">{{ item.publicReply }}</fold-text>
</div>
</div> -->
</div>
<div class="detail"
v-if="item.processName != '转项目' && item.internalRemark">

9
src/views/modules/visual/cpts/map/index.vue

@ -29,6 +29,7 @@ let posLayer;
let circleLayer;
let dotLayer;
let dotBgLayer;
let dotLayer2;
export default {
name: "l7",
@ -559,13 +560,13 @@ export default {
},
updateGrid() {
const { polygonData } = this;
const { polygonData,polygonDotData } = this;
if (polygonLayer) {
polygonLayer.setData(polygonData);
lineLayer.setData(polygonData);
textLayer.setData(polygonData);
posLayer.setData(polygonData);
circleLayer.setData(polygonData);
textLayer.setData(polygonDotData);
posLayer.setData(polygonDotData);
circleLayer.setData(polygonDotData);
}
},

16
src/views/modules/visual/shundeju/controlCount.vue

@ -104,7 +104,7 @@ export default {
'min-width': '20px'
},
{
'min-width': '20px'
'min-width': '50px'
},
{
'min-width': '20px'
@ -113,7 +113,7 @@ export default {
'min-width': '210px'
},
{
'min-width': '400px',
'min-width': '280px',
'white-space':'pre-wrap'
},
{
@ -213,9 +213,17 @@ export default {
if (item.gender == "0") {
item.gender = '女'
} else if (item.gender == "1") {
item = '男'
item.gender = '男'
} else {
item.gender = '未知'
}
if (item.type == "0") {
item.type = '访客'
} else if (item.type == "1") {
item.type = '租客'
} else {
item = '未知'
item.type = '未知'
}
return {
...item,

404
src/views/modules/worklog/icworklog-add-or-update.vue

@ -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">支持jpgpngbmp</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张图片图片支持jpgjpegbmpgit或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('wordpdf')
// 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>

362
src/views/modules/worklog/icworklog.vue

@ -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…
Cancel
Save