Browse Source

Merge branch 'feature/dev_party_mange' into dev

feature
YUJT 3 years ago
parent
commit
8b1d968bfb
  1. 1
      package.json
  2. BIN
      src/assets/img/shuju/3d-pid-bg.png
  3. BIN
      src/assets/img/shuju/volunteer3.png
  4. 1
      src/assets/scss/modules/visual/search_1.scss
  5. 44
      src/assets/scss/modules/visual/shijianchulifenxi.scss
  6. 3
      src/element-ui/theme-variables.scss
  7. 9
      src/views/components/resiChangeTransfer.vue
  8. 14
      src/views/components/resiSearch.vue
  9. 15
      src/views/components/tinymce2/index.vue
  10. 61
      src/views/modules/base/community/buildForm.vue
  11. 22
      src/views/modules/base/community/buildTable.vue
  12. 45
      src/views/modules/base/community/communityForm.vue
  13. 35
      src/views/modules/base/community/communityTable.vue
  14. 49
      src/views/modules/base/community/roomForm.vue
  15. 14
      src/views/modules/communityParty/regionalParty/activitysForm.vue
  16. 3
      src/views/modules/communityService/sqzzz/cpts/edit.vue
  17. 2
      src/views/modules/communityService/sqzzz/index.vue
  18. 754
      src/views/modules/plugins/change/verify.vue
  19. 806
      src/views/modules/plugins/change/verifyForm.vue
  20. 5
      src/views/modules/shequzhili/csgltc/csgl.vue
  21. 4
      src/views/modules/shequzhili/ggfwtc/ggfw.vue
  22. 15
      src/views/modules/visual/communityGovern/duoyuanfuwu/duoyuanfuwufenxi.vue
  23. 12
      src/views/modules/visual/communityGovern/duoyuanfuwu/pieOption.js
  24. 276
      src/views/modules/visual/communityGovern/shijianchuli/chart.js
  25. 108
      src/views/modules/visual/communityGovern/shijianchuli/lineOption.js
  26. 311
      src/views/modules/visual/communityGovern/shijianchuli/pieOption.js
  27. 328
      src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi copy 2.vue
  28. 740
      src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi copy.vue
  29. 12
      src/views/modules/visual/communityParty/gridParty.vue
  30. 12
      src/views/modules/visual/components/screen-map/index.vue
  31. 17
      src/views/modules/visual/cpts/tb.vue
  32. 2
      src/views/modules/workPc/guidance/DetailForm.vue

1
package.json

@ -23,6 +23,7 @@
"babel-eslint": "^8.0.1",
"babel-plugin-component": "^1.1.1",
"echarts": "^5.2.2",
"echarts-gl": "^2.0.9",
"element-theme": "^2.0.1",
"element-ui": "^2.13.0",
"file-saver": "^2.0.5",

BIN
src/assets/img/shuju/3d-pid-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
src/assets/img/shuju/volunteer3.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

1
src/assets/scss/modules/visual/search_1.scss

@ -24,6 +24,7 @@
display: flex;
align-items: center;
margin-left:40px;
z-index: 10;
.second-select {

44
src/assets/scss/modules/visual/shijianchulifenxi.scss

@ -21,8 +21,8 @@
}
.l_bottom {
height: calc(100vh - 200px - 355px);
margin-top: 20px;
height: calc(100vh - 200px - 365px);
margin-top: 0;
}
}
@ -35,25 +35,7 @@
}
.l_bottom {
.bottom_label {
position: relative;
padding-left: 40px;
font-size: 16px;
font-weight: 500;
color: #fff;
}
.bottom_label::after {
content: '';
position: absolute;
top: 50%;
left: 20px;
width: 12px;
height: 12px;
box-sizing: border-box;
margin-top: -6px;
background: #2865fa;
border-radius: 50%;
}
> span {
font-size: 18px;
font-family: PingFang SC;
@ -66,6 +48,26 @@
}
}
.bottom_label {
position: relative;
padding-left: 40px;
font-size: 16px;
font-weight: 500;
color: #fff;
}
.bottom_label::after {
content: '';
position: absolute;
top: 50%;
left: 20px;
width: 12px;
height: 12px;
box-sizing: border-box;
margin-top: -6px;
background: #2865fa;
border-radius: 50%;
}
.g-r {
.m-tb {

3
src/element-ui/theme-variables.scss

@ -16,7 +16,8 @@ $--color-transition-base: color .2s cubic-bezier(.645,.045,.355,1) !default;
/* Color
-------------------------- */
/// color|1|Brand Color|0
$--color-primary: #17B3A3 !default;
// $--color-primary: #17B3A3 !default;
$--color-primary: #3E8EF7 !default;
/// color|1|Background Color|4
$--color-white: #FFFFFF !default;
/// color|1|Background Color|4

9
src/views/components/resiChangeTransfer.vue

@ -498,7 +498,8 @@ export default {
}, 2000)
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj)
// app.util.validateRule(messageObj)
console.log('error submit!')
} else {
if (this.dataForm.type === 'in') {
@ -522,7 +523,9 @@ export default {
},
async saveForm () {
const url = '/epmetuser/changeRelocation/saveOutOfInfo'
// saveOutOfInfo
const url = '/epmetuser/changeRelocation/moveOutHome'
let noData = new Date()
noData = util.dateFormatter(noData, 'time')
this.dataForm.transferTime = noData
@ -530,7 +533,7 @@ export default {
const { data, code, msg } = await requestPost(url, this.dataForm)
if (code === 0) {
this.$message.success('调动成功')
this.$message.success('操作成功')
this.handleCancle()
} else {
this.$message.error(msg)

14
src/views/components/resiSearch.vue

@ -187,6 +187,7 @@
size="small"
clearable
class="resi-cell-select"
:collapse-tags="n.multiSelect == 1 ? true : false"
:multiple="n.multiSelect == 1 ? true : false"
>
<el-option
@ -270,10 +271,13 @@ export default {
// }
arr.forEach((item) => {
if (item.itemType == 'checkbox') _form[item.columnName] = []
else if (columnName && columnName === item.columnName) _form[item.columnName] = '1'
else if (item.queryType == 'resi_category' && columnName ){
_form[item.columnName] = [columnName]
} else if (columnName && columnName === item.columnName) _form[item.columnName] = '1'
else if (item.itemType == 'inputRange') _form[item.columnName] = { start: '', end: ''}
else _form[item.columnName] = ''
})
console.log('_form----------rrr', _form)
return _form
}
let itemList = this.formList.map(item => {
@ -289,7 +293,7 @@ export default {
return {
...item,
isChange: this.columnName && this.columnName === item.columnName ? true : false
isChange:( item.queryType == 'resi_category' && this.columnName) || this.columnName === item.columnName ? true : false
}
})
let constForm = {
@ -783,13 +787,13 @@ export default {
min-height: 32px;
}
.resi-cell-input {
width: 200px;
max-width: 200px;
}
.resi-cell--daterange {
max-width: 235px;
max-width: 240px;
}
.resi-cell-select {
width: 200px;
max-width: 200px;
box-sizing: border-box;
margin-right: 10px;
&-middle {

15
src/views/components/tinymce2/index.vue

@ -1,5 +1,5 @@
<template>
<editor id="editors" v-model="content" tag-name="div" :init="init" />
<editor :id="id" v-model="content" tag-name="div" :init="init" />
<!-- <textarea id="editors" v-model="content" /> -->
</template>
@ -48,9 +48,16 @@ import "tinymce/plugins/visualblocks"; //
import "tinymce/plugins/visualchars"; //
import "tinymce/plugins/wordcount"; //
import { debounce } from "throttle-debounce";
let num = 1;
export default {
props: {
id: {
type: String,
default: () => {
num === 10000 && (num = 1);
return `tinymce${+new Date()}${num++}`;
},
},
value: {
default: "",
},
@ -67,7 +74,7 @@ export default {
let token = this.getUserToken();
let init = {
selector: '#editors',
selector: `#${this.id}`,
language_url: require("./zh_CN.js"), //
language: "zh_CN",
skin_url: require("tinymce/skins/ui/oxide/skin.css"), //
@ -154,7 +161,7 @@ export default {
};
},
mounted() {
tinymce.init(this.init)
// tinymce.init(this.init)
},
methods: {
vModel(editor) {

61
src/views/modules/base/community/buildForm.vue

@ -24,6 +24,21 @@
v-model="dataForm.buildingName">
</el-input>
</el-form-item>
<el-form-item 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>
<el-form-item label="楼栋类型"
prop="type"
label-width="150px"
@ -73,6 +88,16 @@
:max="9999"
label="总户数"></el-input-number>
</el-form-item>
<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="buildingLeaderName"
label-width="150px"
@ -128,6 +153,16 @@
</div>
</el-form-item>
<el-form-item label="楼栋地址"
prop="coordinatePosition"
label-width="150px"
style="display: block">
<!-- <span>{{ dataForm.coordinatePosition }}</span> -->
<el-input class="item_width_1"
placeholder="请选择楼栋地址"
disabled
v-model="dataForm.coordinatePosition" />
</el-form-item>
</el-form>
</div>
@ -169,9 +204,13 @@ export default {
totalUnitNum: 1,//
totalFloorNum: 0,//
totalHouseNum: 0,//
realPerson: 0,
buildingLeaderName: '',//
buildingLeaderMobile: '',//
type: '',//
coordinatePosition: '',
sysCoding: '',
coding: '',
location: '', //
longitude: '', //
latitude: '' //
@ -199,7 +238,8 @@ export default {
if (row) {
this.dataForm = JSON.parse(JSON.stringify(row))
this.buildingId = this.dataForm.buildingId
this.buildType = this.dataForm.buildingTypeKey
// this.buildType = this.dataForm.buildingTypeKey
this.buildType = this.dataForm.type
map.setCenter(new TMap.LatLng(this.dataForm.latitude, this.dataForm.longitude))
this.setMarker(this.dataForm.latitude, this.dataForm.longitude)
@ -226,6 +266,18 @@ export default {
})
},
async handleCode() {
const { data, code, msg } = await requestPost(
"/gov/org/houseInformation/getBuildingCoding/" + this.dataForm.neighborHoodId);
console.log('data----', data)
console.log('code----', code)
console.log('msg----', msg)
if (msg == "success" && code == 0) {
this.dataForm.coding = data.coding
this.dataForm.sysCoding = data.sysCoding
}
},
async addBuild () {
if (this.dataForm.buildingLeaderMobile) {
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //
@ -328,12 +380,14 @@ export default {
let { data } = result
if (Array.isArray(data) && data.length > 0) {
const {
location: { lat, lng }
location: { lat, lng },
address
} = data[0]
map.setCenter(new TMap.LatLng(lat, lng))
this.setMarker(lat, lng)
this.dataForm.latitude = lat
this.dataForm.longitude = lng
this.dataForm.coordinatePosition = address
} else {
this.$message.error('未检索到相关位置坐标')
}
@ -405,6 +459,9 @@ export default {
totalUnitNum: [
{ required: true, message: '单元数不能为空', trigger: 'blur' }
],
coding: [
{ required: true, message: '楼栋编码不能为空', trigger: 'blur' }
]
// totalFloorNum: [
// { required: true, message: '', trigger: 'blur' }
// ],

22
src/views/modules/base/community/buildTable.vue

@ -360,11 +360,12 @@ export default {
this.formShow = false
},
handleDetail (row) {
async handleDetail (row) {
this.formTitle = '楼栋详情'
this.formShow = true
const _data = await this.detail(row)
this.$nextTick(() => {
this.$refs.ref_form.initForm('detail', row, this.agencyObj)
this.$refs.ref_form.initForm('detail', _data, this.agencyObj)
})
},
@ -376,11 +377,12 @@ export default {
})
},
handleEdit (row) {
async handleEdit (row) {
this.formTitle = '修改楼栋'
this.formShow = true
const _data = await this.detail(row)
this.$nextTick(() => {
this.$refs.ref_form.initForm('edit', row, this.agencyObj)
this.$refs.ref_form.initForm('edit', _data, this.agencyObj)
})
},
@ -508,6 +510,18 @@ export default {
this.$message.error(msg)
}
},
async detail (row) {
const url = "/gov/org/houseInformation/getBuildingDetail/" + row.buildingId
const { data, code, msg } = await requestPost(url)
if (code === 0) {
return data
} else {
this.$message.error(msg)
}
},
//
async handleExport () {

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

@ -41,6 +41,21 @@
v-model="dataForm.neighborHoodName">
</el-input>
</el-form-item>
<el-form-item 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>
<el-form-item label="关联物业"
prop="propertyId"
label-width="150px"
@ -62,6 +77,16 @@
size="small"
@click="handleAddProperty">添加物业</el-button>
</el-form-item>
<el-form-item label="实有楼栋"
style="display: block"
prop="realBuilding"
label-width="150px">
<el-input-number class="item_width_4"
v-model="dataForm.realBuilding"
:min="0"
:max="9999"
label="总户数"></el-input-number>
</el-form-item>
<el-form-item label="详细地址"
prop="address"
label-width="150px"
@ -181,7 +206,10 @@ export default {
remark: '', //500
location: '', //
longitude: '', //
latitude: '' //
latitude: '', //
realBuilding: 0,
coding: '',
sysCoding: ''
},
propertyFormShow: false,
@ -285,6 +313,7 @@ export default {
this.formType = type
if (row) {
this.dataForm = JSON.parse(JSON.stringify(row))
this.dataForm.neighborHoodId = this.dataForm.id
this.neighborHoodId = this.dataForm.neighborHoodId
map.setCenter(new TMap.LatLng(this.dataForm.latitude, this.dataForm.longitude))
this.setMarker(this.dataForm.latitude, this.dataForm.longitude)
@ -298,7 +327,16 @@ export default {
await this.loadGrid()
await this.loadProperty()
},
async handleCode() {
if (!this.dataForm.gridId) return this.$message.error('请选择网格')
const { data, code, msg } = await requestPost(
"/gov/org/houseInformation/getNeighborHoodCoding/" + this.dataForm.gridId);
if (msg == "success" && code == 0) {
this.dataForm.coding = data.coding
this.dataForm.sysCoding = data.sysCoding
}
},
//
async loadAgency () {
const url = '/epmetuser/customerstaff/staffbasicinfo'
@ -489,6 +527,9 @@ export default {
gridId: [
{ required: true, message: '所属网格不能为空', trigger: 'blur' }
],
coding: [
{ required: true, message: '小区编码不能为空', trigger: 'blur' }
],
address: [
{ required: true, message: '详细地址不能为空', trigger: 'blur' }
],

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

@ -7,7 +7,7 @@
class="diy-button--reset"
size="small"
:loading="yhymLoading"
@click="handleYhymInfo">补全一一码信息</el-button>
@click="handleYhymInfo">补全一一码信息</el-button>
<el-button style=""
class="diy-button--add"
size="small"
@ -206,7 +206,7 @@
size="small"
:disabled="yihuyimaDisabled"
:loading="exportBtn"
@click="handleExportYihuyima()">导出一一码</el-button>
@click="handleExportYihuyima()">导出一一码</el-button>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false"> </el-button>
@ -240,7 +240,7 @@ export default {
showImportBtn: false,//
roleList: [],//
showYhymInfo: false, //
showYhymInfo: false, //
yhymLoading: false,
agencyObj: {},//
@ -282,7 +282,7 @@ export default {
async loadTable (fromTree, treeObj) {
console.log(111, this.staffAgencyId)
//
//
this.roleList = localStorage.getItem('roleList')
if (this.roleList.indexOf('root_manager') > -1 || this.roleList.indexOf('manager') > -1) {
this.showYhymInfo = true
@ -356,11 +356,12 @@ export default {
this.formShow = false
},
handleDetail (row) {
async handleDetail (row) {
this.formTitle = '小区详情'
this.formShow = true
const _data = await this.detail(row)
this.$nextTick(() => {
this.$refs.ref_form.initForm('detail', row, this.agencyObj)
this.$refs.ref_form.initForm('detail', _data, this.agencyObj)
})
},
@ -371,8 +372,19 @@ export default {
this.$refs.ref_form.initForm('add', null, this.agencyObj)
})
},
async detail (row) {
const url = "/gov/org/houseInformation/neighborhoodDetail/" + row.neighborHoodId
//
const { data, code, msg } = await requestPost(url)
if (code === 0) {
return data
} else {
this.$message.error(msg)
}
},
//
async handleYhymInfo () {
this.yhymLoading = true
const url = "/gov/org/house/createBatchHouseCodeAndUrl"
@ -400,11 +412,12 @@ export default {
}
},
handleEdit (row) {
async handleEdit (row) {
this.formTitle = '修改小区'
this.formShow = true
const _data = await this.detail(row)
this.$nextTick(() => {
this.$refs.ref_form.initForm('edit', row, this.agencyObj)
this.$refs.ref_form.initForm('edit', _data, this.agencyObj)
})
},
@ -691,13 +704,13 @@ export default {
},
//
//
handleExportYihuyima () {
this.exportBtn = true
this.yihuyimaDisabled = true
let title = this.agencyObj.label
title = title + '-一一码'
title = title + '-一一码'
let url = "/gov/org/house/downloadZip"

49
src/views/modules/base/community/roomForm.vue

@ -11,7 +11,7 @@
<el-form-item label="所属楼栋"
label-width="150px"
style="display: block">
<span>{{ dataForm.neighborHoodName }}{{dataForm.buildingName}}</span>
<span>{{ agencyObj.neighborHoodName }}-{{agencyObj.label}}</span>
</el-form-item>
<el-form-item label="单元号"
@ -39,7 +39,21 @@
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"
@ -59,6 +73,16 @@
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"
@ -184,7 +208,10 @@ export default {
ownerPhone: '', //
ownerName: '', //
ownerIdCard: '', //
remark: ''
remark: '',
// realPerson: 0,
coding: '',
sysCoding: ''
},
keyWords: '',
@ -203,6 +230,7 @@ export default {
this.$refs.ref_form.resetFields();
this.agencyObj = agencyObj
this.formType = type
console.log('agencyObj-----', agencyObj)
if (row) {
this.houseId = row.houseId
@ -217,7 +245,7 @@ export default {
// this.rentFlag = parseInt(this.dataForm.rentFlagKey)
} else {
this.dataForm.neighborHoodId = this.agencyObj.neighborHoodId
this.dataForm.buildingId = this.agencyObj.id
}
@ -264,6 +292,16 @@ export default {
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
}
},
async handleComfirm () {
this.btnDisable = true
@ -382,6 +420,9 @@ export default {
doorName: [
{ required: true, message: '门牌号不能为空', trigger: 'blur' }
],
coding: [
{ required: true, message: '房屋编码不能为空', trigger: 'blur' }
],
houseType: [
{ required: true, message: '房屋类型不能为空', trigger: 'blur' }
],

14
src/views/modules/communityParty/regionalParty/activitysForm.vue

@ -376,21 +376,11 @@ export default {
})
},
dormatHtml(content) {
let c = ''
if (content.indexOf('DOCTYPE') != -1) {
c = content.slice(45, -16);
}
console.log('content', typeof content)
return c || content
},
async addActivity () {
let url = '/heart/icpartyactivity/save'
// let url = "http://yapi.elinkservice.cn/mock/245/heart/icpartyactivity/save"
if (this.formData.content) {
this.formData.content = this.dormatHtml(this.formData.content)
}
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {

3
src/views/modules/communityService/sqzzz/cpts/edit.vue

@ -314,6 +314,9 @@ export default {
principalPhone: [
{ required: true, message: "联系电话不能为空", trigger: "blur" },
],
address: [
{ required: true, message: "地址不能为空", trigger: "blur" },
],
longitude: [
{ required: true, message: "请拖动地图选择坐标点", trigger: "blur" },
],

2
src/views/modules/communityService/sqzzz/index.vue

@ -131,6 +131,8 @@
</el-table-column>
<el-table-column prop="principalPhone" align="center" label="联系电话">
</el-table-column>
<el-table-column prop="address" align="center" label="地址">
</el-table-column>
<el-table-column prop="remark" align="center" label="备注">
</el-table-column>
<el-table-column

754
src/views/modules/plugins/change/verify.vue

@ -0,0 +1,754 @@
<template>
<div class="resi-container">
<el-card ref="searchCard" class="search-card">
<el-form
ref="searchForm"
:inline="true"
:model="fmData"
:label-width="'100px'"
class="demo-form-inline"
>
<div>
<el-form-item prop="gridId" label="所属网格">
<div class="resi-cell-value">
<el-select
v-model.trim="fmData.gridId"
placeholder="请选择网格"
size="small"
clearable
class="resi-cell-select"
@change="handleChangeGrid"
>
<el-option
v-for="item in optionsG"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
</el-form-item>
<el-form-item label="所属房屋">
<div class="resi-cell-value">
<div class="resi-cell-col">
<el-form-item prop="villageId">
<el-select
v-model.trim="fmData.villageId"
placeholder="请选择小区"
size="small"
clearable
class="resi-cell-select"
@change="handleChangeV"
>
<el-option
v-for="item in optionsV"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="buildId">
<el-select
v-model.trim="fmData.buildId"
placeholder="楼号"
size="small"
clearable
:disabled="changeVDisabled"
class="resi-cell-select resi-cell-select-middle"
@change="handleChangeB"
>
<el-option
v-for="item in optionsB"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="unitId">
<el-select
v-model.trim="fmData.unitId"
placeholder="单元"
size="small"
clearable
:disabled="changeBDisabled"
class="resi-cell-select resi-cell-select-middle"
@change="handleChangeD"
>
<el-option
v-for="item in optionsD"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="homeId">
<el-select
v-model.trim="fmData.homeId"
placeholder="房号"
size="small"
clearable
:disabled="changeDDisabled"
class="resi-cell-select resi-cell-select-middle"
>
<el-option
v-for="item in optionsH"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</div>
</div>
</el-form-item>
</div>
<div>
<el-form-item label="姓名" prop="name">
<el-input
v-model="fmData.name"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入"
>
</el-input>
</el-form-item>
<el-form-item label="手机号" prop="mobile">
<el-input
v-model="fmData.mobile"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入"
>
</el-input>
</el-form-item>
<el-form-item label="身份证号" prop="idCard">
<el-input
v-model="fmData.idCard"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入"
>
</el-input>
</el-form-item>
</div>
<div>
<!-- <el-form-item label="迁入时间" prop="startTime">
<el-date-picker
v-model="rangeTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item> -->
<el-form-item label="审核状态" prop="confirmResult">
<el-select
v-model.trim="fmData.confirmResult"
placeholder="审核状态"
size="small"
clearable
class="resi-cell-select"
>
<el-option
v-for="item in optionsWelfare"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</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>
</div>
</el-form>
</el-card>
<el-card class="resi-card-table">
<el-table
:data="tableData"
border
style="width: 100%"
class="resi-table"
:height="maxTableHeight"
>
<el-table-column
label="序号"
fixed="left"
type="index"
align="center"
width="50"
/>
<el-table-column
prop="name"
width="100"
fixed="left"
label="姓名"
align="center"
/>
<!-- <template slot-scope="scope">
<a class="name-a" @click="handleWatch(scope.$index)">
{{ scope.row.name }}
</a>
</template>
</el-table-column> -->
<el-table-column prop="gender" align="center" width="60" label="性别">
</el-table-column>
<el-table-column
prop="mobile"
width="140"
align="center"
label="手机号"
>
</el-table-column>
<el-table-column
prop="idCard"
align="center"
width="180"
label="身份证号"
>
</el-table-column>
<el-table-column
prop="gridName"
align="center"
label="所属网格"
min-width="160"
:show-overflow-tooltip="true"
>
</el-table-column>
<el-table-column
prop="homeName"
label="所属房屋"
align="center"
min-width="160"
:show-overflow-tooltip="true"
/>
<!-- <el-table-column
prop="allName"
label="迁出类型"
align="center"
min-width="160"
:show-overflow-tooltip="true"
/> -->
<el-table-column
prop="newHomeName"
label="迁往房屋"
align="center"
min-width="160"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="confirmResult"
label="审核状态"
align="center"
width="100"
/>
<el-table-column fixed="right" label="操作" align="center" width="120">
<template slot-scope="scope">
<el-button
@click="handleWatch(scope.row)"
type="text"
size="small"
>查看</el-button
>
<el-button
v-if="scope.row.confirmResult == '未审核'"
@click="handleEdit(scope.row)"
type="text"
size="small"
class="div-table-button--edit"
>审核</el-button
>
</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>
<!-- 修改弹出框 -->
<el-dialog
:visible.sync="formShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="formTitle"
width="1000px"
top="5vh"
class="dialog-h"
@close="handleClose(false)"
>
<verify-form
v-if="formShow"
ref="eleEditForm"
@dialogCancle="handleClose"
></verify-form>
</el-dialog>
</div>
</template>
<script>
import { requestPost } from '@/js/dai/request'
import nextTick from 'dai-js/tools/nextTick'
import { mapGetters } from 'vuex'
import verifyForm from './verifyForm'
import axios from 'axios'
export default {
components: { verifyForm },
data() {
return {
openSearch: false,
formShow: false,
formTitle: '审核信息',
pageNo: 1,
pageSize: window.localStorage.getItem('pageSize') || 20,
total: 1,
tableData: [],
optionsV: [],
optionsB: [],
optionsH: [],
optionsD: [],
optionsG: [],
optionsWelfare: [
{
value: '1',
label: '已通过'
},
{
value: '2',
label: '未通过'
}
],
fmData: {
gridId: '',
villageId: '',
buildId: '',
unitId: '',
homeId: '',
name: '',
mobile: '',
idCard: '',
// isWeifare: '', //01
// startTime: '',
// endTime: '',
submitType: '',
confirmResult: ''
},
rangeTime: [],
importBtnTitle: '导入',
importLoading: false,
searchH: 0,
tableHeight: 0
}
},
computed: {
...mapGetters(['clientHeight', 'iframeHeight']),
maxTableHeight() {
console.log('computed-searchH---', this.searchH)
const h = this.clientHeight - this.searchH - 440 + this.iframeHeight
const _h = this.clientHeight - this.searchH - 440
console.log('computed-searchH---_h', _h)
return this.$store.state.inIframe ? h : _h
},
changeVDisabled() {
return !this.fmData.villageId
},
changeBDisabled() {
return !this.fmData.buildId
},
changeDDisabled() {
return !this.fmData.unitId
}
},
watch: {
rangeTime: function (val) {
console.log('val----', 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 = ''
}
},
searchH() {
const h = this.clientHeight - this.searchH + this.iframeHeight
const _h = this.clientHeight - this.searchH
console.log('computed-searchH---_h', _h)
this.$nextTick(() => {
this.tableHeight = this.$store.state.inIframe ? h : _h
})
}
},
mounted() {
this.getGridList()
this.getValiheList()
this.getTableData()
this.searchH = this.$refs.searchCard.$el.offsetHeight + 270
console.log('searchH----', this.$refs.searchCard.$el.offsetHeight)
},
methods: {
handleClearVillage() {
this.fmData.buildId = ''
this.fmData.homeId = ''
},
handleClearBuild() {
this.fmData.buildId = ''
this.fmData.unitId = ''
this.fmData.homeId = ''
},
handleClearDan() {
this.fmData.unitId = ''
this.fmData.homeId = ''
},
handleChangeGrid(val) {
console.log('val', val)
this.fmData.villageId = ''
this.fmData.buildId = ''
this.fmData.unitId = ''
this.fmData.homeId = ''
this.getValiheList()
},
handleChangeV(val) {
console.log('val', val)
this.fmData.buildId = ''
this.fmData.unitId = ''
this.fmData.homeId = ''
this.getBuildList()
},
handleChangeB(val) {
console.log('val', val)
this.fmData.unitId = ''
this.fmData.homeId = ''
this.getUniList()
},
handleChangeD(val) {
console.log('val', val)
this.fmData.homeId = ''
this.getHouseList()
},
getGridList() {
const { user } = this.$store.state
this.$http
.post('/gov/org/customergrid/gridoption', {
agencyId: user.agencyId,
purpose: 'query'
})
.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('网络错误')
})
},
getValiheList() {
const { user } = this.$store.state
this.$http
.post('/gov/org/icneighborhood/neighborhoodoption', {
gridId: this.fmData.gridId,
agencyId: ''
// agencyId: user.agencyId
})
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsV = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
getBuildList() {
this.$http
.post('/gov/org/icbuilding/buildingoption', {
neighborHoodId: this.fmData.villageId
})
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsB = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
getUniList() {
this.$http
.post('/gov/org/icbuildingunit/unitoption', {
buildingId: this.fmData.buildId
})
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsD = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
getHouseList() {
this.$http
.post('/gov/org/ichouse/houseoption', { unitId: this.fmData.unitId })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsH = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
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()
},
handleClose(val) {
console.log('val-----', val)
if (val) {
this.handleEditSuccess()
}
this.formShow = false
},
handleSearch(val) {
console.log(this.fmData)
this.pageNo = 1
this.getTableData()
},
resetForm(formName) {
this.$refs[formName].resetFields()
this.handleSearch()
},
async handleAdd() {
this.formShow = true
await nextTick()
console.log(this.$refs)
this.$refs.eleEditForm.initForm('add')
},
async handleWatch(row) {
this.formShow = true
await nextTick()
this.$refs.eleEditForm.getDatail('detail', row.id)
},
async handleEdit(row) {
this.formShow = true
await nextTick()
this.$refs.eleEditForm.getDatail('edit', row.id)
},
handleEditSuccess() {
// this.handleClose()
this.getTableData()
},
async handleDel(rowData, rowIndex) {
console.log(rowData, rowIndex)
const url =
'/heart/iccommunityselforganization/delcommunityselforganization'
const { tableData } = this
const { data, code, msg } = await requestPost(url, {
orgId: tableData[rowIndex].orgId
})
if (code === 0) {
this.$message.success('删除成功!')
this.getTableData()
} else {
this.$message.success('操作失败!')
}
},
async getTableData() {
const url = '/epmetuser/myHome/confirmList'
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
? data.list.map((item) => {
return item
})
: []
} else {
}
}
}
}
</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;
}
.demo-form-inline {
// display: flex;
// align-items: center;
// margin-bottom: 20px;
.resi-cell-label {
flex-shrink: 0;
min-width: 0;
box-sizing: border-box;
margin-right: 15px;
// text-align: right;
// line-height: 32;
}
.resi-cell-label1 {
width: max-content;
}
.resi-cell-value-radio {
display: flex;
align-items: center;
min-height: 32px;
}
.resi-cell-input {
width: 200px;
}
.resi-cell--daterange {
max-width: 260px;
}
.resi-cell-select {
width: 200px;
box-sizing: border-box;
margin-right: 10px;
&-middle {
width: 120px;
}
&-small {
width: 88px;
}
}
.resi-cell-select:last-child {
margin-right: 0;
}
}
.mt10 {
margin-top: 10px;
}
</style>

806
src/views/modules/plugins/change/verifyForm.vue

@ -0,0 +1,806 @@
<template>
<div>
<div v-loading="loadingForm" class="dialog-h-content scroll-h">
<el-form :model="detailInfo" :disabled="btnType == 'detail'">
<el-form-item
label="移除人姓名:"
label-width="150px"
>
<span>{{ detailInfo.name }}</span>
</el-form-item>
<el-form-item
label="手机号:"
label-width="150px"
>
<span>{{ detailInfo.mobile }}</span>
</el-form-item>
<el-form-item
label="身份证号:"
label-width="150px"
>
<span>{{ detailInfo.idCard }}</span>
</el-form-item>
<el-form-item
label="所在网格:"
label-width="150px"
>
<span>{{ detailInfo.gridName }}</span>
</el-form-item>
<el-form-item
label="所在房屋:"
label-width="150px"
>
<span>
{{ detailInfo.villageName + detailInfo.buildName + detailInfo.unitName + detailInfo.homeName }}
</span>
</el-form-item>
<el-divider></el-divider>
<!-- <el-form-item
label="迁出类型:"
label-width="150px"
>
<span v-if="detailInfo.outType == 'in'">{{'迁往' + rootAgency.organizationName + '内其他区域' }}</span>
<span v-else>其他</span>
</el-form-item>
<template v-if="detailInfo.outType == 'in'">
<el-form-item
label="迁往区域:"
label-width="150px"
>
<span>{{ detailInfo.newGridName }}</span>
</el-form-item>
<el-form-item
label="迁至房屋:"
label-width="150px"
>
<span>{{ detailInfo.newHomeName }}</span>
</el-form-item>
</template>
<el-form-item
v-else
label="迁至地址:"
label-width="150px"
>
<span>{{ detailInfo.xxdz }}</span>
</el-form-item> -->
<el-form-item
label="移除时间:"
label-width="150px"
>
<span>{{ detailInfo.moveOutDate }}</span>
</el-form-item>
<el-form-item
label="移除原因:"
label-width="150px"
>
<span>
{{ detailInfo.deleteReason }}
</span>
</el-form-item>
<el-divider></el-divider>
<el-form-item
label="审核结果:"
label-width="150px"
:rules="[
{ required: true, message: '请选择审核结果', trigger: 'blur' },
]"
>
<el-input v-if="btnType == 'detail' && confirmResult == ''" value="未审核"></el-input>
<el-select
v-else
v-model.trim="confirmResult"
placeholder="请选择结果"
clearable
:disabled="!detailInfo.isInHome"
class="item_width_1"
>
<el-option label="通过" value="1" />
<el-option label="未通过" value="2" />
</el-select>
</el-form-item>
<el-form-item
v-if="detailInfo && !detailInfo.isInHome"
label-width="150px"
>
<span style="color: red; font-size: 12px;">当前人员已不在该房屋</span>
</el-form-item>
<el-form-item
v-if="confirmResult == 2"
label="审核备注:"
label-width="150px"
>
<el-input type="textarea" v-model="reason" style="width: 300px;"></el-input>
</el-form-item>
<!-- <template v-if="btnType == 'detail' && confirmResult == '1'">
<el-form-item
label="迁往区域:"
label-width="150px"
>
<span>{{ detailInfo.newGridName }}</span>
</el-form-item>
<el-form-item
label="迁至房屋:"
label-width="150px"
>
<span>{{ detailInfo.newHomeName }}</span>
</el-form-item>
</template> -->
</el-form>
<el-form
v-if="confirmResult == 1 && btnType == 'edit' && detailInfo.isInHome"
ref="ref_form"
:inline="false"
:model="dataForm"
:rules="dataRule"
class="form"
>
<el-form-item
label="当前组织:"
label-width="150px"
style="display: block"
>
<span>{{ gridName }}</span>
</el-form-item>
<el-form-item label="姓名" label-width="150px" style="display: block">
<span>{{ dataForm.name }}</span>
</el-form-item>
<el-form-item label="迁出时间:" prop="outOfTime" label-width="150px">
<el-date-picker
v-model="dataForm.outOfTime"
type="date"
value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd"
placeholder="选择日期"
style="width: 200px"
:clearable="false"
>
</el-date-picker>
</el-form-item>
<el-form-item
label="迁出类型:"
prop="type"
label-width="150px"
style="display: block"
>
<el-radio-group v-model="dataForm.type">
<el-radio :label="'in'">{{
'迁往' + rootAgency.organizationName + '内其他区域'
}}</el-radio>
<el-radio :label="'out'">其他</el-radio>
</el-radio-group>
</el-form-item>
<div v-if="dataForm.type === 'in'">
<el-form-item label="迁出至" prop="agencyId" label-width="150px">
<el-cascader
ref="myCascader"
v-model="agencyIdArray"
style="width: 480px"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
@change="handleChangeAgency"
clearable
></el-cascader>
</el-form-item>
<el-form-item label="所属家庭:" label-width="150px" prop="villageId">
<div class="resi-cell-col">
<el-select
v-model.trim="dataForm.villageId"
placeholder="请选择小区"
clearable
class="item_width_1"
@change="handleChangeCommunity($event)"
>
<el-option
v-for="item in communityList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-select
v-model.trim="dataForm.buildId"
placeholder="请选择楼号"
clearable
class="item_width_1 margin_left10"
@change="handleChangeBuilding($event)"
>
<el-option
v-for="item in buildingList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-select
v-model.trim="dataForm.unitId"
placeholder="请选择单元"
clearable
class="item_width_1 margin_left10"
@change="handleChangeUnit($event)"
>
<el-option
v-for="item in unitList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-select
v-model.trim="dataForm.homeId"
placeholder="请选择房号"
clearable
class="item_width_1 margin_left10"
@change="handleChangeHome($event)"
>
<el-option
v-for="item in roomList"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</div>
</el-form-item>
</div>
<div v-if="dataForm.type === 'out'">
<el-form-item label="外迁详细地址:" prop="address" label-width="150px">
<el-input
type="textarea"
:autosize="{ minRows: 2, maxRows: 7 }"
:rows="5"
resize="none"
style="width: 600px"
placeholder="请输入外迁详细地址"
v-model="dataForm.address"
>
</el-input>
</el-form-item>
</div>
<el-form-item label="迁出原因:" prop="reason" label-width="150px">
<el-input
type="textarea"
:autosize="{ minRows: 4, maxRows: 7 }"
:rows="5"
resize="none"
style="width: 600px"
placeholder="请输入迁出原因"
v-model="dataForm.reason"
>
</el-input>
</el-form-item>
<el-form-item label="" prop="welfareFlag" label-width="150px">
<el-checkbox v-model="dataForm.welfareFlag">享受福利</el-checkbox>
</el-form-item>
</el-form>
</div>
<div v-if="confirmResult == ''" class="resi-btns">
<el-button size="small" @click="handleCancle(false)">取消</el-button>
</div>
<div v-if="confirmResult == 1" class="resi-btns">
<el-button size="small" @click="handleCancle(false)">取消</el-button>
<el-button
v-if="btnType != 'detail' && !detailInfo.isInHome"
type="primary"
size="small"
:loading="btnDisable"
@click="handleVerify"
>提交</el-button
>
<el-button
v-else-if="btnType != 'detail'"
type="primary"
size="small"
:loading="btnDisable"
@click="handleComfirm"
>提交</el-button
>
</div>
<div v-if="confirmResult == 2" class="resi-btns">
<el-button size="small" @click="handleCancle(false)">取消</el-button>
<el-button
v-if="btnType != 'detail'"
type="primary"
size="small"
:loading="btnDisable"
@click="handleVerify"
>提交</el-button
>
</div>
</div>
</template>
<script>
import util from '@js/util.js'
import { Loading } from 'element-ui' // Loading
import { requestPost, requestGet } from '@/js/dai/request'
let loading //
export default {
data() {
return {
btnDisable: false,
loadingForm: true,
communityList: [],
buildingList: [],
unitList: [],
roomList: [],
confirmResult: '',
reason: '',
dataForm: {
icUserId: '', // ID
type: 'in', //out,in
agencyId: '', //Id
gridId: '', //Id
gridName: '',
villageId: '', //ID
villageName: '',
buildId: '', //Id
buildName: '',
unitId: '', //Id
unitName: '',
homeId: '', //Id
homeName: '',
transferTime: '', //
reason: '', //
customerId: '',
oldHome: '',
oldDept: '',
oldAddress: '',
ownerName: '',
name: '',
gender: '',
age: '',
address: '',
outOfTime: '',
welfareFlag: false
},
customerId: '', //id
userId: '', //id
gridName: '',
rootAgency: {},
casOptions: [],
agencyIdArray: [],
customerList: [],
iscascaderShow: 0,
btnType: '',
optionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList'
// checkStrictly: true
},
selGrid: {},
detailInfo: {}
}
},
components: {},
mounted() {},
computed: {
dataRule() {
return {
type: [
{ required: true, message: '操作类型不能为空', trigger: 'blur' }
],
agencyId: [
{ required: true, message: '所选组织不能为空', trigger: 'blur' }
],
villageId: [
{ required: true, message: '所属家庭不能为空', trigger: 'blur' }
],
address: [
{ required: true, message: '外迁详细地址不能为空', trigger: 'blur' }
],
outOfTime: [
{ required: true, message: '迁出时间不能为空', trigger: 'blur' }
]
}
}
},
methods: {
async initForm(row) {
this.customerId = localStorage.getItem('customerId')
// this.$refs.ref_form.resetFields()
// this.icUserId = row.icResiUserId
this.gridName = row.gridName
this.dataForm.icUserId = row.icResiUserId
//
if (
row.DOOR_NAME !== null &&
row.DOOR_NAME !== '' &&
row.DOOR_NAME !== undefined
) {
this.dataForm.oldHome = row.DOOR_NAME
} else {
this.dataForm.oldHome = ''
}
this.dataForm.customerId = this.customerId
this.dataForm.idCard = row.idCard
this.dataForm.mobile = row.mobile
// this.dataForm.type = row.outType
// this.dataForm.outOfTime = row.moveOutDate
this.dataForm.reason = row.deleteReason
// this.dataForm.address = row.xxdz
// await this.loadHouseInfo(row.HOME_ID_VALUE)
this.dataForm.name = row.name
// this.dataForm.gender = row.GENDER
// this.dataForm.age = ''
if (row.isInHome) {
this.confirmResult = (row.confirmResult == '1' || row.confirmResult == '2') ? row.confirmResult : ''
} else this.confirmResult = '1'
// this.reason = row.reason
await this.loadRootAgency()
await this.getAgencylist()
setTimeout(() => {
this.loadingForm = false
}, 500)
},
async getDatail(type, id) {
let url = '/epmetuser/myHome/moveOutConfirmDetail'
this.btnType = type
const params = {
id: id || ''
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.detailInfo = { ...data }
this.initForm(data)
} else this.$message.error(msg)
},
async loadHouseInfo(homeIdValue) {
const url = '/gov/org/ichouse/' + homeIdValue
const { data, code, msg } = await requestGet(url)
if (code === 0) {
this.dataForm.oldDept = ''
this.dataForm.oldAddress = data.houseName
this.dataForm.ownerName = data.ownerName
} else {
this.$message.error(msg)
}
},
//id
async loadRootAgency() {
await this.$http
.post('/gov/org/agency/customerrootagency/' + this.customerId)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
if (res.data) {
this.rootAgency = res.data
}
})
.catch(() => {})
},
async getAgencylist() {
const url = '/gov/org/customeragency/rootagencygridtree'
const params = {
agencyId: this.rootAgency.id
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
++this.iscascaderShow
this.casOptions = []
this.agencyIdArray.length = []
if (data) {
let treeData = [data]
this.resolveAgencyTree(treeData)
this.casOptions.push(data)
}
} else {
this.$message.error(msg)
}
},
resolveAgencyTree(treeData) {
treeData.forEach((element) => {
if (!element.subAgencyList || element.subAgencyList.length === 0) {
//level=gridtrue
if (element.level === 'grid') {
element.disabled = false
} else {
element.disabled = true
}
} else {
this.resolveAgencyTree(element.subAgencyList)
}
})
},
handleChangeAgency() {
console.log(this.$refs['myCascader'].getCheckedNodes()[0].data)
this.selGrid = this.$refs['myCascader'].getCheckedNodes()[0].data
this.dataForm.agencyId = this.selGrid.pid
this.dataForm.gridId = this.selGrid.agencyId
this.dataForm.gridName = this.selGrid.agencyName
this.loadCommunityList()
this.dataForm.villageId = '' //ID
this.dataForm.villageName = ''
this.dataForm.buildId = '' //Id
this.dataForm.buildName = ''
this.dataForm.unitId = '' //Id
this.dataForm.unitName = ''
this.dataForm.homeId = '' //Id
this.dataForm.homeName = ''
},
async loadCommunityList() {
const url = '/gov/org/icneighborhood/neighborhoodoption'
let params = {
gridId: this.dataForm.gridId,
agencyId: this.dataForm.agencyId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.communityList = []
this.communityList = [...data]
} else {
this.$message.error(msg)
}
},
async handleChangeCommunity(id) {
//
this.communityList.find((item) => {
if (item.value === id) {
this.dataForm.villageName = item.label
}
})
const url = '/gov/org/icbuilding/buildingoption'
let params = {
neighborHoodId: this.dataForm.villageId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.buildingList = []
this.buildingList = [...data]
this.dataForm.buildId = '' //Id
this.dataForm.unitId = '' //Id
this.dataForm.homeId = '' //Id
} else {
this.$message.error(msg)
}
},
async handleChangeBuilding(id) {
//
this.buildingList.find((item) => {
if (item.value === id) {
this.dataForm.buildName = item.label
}
})
const url = '/gov/org/icbuildingunit/unitoption'
let params = {
buildingId: this.dataForm.buildId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.unitList = []
this.unitList = [...data]
this.dataForm.unitId = '' //Id
this.dataForm.homeId = '' //Id
} else {
this.$message.error(msg)
}
},
async handleChangeUnit(id) {
//
this.unitList.find((item) => {
if (item.value === id) {
this.dataForm.unitName = item.label
}
})
const url = '/gov/org/ichouse/houseoption'
let params = {
unitId: this.dataForm.unitId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.roomList = []
this.roomList = [...data]
this.dataForm.homeId = '' //Id
} else {
this.$message.error(msg)
}
},
async handleChangeHome(id) {
//
this.roomList.find((item) => {
if (item.value === id) {
this.dataForm.homeName = item.label
}
})
},
async handleComfirm() {
this.btnDisable = true
setTimeout(() => {
this.btnDisable = false
}, 2000)
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
// app.util.validateRule(messageObj)
console.log('submit error')
} else {
if (this.dataForm.type === 'in') {
if (!this.dataForm.buildId) {
this.$message.warning('楼栋')
return false
}
if (!this.dataForm.unitId) {
this.$message.warning('请选择单元')
return false
}
if (!this.dataForm.homeId) {
this.$message.warning('请选择房间')
return false
}
}
this.saveForm()
}
})
},
async handleVerify() {
let params = {
id: this.detailInfo.id,
confirmResult: this.confirmResult,
reason: this.reason
}
if (this.confirmResult == 1 && this.detailInfo.isInHome) {
params = {
...params,
gridName: this.dataForm.gridName,
villageName: this.dataForm.villageName,
buildName: this.dataForm.buildName,
unitName: this.dataForm.unitName,
homeName: this.dataForm.homeName,
xxdz: this.dataForm.address
}
}
const { data, code, msg } = await requestPost('/epmetuser/myHome/moveOutConfirm', params)
if (code === 0) {
this.$message.success('提交成功')
this.handleCancle(true)
} else {
this.$message.error(msg)
}
},
async saveForm() {
const url = '/epmetuser/changeRelocation/moveOutHome'
let noData = new Date()
noData = util.dateFormatter(noData, 'time')
this.dataForm.transferTime = noData
const { data, code, msg } = await requestPost(url, this.dataForm)
if (code === 0) {
// this.$message.success('')
// this.handleCancle()
this.handleVerify()
} else {
this.$message.error(msg)
}
},
handleCancle(val) {
this.resetData()
this.$emit('dialogCancle', val)
},
resetData() {
this.dataForm = {
icUserId: '', // ID
type: 'in', //out,in
agencyId: '', //Id
gridId: '', //Id
villageId: '', //ID
buildId: '', //Id
unitId: '', //Id
homeId: '', //Id
transferTime: '', //
reason: '', //
outOfTime: '',
welfareFlag: false
}
this.customerId = '' //id
this.userId = '' //id
this.gridName = ''
this.rootAgency = {}
this.selGrid = {}
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
props: {}
}
</script>
<style lang="scss" scoped>
.item_width_1 {
width: 150px;
}
.item_width_2 {
width: 400px;
}
.item_width_3 {
margin-left: 10px;
width: 200px;
}
.div_btn {
display: flex;
justify-content: flex-end;
}
.resi-cell-col {
width: 750px;
display: flex;
justify-content: flex-start;
}
.margin_left10 {
margin-left: 10px;
}
</style>

5
src/views/modules/shequzhili/csgltc/csgl.vue

@ -102,8 +102,7 @@
header-align="center"
align="center"
label="占地面积"
show-overflow-tooltip
min-width="250">
max-width="100">
</el-table-column>
<el-table-column prop="capacity"
@ -117,7 +116,7 @@
align="center"
show-overflow-tooltip
label="地址"
width="120">
mix-width="230">
</el-table-column>
<el-table-column label="操作"

4
src/views/modules/shequzhili/ggfwtc/ggfw.vue

@ -101,7 +101,7 @@
align="center"
label="占地面积"
show-overflow-tooltip
min-width="250">
max-width="100">
</el-table-column>
<el-table-column prop="capacity"
header-align="center"
@ -114,7 +114,7 @@
align="center"
show-overflow-tooltip
label="地址"
width="120">
mix-width="230">
</el-table-column>
<el-table-column label="操作"
fixed="right"

15
src/views/modules/visual/communityGovern/duoyuanfuwu/duoyuanfuwufenxi.vue

@ -62,7 +62,9 @@
@clickFeature="clickMap"
:showIconLayer="true"
:showPolygonLayer="true"
:showPolIconLayer="true"
:clickType="'popup'"
:areaScale="0.1"
:isAddOpenlay="true"></screen-map>
</div>
<div class="map-tips">
@ -111,6 +113,7 @@ const legendList = [
{ name: '#8fc41e', icon: require('../../../../../assets/img/shuju/volunteer7.png') },
{ name: '#00a1be', icon: require('../../../../../assets/img/shuju/volunteer8.png') },
{ name: '#0067b6', icon: require('../../../../../assets/img/shuju/volunteer9.png') },
{ name: '#e5007f', icon: require('../../../../../assets/img/shuju/volunteer3.png') },
{ name: '', icon: require('../../../../../assets/img/shuju/volunteer1.png') }
]
const defaultLegendIcon = require('../../../../../assets/img/shuju/volunteer1.png')
@ -164,10 +167,10 @@ export default {
require('../../../../../assets/img/shuju/volunteer5.png'), //
require('../../../../../assets/img/shuju/volunteer7.png'), //
require('../../../../../assets/img/shuju/volunteer8.png'), //
require('../../../../../assets/img/shuju/volunteer3.png'), //
require('../../../../../assets/img/shuju/volunteer9.png'), //
require('../../../../../assets/img/shuju/volunteer1.png'), //
require('../../../../../assets/img/shuju/volunteer2.png'), //
require('../../../../../assets/img/shuju/volunteer3.png'), //
require('../../../../../assets/img/shuju/volunteer6.png'), //
],
polygonList: []
@ -220,7 +223,7 @@ export default {
}
this.pieData.push(ob)
})
this.getMapData()
// this.getMapData()
} else {
this.$message.error(msg)
}
@ -364,6 +367,9 @@ export default {
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.agencyInfo.agencyLevel = data.agencyLevel,
this.agencyInfo.longitude = data.longitude,
this.agencyInfo.latitude = data.latitude
let subPolygonList = []
data.children.forEach((item, index) => {
if (item.coordinates && item.coordinates.length > 0) {
@ -765,7 +771,10 @@ export default {
align-items: center;
margin-top: 10px;
margin-right: 40px;
.title-icon {
width: 40px;
height: 34px;
}
.map-tips-icon {
width: 20px;
height: 10px;

12
src/views/modules/visual/communityGovern/duoyuanfuwu/pieOption.js

@ -44,7 +44,7 @@ export function pieOption (_charts) {
// tooltip: {
// },
center: center,
radius: ['53%', '53.3%'],
radius: ['48%', '48.3%'],
label: {
show: false
},
@ -70,7 +70,7 @@ export function pieOption (_charts) {
// name: 'Access From',
type: 'pie',
center: center,
radius: ['30%', '43%'],
radius: ['25%', '38%'],
avoidLabelOverlap: false,
// top: top + '%',
// height: '80%',
@ -87,14 +87,14 @@ export function pieOption (_charts) {
edgeDistance: 1,
lineHeight: 15,
color: '#fff',
fontSize: 10,
fontSize: 8,
// distanceToLabelLine: -60,
rich: {
name: {
padding: [0, 6, 0, 6]
},
a: {
fontSize: 25,
fontSize: 23,
color: '#fff',
padding: [0, 6, 6, 6]
},
@ -110,9 +110,9 @@ export function pieOption (_charts) {
labelLine: {
show: false,
smooth: 0.2,
length: 40,
length: 20,
length2: 0,
maxSurfaceAngle: 80
maxSurfaceAngle: 60
},
labelLayout: function (params) {

276
src/views/modules/visual/communityGovern/shijianchuli/chart.js

@ -0,0 +1,276 @@
/**
* 绘制3d图
* @param pieData 总数据
* @param internalDiameterRatio:透明的空心占比
* @param distance 视角到主体的距离
* @param alpha 旋转角度
* @param pieHeight 立体的高度
* @param opacity 饼或者环的透明度
*/
const getPie3D = (pieData, internalDiameterRatio, distance, alpha, pieHeight, opacity = 1) => {
const series = []
let sumValue = 0
let startValue = 0
let endValue = 0
let legendData = []
let legendBfb = []
const k = 1 - internalDiameterRatio
pieData.sort((a, b) => {
return b.value - a.value
})
// 为每一个饼图数据,生成一个 series-surface 配置
for (let i = 0; i < pieData.length; i++) {
sumValue += pieData[i].value
const seriesItem = {
name:
typeof pieData[i].name === 'undefined'
? `series${i}`
: pieData[i].name,
type: 'surface',
parametric: true,
wireframe: {
show: false
},
pieData: pieData[i],
pieStatus: {
selected: false,
hovered: false,
k: k
},
center: ['10%', '50%']
}
if (typeof pieData[i].itemStyle !== 'undefined') {
const itemStyle = {}
itemStyle.color =
typeof pieData[i].itemStyle.color !== 'undefined'
? pieData[i].itemStyle.color
: opacity
itemStyle.opacity =
typeof pieData[i].itemStyle.opacity !== 'undefined'
? pieData[i].itemStyle.opacity
: opacity
seriesItem.itemStyle = itemStyle
}
series.push(seriesItem)
}
// 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数,
// 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。
legendData = []
legendBfb = []
for (let i = 0; i < series.length; i++) {
endValue = startValue + series[i].pieData.value
series[i].pieData.startRatio = startValue / sumValue
series[i].pieData.endRatio = endValue / sumValue
series[i].parametricEquation = getParametricEquation(
series[i].pieData.startRatio,
series[i].pieData.endRatio,
false,
false,
k,
series[i].pieData.value
)
startValue = endValue
const bfb = fomatFloat(series[i].pieData.value / sumValue, 4)
legendData.push({
name: series[i].name,
value: bfb
})
legendBfb.push({
name: series[i].name,
value: bfb
})
}
const boxHeight = getHeight3D(series, pieHeight) // 通过pieHeight设定3d饼/环的高度,单位是px
// 准备待返回的配置项,把准备好的 legendData、series 传入。
const option = {
legend: {
show: false,
data: legendData,
orient: 'vertical',
left: 10,
top: 10,
itemGap: 10,
textStyle: {
color: '#A1E2FF'
},
icon: 'circle',
formatter: function (param) {
const item = legendBfb.filter(item => item.name === param)[0]
const bfs = fomatFloat(item.value * 100, 2) + '%'
return `${item.name} ${bfs}`
}
},
labelLine: {
show: true,
lineStyle: {
color: '#fff'
}
},
label: {
show: true,
position: 'outside',
formatter: '{b} \n{c} {d}%'
},
tooltip: {
backgroundColor: '#033b77',
borderColor: '#21f2c4',
textStyle: {
color: '#fff',
fontSize: 13
},
formatter: params => {
// if (
// params.seriesName !== 'mouseoutSeries' &&
// params.seriesName !== 'pie2d'
// ) {
// const bfb = (
// (option.series[params.seriesIndex].pieData.endRatio -
// option.series[params.seriesIndex].pieData.startRatio) *
// 100
// ).toFixed(2)
// return (
// `${params.seriesName}<br/>` +
// `<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${params.color};"></span>` +
// `${bfb}%`
// )
// }
}
},
xAxis3D: {
min: -1,
max: 1
},
yAxis3D: {
min: -1,
max: 1
},
zAxis3D: {
min: -1,
max: 1
},
grid3D: {
show: false,
boxHeight: boxHeight, // 圆环的高度
viewControl: {
// 3d效果可以放大、旋转等,请自己去查看官方配置
alpha, // 角度
beta: -40,
distance, // 调整视角到主体的距离,类似调整zoom
rotateSensitivity: 0, // 设置为0无法旋转
zoomSensitivity: 0, // 设置为0无法缩放
panSensitivity: 0, // 设置为0无法平移
autoRotate: false // 自动旋转
}
},
series: series
}
return option
}
/**
* 生成扇形的曲面参数方程用于 series-surface.parametricEquation
*/
const getParametricEquation = (startRatio, endRatio, isSelected, isHovered, k, h) => {
// 计算
const midRatio = (startRatio + endRatio) / 2
const startRadian = startRatio * Math.PI * 2
const endRadian = endRatio * Math.PI * 2
const midRadian = midRatio * Math.PI * 2
// 如果只有一个扇形,则不实现选中效果。
if (startRatio === 0 && endRatio === 1) {
isSelected = false
}
// 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3)
k = typeof k !== 'undefined' ? k : 1 / 3
// 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0)
const offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0
const offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0
// 计算高亮效果的放大比例(未高亮,则比例为 1)
const hoverRate = isHovered ? 1.05 : 1
// 返回曲面参数方程
return {
u: {
min: -Math.PI,
max: Math.PI * 3,
step: Math.PI / 32
},
v: {
min: 0,
max: Math.PI * 2,
step: Math.PI / 20
},
x: function (u, v) {
if (u < startRadian) {
return (
offsetX +
Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate
)
}
if (u > endRadian) {
return (
offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate
)
}
return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate
},
y: function (u, v) {
if (u < startRadian) {
return (
offsetY +
Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate
)
}
if (u > endRadian) {
return (
offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate
)
}
return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate
},
z: function (u, v) {
if (u < -Math.PI * 0.5) {
return Math.sin(u)
}
if (u > Math.PI * 2.5) {
return Math.sin(u) * h * 0.1
}
return Math.sin(v) > 0 ? 1 * h * 0.1 : -1
}
}
}
/**
* 获取3d丙图的最高扇区的高度
*/
const getHeight3D = (series, height) => {
series.sort((a, b) => {
return b.pieData.value - a.pieData.value
})
return (height * 25) / series[0].pieData.value
}
/**
* 格式化浮点数
*/
const fomatFloat = (num, n) => {
let f = parseFloat(num)
if (isNaN(f)) {
return false
}
f = Math.round(num * Math.pow(10, n)) / Math.pow(10, n) // n 幂
let s = f.toString()
let rs = s.indexOf('.')
// 判定如果是整数,增加小数点再补0
if (rs < 0) {
rs = s.length
s += '.'
}
while (s.length <= rs + n) {
s += '0'
}
return s
}
export { getPie3D, getParametricEquation }

108
src/views/modules/visual/communityGovern/shijianchuli/lineOption.js

@ -1,4 +1,11 @@
import * as echarts from 'echarts'
let circleList = [
'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAhCAYAAAC4JqlRAAAFdklEQVRYhY1YTY/bRBh+/BHbiRN7l02bqst+st1dVT0gceXABYk7PfYPwIELv4IfABJ3euuBCxKCKxckBEKi2y1F6Xa3abTZT+fLHxnbaMZje+zE3Y70aiLPzPs888w778xEin/8EO9YJKGbVDEkrvhdWdSKBumGehGJReBVdVZyApsPk/roicSdi4aKb4sUEK38jeLEHIdVRQWOnsgLgORCLWsKzFUDqlmHXEvGRzMCMnEx6XmIgpCDRaU6saMnMTYfRpmMQgzIJdCiNTebqHc6kHUbMYkQBT7ikCReFBWypkNSZUS+A/f0FOOjMSdRtlgglikgypwCK8z0FQPWzgYkpQn/8grT3jFmo0ggjMxhrSWjsWqhcXcP9c4Yo5fH8AYugFDQOSVBx8apAqkzRQBXYd1bhnF7G8HVNZznV4hDhZNWuIkEQm4EkhLC3luGtrwEb9DF8MUV+560R7xmpFXMB1kCYu+1obc3MD7qY9qbAagDqHFTKwhQkBnicIbrgyEaqy6am9uQ5Fdwnp8LfaW0FpcgX3NzvcXARy/6cAchB9e5aZxEqhaEWVGiAQCftU97PuJZH617GzBdH5Njh4/JglKdi3i1XkNzbQuTNwO4A8LBjZJpXAWRAOHgnkBOgjtwoZgD5tM/ewripkHJMFMHuQr2fgehTzB+ORVmTUmYAJoAWgAsAHbJLN7W5H1z1agv6pP6LgZvYRdIkGsKVLOD64Mel1njM6fOGtxxg33rfLwNe3+DjXYOX+H0t64we0nYasnSjLrnWLq/CrnWZ3mDkygSsHdtRLMA/iXhYJqgQELAuvc+9r98BOPWeqbdnU+Ajc+PcfjdDxi+eC2Akywu/MsJ800xrp6epQTkwi5QmzYCZ8yJqYIKCYn6nTYefP1FATwt9Btto31y+TVh16jMN8UQMOWCAnKtgeDaK+SCnISGDx59CrW5PAeeLWhzmfVJ+xe3rMx8yzVTPE+KQSgpOmbD2cKMyBLTzoNK8LQkfcRkJWdKU9+SoolBKJeGS4gjlLZmbkrdupGA0rAqx+e+s1ImEPNVKR+riYX+6EYCoTeqHJ/7XkggRhwGqFk1IYqjQo4fdZ/dSGDUPRTyfij4iZlviiGQSAkkDKPZFJplCMBEyHABuo9/BZlWq0Dbuo9/yfrn4xMi1DfFEC4ossAmBpk4qC01CwdLnts9TE5Ocfjt9wicwRx44CRttE+SkHw+dpaRoL4phoCpZuDURl0HKx9tQVuiW6ac25MMd/l3F79/9Q1WP7uP1vY6l/0YvZ8PEIf07J9yc/nYRAnqU9F1XP/jiAoUCZApAZkO0Npq4+KvMz5YFRJWcuzSdXz90x8A/uTjIz5TnwOnBHIVWlu3mG+KUVoCCCQiOAd9KA0d5pohKJA6pVmSxsCQngAlG/K28ZwC1JfSMJjv/EaEVAFxq0QgLoHbfwlzfQdk2oN/4S3I7W+7D/gF01ckmOsduP3/mO/SJbW4BKkjGguKfgJ7fw3Df9/AO/OEwAxuvBGlshu3FFi7dxFcnjCf+bYsxEB6RUovCSGrr58NYO9FsHY3ob93Aee5w52rhQuHuHzi1rX3bOjtFfjnR/w6Fop3wXRceikt3/9TABX1TgOt7Q12unnnV5icjBB65fhJlkExAHOtBaO9zOQfdV/BPZ1yUlFJgUgkAIFA+V2QkLF2LRjt25BVC2HgI/LpuyCZiaTIkHUdiqYjIkP4F2dcsaiUDefeBSKBRQeIPFerpgJz3YRq1NlDhAlJIhDPxeR4AjKZm2U58BblgfTNFvPnWeHqLMQHQCYSnGd+xeM0fwNWAGbPMv42rHqelx+gVa/lcnnba1gkl5Wq53m587v8NyCOXfR7vgD4H8khvGFl000HAAAAAElFTkSuQmCC',
'image://data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAhCAYAAAC4JqlRAAAFb0lEQVRYhY1YW28bRRT+ZtbrS24mjVu3btPUDoiqFIEQ4gUh8dKX8hf4A/wT+Am88cA7b5GgrxVPFIREL0rapHHbOHGcxM7Fa3u9c9BMZrZn1+umI43W2j2Xb75z5pwZi89/JLznEExMTFGhKb+njtyUD+KCZxaILOfTnvGIAfj3z5/hmjGcnpjyLosBPtPvtB+yfsxIMBCuQWY4komnD09eRVHMoISc1R9jTH0EahcDhIisM5V6mhmugfz75t35qlgOyJTTxJQ3MCcqqIo8yhRBIcQQCmOrmYOPgvAgaYQedbCnXuPUgkhPYsBiBjjNzrGnp1hEUd7CCiTmqIsjtYsmnRllyfSMQTELKa5iQVTxsXcZp6qJJh0gAAwrbjgQWpc4gLTznKxjUSyhgR660Qu8hDLv8w5cCkBEZ4joBU4h0fNWsSjr+IQWsKm2cDQlYQ2AdJKdO2+gIi5hhV6jpXYRAijpHLIzlwXAZAMQ6gBFGziWVxGIG2hIgW21iQ6TFe7JGYhjLmuY187VS7SoYwxr5wU78xaEZ+VhaY2Mc2AEYKi/q10MxRgtHUI5wFDtoGd14qTMpTNeFOHLGupqD23qmBVp58XUzFsWOICxdT5g4AR1EFAJbW2TDvGYBnFSCs5AzIJcRZVGGKtX6AOYsasu2d8lxoafAhDalfPwmOTUtsQi5rXt6DFe8zqSTEIfnphBNdrAG+sgb1fuAMzaZ7FxG40rNaxo5fYOtjefYZOtXrCtZkKjmuh4H+E6fLQQGrbEBACvjjKFGFHXCMxaAJyB2cvXcOPre/h+dgE33SpW7wCffoXmnw/w637LrJBYWExeUBdn2rb2Ea1j3wGQiV0wgzKdmAKSs9PnIOY/QOXb7/ADd+7G3AJu6m9ahoUpz3ZNztieQZn7lJwB4WOGjg2NcS1gIPJffoN7+SIW087d0N+0jJNPbVmpbQvfMCs4A2+TUKKAU0PZREXUhipV3J3m3A0rk2N6MmZa25YGWJyEMqUvSLGkTE0/j4WLAPgFI5Opz2zHIw2AbFDSbfW8k4U4uQhAODIymfrMdiYAgsIIcyZuxDpY5MrsYRtPLwJw2MYzm/1OT8UNSNtWplglWnC8YhqjL+bNvlestrsKN3r0EA/sCqeu/tFD/OHkmb4Bom1rH/yAIhkaQh89MY+5RGN5W9sH3QPsPfwdPwd9tNPOg/75Ny1jC9LQ6oYOhLHdN/0g0Q1jBlQTPe8u6qIMSb2J2m4q3M42Nn/7BT/d/gx3KtXzetDZQ/PZv3hCyvT+vp2B1TVMaJsij0K0HgMwIBIAKMCYBmjLZVSinqlWI9Z0XHmNSGH09B/8BeBvq897QcAAxCzIZVzWtrWPLAAOhFIbaMm7qMgaimrHKPNEdeV1eEE3HHAGtC1RRDH6D+vsRAQHgG8VRQOMqY0tUcOHIsAbOjJG0rX9XeeBIZ9iEULUUFVtPNe2kTqkJkLgDOlckHm8kqtYVlvYoQMDImKrfPeJyNIuluDJOmrUxSttk23LRAjcEckdErSQUM/Rlg0or45bqowDtWkMhLy2pw+lfOvKBsryEpbUIV7a45irC/GJOM2AYB+MoFakE/TlMla8L1CmQxypFk4MuZNVVOn+J6+Z45xuWMNoG09o3yTkGMnjOTJ3AYvn252xj9NoH09lHQtiCVdyVdwifScYYYjIynqmxRSEjwKNcUxdbKkXhjGVqoYqlXMTu4BnO88LqbZwiC10RQmeuI5ZUUAJecvCGIqOEag3OKMgEefM21F6F5hh72xkr2eJozPLD1AAQc9NELIup9x4VkOCu5ZN3A3dC+6MGZt2W06Pd92G3QITY9r1PEHTe/43wHWzfk8OAP8D28XBfaJJ48oAAAAASUVORK5CYII='
]
let className = ['1号停车场', '2号停车场', '3号停车场', '4号停车场', '5号停车场', '6号停车场', '7号停车场']
let serviceCount = [50, 28, 17, 38, 90, 73, 39]
export function lineOption () {
return {
@ -11,6 +18,13 @@ export function lineOption () {
}
}
},
// grid: {
// left: '5%',
// right: '5%',
// bottom: '5%',
// top: '10%',
// containLabel: true
// },
xAxis: {
type: 'category',
// boundaryGap: false,
@ -25,7 +39,8 @@ export function lineOption () {
lineStyle: {
color: '#0c4b59'
}
}
},
// data: className
},
yAxis: {
nameTextStyle: {
@ -58,29 +73,82 @@ export function lineOption () {
}
}
},
// series: [
// {
// name: '项目数',
// type: 'line',
// smooth: true,
// barWidth: 15,
// areaStyle: {},
// itemStyle: {
// color: new echarts.graphic.LinearGradient(
// 0, 1, 0, 0,
// [
// { offset: 0, color: 'rgba(121, 55, 255, 0)' },
// { offset: 1, color: '#6339FF' }
// ]
// )
// }
// },
// // {
// // data: [820, 932, 901, 934, 1290, 1330, 1320],
// // type: 'line',
// // areaStyle: {}
// // }
// ]
series: [
{
name: '项目数',
type: 'line',
smooth: true,
barWidth: 15,
areaStyle: {},
itemStyle: {
color: new echarts.graphic.LinearGradient(
0, 1, 0, 0,
[
{ offset: 0, color: 'rgba(121, 55, 255, 0)' },
{ offset: 1, color: '#6339FF' }
]
)
}
name: '',
type: 'bar',
zlevel: 1,
itemStyle: {
normal: {
barBorderRadius: 0,
color: function (params) {
// 大于等于50%的是黄色 反之为蓝色
var colorList = [
['rgba(252, 210, 152, .2)', 'rgba(252, 210, 152, 1)'],
['rgba(36, 253, 231, .2)', 'rgba(36, 253, 231, 1)'],
];
var colorItem
colorItem = colorList[1];
// 设置线条渐变色
return new echarts.graphic.LinearGradient(0, 1, 0, 0, [{
offset: 0,
color: colorItem[0]
},
{
offset: 1,
color: colorItem[1]
}
], false);
}
},
},
barWidth: 4,
// data: serviceCount
},
{
name: 'XXX',
type: 'pictorialBar',
symbol: function (params, value) {
// 设置图片
return circleList[1]
},
// {
// data: [820, 932, 901, 934, 1290, 1330, 1320],
// type: 'line',
// areaStyle: {}
// }
symbolPosition: 'end',
symbolSize: [30, 30],
symbolOffset: [0, -12],
z: 20,
// data: serviceCount
}
]
}
}

311
src/views/modules/visual/communityGovern/shijianchuli/pieOption.js

@ -1,183 +1,184 @@
export function pieOption (_charts) {
const center= ['50%', '170px']
return {
title: {
text: '0',
top: 140,
left: 'center',
textStyle: {
width: '100%',
fontSize: 32,
color: '#FFFFFF',
fontWeight: 400
},
itemGap: 5,
subtext: '总数',
subtextStyle: {
fontSize: 20,
color: '#fff',
fontWeight: 400
}
},
tooltip: {
show: false
},
// legend: {
// top: 350,
// bottom: 0,
// itemWidth: 20,
// itemHeight: 10,
// textStyle: {
// color: '#D2E7FF',
// fontSize: 16,
// lineHeight: 20,
// },
// },
series: [
// 外侧圆环
{
type: 'pie',
// 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。
startAngle: 0,
hoverAnimation: false,
// tooltip: {
// },
center: center,
radius: ['58%', '58.3%'],
label: {
normal: {
show: false
}
},
labelLine: {
normal: {
show: false
}
const center= ['50%', '170px']
return {
title: {
text: '0',
top: 140,
left: 'center',
textStyle: {
width: '100%',
fontSize: 32,
color: '#FFFFFF',
fontWeight: 400
},
data: [{
value: 360,
itemStyle: {
normal: {
color: 'rgba(40, 101, 250, 0)',
width:0,
borderColor: 'rgba(40, 101, 250, 0.5)',
borderWidth: 1,
borderType: 'dotted'
}
}
itemGap: 5,
subtext: '总数',
subtextStyle: {
fontSize: 20,
color: '#fff',
fontWeight: 400
}
]
},
// 突出的
{
hoverAnimation: false,
// name: 'Access From',
type: 'pie',
center: center,
radius: ['35%', '48%'],
avoidLabelOverlap: false,
// top: top + '%',
// height: '80%',
selectedMode: 'single',
left: 'center',
width: 400,
label: {
// show: false,
position: 'outside',
alignTo: 'edge',
// formatter: '{a|{c}}\n\n{name|{b}}',
formatter: '{a|{c}%}\n{r|}\n{name|{b}}',
minMargin: 5,
edgeDistance: 1,
lineHeight: 15,
color: '#fff',
fontSize: 12,
// distanceToLabelLine: -60,
rich: {
name: {
padding: [0, 6, 0, 6]
},
a: {
fontSize: 30,
color: '#fff',
padding: [0, 6, 6, 6]
},
r: {
backgroundColor: 'auto',
borderRadius: 6,
width: 6,
height: 6,
// padding: [3, 3, 0, -12]
}
}
},
labelLine: {
show: false,
smooth: 0.2,
length: 30,
length2: 0,
maxSurfaceAngle: 80
},
labelLayout: function (params) {
const isLeft = params.labelRect.x < _charts.getWidth() / 2;
const points = params.labelLinePoints;
// Update the end point.
if (points) {
points[2][0] = isLeft
? params.labelRect.x
: params.labelRect.x + params.labelRect.width;
}
return {
labelLinePoints: points
};
},
itemStyle: {
color:function(params) {
//自定义颜色
var colorList = [ '#FAC126', '#3DDA83'];
return colorList[params.dataIndex]
}
},
data: [],
tooltip: {
show: false
},
// 中间圆环
{
// legend: {
// top: 350,
// bottom: 0,
// itemWidth: 20,
// itemHeight: 10,
// textStyle: {
// color: '#D2E7FF',
// fontSize: 16,
// lineHeight: 20,
// },
// },
series: [
// 外侧圆环
{
type: 'pie',
// 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。
startAngle: 0,
hoverAnimation: false,
center: center,
// tooltip: {
// },
radius: ['0%', '25%'],
center: center,
radius: ['58%', '58.3%'],
label: {
normal: {
show: false
}
},
labelLine: {
normal: {
show: false
}
},
data: [{
value: 360,
itemStyle: {
normal: {
color: 'rgba(8, 37, 134, 1)',
color: 'rgba(40, 101, 250, 0)',
width:0,
borderColor: 'rgba(40, 101, 250, 0.5)',
borderWidth: 1,
borderType: 'dotted'
}
}
}
]
},
]
// 突出的
{
hoverAnimation: false,
// name: 'Access From',
type: 'pie',
center: center,
radius: ['35%', '48%'],
avoidLabelOverlap: false,
// top: top + '%',
// height: '80%',
selectedMode: 'single',
left: 'center',
width: 400,
label: {
// show: false,
position: 'outside',
alignTo: 'edge',
// formatter: '{a|{c}}\n\n{name|{b}}',
formatter: '{a|{c}%}\n{r|}\n{name|{b}}',
minMargin: 5,
edgeDistance: 1,
lineHeight: 15,
color: '#fff',
fontSize: 12,
// distanceToLabelLine: -60,
rich: {
name: {
padding: [0, 6, 0, 6]
},
a: {
fontSize: 30,
color: '#fff',
padding: [0, 6, 6, 6]
},
r: {
backgroundColor: 'auto',
borderRadius: 6,
width: 6,
height: 6,
// padding: [3, 3, 0, -12]
}
}
},
labelLine: {
show: false,
smooth: 0.2,
length: 30,
length2: 0,
maxSurfaceAngle: 80
},
labelLayout: function (params) {
const isLeft = params.labelRect.x < _charts.getWidth() / 2;
const points = params.labelLinePoints;
// Update the end point.
if (points) {
points[2][0] = isLeft
? params.labelRect.x
: params.labelRect.x + params.labelRect.width;
}
return {
labelLinePoints: points
};
},
itemStyle: {
color:function(params) {
//自定义颜色
var colorList = [ '#FAC126', '#3DDA83'];
return colorList[params.dataIndex]
}
},
data: [],
},
// 中间圆环
{
type: 'pie',
// 起始刻度的角度,默认为 90 度,即圆心的正上方。0 度为圆心的正右方。
startAngle: 0,
hoverAnimation: false,
center: center,
// tooltip: {
// },
radius: ['0%', '25%'],
label: {
show: false
},
labelLine: {
show: false
},
data: [{
value: 360,
itemStyle: {
normal: {
color: 'rgba(8, 37, 134, 1)',
}
}
}
]
},
]
}
}
}

328
src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi copy 2.vue

@ -0,0 +1,328 @@
<template>
<div class="chart-container">
<div class="chart"
id="cityGreenLand"
ref="chart"></div>
<!-- 底座背景 -->
<div class="bg"></div>
</div>
</template>
<script>
import * as echarts from 'echarts';
// import echarts from 'echarts'
import 'echarts-gl';
import { getPie3D, getParametricEquation } from './chart.js' //js
const color = ['#005aff', '#f8b551']
export default {
name: 'chart',
data () {
return {
optionData: [
{
name: '处理中',
value: 28
},
{
name: '已完成',
value: 72
}
],
statusChart: null,
option: {}
}
},
created () {
this.setLabel()
},
mounted () {
this.initChart()
//
const that = this
window.onresize = function () {
that.changeSize()
}
},
methods: {
// label
setLabel () {
this.optionData.forEach((item, index) => {
item.itemStyle = {
color: color[index]
}
item.label = {
normal: {
show: true,
color: color[index],
formatter: [
'{d|{d}%}',
'{b|{b}}'
].join('\n'), // \n
rich: {
b: {
color: '#fff',
lineHeight: 25,
align: 'left',
fontSize: 16,
marginTop: 20
},
c: {
fontSize: 22,
color: '#fff',
textShadowColor: '#1c90a6',
textShadowOffsetX: 0,
textShadowOffsetY: 2,
textShadowBlur: 5
},
d: {
color: color[index],
fontSize: 25,
align: 'left'
}
}
}
}
item.labelLine = {
normal: {
length: 30,
length2: 80,
lineStyle: {
width: 1,
color: 'rgba(255,255,255,0.7)'
}
}
}
item.labelLayout = function (params) {
const isLeft = params.labelRect.x < myChart.getWidth() / 2;
const points = params.labelLinePoints;
// Update the end point.
points[2][0] = isLeft
? params.labelRect.x
: params.labelRect.x + params.labelRect.width;
return {
labelLinePoints: points
};
}
})
},
//
initChart () {
// let statusChart = echarts.init(document.getElementById('cityGreenLand-charts'));
this.statusChart = echarts.init(document.getElementById('cityGreenLand'));
// option, 3d,
this.option = getPie3D(this.optionData, 0.8, 220, 28, 22, 0.4)
this.statusChart.setOption(this.option)
// label线2d使labelLine3dsetOption
this.option.series.push({
name: '电梯状态', //
backgroundColor: 'transparent',
type: 'pie',
label: {
opacity: 1,
fontSize: 13,
lineHeight: 20
},
startAngle: 40, // [0, 360]
clockwise: false, // 3d
radius: ['40%', '50%'],
center: ['50%', '50%'],
data: this.optionData,
itemStyle: {
opacity: 0 //02d
}
})
this.statusChart.setOption(this.option)
this.bindListen(this.statusChart)
},
//
// optionNameoptionopiton
bindListen (myChart, optionName = 'option') {
let selectedIndex = ''
let hoveredIndex = ''
//
myChart.on('click', (params) => {
// option.series
const isSelected = !this[optionName].series[params.seriesIndex].pieStatus
.selected
const isHovered =
this[optionName].series[params.seriesIndex].pieStatus.hovered
const k = this[optionName].series[params.seriesIndex].pieStatus.k
const startRatio =
this[optionName].series[params.seriesIndex].pieData.startRatio
const endRatio =
this[optionName].series[params.seriesIndex].pieData.endRatio
// option
if (selectedIndex !== '' && selectedIndex !== params.seriesIndex) {
this[optionName].series[
selectedIndex
].parametricEquation = getParametricEquation(
this[optionName].series[selectedIndex].pieData.startRatio,
this[optionName].series[selectedIndex].pieData.endRatio,
false,
false,
k,
this[optionName].series[selectedIndex].pieData.value
)
this[optionName].series[selectedIndex].pieStatus.selected = false
}
// / option
this[optionName].series[
params.seriesIndex
].parametricEquation = getParametricEquation(
startRatio,
endRatio,
isSelected,
isHovered,
k,
this[optionName].series[params.seriesIndex].pieData.value
)
this[optionName].series[params.seriesIndex].pieStatus.selected = isSelected
// seriesIndex
selectedIndex = isSelected ? params.seriesIndex : null
// 使 option
myChart.setOption(this[optionName])
})
// mouseover
// myChart.on('mouseover', (params) => {
// //
// let isSelected
// let isHovered
// let startRatio
// let endRatio
// let k
// // mouseover
// if (hoveredIndex === params.seriesIndex) {
// //
// } else {
// // option
// if (hoveredIndex !== '') {
// // option.series false
// isSelected = this[optionName].series[hoveredIndex].pieStatus.selected
// isHovered = false
// startRatio = this[optionName].series[hoveredIndex].pieData.startRatio
// endRatio = this[optionName].series[hoveredIndex].pieData.endRatio
// k = this[optionName].series[hoveredIndex].pieStatus.k
// // option
// this[optionName].series[
// hoveredIndex
// ].parametricEquation = getParametricEquation(
// startRatio,
// endRatio,
// isSelected,
// isHovered,
// k,
// this[optionName].series[hoveredIndex].pieData.value
// )
// this[optionName].series[hoveredIndex].pieStatus.hovered = isHovered
// // seriesIndex
// hoveredIndex = ''
// }
// // mouseover option
// if (
// params.seriesName !== 'mouseoutSeries' &&
// params.seriesName !== 'pie2d'
// ) {
// // option.series true
// isSelected =
// this[optionName].series[params.seriesIndex].pieStatus.selected
// isHovered = true
// startRatio =
// this[optionName].series[params.seriesIndex].pieData.startRatio
// endRatio = this[optionName].series[params.seriesIndex].pieData.endRatio
// k = this[optionName].series[params.seriesIndex].pieStatus.k
// // option
// this[optionName].series[
// params.seriesIndex
// ].parametricEquation = getParametricEquation(
// startRatio,
// endRatio,
// isSelected,
// isHovered,
// k,
// this[optionName].series[params.seriesIndex].pieData.value + 60
// )
// this[optionName].series[
// params.seriesIndex
// ].pieStatus.hovered = isHovered
// // seriesIndex
// hoveredIndex = params.seriesIndex
// }
// // 使 option
// myChart.setOption(this[optionName])
// }
// })
// // bug
// myChart.on('globalout', () => {
// //
// let isSelected
// let isHovered
// let startRatio
// let endRatio
// let k
// if (hoveredIndex !== '') {
// // option.series true
// isSelected = this[optionName].series[hoveredIndex].pieStatus.selected
// isHovered = false
// k = this[optionName].series[hoveredIndex].pieStatus.k
// startRatio = this[optionName].series[hoveredIndex].pieData.startRatio
// endRatio = this[optionName].series[hoveredIndex].pieData.endRatio
// // option
// this[optionName].series[
// hoveredIndex
// ].parametricEquation = getParametricEquation(
// startRatio,
// endRatio,
// isSelected,
// isHovered,
// k,
// this[optionName].series[hoveredIndex].pieData.value
// )
// this[optionName].series[hoveredIndex].pieStatus.hovered = isHovered
// // seriesIndex
// hoveredIndex = ''
// }
// // 使 option
// myChart.setOption(this[optionName])
// })
},
//
changeSize () {
this.statusChart.resize()
}
}
}
</script>
<style lang='scss' scoped>
.chart-container {
position: relative;
width: 100%;
height: 800px;
.chart,
.bg {
width: 100%;
height: 800px;
z-index: 2;
}
.bg {
position: absolute;
bottom: 180px;
left: 50%;
z-index: 1;
width: 570px;
height: 340px;
background: no-repeat center;
background-image: url("../../../../../assets/img/shuju/3d-pid-bg.png");
background-size: 100% 100%;
transform: translateX(-50%);
}
}
</style>

740
src/views/modules/visual/communityGovern/shijianchuli/shijianchulifenxi copy.vue

@ -0,0 +1,740 @@
<template>
<cpt-card>
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>事件处理分析</span>
<div class="search">
<div class="second-select cascader">
<el-cascader class="customer_cascader"
ref="myCascader"
v-model="agencyIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeAgency"></el-cascader>
</div>
<div class="second-select">
<el-select v-model="dataType"
:popper-append-to-body="false"
placeholder="请选择">
<el-option v-for="(item) in dateArray"
:key="item.value"
:label="item.label"
:value="item.value"
@click.native="handleChangeDate(item.value)">
</el-option>
</el-select>
</div>
<div v-if="dataType==='0'"
class="second-select range-data">
<el-date-picker v-model="timeRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
prefix-icon="el-icon-caret-bottom"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
@change="handleSelectChange">
</el-date-picker>
</div>
</div>
</div>
<div class="g-cpt-resi">
<div class="g-l">
<div class="l_top">
<div v-if="!pieNoData && !dataLoading"
class="g-pie">
<screen-echarts-frame class="echart-wr"
@myChartMethod="pieInitOk"
ref="pieChart"></screen-echarts-frame>
<div class="pie-legend">
<div :class="['legend_item',{'item_last':index===legendArray.length-1}]"
v-for="(item,index) in legendArray"
:key="index">
<div class="item_name">{{item.name}}</div>
<img :src="item.url" />
<!-- <div class="item_num">
<span class="item_count">{{item.count}}</span>
<span class="item_percent">{{item.percent}}</span>
</div> -->
</div>
</div>
</div>
<screen-nodata class="nodata"
v-if="pieNoData&& !dataLoading"></screen-nodata>
<div class="table-status"
v-if="dataLoading">
<screen-loading>加载中</screen-loading>
</div>
</div>
<div class="l_bottom">
<div class="bottom_label">月度新增事件统计</div>
<screen-echarts-frame v-if="!lineNoData&& !dataLoading"
class="echart-line"
@myChartMethod="lineInitOk"
ref="lineChart"></screen-echarts-frame>
<screen-nodata class="nodata"
v-if="lineNoData&& !dataLoading"></screen-nodata>
<div class="table-status"
v-if="dataLoading">
<screen-loading>加载中</screen-loading>
</div>
</div>
</div>
<div class="g-r">
<div class="m-tb">
<div class="tb">
<cpt-tb :col-list="demand.colList"
:loading="demand.loading"
:header="demand.header"
:list="demand.list"
@operate="toEventInfo"></cpt-tb>
</div>
<div class="m-pagination">
<el-pagination :current-page="demand.pageNo"
:page-size="demand.pageSize"
:total="demand.total"
background
layout="prev, pager, next,total"
@current-change="handlePageNoChange_demand">
</el-pagination>
</div>
</div>
</div>
</div>
<event-info v-if="showProject"
:eventId="eventId"
:orgId="orgId"
:orgType="orgType"
@close="showProject = false" />
</cpt-card>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import cptCard from "@/views/modules/visual/cpts/card";
import cptTb from "@/views/modules/visual/cpts/tb";
import screenEchartsFrame from "@/views/modules/visual/components/screen-echarts-frame";
import ScreenLoading from "@/views/modules/visual/components/screen-loading";
import ScreenNodata from "@/views/modules/visual/components/screen-nodata";
import eventInfo from "./event-info";
import { pieOption } from './pieOption.js'
import { lineOption } from './lineOption.js'
import nextTick from 'dai-js/tools/nextTick'
import dateFormat from "dai-js/tools/dateFormat";
export default {
name: "shijianchulifenxi",
data () {
return {
dataLoading: true,
pieNoData: false,
lineNoData: false,
isfirstInit: true,//
projectTotal: 0,
processingCount: 0,
processingRatio: 0,
lineChart: '',
lineOption: {},
lineInitState: false,
lineColorArray: [],
lineData: [],
lineXaxis: [],
lineSeriesData: [],
pieChartS: null,
pieChart: '',
pieOption: {},
pieInitState: false,
pieData: [],
legendArray: [
{
name: '未结案',
count: 0,
percent: '0%',
url: require('@/assets/img/shuju/measure/huang@2x.png')
},
{
name: '已结案',
count: 0,
percent: '0%',
url: require('@/assets/img/shuju/measure/lv@2x.png')
}
],
timeRange: [],
orgId: '',
orgType: 'agency',
queryStartTime: '',
queryEndTime: '',
processStatus: 'closed_case',
dataType: '1',
casOptions: [],
agencyIdArray: [],
customerList: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
dateArray: [
{
label: '近一年',
value: '1'
},
{
label: '近一个月',
value: '2'
},
{
label: '近三个月',
value: '3'
},
{
label: '近半年',
value: '4'
},
{
label: '自定义',
value: '0'
},
],
tableList: [],
demand: {
loading: true,
colList: [
{
align: "center",
width: "5%",
},
{
align: "center",
width: "15%",
},
{
align: "center",
width: "25%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
],
header: ["序号", "所属组织", "事件内容", "上报渠道", "报事人", "手机号", "状态", "操作"],
list: [],
pageSize: 10,
pageNo: 1,
total: 0,
},
showProject: false,
eventId: '',
};
},
// mixins: [animate]
beforeDestroy () {
},
async created () {
},
async mounted () {
this.dataLoading = true
//
this.initData()
await this.getAgencylist()//
this.handleChangeDate(this.dataType)
//
await this.getProjectTotal()
await this.getLineChart()
this.dataLoading = false
// this.assignData()
},
methods: {
async getApiData () {
await this.getProjectTotal()
await this.getLineChart()
this.assignData()
},
async handleChangeDate (index) {
let end = new Date();
let start = new Date();
if (index === '1') {//
start.setFullYear(start.getFullYear() - 1);
console.log(start.getDate())
} else if (index === '2') {//
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
} else if (index === '3') {//
start.setTime(start.getTime() - 3600 * 1000 * 24 * 91);
} else if (index === '4') {//
start.setTime(start.getTime() - 3600 * 1000 * 24 * 183);
}
if (index != '0') {
this.queryStartTime = dateFormat(start, 'yyyy-MM-dd') + " 00:00:00"
this.queryEndTime = dateFormat(end, 'yyyy-MM-dd') + " 23:59:59"
}
if (index !== '0') {
await this.getApiData()
// this.assignPieChart()
}
},
assignData () {
this.getPie()
this.getLine()
},
handleSelectChange (value) {
this.queryStartTime = value[0] + " 00:00:00"
this.queryEndTime = value[1] + " 23:59:59"
this.getApiData();
},
//
async getAgencylist () {
const url = "/gov/org/customeragency/agencygridtree";
//const url = '/gov/org/customeragency/agencylist'
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.orgId = data.agencyId
//
++this.iscascaderShow
this.casOptions = []
this.agencyIdArray.length = []
if (data) {
this.casOptions.push(data)
this.agencyIdArray.push(this.orgId)
}
} else {
this.$message.error(msg);
}
},
//
async getProjectTotal () {
if (this.$refs.pieChart) {
this.$refs.pieChart.showLoading()
this.$refs.pieChart.clear()
}
const url = "/gov/project/icEvent/processAnalysis/processStatusRatio";
//const url = "http://yapi.elinkservice.cn/mock/245/api/gov/project/icEvent/processAnalysis/processStatusRatio";
let params = {
orgId: this.orgId,
orgType: this.orgType,
queryStartTime: this.queryStartTime,
queryEndTime: this.queryEndTime,
};
const { data, code, msg } = await requestPost(url, params);
if (this.$refs.pieChart) {
this.$refs.pieChart.hideLoading()
}
if (code === 0) {
this.projectTotal = parseInt(data.processingCount) + parseInt(data.closedCount);
this.legendArray = [
{
name: '已完成',
count: data.closedCount,
percent: data.closedRatio,
url: require('@/assets/img/shuju/measure/huang@2x.png')
},
{
name: '处理中',
count: data.processingCount,
percent: data.processingRatio,
url: require('@/assets/img/shuju/measure/lv@2x.png')
}
]
this.pieData = [
{
name: "已完成",
value: Math.floor(data.closedRatio * 10000) / 100
},
{
name: "处理中",
value: Math.floor(data.processingRatio * 10000) / 100
},
]
} else {
this.$message.error(msg);
}
},
//
async getTable () {
const url = "/gov/project/icEvent/processAnalysis/eventList";
//const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/processAnalysis/eventList";
let params = {
processStatus: this.processStatus,
orgId: this.orgId,
orgType: this.orgType,
queryStartTime: this.queryStartTime,
queryEndTime: this.queryEndTime,
pageNo: this.demand.pageNo,
pageSize: this.demand.pageSize,
biz: 'eventProcessAnalysis'
};
const { data, code, msg } = await requestPost(url, params);
this.demand.loading = false;
if (code === 0) {
this.demand.total = data.total;
this.tableList = data.list
this.demand.list = data.list.map((item, index) => {
return [
index + 1,
item.gridName ? item.gridName : '',
item.eventContent ? item.eventContent : '',
item.sourceTypeName ? item.sourceTypeName : '',
item.reportUserName ? item.reportUserName : '',
item.mobile ? item.mobile : 'processing',
item.processStatus ? item.processStatus === 'closed_case' ? '已完成' : '处理中' : '',
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}
},
handlePageNoChange_demand (val) {
this.demand.pageNo = val;
this.getTable();
},
toEventInfo (index) {
const { tableList } = this;
this.eventId = tableList[index].eventId
this.showProject = true
},
pieInitOk (dom) {
this.pieChartS = dom
this.pieInitState = true
},
lineInitOk () {
this.lineInitState = true
},
getLine () {
if (this.lineInitState) {
this.assignLineChart()
} else {
setTimeout(() => {
this.getLine()
}, 500)
}
},
// 线
async getLineChart () {
if (this.$refs.lineChart) {
this.$refs.lineChart.clear()
this.$refs.lineChart.showLoading()
}
const _that = this
// this.$refs.pieChart.showLoading()
const url = "/gov/project/icEvent/processAnalysis/monthlyIncrement";
//const url = "http://yapi.elinkservice.cn/mock/245/api/gov/project/icEvent/processAnalysis/monthlyIncrement";
let params = {
orgId: this.orgId,
orgType: this.orgType,
queryStartTime: this.queryStartTime,
queryEndTime: this.queryEndTime,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
// pieChart
this.lineXaxis = []
this.lineSeriesData = []
if (data && data.length > 0) {
this.lineNoData = false
data.forEach(item => {
this.lineXaxis.push(item.monthName)
this.lineSeriesData.push(item.increment)
});
this.lineData = data
} else {
this.lineNoData = true
}
if (this.$refs.lineChart) {
this.$refs.lineChart.hideLoading()
}
} else {
this.$message.error(msg);
}
},
assignLineChart () {
this.lineOption = lineOption()
this.$refs.lineChart.setOption(this.lineOption, true)
this.$refs.lineChart.setOption({
xAxis: { data: this.lineXaxis },
series: [
{ data: this.lineSeriesData },
]
}, true)
},
getPie () {
if (this.pieInitState) {
this.assignPieChart()
} else {
setTimeout(() => {
this.getPie()
}, 500)
}
},
//
async assignPieChart () {
let maxIndex = 0
const _that = this
// pieChart
this.pieOption = pieOption(this.pieChartS)
this.pieData[0].selected = false
this.pieData[1].selected = false
this.pieOption.title.text = this.projectTotal
this.clickPie()
let fun = function (params) {
_that.clickPie(params)
}
this.$refs.pieChart.handleClick(fun)
},
clickPie (params) {
let dataIndex = params ? params.dataIndex : null
let componentIndex = params ? params.componentIndex : null
if (componentIndex === 1) {//
if (dataIndex === 0) {
this.processStatus = 'closed_case'
} else if (dataIndex === 1) {
this.processStatus = 'processing'
}
} else if (componentIndex === 2) {//
this.processStatus = ''
dataIndex = 3
}
if (dataIndex === 3) {
this.$refs.pieChart.clear()
}
this.pieData.forEach((element, index) => {
if (index === dataIndex) {
element.selected = true
element.label = {
show: true,
};
element.labelLine = {
show: true,
lineStyle: {
opacity: 1,
}
};
// element.selected = !element.selected
} else {
element.selected = false
element.label = {
show: false,
};
element.labelLine = {
show: false,
lineStyle: {
opacity: 0,
color: 'rgba(255,255,255,0)'
}
};
element.selected = false
}
});
this.pieOption.series[1].data = this.pieData
this.demand.pageNo = 1
this.getTable()
// this.$refs.pieChart.hideLoading()
this.$refs.pieChart.setOption(this.pieOption)
},
handleChangeAgency () {
let obj = this.$refs["myCascader"].getCheckedNodes()[0].data
if (obj) {
this.orgType = obj.level === 'grid' ? 'grid' : 'agency'
this.orgId = obj.agencyId
} else {
this.orgId = ''
this.orgType = ''
}
this.getApiData()
},
//
initData () {
var time = (new Date).getTime() - 24 * 60 * 60 * 1000;
var nowdate = new Date(time); //
var y = nowdate.getFullYear();
var m = nowdate.getMonth() + 1 < 10 ? "0" + (nowdate.getMonth() + 1) : nowdate.getMonth() + 1;
var d = nowdate.getDate() < 10 ? "0" + nowdate.getDate() : nowdate.getDate();
this.dateIdShow = y + '-' + m + '-' + d;
},
},
props: {
uid: {
type: String,
default: "",
// default: "8ada68cb6f1e4b9a8333348a39ef3aee",
},
},
computed: {},
components: {
cptCard,
cptTb,
screenEchartsFrame,
eventInfo,
ScreenLoading,
ScreenNodata
},
watch: {
dateIdShow () {
// let dataArray = this.dateIdShow.split('-')
// this.dateId = dataArray.join('')
},
uid (id) {
this.userId = id;
},
userId () {
// this.getApiData();
window.scrollTo(0, 0);
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/visual/shijianchulifenxi.scss"
scoped
></style>
<style
lang="scss"
src="@/assets/scss/modules/visual/search_1.scss"
scoped
></style>

12
src/views/modules/visual/communityParty/gridParty.vue

@ -166,7 +166,7 @@ export default {
await this.loadOrgData()
// this.loadMap()
this.getMapData()
await this.getWorkUserInfo()
// await this.getWorkUserInfo()
// this.isfirstInit = false
// end
},
@ -458,6 +458,16 @@ export default {
if (code === 0) {
this.orgData = data
this.agencyInfo = data //
if (!this.agencyInfo.latitude) {
this.agencyInfo.latitude = 36.072227
}
if (!this.agencyInfo.longitude) {
this.agencyInfo.longitude = 120.389455
}
if (!this.agencyInfo.level) {
this.agencyInfo.level = 'street'
}
this.orgId = this.orgData.id
this.orgType = this.orgData.level
this.parentPolygon = []

12
src/views/modules/visual/components/screen-map/index.vue

@ -189,8 +189,13 @@ const vueGis = {
],
//icon
iconUrlArray: [],
<<<<<<< HEAD
iconTextColor: "#ffffff",
distanceMax: null, //
=======
iconTextColor: '#ffffff',
distanceMax: null,//
>>>>>>> feature/dev_party_mange
input_lat: null,
input_lon: null,
@ -652,8 +657,9 @@ const vueGis = {
});
map.addLayer(polygonLayer)
if (this.$route.path == '/main-shuju/visual-communityParty-gridParty' || this.$route.path == '/main-shuju/visual-communityParty-community') { // 2022.6.9
if (this.$route.path == '/main-shuju/visual-communityGovern-duoyuanfuwu-duoyuanfuwufenxi' || this.$route.path == '/main-shuju/visual-communityParty-gridParty' || this.$route.path == '/main-shuju/visual-communityParty-community') { // 2022.6.9
console.log('去掉默认点击')
} else {
map.addInteraction(select);
@ -919,4 +925,8 @@ export default vueGis;
// color: rgba(1, 17, 104, 1);
color: #fff;
}
<<<<<<< HEAD
</style>
=======
</style>
>>>>>>> feature/dev_party_mange

17
src/views/modules/visual/cpts/tb.vue

@ -21,22 +21,13 @@
<tbody class="table-body">
<tr class="table-body-tr"
v-for="(value, index) in list"
:key="index"
@click="handleClickRow(index)">
:key="index">
<td class="td"
v-for="(item, indexs) in value"
:key="indexs">
<div v-if="typeof item === 'string' || typeof item === 'number'">
{{ item }}
</div>
<div v-if="typeof item === 'object'&& item.type === 'img'">
<!-- <span>{{ item.type+ item.src}}</span> -->
<img style="width:18px;height:18px"
:src="item.src"
alt="" />
</div>
<div v-if="typeof item === 'object' && item && item.type == 'index'">
<img v-if="highlightTop3 && index == 0"
src="@/assets/img/shuju/top/1.png"
@ -148,10 +139,6 @@ export default {
created () { },
methods: {
//
handleClickRow (index) {
this.$emit("handleClickRow", index);
},
handleClickBtn (index, type) {
this.$emit("operate", index, type);
},
@ -204,7 +191,7 @@ export default {
box-sizing: border-box;
text-align: center;
border: none;
padding: 10px 5px;
padding: 20px 5px;
> div {
overflow: hidden;

2
src/views/modules/workPc/guidance/DetailForm.vue

@ -69,6 +69,8 @@
<Tinymce class="tinymce_view"
v-if="formType!='D'"
:ref="item.moduleId"
:id="item.moduleId"
v-model="item.moduleContent"
:height="450"
:customerId="customerId"

Loading…
Cancel
Save