Browse Source

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

shibei_master
jiangyy 4 years ago
parent
commit
9e68aa580c
  1. 1
      package.json
  2. 2
      public/index.html
  3. 644
      public/tinymce/skins/ui/tduck/skin.css
  4. 19
      src/App.vue
  5. BIN
      src/assets/img/add.png
  6. BIN
      src/assets/img/shequ/close.png
  7. BIN
      src/assets/img/shuju/measure/qydw.png
  8. 6
      src/assets/scss/main-shuju.scss
  9. 157
      src/assets/scss/modules/management/categoryMain.scss
  10. 219
      src/assets/scss/modules/search.scss
  11. 6
      src/assets/scss/modules/visual/basicInfoMain.scss
  12. 28
      src/assets/scss/modules/visual/personCategory.scss
  13. 118
      src/assets/scss/people-info.scss
  14. 2
      src/js/store/index.js
  15. 2
      src/main.js
  16. 4
      src/router/index.js
  17. 2
      src/store/index.js
  18. 2
      src/views/components/editResi.vue
  19. 297
      src/views/components/resiChangeRecord.vue
  20. 20
      src/views/components/resiSearch.vue
  21. 491
      src/views/components/resiTransfer.vue
  22. 10
      src/views/components/scoreRecord.vue
  23. 184
      src/views/main-content.vue
  24. 11
      src/views/main-shuju/main-navbar.vue
  25. 124
      src/views/main-shuju/main.vue
  26. 2
      src/views/main-theme-tools.vue
  27. 42
      src/views/main.vue
  28. 205
      src/views/modules/base/category/addCategory.vue
  29. 184
      src/views/modules/base/category/main.vue
  30. 13
      src/views/modules/base/community/community.vue
  31. 526
      src/views/modules/base/resi.vue
  32. 4
      src/views/modules/communityParty/elegant/index.vue
  33. 7
      src/views/modules/communityParty/regionalParty/activitys.vue
  34. 366
      src/views/modules/communityParty/regionalParty/activitysForm.vue
  35. 12
      src/views/modules/communityParty/regionalParty/finishList.vue
  36. 30
      src/views/modules/communityParty/regionalParty/units.vue
  37. 28
      src/views/modules/communityParty/regionalParty/unitsForm.vue
  38. 3
      src/views/modules/communityService/shzz/index.vue
  39. 310
      src/views/modules/communityService/sqzzz/index.vue
  40. 211
      src/views/modules/shequ/cpts/fangwu-info.vue
  41. 184
      src/views/modules/shequ/cpts/pan-chart.vue
  42. 506
      src/views/modules/shequ/cpts/people-more.vue
  43. 228
      src/views/modules/shequ/cpts/xuqiu-info.vue
  44. 1015
      src/views/modules/shequ/index.vue
  45. 221
      src/views/modules/visual/basicinfo/basicInfoCommunity.vue
  46. 142
      src/views/modules/visual/basicinfo/basicInfoMain.vue
  47. 28
      src/views/modules/visual/basicinfo/personCategory/index.vue
  48. 69
      src/views/modules/visual/basicinfo/personCategory/recordList.vue
  49. 2
      src/views/modules/visual/communityGovern/cpt/project-info.vue
  50. 138
      src/views/modules/visual/communityGovern/processAnalyze.vue
  51. 179
      src/views/modules/visual/communityGovern/resiPieOption copy.js
  52. 25
      src/views/modules/visual/communityGovern/resiPieOption.js
  53. 523
      src/views/modules/visual/communityGovern/resibuzz copy.vue
  54. 29
      src/views/modules/visual/communityGovern/resibuzz.vue
  55. 1
      src/views/modules/visual/communityGovern/typeAnalyze.vue
  56. 14
      src/views/modules/visual/communityParty/community.vue
  57. 31
      src/views/modules/visual/communityParty/party.vue
  58. 20
      src/views/modules/visual/components/screen-map/index.vue
  59. 24
      src/views/modules/visual/cpts/line-chart.vue
  60. 6
      src/views/modules/visual/heart/index.vue
  61. 5
      src/views/modules/visual/measure/dialogInfo.vue
  62. 2
      src/views/modules/visual/measure/service.vue
  63. 2
      src/views/modules/visual/measure/volunteer.vue
  64. 64
      src/views/modules/visual/warning/components/screen-table/index.vue
  65. 2
      src/views/modules/visual/warning/index.vue

1
package.json

@ -50,6 +50,7 @@
"xlsx": "^0.17.1"
},
"devDependencies": {
"@antv/f2": "^3.8.10-beta.1",
"@vue/cli-plugin-babel": "^3.10.0",
"@vue/cli-plugin-eslint": "^3.10.0",
"@vue/cli-service": "^3.10.0",

2
public/index.html

@ -7,7 +7,7 @@
<link rel="shortcut icon" href="<%= BASE_URL %>favicon.ico" />
<script charset="utf-8" src="https://map.qq.com/api/gljs?v=1.exp&libraries=service&key=LWBBZ-TIGC3-VFP3L-YNMWH-FJB7T-JFBLO"></script>
<!-- f2图表 -->
<script src="https://gw.alipayobjects.com/os/antv/assets/f2/3.4.2/f2.min.js"></script>
<!-- <script src="https://gw.alipayobjects.com/os/lib/antv/f2/3.8.1/dist/f2.min.js"></script> -->
<!-- 站点配置 -->
<script>

644
public/tinymce/skins/ui/tduck/skin.css

File diff suppressed because it is too large

19
src/App.vue

@ -86,7 +86,7 @@ export default {
if (!that.timer) {
that.timer = true
// window.onresizevuex
setTimeout(function() {
setTimeout(function () {
that.setClientHeight(document.documentElement.clientHeight)
// debugger
if (document.documentElement.clientHeight < 800) {
@ -104,3 +104,20 @@ export default {
}
}
</script>
<style lang="scss">
.tox-dialog__disable-scroll {
.tox-tinymce-aux {
z-index: 130000000;
}
.tox .tox-dialog-wrap {
z-index: 110000000;
}
.tox .tox-dialog-wrap__backdrop {
z-index: 100000;
}
.tox .tox-dialog {
z-index: 200000;
}
}
</style>

BIN
src/assets/img/add.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

BIN
src/assets/img/shequ/close.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 425 B

BIN
src/assets/img/shuju/measure/qydw.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

6
src/assets/scss/main-shuju.scss

@ -352,8 +352,12 @@ body {
border-top: 1px dashed rgba(#fff, 0.4);
color: rgba(#fff, 0.7);
transition: all ease 0.5s;
&.z-on {
font-weight: bold;
}
&.z-on,
&:hover {
color: #fff;
color: #ffd;
}
}
}

157
src/assets/scss/modules/management/categoryMain.scss

@ -0,0 +1,157 @@
.div_main {
box-sizing: border-box;
height: 100%;
width: 100%;
background: #ffffff;
border-radius: 5px;
padding: 35px 0 15px;
}
.div_tip {
font-size: 24px;
font-family: PingFang SC;
font-weight: bold;
color: #333333;
margin-left: 42px;
}
.div_list {
box-sizing: border-box;
margin-top: 5px;
height: calc(100vh - 210px);
}
.div_all_list {
height: calc(100vh - 260px);
}
.div_room {
// height: calc(88vh - 40px);
// margin-top: 9px;
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
margin-left: 42px;
// margin: 0 21px 0 21px;
.item {
width: 340px;
height: 120px;
background: #ffffff;
box-shadow: 0px 0px 17px 3px #eaeaea;
border-radius: 6px;
margin: 15px 25px 15px 0;
display: flex;
position: relative;
.item_category {
width: 100%;
display: flex;
align-items: center;
padding: 17px 16px;
> img {
width: 86px;
height: 86px;
}
.item_content {
margin-left: 16px;
width: 100%;
text-align: left;
display: flex;
flex-direction: column;
justify-content: flex-start;
.item_count {
font-size: 28px;
font-family: PingFang SC;
font-weight: bold;
color: #333333;
}
.item_row2 {
margin-top: 21px;
display: flex;
justify-content: space-between;
.row_left {
font-size: 20px;
font-family: PingFang SC;
font-weight: 500;
color: #202020;
}
.row_right {
margin: 5px 10px 0 0;
font-size: 16px;
font-family: PingFang SC;
font-weight: 500;
text-decoration: underline;
color: #00a7a9;
cursor: pointer;
}
}
}
> span {
margin-left: 16px;
font-size: 24px;
}
}
.item_add {
cursor: pointer;
font-size: 24px;
font-family: PingFang SC;
font-weight: 500;
color: #333333;
display: flex;
align-items: center;
padding: 17px 16px;
> img {
width: 86px;
height: 86px;
}
> span {
font-size: 24px;
font-family: PingFang SC;
font-weight: 500;
color: #333333;
margin-left: 16px;
}
}
.icon_circle {
cursor: pointer;
position: absolute;
top: -10px;
right: -10px;
height: 23px;
width: 23px;
background-color: #ffffff;
border-radius: 50%;
border: 1px solid #a5a5a5;
}
.icon_sel {
cursor: pointer;
background-color: #6bb9f8;
border: 1px solid #6bb9f8;
}
}
}
.div_room::after {
content: '';
flex: 1;
}
.div_btn {
margin-top: 15px;
display: flex;
width: 100%;
justify-content: center;
.btn_right {
margin-left: 50px;
}
}

219
src/assets/scss/modules/search.scss

@ -0,0 +1,219 @@
@import "../c/config";
@import "../c/function";
.m-info {
padding: 0;
.wrap {
background-color: #fff;
border-radius: 10px;
padding: 30px 40px;
.logo {
margin-bottom: 30px;
img {
display: block;
margin: 0 auto;
}
}
.search {
margin: 0 auto 30px;
width: 750px;
height: 53px;
border: 2px solid #0082fb;
border-radius: 8px;
display: flex;
align-items: center;
.input {
position: relative;
select {
border: none;
font-size: 16px;
width: 90px;
line-height: 32px;
text-align: center;
color: #0082fb;
}
input {
margin-left: 20px;
width: 500px;
border: none;
line-height: 24px;
font-size: 18px;
font-family: PingFang SC;
font-weight: 400;
color: #333;
}
.close-btn {
position: absolute;
right: 0;
top: 0;
bottom: 0;
margin: auto 0;
width: 30px;
height: 30px;
background-color: #eee;
border-radius: 100%;
cursor: pointer;
img {
display: block;
margin: 8px auto;
width: 14px;
height: 14px;
opacity: 0.3;
}
}
}
.btn {
margin-left: auto;
width: 120px;
line-height: 49px;
background: #0082fb;
border-radius: 0px 6 px 6 px 0px;
font-size: 22px;
text-align: center;
font-family: PingFang SC;
font-weight: 500;
color: #ffffff;
cursor: pointer;
}
}
}
}
.m-panel {
background-color: #fff;
border-radius: 10px;
padding: 30px 40px;
.operate {
text-align: right;
}
}
.m-list {
.list-title {
margin-bottom: 20px;
font-size: 24px;
font-family: PingFang SC;
font-weight: bold;
color: #333333;
}
.list-title2 {
margin-bottom: 10px;
font-size: 16px;
font-family: PingFang SC;
font-weight: bold;
color: #333333;
}
.list {
display: flex;
flex-wrap: wrap;
.item {
position: relative;
margin-right: 46px;
margin-bottom: 20px;
width: 80px;
text-align: center;
cursor: pointer;
.corner-mark {
position: absolute;
top: -4px;
right: -4px;
color: #ccc;
font-size: 20px;
z-index: 1;
&.z-on {
color: #0082fb;
}
}
.icon {
position: relative;
display: block;
margin: 0 auto;
width: 78px;
height: 78px;
&::before {
content: "";
position: absolute;
z-index: 0;
display: block;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
width: 64px;
height: 64px;
border-radius: 10px;
background-color: #f4f4f4;
}
img {
position: relative;
width: 78px;
height: 78px;
object-fit: cover;
}
.icon-svg {
position: relative;
display: block;
margin: auto;
width: 78px;
height: 78px;
object-fit: cover;
}
}
p {
margin: 0;
line-height: 24px;
font-size: 16px;
font-family: PingFang SC;
font-weight: 400;
color: #333333;
}
}
}
}
.m-tb {
margin-bottom: 20px;
}
.m-data {
padding: 0;
margin-top: 20px;
.wrap {
background-color: #fff;
border-radius: 10px;
padding: 30px 40px;
.headline {
margin-bottom: 20px;
font-size: 24px;
font-family: PingFang SC;
font-weight: bold;
color: #333333;
}
.cnt {
display: flex;
.chart {
width: 520px;
}
.tb {
width: calc(100% - 520px);
}
}
}
}

6
src/assets/scss/modules/visual/basicInfoMain.scss

@ -37,7 +37,7 @@
width: 100%;
// padding: 10px 5px 13px;
// margin-top: 8px;
height: calc(88vh - 5px);
height: calc(88vh - 15px);
color: #fff;
// background: url('../../../img/modules/visual/warning-box.png') no-repeat
// center;
@ -105,7 +105,7 @@
box-sizing: border-box;
width: 100%;
margin-top: 21px;
height: calc(88vh - 77px);
height: calc(88vh - 87px);
color: #fff;
background: url('../../../img/modules/visual/warning-box.png') no-repeat
center;
@ -193,7 +193,7 @@
flex: 0 0 calc(100vw - 620px);
// width: calc(100vw - 560px);
height: calc(88vh);
height: calc(88vh - 10px);
color: #fff;
background: url('../../../img/modules/visual/warning-box.png') no-repeat
center;

28
src/assets/scss/modules/visual/personCategory.scss

@ -35,7 +35,7 @@
margin-top: 10px;
margin-left: 10px;
margin-right: 15px;
margin-bottom: 15px;
margin-bottom: 20px;
cursor: pointer;
&-img {
@ -138,31 +138,5 @@
height: calc(100% - 300px);
min-height: 300px;
margin-top: 60px;
.pagination {
box-sizing: border-box;
margin-top: 20px;
width: 100%;
height: 40px;
display: flex;
justify-content: flex-end;
/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active {
background: #0266d1;
color: #000d3f;
}
/deep/ .el-pagination .el-pager li {
background: #002e74;
}
/deep/ .el-pagination .btn-prev {
background: #002e74;
}
/deep/ .el-pagination .btn-next {
background: #002e74;
}
}
}
}

118
src/assets/scss/people-info.scss

@ -0,0 +1,118 @@
@import "c/config";
@import "c/function";
.m-pop {
@include shield;
background-color: rgba(#000, 0.5);
overflow-y: auto;
.wrap {
position: relative;
margin: 120px auto;
padding: 20px;
width: 1000px;
background-color: #fff;
.title {
padding: 10px;
font-size: 22px;
font-family: PingFang SC;
font-weight: 800;
color: #333;
display: flex;
align-items: center;
img {
display: block;
margin-right: 5px;
}
span {
display: block;
}
}
.btn-close {
position: absolute;
top: -30px;
right: -30px;
cursor: pointer;
}
.list {
display: flex;
flex-wrap: wrap;
padding: 10px 30px;
.item {
position: relative;
box-sizing: border-box;
padding: 0 15px;
width: 33%;
color: #fff;
font-size: 18px;
font-family: PingFang SC;
font-weight: 400;
color: #333;
line-height: 24px;
margin: 20px 0;
&::before {
position: absolute;
left: 0;
top: 9px;
content: "";
display: block;
width: 7px;
height: 7px;
background: #ddd;
border-radius: 3px;
}
}
}
.line {
margin: 20px auto;
width: 900px;
height: 1px;
border: 1px dashed #ddd;
}
.tabs {
margin-top: 30px;
display: flex;
align-items: center;
padding-left: 20px;
.tab-btn {
width: 30px;
text-align: center;
cursor: pointer;
}
.tab {
margin: 0 5px;
min-width: 76px;
padding: 0 5px;
height: 30px;
background: #fff;
border: 1px solid #eee;
box-shadow: 0 0 10px 0 inset #ddd;
border-radius: 2px;
text-align: center;
font-size: 14px;
font-family: PingFang SC;
font-weight: 400;
color: #333;
line-height: 30px;
cursor: pointer;
transition: all ease 0.1s;
&.z-on {
background: linear-gradient(90deg, #1a5afd, #009cff);
box-shadow: none;
color: #ffffff;
border: 1px solid #1a5afd;
}
}
}
}
}

2
src/js/store/index.js

@ -28,7 +28,7 @@ export default new Vuex.Store({
{
...window.SITE_CONFIG["contentTabDefault"],
name: "indexWork",
title: "indexWork",
title: "首页",
},
],
contentTabsActiveName: "indexWork",

2
src/main.js

@ -32,10 +32,10 @@ import getQueryPara from "dai-js/modules/getQueryPara";
// 兼容token传参登录
if (getQueryPara("token")) {
console.log('token', getQueryPara("token"));
Cookies.set("token", getQueryPara("token"));
}
window.app = Object.assign(
{},
{

4
src/router/index.js

@ -52,7 +52,7 @@ export const moduleRoutes = {
component: () => import("@/views/main"),
name: "main",
redirect: {
path: "/main/base-resi",
path: "/main/shequ-index",
},
meta: {
title: "主入口布局",
@ -443,7 +443,7 @@ function fnAddDynamicMenuRoutes2(menuList = [], routes = []) {
component: null,
name: "",
meta: {
...window.SITE_CONFIG["contentTabDefault"],
// ...window.SITE_CONFIG["contentTabDefault"],
menuId: menuList[i].id,
title: menuList[i].name,
},

2
src/store/index.js

@ -24,7 +24,7 @@ export default new Vuex.Store({
{
...window.SITE_CONFIG['contentTabDefault'],
'name': 'indexWork',
'title': 'indexWork'
'title': '首页'
}
],
contentTabsActiveName: 'indexWork',

2
src/views/components/editResi.vue

@ -14,7 +14,7 @@
<el-row v-if="fixed" class="resi-row">
<!-- <el-col v-for="n in item" :key="n.id" :span="n.itemType === 'textarea'&&24 || (24/columns)"> -->
<el-col :span="6">
<el-form-item prop="GRID_ID" label="所属网格" required>
<el-form-item prop="GRID_ID" label="所属网格">
<!-- <div class="resi-cell"> -->
<!-- <div class="resi-cell-label">{{n.label}}</div> -->
<div class="resi-cell-value">

297
src/views/components/resiChangeRecord.vue

@ -0,0 +1,297 @@
<template>
<div class="div_main">
<el-table class="table"
:data="tableData"
border
:height="tableHeight"
v-loading="tableLoading"
:header-cell-style="{background:'#2195FE',color:'#FFFFFF'}"
style="width: 100%">
<el-table-column label="序号"
header-align="center"
align="center"
type="index"
width="50"></el-table-column>
<el-table-column prop="typeName"
header-align="center"
align="center"
label="变更类型"
width="80">
</el-table-column>
<el-table-column prop="beforeChangeName"
header-align="center"
align="center"
label="变更前"
width="230">
</el-table-column>
<el-table-column prop="afterChangeName"
header-align="center"
align="center"
label="变更后"
min-width="230">
</el-table-column>
<el-table-column prop="changeTime"
header-align="center"
align="center"
label="调整时间"
width="160">
</el-table-column>
<el-table-column prop="operatorName"
header-align="center"
align="center"
label="操作人"
width="80">
</el-table-column>
<el-table-column prop="remark"
header-align="center"
align="center"
label="备注"
width="120">
</el-table-column>
</el-table>
<div>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[10, 20, 50]"
:page-size="pageSize"
layout="sizes, prev, pager, next, total"
:total="total">
</el-pagination>
</div>
</div>
</template>
<script>
import util from '@js/util.js';
import { requestPost } from "@/js/dai/request";
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
let loading //
export default {
data () {
return {
loading: false,
total: 0,
pageSize: 10,
pageNo: 0,
tableLoading: false,
tableData: [],
icUserId: '',
}
},
async mounted () {
},
methods: {
async initForm (row) {
this.icUserId = row.icResiUserId
//
await this.loadTable()
},
handleSearch () {
this.loadTable()
},
async loadTable () {
this.tableLoading = true
const url = "/epmetuser/icuserchangerecord/list"
let params = {
icUserId: this.icUserId,
pageSize: this.pageSize,
pageNo: this.pageNo,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.total = data.total
this.tableData = data.list
} else {
this.$message.error(msg)
}
this.tableLoading = false
},
//
initDate () {
let yesterday = new Date((new Date).getTime() - 24 * 60 * 60 * 1000)
let year = yesterday.getFullYear()
let month = yesterday.getMonth() + 1 //
let day = yesterday.getDate() //
let days = new Date(year, month, 0);
days = days.getDate(); //
let year2 = year;
let month2 = parseInt(month) - 1;
if (month2 == 0) {
year2 = parseInt(year2) - 1;
month2 = 12;
}
let day2 = day;
let days2 = new Date(year2, month2, 0);
days2 = days2.getDate();
if (day2 > days2) {
day2 = days2;
}
if (month2 < 10) {
month2 = '0' + month2;
}
if (month < 10) {
month = '0' + month;
}
if (day < 10) {
day = '0' + day;
}
if (day2 < 10) {
day2 = '0' + day2;
}
let t2 = year2 + '-' + month2 + '-' + day2;
let t1 = year + '-' + month + '-' + day;
// let t3 = formate(t2, style);
this.formData.startTime = t2 + ' 00:00:00'
this.formData.endTime = t1 + ' 23:59:59'
this.timeRange = [t2, t1]
},
handleTimeChange (time) {
if (time) {
const startTimeArray = util.dateFormatter(time[0], 'date').split('-')
const endTimeArray = util.dateFormatter(time[1], 'date').split('-')
this.formData.startTime = startTimeArray[0] + '-' + startTimeArray[1] + '-' + startTimeArray[2] + ' 00:00:00'
this.formData.endTime = endTimeArray[0] + '-' + endTimeArray[1] + '-' + endTimeArray[2] + ' 23:59:59'
// this.startTimeShow = startTimeArray[0] + '' + startTimeArray[1] + '' + startTimeArray[2] + ''
// this.endTimeShow = endTimeArray[0] + '' + endTimeArray[1] + '' + endTimeArray[2] + ''
} else {
this.formData.startTime = ''
this.formData.endTime = ''
// this.startTimeShow = ''
// this.endTimeShow = ''
}
this.loadTable()
},
handleSizeChange (val) {
this.pageSize = val
this.pageNo = 1
this.loadTable()
},
handleCurrentChange (val) {
this.pageNo = val
this.loadTable()
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
tableHeight () {
return (this.clientHeight - 460)
},
rowHeight () {
return (this.clientHeight - 200) + 'px'
},
...mapGetters(['clientHeight'])
},
watch: {
},
props: {
serviceType: {
type: String,
default: ''
}
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/buttonstyle.scss";
.div_main {
background: #ffffff;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
border-radius: 4px;
margin-top: 15px;
padding: 23px 30px 10px;
}
.div_search {
background: #ffffff;
border-radius: 4px;
padding: 30px 20px 5px;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
}
.item_width_1 {
width: 260px;
}
.item_width_2 {
width: 495px;
}
.div_table {
background: #ffffff;
box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.1);
border-radius: 4px;
margin-top: 15px;
padding: 23px 30px 10px;
.table {
margin-top: 20px;
}
}
.el-row {
/* margin-bottom: 20px; */
display: flex;
flex-wrap: wrap;
margin-top: 10px;
margin-right: 50px;
}
</style>

20
src/views/components/resiSearch.vue

@ -207,10 +207,14 @@ export default {
formList: {
type: Array,
default: () => []
},
columnName: {
type: String,
default: ''
}
},
data() {
let initForm = (arr) => {
let initForm = (arr, columnName) => {
let _form = {}
// console.log('formInfo', obj)
// if (Object.keys(obj).length > 0) {
@ -218,12 +222,19 @@ export default {
// return _form
// }
arr.forEach((item) => {
_form[item.columnName] = ''
if (columnName && columnName === item.columnName) _form[item.columnName] = '1'
else _form[item.columnName] = ''
})
return _form
}
let form = initForm(this.formList)
let tempFormList = [...this.formList]
let form = initForm(this.formList, this.columnName)
let tempFormList = this.formList.map(item => {
return {
...item,
isChange: this.columnName && this.columnName === item.columnName ? true : false
}
})
let constForm = {
...form,
GRID_ID: '',
@ -339,6 +350,7 @@ export default {
// console.log('formcccc---', this.form)
this.getGridList()
this.getValiheList()
if (this.columnName) this.handleChangeForm(this.columnName)
},
methods: {
initForm() {

491
src/views/components/resiTransfer.vue

@ -0,0 +1,491 @@
<template>
<div>
<div>
<el-form 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="迁出类型"
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='newAgencyId'
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="newNeighborHoodId">
<div class="resi-cell-col">
<el-select v-model.trim="dataForm.newNeighborHoodId"
placeholder="请选择小区"
clearable
class="item_width_1"
@change="handleChangeCommunity">
<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.newBuildingId"
placeholder="请选择楼号"
clearable
class="item_width_1 margin_left10"
@change="handleChangeBuilding">
<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.newBuildingUnitId"
placeholder="请选择单元"
clearable
class="item_width_1 margin_left10"
@change="handleChangeUnit">
<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.newHouseId"
placeholder="请选择房号"
clearable
class="item_width_1 margin_left10">
<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>
<el-form-item label="备注"
prop="remark"
label-width="150px">
<el-input type="textarea"
:autosize="{ minRows: 4, maxRows: 7}"
:rows="5"
resize="none"
style="width:600px"
placeholder='请输入备注'
v-model="dataForm.remark">
</el-input>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button @click="handleCancle"> </el-button>
<el-button type="primary"
:disabled="btnDisable"
@click="handleComfirm"> </el-button>
</div>
</div>
</template>
<script>
import util from '@js/util.js';
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
let loading //
export default {
data () {
return {
btnDisable: false,
communityList: [],
buildingList: [],
unitList: [],
roomList: [],
dataForm: {
icUserId: '', // ID
type: 'in',//out,in
newAgencyId: '',//Id
newGridId: '',//Id
newNeighborHoodId: '',//ID
newBuildingId: '',//Id
newBuildingUnitId: '',//Id
newHouseId: '', //Id
transferTime: '', //
remark: '' //
},
customerId: '',//id
userId: '',//id
gridName: '',
rootAgency: {},
casOptions: [],
agencyIdArray: [],
customerList: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
// checkStrictly: true
},
selGrid: {},
}
},
components: {},
mounted () {
},
methods: {
async initForm (row) {
this.customerId = localStorage.getItem("customerId");
this.$refs.ref_form.resetFields();
// this.icUserId = row.icResiUserId
this.gridName = row.GRID_ID
this.dataForm.icUserId = row.icResiUserId
await this.loadRootAgency()
await this.getAgencylist()
},
//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.newAgencyId = this.selGrid.pid
this.dataForm.newGridId = this.selGrid.agencyId
this.loadCommunityList()
this.dataForm.newNeighborHoodId = ''//ID
this.dataForm.newBuildingId = ''//Id
this.dataForm.newBuildingUnitId = ''//Id
this.dataForm.newHouseId = '' //Id
},
async loadCommunityList () {
const url = '/gov/org/icneighborhood/neighborhoodoption'
let params = {
gridId: this.dataForm.newGridId,
agencyId: this.dataForm.newAgencyId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.communityList = []
this.communityList = [...data]
} else {
this.$message.error(msg)
}
},
async handleChangeCommunity () {
const url = '/gov/org/icbuilding/buildingoption'
let params = {
neighborHoodId: this.dataForm.newNeighborHoodId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.buildingList = []
this.buildingList = [...data]
this.dataForm.newBuildingId = ''//Id
this.dataForm.newBuildingUnitId = ''//Id
this.dataForm.newHouseId = '' //Id
} else {
this.$message.error(msg)
}
},
async handleChangeBuilding () {
const url = '/gov/org/icbuildingunit/unitoption'
let params = {
buildingId: this.dataForm.newBuildingId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.unitList = []
this.unitList = [...data]
this.dataForm.newBuildingUnitId = ''//Id
this.dataForm.newHouseId = '' //Id
} else {
this.$message.error(msg)
}
},
async handleChangeUnit () {
const url = '/gov/org/ichouse/houseoption'
let params = {
unitId: this.dataForm.newBuildingUnitId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.roomList = []
this.roomList = [...data]
this.dataForm.newHouseId = '' //Id
} else {
this.$message.error(msg)
}
},
async handleComfirm () {
this.btnDisable = true
setTimeout(() => {
this.btnDisable = false
}, 2000)
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj)
} else {
if (this.dataForm.type === 'in') {
if (!this.dataForm.newBuildingId) {
this.$message.warning('请选择楼宇')
return false
}
if (!this.dataForm.newBuildingUnitId) {
this.$message.warning('请选择单元')
return false
}
if (!this.dataForm.newHouseId) {
this.$message.warning('请选择房间')
return false
}
}
this.saveForm()
}
})
},
async saveForm () {
const url = '/epmetuser/icusertransferrecord/add'
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()
} else {
this.$message.error(msg)
}
},
handleCancle () {
this.resetData()
this.$emit('dialogCancle')
},
resetData () {
this.dataForm = {
icUserId: '', // ID
type: 'in',//out,in
newAgencyId: '',//Id
newGridId: '',//Id
newNeighborHoodId: '',//ID
newBuildingId: '',//Id
newBuildingUnitId: '',//Id
newHouseId: '', //Id
transferTime: '', //
remark: '' //
}
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()
}
}
},
computed: {
dataRule () {
return {
type: [
{ required: true, message: '操作类型不能为空', trigger: 'blur' },
],
newAgencyId: [
{ required: true, message: '所选组织不能为空', trigger: 'blur' }
],
newNeighborHoodId: [
{ required: true, message: '所属家庭不能为空', trigger: 'blur' }
],
}
},
},
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>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

10
src/views/components/scoreRecord.vue

@ -121,7 +121,7 @@ export default {
pickerOptions: { //
disabledDate (time) {
return time.getTime() > (Date.now() - (24 * 60 * 60 * 1000))
return time.getTime() > (Date.now())
}
},
@ -192,11 +192,11 @@ export default {
//
initDate () {
let yesterday = new Date((new Date).getTime() - 24 * 60 * 60 * 1000)
let today = new Date((new Date).getTime())
let year = yesterday.getFullYear()
let month = yesterday.getMonth() + 1 //
let day = yesterday.getDate() //
let year = today.getFullYear()
let month = today.getMonth() + 1 //
let day = today.getDate() //
let days = new Date(year, month, 0);
days = days.getDate(); //

184
src/views/main-content.vue

@ -4,44 +4,61 @@
<template v-if="$route.meta.isTab && !$store.state.inIframe">
<el-dropdown class="aui-content--tabs-tools">
<i class="el-icon-arrow-down"></i>
<el-dropdown-menu slot="dropdown"
:show-timeout="0">
<el-dropdown-item @click.native="tabRemoveHandle($store.state.contentTabsActiveName)">{{ $t('contentTabs.closeCurrent') }}</el-dropdown-item>
<el-dropdown-item @click.native="tabsCloseOtherHandle()">{{ $t('contentTabs.closeOther') }}</el-dropdown-item>
<el-dropdown-item @click.native="tabsCloseAllHandle()">{{ $t('contentTabs.closeAll') }}</el-dropdown-item>
<el-dropdown-menu slot="dropdown" :show-timeout="0">
<el-dropdown-item
@click.native="tabRemoveHandle($store.state.contentTabsActiveName)"
>{{ $t("contentTabs.closeCurrent") }}</el-dropdown-item
>
<el-dropdown-item @click.native="tabsCloseOtherHandle()">{{
$t("contentTabs.closeOther")
}}</el-dropdown-item>
<el-dropdown-item @click.native="tabsCloseAllHandle()">{{
$t("contentTabs.closeAll")
}}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<el-tabs v-model="$store.state.contentTabsActiveName"
@tab-click="tabSelectedHandle"
@tab-remove="tabRemoveHandle">
<el-tab-pane v-for="item in $store.state.contentTabs"
:key="item.name"
:name="item.name"
:label="item.title"
:closable="item.name !== 'home'"
:class="{ 'is-iframe': tabIsIframe(item.iframeURL) }">
<template v-if="item.name === 'home'">
<svg slot="label"
class="icon-svg aui-content--tabs-icon-nav"
aria-hidden="true">
<el-tabs
v-model="$store.state.contentTabsActiveName"
@tab-click="tabSelectedHandle"
@tab-remove="tabRemoveHandle"
>
<el-tab-pane
v-for="item in $store.state.contentTabs"
:key="item.name"
:name="item.name"
:label="item.title"
:closable="item.name !== 'indexWork'"
:class="{ 'is-iframe': tabIsIframe(item.iframeURL) }"
>
<template v-if="item.name === 'indexWork'">
<svg
slot="label"
class="icon-svg aui-content--tabs-icon-nav"
aria-hidden="true"
>
<use xlink:href="#icon-home"></use>
</svg>
</template>
<template v-if="tabIsIframe(item.iframeURL)">
<iframe :src="item.iframeURL + '?token=' + token + '&customerId=' + customerId"
ref="iframes"
class="iframes"
id="iframes"
width="100%"
height="100%"
frameborder="0"
scrolling="yes"
></iframe>
<!-- <div v-if="tabIsIframe(item.iframeURL)" id="addend-iframe" style="height: 100%;"> </div> -->
<iframe
:src="
item.iframeURL + '?token=' + token + '&customerId=' + customerId
"
ref="iframes"
class="iframes"
id="iframes"
width="100%"
height="100%"
frameborder="0"
scrolling="yes"
></iframe>
<!-- <div v-if="tabIsIframe(item.iframeURL)" id="addend-iframe" style="height: 100%;"> </div> -->
</template>
<keep-alive v-else>
<router-view v-if="item.name === $store.state.contentTabsActiveName"
@changeCustomerName="changeCustomerName" />
<router-view
v-if="item.name === $store.state.contentTabsActiveName"
@changeCustomerName="changeCustomerName"
/>
</keep-alive>
</el-tab-pane>
</el-tabs>
@ -56,86 +73,107 @@
</template>
<script>
import { isURL } from '@/utils/validate'
import Cookie from 'js-cookie'
import { isURL } from "@/utils/validate";
import Cookie from "js-cookie";
export default {
data () {
data() {
return {
iframeUrl: '',
token: '',
customerId: ''
}
iframeUrl: "",
token: "",
customerId: "",
};
},
created () {
created() {
// this.$nextTick(() => {
// this.sendMessage()
// })
this.token = Cookie.get('token')
this.customerId = localStorage.getItem('customerId')
this.token = Cookie.get("token");
this.customerId = localStorage.getItem("customerId");
},
methods: {
changeCustomerName (customerName) {
this.$emit('changeCustomerName', customerName)
changeCustomerName(customerName) {
this.$emit("changeCustomerName", customerName);
},
// tabs, iframe
tabIsIframe (url) {
tabIsIframe(url) {
// this.appendIframe(url)
this.iframeUrl = url + '?token=' + Cookie.get('token') + '&customerId=' + localStorage.getItem('customerId')
return isURL(url)
this.iframeUrl =
url +
"?token=" +
Cookie.get("token") +
"&customerId=" +
localStorage.getItem("customerId");
return isURL(url);
},
// tabs, tab
tabSelectedHandle (tab) {
tab = this.$store.state.contentTabs.filter(item => item.name === tab.name)[0]
tabSelectedHandle(tab) {
tab = this.$store.state.contentTabs.filter(
(item) => item.name === tab.name
)[0];
if (tab) {
this.$router.push({
'name': tab.name,
'params': { ...tab.params },
'query': { ...tab.query }
})
name: tab.name,
params: { ...tab.params },
query: { ...tab.query },
});
}
},
// tabs, tab
tabRemoveHandle (tabName) {
if (tabName === 'home') {
return false
tabRemoveHandle(tabName) {
if (tabName === "home") {
return false;
}
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name !== tabName)
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
(item) => item.name !== tabName
);
if (this.$store.state.contentTabs.length <= 0) {
this.$store.state.sidebarMenuActiveName = this.$store.state.contentTabsActiveName = 'home'
return false
this.$store.state.sidebarMenuActiveName =
this.$store.state.contentTabsActiveName = "home";
return false;
}
// tab
if (tabName === this.$store.state.contentTabsActiveName) {
let tab = this.$store.state.contentTabs[this.$store.state.contentTabs.length - 1]
let tab =
this.$store.state.contentTabs[
this.$store.state.contentTabs.length - 1
];
this.$router.push({
name: tab.name,
params: { ...tab.params },
query: { ...tab.query }
})
query: { ...tab.query },
});
}
},
// tabs,
tabsCloseOtherHandle () {
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => {
return item.name === 'home' || item.name === this.$store.state.contentTabsActiveName
})
tabsCloseOtherHandle() {
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
(item) => {
return (
item.name === "home" ||
item.name === this.$store.state.contentTabsActiveName
);
}
);
},
// tabs,
tabsCloseAllHandle () {
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(item => item.name === 'home')
this.$router.push({ name: 'home' })
tabsCloseAllHandle() {
this.$store.state.contentTabs = this.$store.state.contentTabs.filter(
(item) => item.name === "home"
);
this.$router.push({ name: "home" });
},
sendMessage () {
sendMessage() {
// const iframe = this.$refs.iframes.contentWindow
const iframe = document.getElementsByClassName('iframes')[0].contentWindow
const iframe =
document.getElementsByClassName("iframes")[0].contentWindow;
console.log('iframe', iframe)
console.log("iframe", iframe);
// iframe.postMessage({
// token: Cookie.get('token'),
// customerId: localStorage.getItem('customerId')
// }, '*')
iframe.postMessage({ name: 'lalalal' }, '*')
iframe.postMessage({ name: "lalalal" }, "*");
},
}
}
},
};
</script>

11
src/views/main-shuju/main-navbar.vue

@ -46,7 +46,9 @@
<template v-for="(menu, idx) in $store.state.mainShuju.menuList">
<li
class="sub-menu"
:class="$store.state.mainShuju.activeName==menu.name ? 'z-on':''"
:class="
$store.state.mainShuju.activeName == menu.id ? 'z-on' : ''
"
v-if="menu.children"
:key="menu.id"
@click="gotoRouteHandle(menu.id, idx)"
@ -54,6 +56,11 @@
<span>{{ menu.name }}</span>
<div class="sub-menu-list">
<div
:class="
$store.state.mainShuju.activeName == subMenu.id
? 'z-on'
: ''
"
:key="subMenu.id"
@click="gotoRouteHandle(subMenu.id, subIndex)"
v-for="(subMenu, subIndex) in menu.children"
@ -177,8 +184,8 @@ export default {
)[0];
if (route) {
this.$router.push({ name: route.name });
this.$store.state.mainShuju.activeName = menuId;
}
this.$store.state.mainShuju.activeName = menuId;
},
changeCustomerName(customerName) {
this.customerName = localStorage.getItem("customerName");

124
src/views/main-shuju/main.vue

@ -6,8 +6,8 @@
'g-bd',
{ 'z-sidebar--fold': $store.state.sidebarFold },
{
'z-sidebar--noside':true
}
'z-sidebar--noside': true,
},
]"
>
<template v-if="!loading">
@ -23,29 +23,30 @@
</template>
<script>
import MainNavbar from './main-navbar'
import MainContent from './main-content'
import debounce from 'lodash/debounce'
import { mapGetters } from 'vuex'
import nextTick from 'dai-js/tools/nextTick'
import MainNavbar from "./main-navbar";
import MainContent from "./main-content";
import debounce from "lodash/debounce";
import { mapGetters } from "vuex";
import nextTick from "dai-js/tools/nextTick";
import { requestPost } from "@/js/dai/request";
export default {
provide() {
return {
//
refresh() {
this.$store.state.contentIsNeedRefresh = true
this.$store.state.contentIsNeedRefresh = true;
this.$nextTick(() => {
this.$store.state.contentIsNeedRefresh = false
})
}
}
this.$store.state.contentIsNeedRefresh = false;
});
},
};
},
data() {
return {
loading: true,
userType: localStorage.getItem('userType')
}
userType: localStorage.getItem("userType"),
};
},
components: {
MainNavbar,
@ -53,105 +54,70 @@ export default {
},
watch: {
$route: 'routeHandle'
$route: "routeHandle",
},
async created() {
this.windowResizeHandle()
this.routeHandle(this.$route)
this.windowResizeHandle();
this.routeHandle(this.$route);
Promise.all([this.getWorkUserInfo()]).then(() => {
this.loading = false
})
this.loading = false;
});
},
computed: {},
methods: {
changeCustomerName(customerName) {
this.$refs['ref_navbar'].changeCustomerName(customerName)
this.$refs["ref_navbar"].changeCustomerName(customerName);
},
//
windowResizeHandle() {
this.$store.state.sidebarFold =
document.documentElement['clientWidth'] <= 992 || false
document.documentElement["clientWidth"] <= 992 || false;
window.addEventListener(
'resize',
"resize",
debounce(() => {
this.$store.state.sidebarFold =
document.documentElement['clientWidth'] <= 992 || false
document.documentElement["clientWidth"] <= 992 || false;
}, 150)
)
);
},
// ,
routeHandle(route) {
if (!route.meta.isTab) {
return false
return false;
}
var tab = this.$store.state.contentTabs.filter(
(item) => item.name === route.name
)[0]
)[0];
if (!tab) {
tab = {
...window.SITE_CONFIG['contentTabDefault'],
...window.SITE_CONFIG["contentTabDefault"],
...route.meta,
name: route.name,
params: { ...route.params },
query: { ...route.query }
}
query: { ...route.query },
};
this.$store.state.contentTabs =
this.$store.state.contentTabs.concat(tab)
this.$store.state.contentTabs.concat(tab);
}
this.$store.state.mainShuju.activeName = tab.menuId
this.$store.state.mainShuju.contentTabsActiveName = tab.name
this.$store.state.mainShuju.activeName = tab.menuId;
this.$store.state.mainShuju.contentTabsActiveName = tab.name;
},
//
getUserInfo() {
const url = '/epmetuser/operuser/queryOperUserDto'
return this.$http
.get(url)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$store.state.user.id = res.data.id
this.$store.state.user.realName = res.data.realName
this.$store.state.user.superAdmin = res.data.superAdmin
this.$store.state.user.gender = data.gender
localStorage.setItem('customerId', '')
})
.catch(() => {})
},
//
getWorkUserInfo() {
const url = '/epmetuser/customerstaff/staffbasicinfo'
let params = {}
window.app.ajax.post(
url,
params,
(data, rspMsg) => {
this.$store.state.user = { ...data }
// this.$store.state.user.id = data.id
// this.$store.state.user.realName = data.realName
// this.$store.state.user.superAdmin = data.superAdmin
// this.$store.state.user.gender = data.gender
localStorage.setItem('roleList', data.roleList)
localStorage.setItem('customerId', data.customerId)
// this.$store.state.user.roleList = data.roleList
// this.$store.state.user.customerId = data.customerId
},
(rspMsg, data) => {
this.$message.error(rspMsg)
}
)
// return this.$http.get(url).then(({ data: res }) => {
// if (res.code !== 0) {
// return this.$message.error(res.msg)
// }
async getWorkUserInfo() {
const url = "/epmetuser/customerstaff/staffbasicinfo";
let params = {};
// }).catch(() => { })
}
}
}
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.$store.state.user = { ...data };
localStorage.setItem("roleList", data.roleList);
localStorage.setItem("customerId", data.customerId);
}
},
},
};
</script>
<style lang="scss" src="@/assets/scss/main-shuju.scss" scoped></style>

2
src/views/main-theme-tools.vue

@ -1,5 +1,5 @@
<template>
<div class="aui-theme-tools" :class="{ 'aui-theme-tools--open': isOpen }">
<div class="aui-theme-tools" v-show="false" :class="{ 'aui-theme-tools--open': isOpen }">
<div class="aui-theme-tools__toggle" @click="isOpen = !isOpen">
<svg class="icon-svg" aria-hidden="true">
<use xlink:href="#icon-setting"></use>

42
src/views/main.vue

@ -1,8 +1,7 @@
<template>
<div
v-loading.fullscreen.lock="loading"
:element-loading-text="$t('loading')"
:class="[
<div v-loading.fullscreen.lock="loading"
:element-loading-text="$t('loading')"
:class="[
'aui-wrapper',
{ 'aui-sidebar--fold': $store.state.sidebarFold },
{
@ -10,16 +9,14 @@
$store.state.sidebarActiveSubMenuList.length == 0,
},
{ 'z-iframe': $store.state.inIframe },
]"
>
]">
<template v-if="!loading">
<main-navbar ref="ref_navbar" v-if="!$store.state.inIframe" />
<main-navbar ref="ref_navbar"
v-if="!$store.state.inIframe" />
<main-sidebar v-if="!$store.state.inIframe" />
<div class="aui-content__wrapper">
<main-content
v-if="!$store.state.contentIsNeedRefresh"
@changeCustomerName="changeCustomerName"
/>
<main-content v-if="!$store.state.contentIsNeedRefresh"
@changeCustomerName="changeCustomerName" />
</div>
<main-theme-tools v-if="!$store.state.inIframe" />
</template>
@ -36,10 +33,10 @@ import { mapGetters } from "vuex";
import nextTick from "dai-js/tools/nextTick";
export default {
provide() {
provide () {
return {
//
refresh() {
refresh () {
this.$store.state.contentIsNeedRefresh = true;
this.$nextTick(() => {
this.$store.state.contentIsNeedRefresh = false;
@ -47,7 +44,7 @@ export default {
},
};
},
data() {
data () {
return {
loading: true,
userType: localStorage.getItem("userType"),
@ -63,7 +60,7 @@ export default {
watch: {
$route: "routeHandle",
},
async created() {
async created () {
this.windowResizeHandle();
this.routeHandle(this.$route);
if (localStorage.getItem("userType") === "work") {
@ -78,11 +75,11 @@ export default {
},
computed: {},
methods: {
changeCustomerName(customerName) {
changeCustomerName (customerName) {
this.$refs["ref_navbar"].changeCustomerName(customerName);
},
//
windowResizeHandle() {
windowResizeHandle () {
this.$store.state.sidebarFold =
document.documentElement["clientWidth"] <= 992 || false;
window.addEventListener(
@ -94,7 +91,7 @@ export default {
);
},
// ,
routeHandle(route) {
routeHandle (route) {
if (!route.meta.isTab) {
return false;
}
@ -117,7 +114,7 @@ export default {
this.$store.state.contentTabsActiveName = tab.name;
this.syncLevelOneMenuActive(tab.menuId);
},
async syncLevelOneMenuActive(menuId) {
async syncLevelOneMenuActive (menuId) {
await nextTick();
console.log(
"*******************************",
@ -140,7 +137,7 @@ export default {
idx !== -1 ? this.$store.state.sidebarMenuList[idx].children : [];
},
//
getUserInfo() {
getUserInfo () {
const url = "/epmetuser/operuser/queryOperUserDto";
return this.$http
@ -156,10 +153,10 @@ export default {
this.$store.state.user.gender = data.gender;
localStorage.setItem("customerId", "");
})
.catch(() => {});
.catch(() => { });
},
//
getWorkUserInfo() {
getWorkUserInfo () {
const url = "/epmetuser/customerstaff/staffbasicinfo";
let params = {};
window.app.ajax.post(
@ -174,6 +171,7 @@ export default {
// this.$store.state.user.gender = data.gender
localStorage.setItem("roleList", data.roleList);
localStorage.setItem("customerId", data.customerId);
localStorage.setItem("staffId", data.id);
// this.$store.state.user.roleList = data.roleList
// this.$store.state.user.customerId = data.customerId
},

205
src/views/modules/base/category/addCategory.vue

@ -0,0 +1,205 @@
<template>
<div>
<div class="div_tip">
全部类别
</div>
<div class="div_list div_all_list">
<el-scrollbar style="height:100%">
<div class="div_room">
<div v-for="(item,index) in defaultList"
:key="index"
class="item"
@click="handelSelCategory(index)">
<div v-if="item.selected"
class="icon_circle icon_sel">
<!-- <icon name="el-icon-check"
scale="20"></icon> -->
<i class="el-icon-check"
style="font-size: 17px; color: #5d5d5d ;margin-left:1px;margin-top:2px" />
</div>
<div v-if="!item.selected"
class="icon_circle"></div>
<div class="item_category">
<img :src="item.managementIcon"
alt />
<span>{{item.label}}</span>
</div>
</div>
</div>
</el-scrollbar>
</div>
<div class="div_btn">
<el-button type="warning"
@click="handleCancle">取消</el-button>
<el-button type="primary"
class="btn_right"
@click="handleConfirm">确定</el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from 'element-ui'; //Loading
import { requestPost } from "@/js/dai/request";
let loading;//
export default {
data () {
return {
defaultList: [],
addList: []
}
},
async mounted () {
},
methods: {
async initData () {
this.startLoading()
await this.getDefaultCategoryList()
this.endLoading()
this.addList = [...this.categoryList]
this.addList.pop()
},
//
async getDefaultCategoryList () {
const url = "/oper/customize/icindividualcategorymanage/individualcategoryalllist"
// const url = "http://yapi.elinkservice.cn/mock/245/oper/customize/icindividualcategorymanage/individualcategoryalllist"
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
// this.defaultList = []
this.defaultList = [...data]
} else {
this.$message.error(msg)
}
},
handelSelCategory (index) {
let obj = JSON.parse(JSON.stringify(this.defaultList[index]))
if (!obj.selected) {//
this.addList.push(obj)
} else {//
for (let itemIndex in this.addList) {
// debugger
let tempObj = this.addList[itemIndex]
if (obj.columnName === tempObj.columnName) {
this.addList.splice(itemIndex, 1);
break
}
}
this.addList.forEach(element => {
console.log(element.label)
});
}
obj.selected = !obj.selected
this.$set(this.defaultList, index, obj)
},
async handleConfirm () {
this.addList.forEach((element, index) => {
element.sort = index
element.columnId = element.id
});
const url = "/oper/customize/icindividualcategorymanage/editindividualcategory"
const { data, code, msg } = await requestPost(url, this.addList)
if (code === 0) {
this.$emit('handleConfirm')
} else {
this.$message.error(msg)
}
},
handleCancle () {
this.$emit('handleCancle')
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
});
},
//
endLoading () {
//clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
props: {
categoryList: {
type: Array,
default () {
return []
}
}
},
computed: {
// selectWidth () {
// let width = this.selHouseName.length * 200
// console.log(width)
// return width + 'px';
// },
mapHeight () {
return this.clientHeight - 120;
},
...mapGetters(["clientHeight"])
},
components: {},
}
</script>
<style
lang="scss"
src="@/assets/scss/modules/management/categoryMain.scss"
scoped
></style>
<style lang="scss" scoped>
.div_list {
/deep/ .el-scrollbar__wrap {
overflow-x: hidden !important;
}
}
</style>

184
src/views/modules/base/category/main.vue

@ -0,0 +1,184 @@
<template>
<div class="div_main">
<div v-if="!showAddForm">
<div class="div_tip">
类别信息
</div>
<div class="div_list">
<el-scrollbar class="scrollbar"
style="height:100%">
<div class="div_room">
<div v-for="(item,index) in categoryList"
:key="index"
class="item">
<div v-if="index==(categoryList.length-1)"
class="item_add"
@click="handleAddCategory">
<img :src="item.managementIcon"
alt />
<span>{{item.label}}</span>
</div>
<div v-else
class="item_category">
<img :src="item.managementIcon"
alt />
<div class="item_content">
<div class="item_count">{{item.count}}</div>
<div class="item_row2">
<div class="row_left">{{item.label}}</div>
<div class="row_right"
@click="toPersonList(item)">管理</div>
</div>
</div>
</div>
</div>
</div>
</el-scrollbar>
</div>
</div>
<add-category v-if="showAddForm"
ref="ref_add"
:categoryList="categoryList"
@handleCancle="handleCancle"
@handleConfirm="handleConfirm"></add-category>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import nextTick from 'dai-js/tools/nextTick'
import { Loading } from 'element-ui'; //Loading
import { requestPost } from "@/js/dai/request";
import addCategory from "./addCategory";
let loading;//
export default {
data () {
return {
categoryList: [],
showAddForm: false,
}
},
async mounted () {
await this.getCategoryList()
},
methods: {
//
async getCategoryList () {
this.startLoading()
const url = "/oper/customize/icindividualcategorymanage/individualcategorylist"
let params = {}
const { data, code, msg } = await requestPost(url, params)
this.endLoading()
if (code === 0) {
this.categoryList = data
let obj = {
managementIcon: require('@/assets/img/add.png'),
label: '新建分类'
}
this.categoryList.push(obj)
} else {
this.$message.error(msg)
}
},
async handleAddCategory () {
this.showAddForm = true
await nextTick(200)
this.$refs['ref_add'].initData()
},
handleConfirm () {
this.showAddForm = false
this.getCategoryList()
},
handleCancle () {
this.showAddForm = false
},
toPersonList (item) {
this.$router.push({
path: "/main/base-resi",
query: {
columnName: item.columnName
}
})
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
});
},
//
endLoading () {
//clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
props: {
},
computed: {
// selectWidth () {
// let width = this.selHouseName.length * 200
// console.log(width)
// return width + 'px';
// },
mapHeight () {
return this.clientHeight - 120;
},
...mapGetters(["clientHeight"])
},
components: { addCategory },
}
</script>
<style
lang="scss"
src="@/assets/scss/modules/management/categoryMain.scss"
scoped
></style>
<style lang="scss" scoped>
.div_list {
/deep/ .el-scrollbar__wrap {
overflow-x: hidden !important;
}
}
</style>

13
src/views/modules/base/community/community.vue

@ -62,7 +62,7 @@ export default {
treeData: [],
defaultProps: {
children: 'children',
label: 'label'
label: 'showName'
},
selTreeObj: {},
@ -295,11 +295,16 @@ export default {
/* .aui-content > .el-tabs > .el-tabs__content {
padding: 0px;
} */
.el-scrollbar__wrap {
overflow-x: hidden !important;
}
.el-tree-node:focus > .el-tree-node__content {
/* background-color: #ccc !important; */
color: #2195fe;
}
</style>
<style lang="scss" scoped>
.div_tree {
/deep/ .el-scrollbar__wrap {
overflow-x: hidden !important;
}
}
</style>

526
src/views/modules/base/resi.vue

@ -1,220 +1,235 @@
<template>
<div v-if="pageLoading" class="resi-container">
<resi-search
v-if="searchList.length > 0"
ref="resiSearch"
:form-list="searchList"
@search="handleSearch"
/>
<div class="resi-container">
<resi-search v-if="searchList.length > 0"
ref="resiSearch"
:form-list="searchList"
:column-name="defaultCategotyKey"
@search="handleSearch" />
<el-card class="resi-card-table">
<div class="resi-row-btn">
<el-button type="success" size="small" @click="handleAdd">新增</el-button>
<el-button type="warning" size="small" :loading="exportBtn" @click="handleExport">{{exportBtnTitle}}</el-button>
<el-button type="success"
size="small"
@click="handleAdd">新增</el-button>
<el-button type="warning"
size="small"
:loading="exportBtn"
@click="handleExport">{{exportBtnTitle}}</el-button>
<!-- <el-button type="primary" size="small">下载人口模板</el-button> -->
<el-upload
ref="upload"
class="upload-demo"
action="uploadUlr"
:limit="1"
:with-credentials="true"
:show-file-list="false"
:auto-upload="true"
:on-progress="handleProgress"
:on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload"
:http-request="uploadHttpRequest"
>
<el-button type="danger" size="small" :loading="importLoading">{{importBtnTitle}}</el-button>
<el-upload ref="upload"
class="upload-demo"
action="uploadUlr"
:limit="1"
:with-credentials="true"
:show-file-list="false"
:auto-upload="true"
:on-progress="handleProgress"
:on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload"
:http-request="uploadHttpRequest">
<el-button type="danger"
size="small"
:loading="importLoading">{{importBtnTitle}}</el-button>
</el-upload>
</div>
<el-table
:data="tableData"
v-loading="tableLoading"
border
style="width: 100%"
class="resi-table"
>
<el-table-column label="序号" type="index" align="center" width="50">
<el-table :data="tableData"
v-loading="tableLoading"
border
style="width: 100%"
class="resi-table">
<el-table-column label="序号"
type="index"
align="center"
width="50">
</el-table-column>
<el-table-column
v-for="item in tableHeader"
:key="item.columnName"
:prop="item.columnName"
:label="item.label"
align="center"
:show-overflow-tooltip="true"
:width="item.itemType === 'radio' ? computedWidth(item.label) : 180"
>
<el-table-column v-for="item in tableHeader"
:key="item.columnName"
:prop="item.columnName"
:label="item.label"
align="center"
:show-overflow-tooltip="true"
:width="item.itemType === 'radio' ? computedWidth(item.label) : 180">
<template slot-scope="scope">
<span>{{ handleFilterSpan(scope.row, item) }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="120">
<el-table-column fixed="right"
label="操作"
align="center"
width="150">
<template slot-scope="scope">
<el-button
@click="handleLook(scope.row)"
type="text"
size="small"
class="btn-color-look"
>查看</el-button
>
<el-button @click="handleLook(scope.row)"
type="text"
size="small"
class="btn-color-look">查看</el-button>
<el-button @click="handleTransfer(scope.row)"
type="text"
size="small"
class="btn-color-look">调动</el-button>
<el-button @click="handleChangeRecord(scope.row)"
type="text"
size="small"
class="btn-color-look">变更记录</el-button>
<template v-if="filterEdit(scope.row.ORG_ID)">
<el-button
@click="handleEdit(scope.row)"
type="text"
size="small"
class="btn-color-edit"
>编辑</el-button
>
<el-popconfirm
title="删除之后无法回复,确认删除?"
@onConfirm="handleDel(scope.row)"
>
<el-button
slot="reference"
type="text"
size="small"
class="btn-color-del"
>删除</el-button
>
<el-button @click="handleEdit(scope.row)"
type="text"
size="small"
class="btn-color-edit">编辑</el-button>
<el-popconfirm title="删除之后无法回复,确认删除?"
@onConfirm="handleDel(scope.row)">
<el-button slot="reference"
type="text"
size="small"
class="btn-color-del">删除</el-button>
</el-popconfirm>
</template>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-sizes="[20, 50, 100, 200]"
:page-size="pageSize"
layout="sizes, prev, pager, next"
:total="total"
>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-sizes="[20, 50, 100, 200]"
:page-size="pageSize"
layout="sizes, prev, pager, next"
:total="total">
</el-pagination>
</div>
</el-card>
<el-dialog
:title="formName"
:visible.sync="dialogVisible"
width="80%"
append-to-body
:close-on-click-modal="false"
:before-close="handlerCancle"
>
<resi-form
v-if="dialogVisible"
ref="baseForm"
:fixed="true"
:form-list="formList"
@changegroup="handleChangeGroup"
/>
<div v-if="dialogVisible" class="resi-other">
<el-dialog :title="formName"
:visible.sync="dialogVisible"
width="80%"
append-to-body
:close-on-click-modal="false"
:before-close="handlerCancle">
<resi-form v-if="dialogVisible"
ref="baseForm"
:fixed="true"
:form-list="formList"
@changegroup="handleChangeGroup" />
<div v-if="dialogVisible"
class="resi-other">
<div class="resi-other-title">其他</div>
<div class="tabs-other-info">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
v-for="item in tabsList"
:key="item.columnName"
:label="item.label"
:name="'group' + item.groupId"
>
<resi-form
:ref="'group' + item.groupId"
:columns="3"
:support-add="item.supportAdd"
:form-id="item.columnName"
:form-list="item.itemList"
/>
<el-tabs v-model="activeName"
@tab-click="handleClick">
<el-tab-pane v-for="item in tabsList"
:key="item.columnName"
:label="item.label"
:name="'group' + item.groupId">
<resi-form :ref="'group' + item.groupId"
:columns="3"
:support-add="item.supportAdd"
:form-id="item.columnName"
:form-list="item.itemList" />
</el-tab-pane>
</el-tabs>
</div>
</div>
<div class="resi-btns">
<el-button size="small" @click="handlerCancle">取消</el-button>
<el-button
type="primary"
size="small"
:loading="btnLoading"
@click="handleSUbmit"
>提交</el-button
>
<el-button size="small"
@click="handlerCancle">取消</el-button>
<el-button type="primary"
size="small"
:loading="btnLoading"
@click="handleSUbmit">提交</el-button>
</div>
</el-dialog>
<el-dialog
:title="formName"
:visible.sync="dialogEditVisible"
width="80%"
append-to-body
:close-on-click-modal="false"
:before-close="handlerEditCancle"
>
<edit-resi
v-if="dialogEditVisible"
ref="baseForm"
:disabled="disabled"
:form-info="editForm"
:fixed="true"
:form-list="formList"
:agency-id="editAgencyId"
@changegroup="handleChangeGroup"
/>
<div v-if="dialogEditVisible" class="resi-other">
<el-dialog :title="formName"
:visible.sync="dialogEditVisible"
width="80%"
append-to-body
:close-on-click-modal="false"
:before-close="handlerEditCancle">
<edit-resi v-if="dialogEditVisible"
ref="baseForm"
:disabled="disabled"
:form-info="editForm"
:fixed="true"
:form-list="formList"
:agency-id="editAgencyId"
@changegroup="handleChangeGroup" />
<div v-if="dialogEditVisible"
class="resi-other">
<div class="resi-other-title">其他</div>
<div class="tabs-other-info">
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane
v-for="item in tabsList"
:key="item.columnName"
:label="item.label"
:name="'group' + item.groupId"
>
<edit-resi
:ref="'group' + item.groupId"
:columns="3"
:support-add="item.supportAdd"
:form-id="item.columnName"
:muti-list="item.mutiList"
:form-list="item.itemList"
:disabled="disabled"
:label-width="'140px'"
:agency-id="editAgencyId"
/>
<el-tabs v-model="activeName"
@tab-click="handleClick">
<el-tab-pane v-for="item in tabsList"
:key="item.columnName"
:label="item.label"
:name="'group' + item.groupId">
<edit-resi :ref="'group' + item.groupId"
:columns="3"
:support-add="item.supportAdd"
:form-id="item.columnName"
:muti-list="item.mutiList"
:form-list="item.itemList"
:disabled="disabled"
:label-width="'140px'"
:agency-id="editAgencyId" />
</el-tab-pane>
</el-tabs>
</div>
</div>
<div class="resi-btns">
<el-button size="small" @click="handlerEditCancle">取消</el-button>
<el-button
v-if="!disabled"
type="primary"
size="small"
:loading="btnLoading"
@click="handleEditSUbmit"
>提交</el-button
>
<el-button size="small"
@click="handlerEditCancle">取消</el-button>
<el-button v-if="!disabled"
type="primary"
size="small"
:loading="btnLoading"
@click="handleEditSUbmit">提交</el-button>
</div>
</el-dialog>
<!-- 调动 -->
<el-dialog :visible.sync="tranferShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'人员调动'"
width="950px"
top="5vh"
@closed="diaClose">
<resi-transfer ref="ref_transfer"
@dialogCancle="transferClose"></resi-transfer>
</el-dialog>
<!-- 变更记录 -->
<el-dialog :visible.sync="changeRecordShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'变更记录'"
width="1150px"
top="5vh"
@closed="diaClose">
<resi-change-record ref="ref_changerecord"></resi-change-record>
</el-dialog>
</div>
</template>
<script>
import nextTick from 'dai-js/tools/nextTick'
import resiSearch from '../../components/resiSearch.vue'
import resiForm from '../../components/resiForm.vue'
import editResi from '../../components/editResi.vue'
import axios from 'axios'
import resiTransfer from '../../components/resiTransfer.vue'
import resiChangeRecord from '../../components/resiChangeRecord.vue'
export default {
components: {
resiSearch,
resiForm,
editResi
editResi,
resiTransfer,
resiChangeRecord
},
data() {
data () {
return {
exportBtn: false,
exportBtnTitle: '导出',
@ -246,37 +261,92 @@ export default {
formName: '',
formList: [],
tableHeader: [],
tabsList: []
tabsList: [],
defaultCategotyKey: '',
tranferShow: false,
changeRecordShow: false,
}
},
async created() {
props: {
},
async activated () {
if (this.$route.query) {
this.searchList = []
let query = this.$route.query
this.defaultCategotyKey = query.columnName
console.log(this.defaultCategotyKey)
await this.getSearchList()
this.$refs.resiSearch.handleSearch()
}
},
async created () {
if (this.$route.query) {
let query = this.$route.query
this.defaultCategotyKey = query.columnName
}
await this.getSearchList()
// await this.getFormList()
await this.getTableHeader()
this.getTableData()
// console.log('this.$refs.resiSearch', this)
this.$refs.resiSearch.handleSearch()
// this.handleSearch()
// this.getTableData()
this.pageLoading = true
console.log('storeoooo----0000', this.$store)
},
methods: {
computedWidth(label) {
//
async handleTransfer (row) {
this.tranferShow = true
await nextTick(200)
this.$refs.ref_transfer.initForm(row)
},
//
async handleChangeRecord (row) {
this.changeRecordShow = true
await nextTick(200)
this.$refs.ref_changerecord.initForm(row)
},
diaClose () {
this.tranferShow = false
this.changeRecordShow = false
},
transferClose () {
this.tranferShow = false
this.getTableData()
},
computedWidth (label) {
const wd = 20 * label.length
return wd > 80 ? wd : 80
},
filterEdit(id) {
filterEdit (id) {
const { user } = this.$store.state
return id === user.agencyId
},
handleSizeChange(val) {
handleSizeChange (val) {
console.log(`每页 ${val}`)
this.pageSize = val
this.getTableData()
},
handleCurrentChange(val) {
handleCurrentChange (val) {
console.log(`当前页: ${val}`)
this.currentPage = val
this.getTableData()
},
handleFilterSpan(row, item) {
handleFilterSpan (row, item) {
let _val = ''
if (item.itemType === 'radio' && item.options.length > 0) {
item.options.forEach((n) => {
@ -285,14 +355,14 @@ export default {
}
return _val || row[item.columnName]
},
handleSearch(val) {
handleSearch (val) {
console.log('searchhh--', val)
this.currentPage = 1
this.conditions = val
this.getTableData()
},
//
download(data, fileName) {
download (data, fileName) {
console.log('data', data)
if (!data) {
return
@ -316,7 +386,7 @@ export default {
window.URL.revokeObjectURL(url)
}
},
async handleExport() {
async handleExport () {
this.exportBtn = true
this.exportBtnTitle = '正在导出...'
let params = {
@ -333,7 +403,7 @@ export default {
responseType: 'blob'
})
.then(res => {
console.log('resllll', res)
let fileName = window.decodeURI(res.headers["content-disposition"].split(";")[1].split("=")[1])
console.log('filename', fileName)
@ -352,8 +422,8 @@ export default {
console.log('获取导出情失败', err)
this.$message.error('获取导出失败')
})
this.exportBtnTitle = '导出'
this.exportBtn = false
this.exportBtnTitle = '导出'
this.exportBtn = false
},
//
handleExcelSuccess (res, file) {
@ -365,7 +435,7 @@ export default {
this.$message.error(res.msg)
}
},
handleProgress(event, file, fileList) {
handleProgress (event, file, fileList) {
console.log('percentage', file.percentage)
},
@ -375,16 +445,16 @@ export default {
const isTypeComputer = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
const fileType = isType || isTypeComputer
const isLt1M = (file.size / 1024 / 1024) < 10
if(!fileType) {
this.$message.error('上传文件只能是xls/xlsx格式!')
if (!fileType) {
this.$message.error('上传文件只能是xls/xlsx格式!')
}
if (!isLt1M) {
this.$message.error('上传文件大小不能超过 10MB!')
}
return fileType && isLt1M
},
async uploadHttpRequest(file) {
async uploadHttpRequest (file) {
this.importLoading = true
this.importBtnTitle = '正在上传中...'
const formData = new FormData() //FormDataappend('key', value)
@ -395,53 +465,53 @@ export default {
data: formData,
responseType: 'blob'
})
.then((res) => {
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.getTableData()
})
.catch( err => {
.then((res) => {
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.getTableData()
})
.catch(err => {
console.log('失败', err)
file.onError() //
this.$message.error('导入失败')
})
})
this.importLoading = false
this.importBtnTitle = '导入人员数据'
this.$refs.upload.clearFiles()
},
handleClick(tab, event) {
handleClick (tab, event) {
console.log(tab, event)
},
async handleLook(row) {
async handleLook (row) {
this.disabled = true
this.editAgencyId = row.ORG_ID
await this.getFormList('edit')
this.getrowInfo(row.icResiUserId)
},
async handleEdit(row) {
async handleEdit (row) {
this.disabled = false
this.editAgencyId = row.ORG_ID
await this.getFormList('edit')
await this.getrowInfo(row.icResiUserId)
},
async handleAdd() {
async handleAdd () {
await this.getFormList()
this.dialogVisible = true
},
async handleChangeGroup(val) {
async handleChangeGroup (val) {
console.log('changeguoprrrrr----', val)
let { childGroup, value } = val
let hasT = false
@ -471,7 +541,7 @@ export default {
if (hasT) this.tabsList.splice(i, 1)
}
},
formetForm() {
formetForm () {
const _baseForm = this.$refs.baseForm.handleForm()
let arr = []
if (_baseForm.length === 0) return false
@ -527,15 +597,15 @@ export default {
console.log('finalArr', finalArr)
return finalArr
},
async handleEditSUbmit() {
async handleEditSUbmit () {
const arr = await this.formetForm()
if (arr) this.submitEdit(arr)
},
async handleSUbmit() {
async handleSUbmit () {
const arr = await this.formetForm()
if (arr) this.submitAdd(arr)
},
handleDel(row) {
handleDel (row) {
let params = {
formCode: 'resi_base_info',
icResiUserId: row.icResiUserId
@ -558,24 +628,24 @@ export default {
return this.$message.error('网络错误')
})
},
handleFormatUrl(url) {
handleFormatUrl (url) {
return url.includes('?')
},
handlerEditCancle() {
handlerEditCancle () {
this.$refs.baseForm.resetForm()
this.tabsList.forEach((item) => {
this.$refs['group' + item.groupId][0].resetForm()
})
this.dialogEditVisible = false
},
handlerCancle() {
handlerCancle () {
this.$refs.baseForm.resetForm()
this.tabsList.forEach((item) => {
this.$refs['group' + item.groupId][0].resetForm()
})
this.dialogVisible = false
},
async submitAdd(arr) {
async submitAdd (arr) {
this.btnLoading = true
await this.$http
.post('/epmetuser/icresiuser/add', arr)
@ -598,13 +668,13 @@ export default {
})
this.btnLoading = false
},
async submitEdit(arr) {
async submitEdit (arr) {
this.btnLoading = true
await this.$http
.post('/epmetuser/icresiuser/edit', arr)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
this.$message.success('提交成功')
@ -622,8 +692,8 @@ export default {
})
this.btnLoading = false
},
getTableHeader() {
this.$http
async getTableHeader () {
await this.$http
.post('/oper/customize/icform/tableheaders', {
formCode: 'resi_base_info'
})
@ -638,7 +708,7 @@ export default {
return this.$message.error('网络错误')
})
},
async getTableData() {
async getTableData () {
this.tableLoading = true
let params = {
formCode: 'resi_base_info',
@ -661,7 +731,7 @@ export default {
})
this.tableLoading = false
},
getrowInfo(id) {
getrowInfo (id) {
let params = {
formCode: 'resi_base_info',
icResiUserId: id
@ -737,7 +807,7 @@ export default {
return this.$message.error('网络错误')
})
},
async getOptionsList(url) {
async getOptionsList (url) {
let options = []
// console.log('getOptionsList----', url)
await this.$http
@ -754,8 +824,8 @@ export default {
})
return options
},
getSearchList() {
this.$http
async getSearchList () {
await this.$http
.post('/oper/customize/icform/conditionlist', {
formCode: 'resi_base_info',
dynamic: true
@ -780,13 +850,13 @@ export default {
return this.$message.error('网络错误')
})
},
getTreeData(data){
getTreeData (data) {
if (!Array.isArray(data)) return []
let arr = data.map(item => {
let _item = {}
if (item.children) {
if (item.children.length === 0) _item = { ...item, children: undefined }
else _item = { ...item, children: this.getTreeData(item.children)}
else _item = { ...item, children: this.getTreeData(item.children) }
} else {
_item = { ...item }
}
@ -794,7 +864,7 @@ export default {
})
return arr
},
async getFormList(type) {
async getFormList (type) {
await this.$http
.post('/oper/customize/icform/getcustomerform', {
formCode: 'resi_base_info',
@ -867,12 +937,12 @@ export default {
// height: 12px;
color: rgba(30, 122, 254, 1);
line-height: 20px;
background: rgba(30, 122, 254, .2);
background: rgba(30, 122, 254, 0.2);
// border-radius: 50%;
}
::v-deep .el-tabs__item.is-active {
color: #fff;
background: linear-gradient(90deg, #1A5AFD, #26C4FF);
background: linear-gradient(90deg, #1a5afd, #26c4ff);
}
}
.resi-container .resi-card-table {

4
src/views/modules/communityParty/elegant/index.vue

@ -28,7 +28,7 @@
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleSearch">查询</el-button>
<el-button @click="resetForm('searchForm')">重置</el-button>
<el-button type="yellow" @click="resetForm('searchForm')">重置</el-button>
</el-form-item>
</el-form>
</div>
@ -585,6 +585,8 @@ export default {
</script>
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
.resi-container .resi-card-table {
::v-deep .el-table th {
color: #fff;

7
src/views/modules/communityParty/regionalParty/activitys.vue

@ -206,7 +206,6 @@
@closed="diaClose">
<activitys-form ref="ref_form"
:unitList="unitList"
:serviceList="serviceList"
@dialogCancle="addFormCancle"
@dialogOk="addFormOk"></activitys-form>
</el-dialog>
@ -337,11 +336,11 @@ export default {
//
async loadService () {
const url = "/heart/icresidemanddict/subcodelist"
// const url = "http://yapi.elinkservice.cn/mock/245/heart/icresidemanddict/subcodelist"
const url = "/heart/serviceitem/dict-list"
let params = {
parentCategoryCode: '1010'
// parentCategoryCode: '1010'
}
const { data, code, msg } = await requestPost(url, params)

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

@ -1,179 +1,178 @@
<template>
<div>
<div>
<div>
<el-form ref="ref_form"
:inline="true"
:model="formData"
:rules="dataRule"
:disabled="formType === 'detail'"
class="form">
<el-form-item label="服务事项"
label-width="150px"
prop="serviceMatter">
<el-select class="item_width_1"
v-model="formData.serviceMatter"
placeholder="请选择"
clearable>
<el-option v-for="item in serviceList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="单位名称"
prop="unitId"
label-width="150px"
style="display: block">
<el-select class="item_width_1"
v-model="formData.unitId"
placeholder="请选择"
clearable>
<el-option v-for="item in unitList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="活动标题"
prop="title"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
show-word-limit
placeholder="请输入活动标题"
v-model="formData.title">
</el-input>
</el-form-item>
<el-form-item label="活动目标"
prop="target"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="100"
show-word-limit
:rows="3"
placeholder="请输入活动目标,不超过100字"
v-model="formData.target"></el-input>
</el-form-item>
<el-form-item label="活动内容"
prop="target"
label-width="150px"
style="display: block">
<div class="item_width_1">
<Tinymce class="tinymce_view "
v-if="formType!='detail'"
v-model="formData.content"
:height="250"
placeholder="在这里输入文字" />
<p v-else
class="text_p"
v-html="formData.content"></p>
</div>
</el-form-item>
<el-form-item label="服务人数"
style="display: block"
prop="peopleCount"
label-width="150px">
<el-input-number class="item_width_1"
v-model="formData.peopleCount"
:min="0"
label="服务人数"></el-input-number>
</el-form-item>
<el-form-item label="活动时间"
style="display: block"
prop="activityTime"
label-width="150px">
<el-date-picker v-model="formData.activityTime"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择时间">
</el-date-picker>
</el-form-item>
<el-form-item label="活动坐标"
prop="longitude"
label-width="150px"
style="display: block">
<div class="item_width_1">
<div class="div_map">
<div id="app">
</div>
<div class="div_searchmap">
<el-input class="item_width_4"
maxlength="50"
size="mini"
placeholder="请输入关键字"
v-model="keyWords">
</el-input>
<el-button style="margin-left: 10px"
type="primary"
size="mini"
@click="handleSearchMap">查询</el-button>
</div>
</div>
<el-form ref="ref_form"
:inline="true"
:model="formData"
:rules="dataRule"
:disabled="formType === 'detail'"
class="form">
<el-form-item label="服务事项"
label-width="150px"
prop="serviceMatter">
<el-select class="item_width_1"
v-model="formData.serviceMatter"
placeholder="请选择"
clearable>
<el-option v-for="item in serviceList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="单位名称"
prop="unitId"
label-width="150px"
style="display: block">
<el-select class="item_width_1"
v-model="formData.unitId"
placeholder="请选择"
clearable>
<el-option v-for="item in unitList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="活动标题"
prop="title"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
maxlength="50"
show-word-limit
placeholder="请输入活动标题"
v-model="formData.title">
</el-input>
</el-form-item>
<el-form-item label="活动目标"
prop="target"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="100"
show-word-limit
:rows="3"
placeholder="请输入活动目标,不超过100字"
v-model="formData.target"></el-input>
</el-form-item>
<el-form-item label="活动内容"
prop="target"
label-width="150px"
style="display: block">
<div class="item_width_1">
<Tinymce class="tinymce_view "
v-if="formType!='detail'"
v-model="formData.content"
:height="250"
placeholder="在这里输入文字" />
<p v-else
class="text_p"
v-html="formData.content"></p>
</div>
</el-form-item>
<el-form-item label="服务人数"
style="display: block"
prop="peopleCount"
label-width="150px">
<el-input-number class="item_width_1"
v-model="formData.peopleCount"
:min="0"
label="服务人数"></el-input-number>
</el-form-item>
<el-form-item label="活动时间"
style="display: block"
prop="activityTime"
label-width="150px">
<el-date-picker v-model="formData.activityTime"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择时间">
</el-date-picker>
</el-form-item>
<el-form-item label="活动坐标"
prop="longitude"
label-width="150px"
style="display: block">
<div class="item_width_1">
<div class="div_map">
<div id="app">
<div style="margin-top: 10px">
<span>经度</span>
<el-input class="item_width_3"
maxlength="50"
placeholder="请输入经度"
v-model="formData.longitude">
</el-input>
<span style="margin-left: 20px">纬度</span>
<el-input class="item_width_3"
</div>
<div class="div_searchmap">
<el-input class="item_width_4"
maxlength="50"
placeholder="请输入纬度"
v-model="formData.latitude">
size="mini"
placeholder="请输入关键字"
v-model="keyWords">
</el-input>
<el-button style="margin-left: 10px"
type="primary"
size="mini"
@click="handleSearchMap">查询</el-button>
</div>
</div>
</el-form-item>
<el-form-item label="活动地址"
prop="address"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
v-model="formData.address">
</el-input>
</el-form-item>
<el-form-item label="活动结果"
prop="result"
label-width="150px"
style="display: block">
<div class="item_width_1">
<Tinymce class="tinymce_view "
v-if="formType!='detail'"
v-model="formData.result"
:height="250"
placeholder="在这里输入文字" />
<p v-else
class="text_p"
v-html="formData.result"></p>
</div>
</el-form-item>
</el-form>
</div>
<div style="margin-top: 10px">
<span>经度</span>
<el-input class="item_width_3"
maxlength="50"
placeholder="请输入经度"
v-model="formData.longitude">
</el-input>
<span style="margin-left: 20px">纬度</span>
<el-input class="item_width_3"
maxlength="50"
placeholder="请输入纬度"
v-model="formData.latitude">
</el-input>
</div>
</div>
</el-form-item>
<el-form-item label="活动地址"
prop="address"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
v-model="formData.address">
</el-input>
</el-form-item>
<el-form-item label="活动结果"
prop="result"
label-width="150px"
style="display: block">
<div class="item_width_1">
<Tinymce class="tinymce_view "
v-if="formType!='detail'"
v-model="formData.result"
:height="250"
placeholder="在这里输入文字" />
<p v-else
class="text_p"
v-html="formData.result"></p>
</div>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button @click="handleCancle"> </el-button>
<el-button v-if="formType != 'detail'"
@ -219,6 +218,7 @@ export default {
longitude: 36.0722275, //
latitude: 120.38945519 //
},
serviceList: []
}
},
@ -233,6 +233,9 @@ export default {
this.startLoading()
this.$refs.ref_form.resetFields();
//
await this.loadService()
this.formType = type
if (activityId) {
this.activityId = activityId
@ -244,7 +247,25 @@ export default {
}
this.endLoading()
},
//
async loadService () {
const url = "/heart/serviceitem/dict-list"
let params = {
type: 'usable'
// parentCategoryCode: '1010'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.serviceList = data
} else {
this.$message.error(msg)
}
},
@ -506,10 +527,10 @@ export default {
default: []
},
serviceList: {
type: Array,
default: []
},
// serviceList: {
// type: Array,
// default: []
// },
}
}
</script>
@ -521,6 +542,11 @@ export default {
z-index: 20000;
}
}
.tinymce_view {
::v-deep .tox .tox-dialog {
z-index: 2000000000;
}
}
.item_width_2 {
width: 600px;
}

12
src/views/modules/communityParty/regionalParty/finishList.vue

@ -119,13 +119,16 @@
header-align="center"
align="center"
label="评分(百分制)"
min-width="150">
min-width="120">
<template slot-scope="scope">
<div v-if="scope.row.isEdit">
<!-- <el-input class="item_width_2"
v-model.number="scope.row.score"
onkeyup="this.value = this.value.replace(/[^\d.]/g,'');"></el-input>-->
<el-input-number class="item_width_1"
v-model="scope.row.score"
:precision="1"
:step="0.1"
:controls="false"
:max="100"></el-input-number>
</div>
<span v-else>{{scope.row.score}}</span>
@ -338,7 +341,7 @@ export default {
timeShow: '',
status: '',
unitId: '',
score: 0.0
score: undefined
}
this.tableData.push(obj)
},
@ -428,6 +431,9 @@ export default {
if (row.score !== 0 && !row.score) {
message = message + '评分不能为空;'
}
if (row.score > 100) {
message = message + '评分不能超过100分;'
}
return message
},

30
src/views/modules/communityParty/regionalParty/units.vue

@ -171,6 +171,12 @@
label="群众满意度"
width="100">
</el-table-column>
<el-table-column prop="score"
header-align="center"
align="center"
label="积分"
width="80">
</el-table-column>
<el-table-column prop="remark"
header-align="center"
align="center"
@ -234,7 +240,6 @@
top="5vh"
@closed="editDiaClose">
<units-form ref="ref_form"
:serviceList="serviceList"
:typeList="typeList"
@dialogCancle="addFormCancle"
@dialogOk="addFormOk"></units-form>
@ -299,24 +304,7 @@ export default {
agencyId: '',
unitList: [],//list
serviceList: [
{
id: "1",
name: '积极配合社区安全巡查员进行场所消防、安全等方面的检查。'
},
{
id: "2",
name: '积极配合'
},
{
id: "3",
name: '积极配合社区安全巡查员进行'
},
{
id: "4",
name: '积极配合社区安全巡查员进行场所消防、安全等方面的检查。并具备安全意识及设备设施'
},
],//list
serviceList: [],//list
typeList: [],//list
unitId: '',
@ -374,8 +362,8 @@ export default {
//
async loadService () {
const url = "/heart/icresidemanddict/subcodelist"
// const url = "http://yapi.elinkservice.cn/mock/245/heart/icresidemanddict/subcodelist"
const url = "/heart/serviceitem/dict-list"
let params = {
parentCategoryCode: '1010'

28
src/views/modules/communityParty/regionalParty/unitsForm.vue

@ -190,6 +190,7 @@ export default {
longitude: 36.0722275, //
latitude: 120.38945519 //
},
serviceList: [],//list
}
},
@ -204,6 +205,9 @@ export default {
this.startLoading()
this.$refs.ref_form.resetFields();
//
await this.loadService()
this.formType = type
if (unitId) {
this.unitId = unitId
@ -218,6 +222,25 @@ export default {
},
//
async loadService () {
const url = "/heart/serviceitem/dict-list"
let params = {
type: 'usable'
// parentCategoryCode: '1010'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.serviceList = data
} else {
this.$message.error(msg)
}
},
//
async loadFormData () {
const url = '/heart/icpartyunit/detail'
@ -481,10 +504,7 @@ export default {
type: Array,
default: []
},
serviceList: {
type: Array,
default: []
},
}
}
</script>

3
src/views/modules/communityService/shzz/index.vue

@ -128,6 +128,9 @@
label="负责人电话"> </el-table-column>
<el-table-column prop="serviceTime"
label="服务时间"> </el-table-column>
<el-table-column prop="score"
width="80"
label="积分"> </el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"

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

@ -2,167 +2,182 @@
<div>
<div class="resi-container">
<el-card class="resi-card">
<el-row class="resi-row-box"
:class="openSearch && 'resi-row-more'">
<el-row class="resi-row"
:gutter="20">
<el-row class="resi-row-box" :class="openSearch && 'resi-row-more'">
<el-row class="resi-row" :gutter="20">
<el-col :span="8">
<div class="resi-cell">
<div class="resi-cell-label">组织名称</div>
<div class="resi-cell-value"
:class="'resi-cell-value-radio'">
<el-input v-model="fmData.organizationName"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入">
<div class="resi-cell-value" :class="'resi-cell-value-radio'">
<el-input
v-model="fmData.organizationName"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入"
>
</el-input>
</div>
</div>
</el-col>
<el-col :span="16">
<el-col :span="12">
<div class="resi-cell">
<div class="resi-cell-label">创建时间</div>
<div class="resi-cell-value"
:class="'resi-cell-value-radio'">
<el-date-picker v-model="fmData.createTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd">
<div class="resi-cell-value" :class="'resi-cell-value-radio'">
<el-date-picker
v-model="fmData.createTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</div>
</div>
</el-col>
<el-col :span="4">
<el-button style="float:right;" type="primary" size="small" @click="handleSearch"
>查询</el-button
>
</el-col>
</el-row>
</el-row>
<el-row class="resi-search">
<el-col :span="24">
<el-button type="primary"
size="small"
@click="handleSearch">查询</el-button>
</el-col>
</el-row>
</el-card>
</div>
<el-card class="resi-card-table">
<div class="resi-row-btn">
<el-button type="success"
size="small"
@click="handleAdd">新增</el-button>
<el-upload ref="upload"
class="upload-btn"
action="uploadUlr"
:limit="1"
:with-credentials="true"
:show-file-list="false"
:auto-upload="true"
:on-progress="handleProgress"
:on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload"
:http-request="uploadHttpRequest">
<el-button type="warning"
size="small"
:loading="importLoading">{{
<el-button type="success" size="small" @click="handleAdd"
>新增</el-button
>
<el-upload
ref="upload"
class="upload-btn"
action="uploadUlr"
:limit="1"
:with-credentials="true"
:show-file-list="false"
:auto-upload="true"
:on-progress="handleProgress"
:on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload"
:http-request="uploadHttpRequest"
>
<el-button type="warning" size="small" :loading="importLoading">{{
importBtnTitle
}}</el-button>
</el-upload>
<el-button @click="handleChu"
type="danger"
size="small">excel导出</el-button>
<el-button @click="handleChu" type="danger" size="small"
>excel导出</el-button
>
</div>
<el-table :data="tableData"
border
style="width: 100%"
class="resi-table"
:max-height="maxTableHeight">
<el-table-column label="序号"
type="index"
align="center"
width="50" />
<el-table-column prop="organizationName"
label="组织名称">
<el-table
:data="tableData"
border
style="width: 100%"
class="resi-table"
:max-height="maxTableHeight"
>
<el-table-column label="序号" type="index" align="center" width="50" />
<el-table-column prop="organizationName" label="组织名称">
</el-table-column>
<el-table-column prop="organizationPersonCount" label="组织人数">
</el-table-column>
<el-table-column prop="organizationPersonCount"
label="组织人数">
<el-table-column prop="serviceItem" label="服务事项"> </el-table-column>
<el-table-column prop="score" width="80" label="积分">
</el-table-column>
<el-table-column prop="serviceItem"
label="服务事项"> </el-table-column>
<el-table-column prop="principalName"
label="负责人"> </el-table-column>
<el-table-column prop="principalPhone"
label="联系电话">
<el-table-column prop="principalName" label="负责人"> </el-table-column>
<el-table-column prop="principalPhone" label="联系电话">
</el-table-column>
<el-table-column prop="organizationCreatedTime"
label="创建时间">
<el-table-column prop="organizationCreatedTime" label="创建时间">
</el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"
width="120">
<el-table-column fixed="right" label="操作" align="center" width="120">
<template slot-scope="scope">
<el-button @click="handleWatch(scope.$index)"
type="text"
size="small">查看</el-button>
<!-- <el-button type="text"
style="color:#1C6AFD;"
size="small"
@click="handleScore(scope.row)">积分记录</el-button> -->
<el-button @click="handleEdit(scope.$index)"
type="text"
size="small"
style="margin-right: 10px; color: #00a7a9">编辑</el-button>
<el-popconfirm title="删除之后无法回复,确认删除?"
@onConfirm="handleDel(scope.row, scope.$index)"
@confirm="handleDel(scope.row, scope.$index)">
<el-button slot="reference"
type="text"
size="small"
style="color: #d51010">删除</el-button>
<el-button
@click="handleWatch(scope.$index)"
type="text"
size="small"
>查看</el-button
>
<el-button
type="text"
style="color: #1c6afd"
size="small"
@click="handleScore(scope.row)"
>积分记录</el-button
>
<el-button
@click="handleEdit(scope.$index)"
type="text"
size="small"
style="margin-right: 10px; color: #00a7a9"
>编辑</el-button
>
<el-popconfirm
title="删除之后无法回复,确认删除?"
@onConfirm="handleDel(scope.row, scope.$index)"
@confirm="handleDel(scope.row, scope.$index)"
>
<el-button
slot="reference"
type="text"
size="small"
style="color: #d51010"
>删除</el-button
>
</el-popconfirm>
</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">
<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"
>
</el-pagination>
</div>
</el-card>
<!-- 修改弹出框 -->
<el-dialog :visible.sync="formShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="formTitle"
width="850px"
top="5vh"
@closed="handleClose">
<edit-form ref="eleEditForm"
@dialogCancle="handleClose"
@dialogOk="handleEditSuccess"></edit-form>
<el-dialog
:visible.sync="formShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="formTitle"
width="850px"
top="5vh"
@closed="handleClose"
>
<edit-form
ref="eleEditForm"
@dialogCancle="handleClose"
@dialogOk="handleEditSuccess"
></edit-form>
</el-dialog>
<!-- 积分记录 -->
<el-dialog :visible.sync="scoreDiaShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="scoreDiaTitle"
width="1050px"
top="5vh"
@closed="diaClose">
<score-record ref="ref_score"
:serviceType="'party_unit'"></score-record>
<el-dialog
:visible.sync="scoreDiaShow"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="scoreDiaTitle"
width="1050px"
top="5vh"
@closed="diaClose"
>
<score-record
ref="ref_score"
:serviceType="'community_org'"
></score-record>
</el-dialog>
</div>
</template>
@ -173,11 +188,11 @@ import nextTick from "dai-js/tools/nextTick";
import { mapGetters } from "vuex";
import editForm from "./cpts/edit";
import axios from "axios";
import scoreRecord from '../../../components/scoreRecord.vue'
import scoreRecord from "../../../components/scoreRecord.vue";
export default {
components: { editForm, scoreRecord },
data () {
data() {
return {
openSearch: false,
@ -201,12 +216,12 @@ export default {
importLoading: false,
//
scoreDiaTitle: '积分记录',
scoreDiaTitle: "积分记录",
scoreDiaShow: false,
};
},
computed: {
maxTableHeight () {
maxTableHeight() {
return this.clientHeight - 410;
},
...mapGetters(["clientHeight"]),
@ -222,23 +237,23 @@ export default {
}
},
},
mounted () {
mounted() {
this.getTableData();
},
methods: {
//
handleExcelSuccess (res, file) {
handleExcelSuccess(res, file) {
if (res.code === 0 && res.msg === "success") {
console.log("resss---ppp", res);
} else {
this.$message.error(res.msg);
}
},
handleProgress (event, file, fileList) {
handleProgress(event, file, fileList) {
console.log("percentage", file.percentage);
},
beforeExcelUpload (file) {
beforeExcelUpload(file) {
console.log("file", file);
const isType = file.type === "application/vnd.ms-excel";
const isTypeComputer =
@ -255,7 +270,7 @@ export default {
}
return fileType && isLt1M;
},
uploadHttpRequest (file) {
uploadHttpRequest(file) {
this.importLoading = true;
this.importBtnTitle = "正在上传中...";
const formData = new FormData(); //FormDataappend('key', value)
@ -275,7 +290,7 @@ export default {
this.getTableData();
if (res.data.code == 0) {
return this.$message.success(res.data.data || '导入成功');
return this.$message.success(res.data.data || "导入成功");
} else {
return this.$message.error(res.data.msg);
}
@ -286,35 +301,35 @@ export default {
this.$refs.upload.clearFiles();
},
handleSizeChange (val) {
handleSizeChange(val) {
console.log(`每页 ${val}`);
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
handleCurrentChange(val) {
console.log(`当前页: ${val}`);
this.pageNo = val;
this.getTableData();
},
handleClose () {
handleClose() {
this.formShow = false;
},
handleSearch (val) {
handleSearch(val) {
console.log(this.fmData);
this.pageNo = 1;
this.getTableData();
},
async handleAdd () {
async handleAdd() {
this.formShow = true;
await nextTick();
console.log(this.$refs);
this.$refs.eleEditForm.initForm("add");
},
async handleChu () {
async handleChu() {
const url =
"/heart/iccommunityselforganization/exportcommunityselforganization";
const { pageSize, pageNo, fmData } = this;
@ -350,23 +365,23 @@ export default {
});
},
async handleWatch (rowIndex) {
async handleWatch(rowIndex) {
this.formShow = true;
await nextTick();
this.$refs.eleEditForm.initForm("detail", this.tableData[rowIndex]);
},
async handleEdit (rowIndex) {
async handleEdit(rowIndex) {
this.formShow = true;
await nextTick();
this.$refs.eleEditForm.initForm("edit", this.tableData[rowIndex]);
},
handleEditSuccess () {
handleEditSuccess() {
this.handleClose();
this.getTableData();
},
async handleDel (rowData, rowIndex) {
async handleDel(rowData, rowIndex) {
console.log(rowData, rowIndex);
const url =
"/heart/iccommunityselforganization/delcommunityselforganization";
@ -384,7 +399,7 @@ export default {
}
},
async getTableData () {
async getTableData() {
const url =
"/heart/iccommunityselforganization/communityselforganizationlist";
const { pageSize, pageNo, fmData } = this;
@ -398,24 +413,23 @@ export default {
this.total = data.total || 0;
this.tableData = data.list
? data.list.map((item) => {
return item;
})
return item;
})
: [];
} else {
}
},
//
handleScore (row) {
this.scoreDiaShow = true
handleScore(row) {
this.scoreDiaShow = true;
this.$nextTick(() => {
this.$refs.ref_score.initForm(row.orgId)
})
this.$refs.ref_score.initForm(row.orgId);
});
},
diaClose () {
this.scoreDiaShow = false
diaClose() {
this.scoreDiaShow = false;
},
},
};

211
src/views/modules/shequ/cpts/fangwu-info.vue

@ -0,0 +1,211 @@
<template>
<div>
<div>
<el-form
ref="ref_form"
:inline="false"
:model="dataForm"
:disabled="formType === 'detail'"
class="form"
>
<el-form-item
label="所属小区"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.neighborHoodName }}</span>
</el-form-item>
<el-form-item
label="所属楼栋"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.buildingName }}</span>
</el-form-item>
<el-form-item
label="单元号"
prop="buildingUnitId"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.unitNum }}</span>
</el-form-item>
<el-form-item
label="门牌号"
prop="doorName"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.doorName }}</span>
</el-form-item>
<el-form-item
label="房屋类型"
prop="houseType"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.houseType }}</span>
</el-form-item>
<el-form-item
label="房屋用途"
prop="purpose"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.purpose }}</span>
</el-form-item>
<el-form-item
label="是否出租"
prop="rentFlag"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.rentFlag }}</span>
</el-form-item>
<el-form-item
label="房主姓名"
prop="ownerName"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.ownerName }}</span>
</el-form-item>
<el-form-item
label="房主电话"
prop="ownerPhone"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.ownerPhone }}</span>
</el-form-item>
<el-form-item
label="房主身份证"
prop="ownerIdCard"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.ownerIdCard }}</span>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button @click="handleCancle">关闭</el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
let loading; //
export default {
data() {
return {
formType: "detail", // addeditdetail
dataForm: {
neighborHoodId: "", // ID
buildingId: "", //ID
buildingUnitId: "", //ID
doorName: "", //
houseType: "", //
purpose: "", //
rentFlag: 1, //10
ownerPhone: "", //
ownerName: "", //
ownerIdCard: "", //
},
};
},
components: {},
mounted() {},
methods: {
async initForm(type, row) {
this.$refs.ref_form.resetFields();
this.formType = type;
if (row) {
this.dataForm = JSON.parse(JSON.stringify(row));
}
},
handleCancle() {
this.$emit("dialogCancle");
this.resetData();
},
resetData() {
this.dataForm = {
neighborHoodId: "", // ID
buildingId: "", //ID
buildingUnitId: "", //ID
doorName: "", //
houseType: "1", //
purpose: "1", //
rentFlag: 1, //10
ownerPhone: "", //
ownerName: "", //
ownerIdCard: "", //
};
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
computed: {},
props: {},
};
</script>
<style lang="scss" scoped>
.item_width_1 {
width: 500px;
}
.item_width_2 {
width: 400px;
}
.item_width_3 {
margin-left: 10px;
width: 200px;
}
.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;
}
</style>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

184
src/views/modules/shequ/cpts/pan-chart.vue

@ -0,0 +1,184 @@
<template>
<div class="m-chart">
<canvas id="myChart" :width="width" :height="height" />
</div>
</template>
<script>
import nextTick from "dai-js/tools/nextTick";
import F2 from "@antv/f2/lib/index-all";
// iosbug
const fontFamily = "PingFang SC";
const fontSize = 14;
let chart;
let srcData = [];
const iniChart = function (config, srcData, total) {
chart = new F2.Chart({
id: "myChart",
...config,
});
let data = [
{
const: "const",
name: "交通出行",
count: 51.39,
},
{
const: "const",
name: "饮食",
count: 356.68,
},
{
const: "const",
name: "生活日用",
count: 20.0,
},
{
const: "const",
name: "住房缴费",
count: 116.53,
},
];
console.log("-----------------------------------", srcData);
data = srcData;
chart.source(data);
chart.coord("polar", {
transposed: true,
radius: 0.9,
innerRadius: 0.6,
});
chart.axis(false);
chart.legend(false);
// chart.legend({
// position: "bottom",
// align: "center",
// });
chart.tooltip(false);
chart.guide().html({
position: ["50%", "50%"],
html: `<div style="text-align: center;width:150px;height: 35px;">\n <p style="font-size: 18px;color: #999;margin: 0" id="title">总人数</p>\n <p style="font-size: 30px;color: #343434;margin: 0;font-weight: bold;" id="count">${total}</p>\n </div>`,
});
chart
.interval()
.position("const*count")
.adjust("stack")
.color("name", [
"#e70014",
"#ea6200",
"#f59701",
"#fcc900",
"#fef200",
"#cedc01",
"#8fc41e",
"#22ad38",
"#009b44",
"#009c6c",
"#019e97",
"#00a1be",
"#00a2c1",
"#00a0ea",
"#0085d2",
"#0067b6",
"#00469b",
"#1d2089",
"#5e1986",
"#920784",
"#bd0081",
"#e5007f",
"#e5026d",
"#e4024e",
"#e40031",
]);
chart.pieLabel({
sidePadding: 30,
activeShape: true,
label1: function label1(data) {
return {
text: data.count + "人",
fill: "#343434",
fontWeight: "bold",
fontSize: 14
};
},
label2: function label2(data) {
return {
text: data.name,
fill: "#999",
fontSize: 14
};
},
onClick: function onClick(ev) {
const data = ev.data;
if (data) {
// $("#title").text(data.name);
// $("#count").text(data.count);
}
},
});
chart.render();
// chart return
return chart;
};
export default {
name: "chart",
props: {
list: {
type: Array,
default: () => {
return [];
},
},
total: {
type: Number,
default: 0,
},
config: {
type: Object,
default: () => {
return {};
},
},
width: {
type: Number,
default: 400,
},
height: {
type: Number,
default: 260,
},
},
data() {
return {
iniLoading: false,
};
},
watch: {
list(data) {
// chart.changeData(data);
srcData = data;
},
},
async created() {
await nextTick(200);
iniChart(this.config, this.list, this.total);
await nextTick(200);
this.iniLoading = true;
},
methods: {
setList(data) {
chart.changeData(data);
srcData = data;
},
},
};
</script>
<style lang="scss" scoped></style>

506
src/views/modules/shequ/cpts/people-more.vue

@ -0,0 +1,506 @@
<template>
<div class="m-pop">
<div class="wrap">
<div class="title">
<span>更多信息</span>
</div>
<div class="btn-close" @click="handleClose">
<img src="@/assets/img/shuju/people/close.png" />
</div>
<div
:key="'fieldSubList' + index"
v-for="(fieldSubList, index) in fieldList"
>
<div class="list">
<div class="item" v-if="index == 0">
<span class="item-field">所属网格</span>
<span>{{ gridName }}</span>
</div>
<div class="item" v-if="index == 0">
<span class="item-field">所属小区</span>
<span>{{ xiaoquName }}</span>
</div>
<div class="item" v-if="index == 0">
<span class="item-field">所属楼宇</span>
<span>{{ louName }}-{{ danyuanName }}</span>
</div>
<div class="item" v-if="index == 0">
<span class="item-field">所属家庭</span>
<span>{{ homeName }}</span>
</div>
<div class="item" :key="field.itemId" v-for="field in fieldSubList">
<span class="item-field">{{ field.label }}</span>
<span
v-if="
field.itemType == 'select' ||
field.itemType == 'radio' ||
field.itemType == 'checkbox' ||
field.itemType == 'cascader'
"
>{{
info[field.columnName] == null
? "--"
: getOptionLabel(
field.options,
info[field.columnName],
field.itemType
)
}}</span
>
<span v-else>{{
info[field.columnName] == null ? "--" : info[field.columnName]
}}</span>
</div>
</div>
<div class="line"></div>
</div>
<div class="tabs">
<div
class="tab-btn"
@click="subStartGroupIndex"
v-if="groupList.length > 9"
>
<img src="@/assets/img/shuju/people/arrow-double-left.png" />
</div>
<div
v-show="index >= startGroupIndex && index < startGroupIndex + 9"
class="tab"
:class="groupIndex % groupList.length == index ? 'z-on' : ''"
:key="'tab' + index"
@click="groupIndex = index"
v-for="(item, index) in groupList"
>
{{ item.label }}
</div>
<div
class="tab-btn"
@click="addStartGroupIndex"
v-if="groupList.length > 9"
>
<img src="@/assets/img/shuju/people/arrow-double-right.png" />
</div>
</div>
<div
:key="'group' + index"
v-show="groupIndex % groupList.length == index"
v-for="(group, index) in groupList"
>
<div
v-if="
group.tableName == 'ic_resi_demand' &&
Array.isArray(allInfo.ic_resi_demand) &&
allInfo.ic_resi_demand.length > 0
"
>
<div
class="list"
:key="'ic_resi_demand' + infoIndex"
v-for="(infoItem, infoIndex) in allInfo.ic_resi_demand"
>
<div
class="item"
:key="field.itemId"
v-for="field in group.itemList"
>
<span class="item-field">{{ field.label }}</span>
<span
v-if="
field.itemType == 'select' ||
field.itemType == 'radio' ||
field.itemType == 'checkbox' ||
field.itemType == 'cascader'
"
>{{
infoItem[field.columnName] == null
? "--"
: getOptionLabel(
field.options,
infoItem[field.columnName],
field.itemType
)
}}</span
>
<span v-else>{{
infoItem[field.columnName] == null
? "--"
: infoItem[field.columnName]
}}</span>
</div>
</div>
</div>
<div class="list" v-else>
<div class="item" :key="field.itemId" v-for="field in group.itemList">
<span class="item-field">{{ field.label }}</span>
<span
v-if="
field.itemType == 'select' ||
field.itemType == 'radio' ||
field.itemType == 'checkbox' ||
field.itemType == 'cascader'
"
>{{
!allInfo[group.tableName] ||
allInfo[group.tableName][0][field.columnName] == null
? "--"
: getOptionLabel(
field.options,
allInfo[group.tableName][0][field.columnName],
field.itemType
)
}}</span
>
<span v-else>{{
!allInfo[group.tableName] ||
allInfo[group.tableName][0][field.columnName] == null
? "--"
: allInfo[group.tableName][0][field.columnName]
}}</span>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import cptCard from "@/views/modules/visual/cpts/card";
import { requestPost } from "@/js/dai/request";
export default {
name: "peopleMore",
props: {
userId: {
type: String,
default: "",
},
gridName: {
type: String,
default: "",
},
},
components: {
cptCard,
},
data() {
return {
fieldList: [],
groupList: [],
groupIndex: 0,
startGroupIndex: 0,
info: {},
allInfo: {},
xiaoquList: [],
louList: [],
danyuanList: [],
homeList: [],
};
},
computed: {
xiaoquName() {
const {
xiaoquList,
info: { VILLAGE_ID },
} = this;
if (Array.isArray(xiaoquList) && xiaoquList.length > 0 && VILLAGE_ID) {
let item = xiaoquList.find((item) => item.value == VILLAGE_ID);
if (item) {
return item.label;
}
}
return "";
},
louName() {
const {
louList,
info: { BUILD_ID },
} = this;
if (Array.isArray(louList) && louList.length > 0 && BUILD_ID) {
let item = louList.find((item) => item.value == BUILD_ID);
if (item) {
return item.label;
}
}
return "";
},
danyuanName() {
const {
danyuanList,
info: { UNIT_ID },
} = this;
if (Array.isArray(danyuanList) && danyuanList.length > 0 && UNIT_ID) {
let item = danyuanList.find((item) => item.value == UNIT_ID);
if (item) {
return item.label;
}
}
return "";
},
danyuanName() {
const {
danyuanList,
info: { UNIT_ID },
} = this;
if (Array.isArray(danyuanList) && danyuanList.length > 0 && UNIT_ID) {
let item = danyuanList.find((item) => item.value == UNIT_ID);
if (item) {
return item.label;
}
}
return "";
},
homeName() {
const {
homeList,
info: { HOME_ID },
} = this;
if (Array.isArray(homeList) && homeList.length > 0 && HOME_ID) {
let item = homeList.find((item) => item.value == HOME_ID);
if (item) {
return item.label;
}
}
return "";
},
},
watch: {
userId() {
this.getApiData();
},
},
mounted() {
this.getApiData();
},
methods: {
addStartGroupIndex() {
const { startGroupIndex, groupList } = this;
if (startGroupIndex < groupList.length - 9) {
this.startGroupIndex = startGroupIndex + 1;
} else {
this.startGroupIndex = groupList.length - 9;
}
},
subStartGroupIndex() {
const { startGroupIndex, groupList } = this;
if (startGroupIndex > 0) {
this.startGroupIndex = startGroupIndex - 1;
} else {
this.startGroupIndex = 0;
}
},
handleClose() {
this.$emit("close");
},
async getApiData() {
await this.getField();
await this.getInfo();
this.getXiaoquList();
this.getLouList();
this.getDanyuanList();
this.getHomeList();
},
getOptionLabel(options, value, type = "") {
if (Array.isArray(options)) {
let valueArr = value.split(",");
if (type == "cascader") {
if (valueArr.length > 0) {
let level1 = options.find((item) => item.value == valueArr[0]);
if (level1) {
if (valueArr.length > 1 && level1.children) {
let level2 = level1.children.find(
(item) => item.value == valueArr[1]
);
if (level2) {
return level1.label + "-" + level2.label;
}
}
return level1.label;
}
}
} else {
return valueArr
.map((val) => {
let item = options.find((item) => item.value == val);
if (item && item.label) {
return item.label;
}
return "--";
})
.join("、");
}
}
return "--";
},
//
async getField() {
const url = "/oper/customize/icform/getcustomerform";
const { data, code, msg } = await requestPost(url, {
dynamic: true,
formCode: "resi_base_info",
});
if (code === 0) {
this.groupList = data.groupList;
this.fieldList = (function (arr) {
let col = [];
let ele = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
if (item.itemType == "divider" || i == arr.length - 1) {
col.push([...ele]);
ele = [];
} else {
ele.push(item);
}
}
return col;
})(data.itemList);
this.fieldList.forEach((subList, index) => {
subList.forEach(async (item, subIndex) => {
if (item.optionSourceType == "remote" && item.optionSourceValue) {
this.fieldList[index][subIndex].options = await this.getOptions(
item.optionSourceValue
);
}
});
});
} else {
this.$message.error(msg);
}
},
//
async getInfo() {
const url = "/epmetuser/icresiuser/detail";
const { data, code, msg } = await requestPost(url, {
icResiUserId: this.userId,
formCode: "resi_base_info",
});
if (code === 0) {
this.info = data.ic_resi_user[0];
this.allInfo = data;
this.fieldList.forEach((subList, index) => {
subList.forEach((item, subIndex) => {
if (
item.itemType == "radio" &&
item.childGroup &&
this.allInfo[item.tableName] &&
this.allInfo[item.tableName][0][item.columnName] == "1"
) {
this.groupList = [...this.groupList, item.childGroup];
}
});
});
console.log("1111111111111111111111111", this.groupList);
this.groupList.forEach((subList, index) => {
subList.itemList.forEach(async (item, subIndex) => {
if (item.optionSourceType == "remote" && item.optionSourceValue) {
this.groupList[index].itemList[subIndex].options =
await this.getOptions(item.optionSourceValue);
}
});
});
} else {
this.$message.error(msg);
}
},
//
async getOptions(url) {
if (!url) return [];
const { data, code, msg } = await requestPost(url, {});
if (code === 0) {
return data;
} else {
return [];
}
},
async getXiaoquList() {
const url = "/gov/org/icneighborhood/neighborhoodoption";
const { data, code, msg } = await requestPost(url, {
agencyId: this.info.AGENCY_ID,
gridId: this.info.GRID_ID,
});
if (code === 0) {
this.xiaoquList = data;
} else {
this.$message.error(msg);
}
},
async getLouList() {
const url = "/gov/org/icbuilding/buildingoption";
const { data, code, msg } = await requestPost(url, {
neighborHoodId: this.info.VILLAGE_ID,
});
if (code === 0) {
this.louList = data;
} else {
this.$message.error(msg);
}
},
async getDanyuanList() {
const url = "/gov/org/icbuildingunit/unitoption";
const { data, code, msg } = await requestPost(url, {
buildingId: this.info.BUILD_ID,
});
if (code === 0) {
this.danyuanList = data;
} else {
this.$message.error(msg);
}
},
async getHomeList() {
const url = "/gov/org/ichouse/houseoption";
const { data, code, msg } = await requestPost(url, {
unitId: this.info.UNIT_ID,
});
if (code === 0) {
this.homeList = data;
} else {
this.$message.error(msg);
}
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/people-info.scss"
scoped
></style>

228
src/views/modules/shequ/cpts/xuqiu-info.vue

@ -0,0 +1,228 @@
<template>
<div>
<div>
<el-form
ref="ref_form"
:inline="false"
:model="dataForm"
:disabled="formType === 'detail'"
class="form"
>
<el-form-item label="状态" label-width="150px" style="display: block">
<span>{{ dataForm.statusName }}</span>
</el-form-item>
<el-form-item
label="所属网格"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.gridName }}</span>
</el-form-item>
<el-form-item
label="需求类型"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.categoryName }}</span>
</el-form-item>
<el-form-item
label="需求内容"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.content }}</span>
</el-form-item>
<el-form-item
label="上报类型"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.reportTypeName }}</span>
</el-form-item>
<el-form-item label="上报人" label-width="150px" style="display: block">
<span>{{ dataForm.reportUserName }}</span>
</el-form-item>
<el-form-item
label="上报时间"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.reportTime }}</span>
</el-form-item>
<el-form-item label="需求人" label-width="150px" style="display: block">
<span>{{ dataForm.demandUserName }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.serviceShowName"
label="服务方"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.serviceShowName }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.wantServiceTime"
label="服务时间"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.wantServiceTime }}</span>
</el-form-item>
<el-form-item
v-if="
dataForm.serviceStartTime &&
dataForm.serviceEndTime &&
dataForm.status == 'finished'
"
label="实际服务时间"
label-width="150px"
style="display: block"
>
<span
>{{ dataForm.serviceStartTime }}{{
dataForm.serviceEndTime
}}</span
>
</el-form-item>
<el-form-item
v-if="dataForm.finishResult && dataForm.status == 'finished'"
label="完成情况"
label-width="150px"
style="display: block"
>
<span>{{
dataForm.finishResult == "resolved" ? "已解决" : "未解决"
}}</span>
</el-form-item>
<el-form-item
v-if="dataForm.score && dataForm.status == 'finished'"
label="评价得分"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.score }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.finishDesc && dataForm.status == 'finished'"
label="评价备注"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.finishDesc }}</span>
</el-form-item>
<el-form-item
v-if="dataForm.cancelTime && dataForm.status == 'canceled'"
label="取消时间"
label-width="150px"
style="display: block"
>
<span>{{ dataForm.cancelTime }}</span>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button @click="handleCancle">关闭</el-button>
</div>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
let loading; //
export default {
data() {
return {
formType: "detail", // addeditdetail
dataForm: {},
};
},
components: {},
mounted() {},
methods: {
async initForm(type, row) {
this.$refs.ref_form.resetFields();
this.formType = type;
if (row) {
this.dataForm = JSON.parse(JSON.stringify(row));
}
},
handleCancle() {
this.$emit("dialogCancle");
this.resetData();
},
resetData() {
this.dataForm = {};
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
computed: {},
props: {},
};
</script>
<style lang="scss" scoped>
.item_width_1 {
width: 500px;
}
.item_width_2 {
width: 400px;
}
.item_width_3 {
margin-left: 10px;
width: 200px;
}
.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;
}
</style>
<style>
.el-dialog__body {
padding: 0 10px 20px !important;
}
</style>

1015
src/views/modules/shequ/index.vue

File diff suppressed because it is too large

221
src/views/modules/visual/basicinfo/basicInfoCommunity.vue

@ -6,8 +6,8 @@
<img src="../../../../assets/img/shuju/title-tip.png"
alt />
<div class="customer_select">
<!-- <span>{{neighborHoodName+'-'}}</span> -->
<div class="second-select">
<el-select v-model="selBuildingId"
:popper-append-to-body="false"
placeholder="请选择">
@ -19,10 +19,15 @@
</el-option>
</el-select>
</div>
</div>
<div class="div_room_bar">
<el-scrollbar style="height:100%">
<div v-if="roomLoaded"
<div class="info_loading"
v-if="roomLoaded">
<screen-loading>加载中</screen-loading>
</div>
<div v-if="!roomLoaded"
class="div_room">
<div v-for="(item,index) in roomArray"
@ -80,6 +85,7 @@
import { mapGetters } from "vuex";
import { Loading } from 'element-ui'; //Loading
import { requestPost } from "@/js/dai/request";
import ScreenLoading from "@/views/modules/visual/cpts/loading";
let loading;//
@ -94,7 +100,7 @@ export default {
selBuildingId: '',
selBuildingName: '',
roomLoaded: false,
roomLoaded: true,
roomArray: [],
selHouseId: '',
selHouseName: '',
@ -121,7 +127,7 @@ export default {
methods: {
//id
async initData (neighborHoodId, neighborHoodName) {
this.roomLoaded = false
this.neighborHoodId = neighborHoodId
this.neighborHoodName = neighborHoodName
//
@ -129,7 +135,6 @@ export default {
if (this.selBuildingId) {
await this.loadRoom()
this.roomLoaded = true
}
@ -142,7 +147,7 @@ export default {
this.selBuildingName = this.buildingArray[index].buildingName
await this.loadRoom()
this.roomLoaded = true
this.$emit('refreshInfoList', this.selBuildingId, 'building')
},
@ -152,12 +157,16 @@ export default {
this.selHouseId = this.roomArray[index].houseId
this.selHouseName = this.roomArray[index].houseName
// this.$emit('refreshInfoList', this.selHouseId, 'room')
// this.$emit('refreshInfoList', this.selHouseId, 'room')-
},
//
async handleShowAllUser (selIndex) {
// this.startLoading()
await this.loadUser(this.roomArray[selIndex].houseId, selIndex)
if ((selIndex === 0 || selIndex) && !this.roomArray[selIndex].showAllUser) {
await this.loadUser(this.roomArray[selIndex].houseId, selIndex)
}
this.roomArray.forEach((element, index) => {
let obj = JSON.parse(JSON.stringify(element))
@ -208,6 +217,7 @@ export default {
this.selBuildingId = this.buildingArray[0].buildingId
this.selBuildingName = this.buildingArray[0].buildingName
} else {
this.selBuildingId = ''
this.selBuildingName = ''
@ -221,6 +231,7 @@ export default {
//
async loadRoom () {
this.roomLoaded = true
const url = "/gov/org/ichouse/houselist"
// const url = "http://yapi.elinkservice.cn/mock/245/gov/org/ichouse/houselist"
let params = {
@ -228,41 +239,43 @@ export default {
}
const { data, code, msg } = await requestPost(url, params)
this.roomLoaded = false
if (code === 0) {
this.roomArray = data
if (this.roomArray.length > 0) {
if (data.length > 0) {
this.roomArray.forEach(roomItem => {
let iconArrayShow = JSON.parse(JSON.stringify(roomItem.categoryList))
let iconArray = []
data.forEach((roomItem, index) => {
roomItem.showAllUser = false
let categoryList = JSON.parse(JSON.stringify(roomItem.categoryList))
if (iconArrayShow.length > 0) {
if (iconArrayShow[0].isSpecial === '1') {//
roomItem.iconArrayShow = []
if (categoryList.length > 0) {
if (categoryList[0].isSpecial === '1') {//
roomItem.isParty = true
roomItem.partyUrl = iconArrayShow[0].iconUrl
iconArrayShow.shift();//
roomItem.partyUrl = categoryList[0].iconUrl
categoryList.shift();//
} else {
roomItem.isParty = false
}
}
if (iconArrayShow.length > 4) {//
for (let i = 0; i < 4; i++) {
iconArray.push(iconArrayShow[i])
let iconNum = categoryList.length > 4 ? 4 : categoryList.length
for (let i = 0; i < iconNum; i++) {
roomItem.iconArrayShow.push(categoryList[i])
}
} else {
iconArray = iconArrayShow
}
this.$nextTick(() => {
// ref_tree ref value node-key
roomItem.iconArrayShow = iconArray
});
roomItem.showAllUser = false
});
this.$nextTick(() => {
this.roomArray = [...data]
});
} else {
this.roomArray = []
}
@ -343,7 +356,7 @@ export default {
...mapGetters(["clientHeight"])
},
components: {},
components: { ScreenLoading },
}
</script>
@ -355,88 +368,94 @@ export default {
></style>
<style lang=scss scoped>
.customer_select {
/* 未选中任何选项的时候 placeholder的样式 需要先选中父元素 增加权重 */
/deep/ input::-webkit-input-placeholder {
color: #fff;
}
/deep/ input::-moz-input-placeholder {
color: #fff;
}
/deep/ input::-ms-input-placeholder {
color: #fff;
}
.info_loading {
margin-top: 50px;
}
/* 修改的是el-input的样式 */
/* 一种方法是设置最里层el-input__inner的背景色 外层的两级父元素设置为透明色 */
/* 另一种方法是从el-select到el-input__inenr的背景色都设置为需要的颜色 */
/deep/ .el-select,
/deep/ .el-input,
/deep/ .el-input__inner {
background-color: #08164d00;
.second-title {
display: flex;
align-items: center;
margin-top: 20px;
.second-title-label {
position: relative;
padding-left: 40px;
font-size: 16px;
font-weight: 500;
color: #fff;
border: 0px;
border-radius: 0px;
text-align: left;
font-size: 22px;
font-family: PingFang SC;
font-weight: 800;
color: #ffffff;
display: flex;
}
/* el-input聚焦的时候 外层的border会有一个样式 */
/deep/ .el-select .el-input.is-focus .el-input__inner {
border: 0px;
}
/* 修改的是el-input上下的小图标的颜色 */
/deep/ .el-select .el-input .el-select__caret::before {
color: #fff;
.second-title-label::after {
content: "";
background: url("../../../../assets/img/xiala.png") center center no-repeat;
position: absolute;
width: 100%;
height: 100%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
/* 修改总体选项的样式 最外层 */
/deep/ .el-select-dropdown {
background-color: #08164d;
margin: 0px;
border: 0px;
border-radius: 0px;
}
/* 修改选项整体的样式 */
/deep/ .el-select-dropdown__list {
padding: 6px 0 20px 0;
}
/* 修改单个的选项的样式 */
/deep/ .el-select-dropdown__item {
background-color: transparent;
color: #fff;
left: 20px;
width: 12px;
height: 12px;
box-sizing: border-box;
margin-top: -6px;
background: #2865fa;
border-radius: 50%;
}
}
.second-select {
margin: 0 10px 10px;
::v-deep .el-input {
width: 180px;
height: 36px;
.el-input__inner {
height: 100%;
padding: 0 10px;
color: #fff;
line-height: 36px;
background: #06186d;
border: 1px solid #1a64cc;
}
/* item选项的hover样式 */
/deep/ .el-select-dropdown__item.hover,
/deep/ .el-select-dropdown__item:hover {
color: #409eff;
.el-icon-arrow-up:before {
content: "\e78f";
}
// .el-select__caret:before {
// content: '\E790'
// }
}
/* 修改的是下拉框选项内容上方的尖角 */
/deep/ .el-popper .popper__arrow,
.el-popper .popper__arrow::after {
display: none;
::v-deep .el-date-editor {
width: 360px;
position: relative;
background: #06186d;
border: 1px solid #1a64cc;
.el-range-input {
color: #fff;
background: #06186d;
}
.el-range-separator {
color: #fff;
}
.el-range__icon {
position: absolute;
right: 5px;
// float: right;
}
.el-input__prefix {
left: unset;
right: 5px;
}
}
}
.second-select:last-child {
margin-left: 0;
margin-bottom: 10px;
}
</style>
<style lang=scss >
.el-scrollbar__wrap {
overflow-x: hidden !important;
<style
lang="scss"
src="@/assets/scss/modules/visual/typeAnalyze.scss"
scoped
></style>
<style lang="scss" scoped>
.div_room_bar {
/deep/ .el-scrollbar__wrap {
overflow-x: hidden !important;
}
}
</style>

142
src/views/modules/visual/basicinfo/basicInfoMain.vue

@ -54,14 +54,20 @@
</div>
<div class="div_info">
<el-scrollbar style="height:100%">
<el-scrollbar style="height:98%">
<div class="info_tip">
<img src="../../../../assets/img/shuju/title-tip.png"
alt />
<div class="tip_title">分类列表</div>
</div>
<div class="info_list">
<div class="info_loading"
v-if="infoLoading">
<screen-loading>加载中</screen-loading>
</div>
<div v-if="!infoLoading"
class="info_list">
<div v-for="(item,index) in listDatashow"
:key="index"
class="item">
@ -114,6 +120,8 @@ import BasicInfoCommunity from "./basicInfoCommunity";
import PeopleSearch from "./peopleSearch";
import People from "./people";
import cptCard from "@/views/modules/visual/cpts/card";
import ScreenLoading from "@/views/modules/visual/cpts/loading";
var centerPointGlobal = [120.38945519, 36.0722275]
let loading;//
@ -226,6 +234,7 @@ const vueGis = {
searchName: "",
//
infoLoading: true,
listData: [],//
listDatashow: [],//
@ -237,6 +246,7 @@ const vueGis = {
zoom: null,
parentPolygon: [],
centerFlag: 'point',//flag point fit
}
},
@ -257,7 +267,7 @@ const vueGis = {
//
this.loadPolygon(this.subAgencyArray)
this.setMapLocation()
await this.loadList()
},
@ -270,6 +280,7 @@ const vueGis = {
//infolist
async loadList () {
this.infoLoading = true
const url = "/epmetuser/statsresiwarn/list"
// const url = "http://yapi.elinkservice.cn/mock/245/epmetuser/statsresiwarn/list"
let params = {
@ -278,7 +289,7 @@ const vueGis = {
}
const { data, code, msg } = await requestPost(url, params)
this.infoLoading = false
if (code === 0) {
this.listData = data
// this.listData = this.listData1
@ -307,7 +318,7 @@ const vueGis = {
//list
refreshInfoList (selId, type) {
this.orgId = houselIdseId
this.orgId = selId
this.level = ''
},
@ -329,8 +340,6 @@ const vueGis = {
}
this.searchName = searchName
} else if (type === 'search') {
this.runNum++
this.runAgencyArray.push(this.orgData)
@ -357,6 +366,7 @@ const vueGis = {
this.orgData.zoom = map.getView().getZoom()
console.log('center', map.getView().getCenter())
console.log('zoom', map.getView().getZoom())
this.runAgencyArray.push(this.orgData)
this.subAgencyArray.forEach(item => {
@ -387,20 +397,74 @@ const vueGis = {
//
await this.loadOrgData()
//
this.loadParentPolygon()
//
this.loadPolygon(this.subAgencyArray)
//
await this.loadPolygon(this.subAgencyArray)
//
// //
// if (isRefreshView) {
// this.setMapLocation()
// mapView.setCenter(this.centerPoint);
// mapView.setZoom(this.zoom);
this.setMapLocation()
// }
await this.loadList()
},
//
setMapLocation () {
if (!this.zoom) {
this.setZoom(this.orgData.agencyLevel)
}
this.centerPoint = []
//
if (this.center && this.center.length > 0) {
this.centerPoint = this.center
this.centerFlag = 'point'
this.center = []
} else if (parentLayer.getSource().getFeatures()[0]) {//
this.centerFlag = 'flag_parent'
} else if (polygonLayer.getSource().getFeatures()[0]) {//,
this.centerFlag = 'flag_polygon'
} else if (this.orgData.longitude && this.orgData.latitude) {
this.centerPoint.push(this.orgData.longitude)
this.centerPoint.push(this.orgData.latitude)
this.centerFlag = 'point'
} else {
this.centerPoint = centerPointGlobal
this.centerFlag = 'point'
}
// debugger
if (this.centerFlag === 'flag_parent') {
let parentFeatures = parentLayer.getSource().getFeatures()[0]
let polygon = parentFeatures.getGeometry();
map.getView().fit(polygon, map.getSize());
this.zoom = map.getView().getZoom() - 1
} else if (this.centerFlag === 'flag_polygon') {
let polygonFeatures = polygonLayer.getSource().getFeatures()[0]
let polygon = polygonFeatures.getGeometry();
map.getView().fit(polygon, map.getSize());
this.zoom = map.getView().getZoom() - 1
} else {
mapView.setCenter(this.centerPoint);
}
mapView.setZoom(this.zoom);
},
//
@ -599,7 +663,7 @@ const vueGis = {
let oneArray = [x, y]
this.iconCoordinators.push(oneArray)
// debugger
//
//icon
let oneCctv = new Feature({
geometry: new Point([x, y]),
id: oneIcon.id_,
@ -628,26 +692,8 @@ const vueGis = {
iconSource.addFeatures(iconFeatures);
}
// this.addGif()
},
//
setMapLocation () {
this.centerPoint = []
if (this.center && this.center.length > 0) {
this.centerPoint = this.center
} else if (this.orgData.longitude && this.orgData.latitude) {
this.centerPoint.push(this.orgData.longitude)
this.centerPoint.push(this.orgData.latitude)
} else {
this.centerPoint = centerPointGlobal
}
if (!this.zoom) {
this.setZoom(this.orgData.agencyLevel)
}
},
//
setZoom (agencyLevel) {
@ -661,8 +707,23 @@ const vueGis = {
},
firstCenterMap () {
this.centerPoint = []
if (this.orgData.longitude && this.orgData.latitude) {
this.centerPoint.push(this.orgData.longitude)
this.centerPoint.push(this.orgData.latitude)
} else {
this.centerPoint = centerPointGlobal
}
if (!this.zoom) {
this.setZoom(this.orgData.agencyLevel)
}
},
initMap () {
this.setMapLocation()
this.firstCenterMap()
gaodeMapLayer = new TileLayer({
title: "地图",
@ -845,7 +906,7 @@ const vueGis = {
...mapGetters(["clientHeight"])
},
components: { BasicInfoCommunity, PeopleSearch, People, cptCard },
components: { BasicInfoCommunity, PeopleSearch, People, cptCard, ScreenLoading },
}
export default vueGis;
</script>
@ -865,8 +926,15 @@ export default vueGis;
.ol-overlaycontainer-stopevent {
display: none;
}
</style>
.el-scrollbar__wrap {
overflow-x: hidden !important;
<style lang="scss" scoped>
.info_loading {
margin-top: 50px;
}
.div_info {
/deep/ .el-scrollbar__wrap {
overflow-x: hidden !important;
}
}
</style>
</style>

28
src/views/modules/visual/basicinfo/personCategory/index.vue

@ -73,16 +73,7 @@
<div class="warning-box-bottom">
<screen-table ref="ref_recordlist"></screen-table>
<div class="pagination">
<el-pagination :current-page="pageNo"
:page-size="pageSize"
background
layout="prev, pager, next"
@size-change="pageSizeChangeHandleNew"
@current-change="pageCurrentChangeHandleNew"
:total="total">
</el-pagination>
</div>
</div>
</cpt-card>
</div>
@ -131,9 +122,7 @@ export default {
categoryList: [],
pageNo: 1,
pageSize: 10,
total: 0,
activeIndex: 0,
};
@ -195,7 +184,6 @@ export default {
onClickList (item, index) {
this.activeIndex = index;
this.pageNo = 1;
this.categoryKey = item.categoryKey
this.loadRecordList()
@ -203,7 +191,7 @@ export default {
},
loadRecordList () {
this.$refs.ref_recordlist.getRecordlist(this.dateId, this.categoryKey, this.pageNo, this.pageSize, this.agencyId, this.level)
this.$refs.ref_recordlist.getRecordlist(this.dateId, this.categoryKey, this.agencyId, this.level)
},
@ -242,15 +230,7 @@ export default {
this.getApiData()
},
pageSizeChangeHandleNew (val) {
this.pageNo = 1;
this.pageSize = val;
this.loadRecordList()
},
pageCurrentChangeHandleNew (val) {
this.pageNo = val;
this.loadRecordList()
},
},
watch: {
dateIdShow () {

69
src/views/modules/visual/basicinfo/personCategory/recordList.vue

@ -68,6 +68,16 @@
</div>
</div>
</div>
<div class="pagination">
<el-pagination :current-page="pageNo"
:page-size="pageSize"
background
layout="prev, pager, next"
@size-change="pageSizeChangeHandleNew"
@current-change="pageCurrentChangeHandleNew"
:total="total">
</el-pagination>
</div>
</div>
</template>
@ -90,26 +100,14 @@ export default {
showTypeSelect: false,
widthList: ['5%', '10%', '15%', '10%', '20%', '30%'],
typeList: [
{
value: '1',
label: '迁入'
},
{
value: '2',
label: '迁出'
},
{
value: '3',
label: '新增'
},
],
typeList: [],
typeShow: '全部',
selType: '',
dateId: '',
categoryKey: '',
pageNo: '',
pageSize: '',
pageNo: 1,
pageSize: 10,
total: 0
};
},
watch: {
@ -160,15 +158,14 @@ export default {
},
//
async getRecordlist (dateId, categoryKey, pageNo, pageSize, orgId, orgType) {
async getRecordlist (dateId, categoryKey, orgId, orgType) {
this.visibleLoading = true
if (dateId) {
this.dateId = dateId
this.categoryKey = categoryKey
this.pageNo = pageNo
this.pageSize = pageSize
this.orgId = orgId
this.orgType = orgType
this.pageNo = 1
}
let tableData = [];
const url = "/epmetuser/icuserchangerecord/category-analysis-list";
@ -212,6 +209,15 @@ export default {
this.getRecordlist()
this.showTypeSelect = !this.showTypeSelect
},
pageSizeChangeHandleNew (val) {
this.pageNo = 1;
this.pageSize = val;
this.getRecordlist()
},
pageCurrentChangeHandleNew (val) {
this.pageNo = val;
this.getRecordlist()
},
},
@ -347,6 +353,31 @@ export default {
}
}
}
.pagination {
box-sizing: border-box;
margin-top: 20px;
width: 100%;
height: 40px;
display: flex;
justify-content: flex-end;
/deep/ .el-pagination.is-background .el-pager li:not(.disabled).active {
background: #0266d1;
color: #000d3f;
}
/deep/ .el-pagination .el-pager li {
background: #002e74;
}
/deep/ .el-pagination .btn-prev {
background: #002e74;
}
/deep/ .el-pagination .btn-next {
background: #002e74;
}
}
}
.user_list {

2
src/views/modules/visual/communityGovern/cpt/project-info.vue

@ -23,7 +23,7 @@
</div>
<div class="info-prop">
<span>项目方案</span>
<span>{{ projectInfo.projectTitle }}</span>
<span>{{ projectInfo.publicReply }}</span>
</div>
<div class="info-prop">
<span>内部备注</span>

138
src/views/modules/visual/communityGovern/processAnalyze.vue

@ -88,6 +88,8 @@
<screen-map class="map"
ref="map"
@clickFeature="clickProject"
:isAddOpenlay="true"
:clickType="'popup'"
:showIconLayer="true"></screen-map>
<div class="r-status">
<div :class="['status', 'status-pending', {'sel-status':status==='pending'}]"
@ -432,8 +434,60 @@ export default {
},
//
clickProject (feature) {
console.log('项目信息', feature.values_.properties)
async clickProject (feature) {
console.log(feature)
const featureInfo = feature.values_.properties.info
let coordinate = [featureInfo.longitude, featureInfo.latitude]
const url = "/gov/project/trace/projectdetail";
const { data, code, msg } = await requestPost(url, {
projectId: featureInfo.projectId,
});
if (code === 0) {
let projectInfo = data;
projectInfo = {
projectTitle: data.projectTitle ? data.projectTitle : '--',
backGround: data.backGround ? data.backGround : '--',
publicReply: data.publicReply ? data.publicReply : '--',
internalRemark: data.internalRemark ? data.internalRemark : '--',
departmentNameList: (data.departmentNameList && data.departmentNameList.length > 0) ? data.departmentNameList.join('、') : '--',
projectCate: (data.projectCate && data.projectCate.length > 0) ? data.projectCate.join('、') : '--',
projectTag: (data.projectTag && data.projectTag.length > 0) ? data.projectTag.join('、') : '--',
}
let showData = `
<div style='font-size:16px; color:#FFFFFF;'>项目信息</div>
<div style='font-size:12px; color:#FFFFFF;margin-top:10px'>项目标题
<span>`+ projectInfo.projectTitle + `</span>
</div>
<div style='font-size:12px; color:#FFFFFF;margin-top:5px'>项目背景
<span>`+ projectInfo.backGround + `</span>
</div>
<div style='font-size:12px; color:#FFFFFF;margin-top:5px'>项目方案
<span>`+ projectInfo.projectTitle + `</span>
</div>
<div style='font-size:12px; color:#FFFFFF;margin-top:5px'>内部备注
<span>`+ projectInfo.internalRemark + `</span>
</div>
<div style='font-size:12px; color:#FFFFFF;margin-top:5px'>处理部门
<span>`+ projectInfo.departmentNameList + `</span>
</div>
<div style='font-size:12px; color:#FFFFFF;margin-top:5px'>分类
<span>`+ projectInfo.projectCate + `</span>
</div>
<div style='font-size:12px; color:#FFFFFF;margin-top:5px'>标签
<span>`+ projectInfo.projectTag + `</span>
</div>
`
this.$refs.map.handleShowPopup(showData, coordinate)
} else {
this.$message.error(msg);
}
},
pieInitOk (dom) {
@ -657,82 +711,4 @@ export default {
scoped
></style>
<style lang=scss >
.customer_select {
/* 未选中任何选项的时候 placeholder的样式 需要先选中父元素 增加权重 */
/deep/ input::-webkit-input-placeholder {
color: #fff;
}
/deep/ input::-moz-input-placeholder {
color: #fff;
}
/deep/ input::-ms-input-placeholder {
color: #fff;
}
/* 修改的是el-input的样式 */
/* 一种方法是设置最里层el-input__inner的背景色 外层的两级父元素设置为透明色 */
/* 另一种方法是从el-select到el-input__inenr的背景色都设置为需要的颜色 */
/deep/ .el-select,
/deep/ .el-input,
/deep/ .el-input__inner {
background-color: #08164d00;
color: #fff;
border: 0px;
border-radius: 0px;
text-align: left;
font-size: 22px;
font-family: PingFang SC;
font-weight: 800;
color: #ffffff;
display: flex;
}
/* el-input聚焦的时候 外层的border会有一个样式 */
/deep/ .el-select .el-input.is-focus .el-input__inner {
border: 0px;
}
/* 修改的是el-input上下的小图标的颜色 */
/deep/ .el-select .el-input .el-select__caret::before {
color: #fff;
content: "";
background: url("../../../../assets/img/xiala.png") center center no-repeat;
position: absolute;
width: 100%;
height: 100%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
/* 修改总体选项的样式 最外层 */
/deep/ .el-select-dropdown {
background-color: #08164d;
margin: 0px;
border: 0px;
border-radius: 0px;
}
/* 修改选项整体的样式 */
/deep/ .el-select-dropdown__list {
padding: 6px 0 20px 0;
}
/* 修改单个的选项的样式 */
/deep/ .el-select-dropdown__item {
background-color: transparent;
color: #fff;
}
/* item选项的hover样式 */
/deep/ .el-select-dropdown__item.hover,
/deep/ .el-select-dropdown__item:hover {
color: #409eff;
}
/* 修改的是下拉框选项内容上方的尖角 */
/deep/ .el-popper .popper__arrow,
.el-popper .popper__arrow::after {
display: none;
}
}

179
src/views/modules/visual/communityGovern/resiPieOption copy.js

@ -0,0 +1,179 @@
export function pieOption (_charts) {
const center= ['50%', '250px']
return {
title: {
text: '0',
top: 220,
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: 500,
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: ['55%', '55.3%'],
label: {
show: false
},
labelLine: {
show: false
},
data: [{
value: 360,
itemStyle: {
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: ['40%', '60%'],
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: -20,
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 = [
// '#00FFFF', '#00FF00', '#FFFF00', '#FF8C00', '#FF0000', '#FE8463',
// ];
// 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)',
}
}
}
]
},
]
}
}

25
src/views/modules/visual/communityGovern/resiPieOption.js

@ -1,5 +1,5 @@
export function pieOption (_charts) {
export function pieOption (_charts,data) {
const center= ['50%', '250px']
return {
title: {
@ -33,6 +33,23 @@ const center= ['50%', '250px']
fontSize: 16,
lineHeight: 20,
},
formatter: function(name) {//这里的name表示图例中的元素名称
let str1='';//定义一个文本变量
for(let i in data) {//对图例数组进行遍历
let item=data[i]
if(item.name===name){
str1 = item.name + '('+item.count+')';
return str1;
}
// break
}
}
},
series: [
@ -79,16 +96,16 @@ const center= ['50%', '250px']
left: 'center',
width: 400,
label: {
// show: false,
show: true,
position: 'outside',
alignTo: 'edge',
// formatter: '{a|{c}}\n\n{name|{b}}',
formatter: '{a|{c}}\n{r|}\n{name|{b}}',
formatter: '{a|{c}%}\n{r|}\n{name|{b}}',
minMargin: 5,
edgeDistance: -20,
lineHeight: 15,
color: '#fff',
fontSize: 12,
fontSize: 10,
// distanceToLabelLine: -60,
rich: {
name: {

523
src/views/modules/visual/communityGovern/resibuzz copy.vue

@ -0,0 +1,523 @@
<template>
<cpt-card>
<div class="title">
<img src="@/assets/img/shuju/title-tip.png" />
<span>居民热议</span>
<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 status-select">
<el-select v-model="status"
:popper-append-to-body="false"
placeholder="请选择">
<el-option v-for="(item,index) in stateArray"
:key="item.value"
:label="item.label"
:value="item.value"
@click.native="handleChangeState(index)">
</el-option>
</el-select>
</div>
</div>
<div class="g-cpt-resi">
<div class="g-l">
<screen-echarts-frame v-if=" !dataLoading"
class="echart-wr"
@myChartMethod="pieInitOk"
ref="pieChart"></screen-echarts-frame>
<div class="table-status"
v-if="dataLoading">
<screen-loading>加载中</screen-loading>
</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="toIssueInfo"></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"
@current-change="handlePageNoChange_demand">
</el-pagination>
</div>
</div>
</div>
</div>
<issue-info v-if="showIssue"
:issueId="issueId"
@close="showIssue = false" />
</cpt-card>
</template>
<script>
import { Loading } from "element-ui"; //Loading
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 { pieOption } from './resiPieOption.js'
import nextTick from 'dai-js/tools/nextTick'
import issueInfo from "./cpt/issue-info";
export default {
name: "HomeMap",
data () {
return {
dataLoading: true,
pieChartS: null,
pieChart: '',
pieOption: {},
pieInitState: false,
pieTotal: 0,
colorArray: [],
pieData: [
// { count: 1048, categoryName: '', color: '#1B51FF', selected: true },
// { count: 735, categoryName: '', color: '#00E5ED' },
// { count: 580, categoryName: '', color: '#7800FF' },
// { count: 484, categoryName: '', color: '#16D783' },
// { count: 300, categoryName: '', color: '#FF7800' },
// { count: 1048, categoryName: '', color: '#FFBA00' },
// { count: 735, categoryName: '', color: '#FFD685' },
// { count: 1580, categoryName: '', color: '#2A00FF' },
// { count: 484, categoryName: '', color: '#C600FF' },
// { count: 300, categoryName: '', color: '#FF2A00' },
// { count: 484, categoryName: '', color: '#3DDA83' },
// { count: 300, categoryName: '', color: '#FAC126' }
],
//voting shift_project closedall
stateArray: [
{
label: '全部',
value: 'all'
},
{
label: '表决中',
value: 'voting'
},
{
label: '已转项目',
value: 'shift_project'
},
{
label: '已关闭',
value: 'closed'
},
],
status: 'all',
orgId: '',
orgTypeSel: '',
tableList: [],
demand: {
loading: true,
colList: [
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "20%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "10%",
},
{
align: "center",
width: "15%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "5%",
},
{
align: "center",
width: "10%",
},
],
header: ["序号", "议题标题", "处理意见", "分类", "状态", "创建时间", "发起人", "已表态/应表态", "支持", "反对", "操作"],
list: [],
pageSize: 10,
pageNo: 1,
total: 0,
},
showIssue: false,
issueId: '',
casOptions: [],
agencyIdArray: [],
customerList: [],
iscascaderShow: 0,
optionProps: {
multiple: false,
value: 'orgLevel',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
};
},
// mixins: [animate]
beforeDestroy () {
},
async mounted () {
this.dataLoading = true
await this.getAgencylist()//
await this.getApiData()
this.dataLoading = false
this.getPie()
},
methods: {
async getApiData () {
await this.getPieChart()
// await this.getTable();
},
//
async getAgencylist () {
const url = "/gov/org/customeragency/agencygridtree";
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.agencyInfo = data
this.orgId = this.agencyInfo.agencyId
this.orgType = this.agencyInfo.level === 'grid' ? 'grid' : 'agency'
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.iscascaderShow
this.casOptions = []
this.agencyIdArray.length = []
if (data) {
this.casOptions.push(data)
this.agencyIdArray.push(this.agencyInfo.orgLevel)
}
} else {
this.$message.error(msg);
}
},
//
async getPieChart () {
if (this.$refs.pieChart) {
this.$refs.pieChart.clear()
this.$refs.pieChart.showLoading()
}
const url = "/gov/issue/issue/resibuzz-leftpiechart";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/issue/issue/resibuzz-leftpiechart";
let params = {
orgId: this.orgId,
orgType: this.orgType,
status: this.status,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
if (data && data.length > 0) {
this.pieData = data
} else {
this.pieData = []
}
if (this.$refs.pieChart) {
this.$refs.pieChart.hideLoading()
}
} else {
this.$message.error(msg);
}
},
pieInitOk (dom) {
console.log('pie准备好了', dom)
this.pieChartS = dom
this.pieInitState = true
},
getPie () {
if (this.pieInitState) {
this.assignPieChart()
} else {
setTimeout(() => {
this.getPie()
}, 500)
}
},
clickPie (seriesIndex) {
this.pieData.forEach((element, index) => {
if (index === seriesIndex) {
element.label = {
show: true,
};
element.labelLine = {
show: true,
lineStyle: {
opacity: 1,
}
};
console.log('zhilma')
} else {
element.label = {
show: true,
};
element.labelLine = {
show: true,
lineStyle: {
opacity: 0,
color: 'rgba(255,255,255,0)'
}
};
}
});
this.pieOption.series[1].data = this.pieData
this.$refs.pieChart.setOption(this.pieOption)
},
assignPieChart () {
this.pieTotal = 0
if (this.pieData.length > 0) {
this.$refs.pieChart.setNoData(false)
const _that = this
let maxIndex = 0
let maxValue = this.pieData[0].count
this.pieData[0].selected = true
this.pieData.forEach((item, index) => {
item.name = item.categoryName
item.value = item.count
this.colorArray.push(item.color)
this.pieTotal = this.pieTotal + item.value
if (item.value > maxValue) {
maxValue = item.value
maxIndex = index
item.selected = true
} else if (index !== 0) {
item.selected = false
}
});
// pieChart
this.pieOption = pieOption(this.pieChartS)
this.pieOption.title.text = this.pieTotal
this.pieOption.series[1].itemStyle = {
color: function (params) {
return _that.colorArray[params.dataIndex]
}
}
this.pieOption.series[1].data = this.pieData
this.$refs.pieChart.setOption(this.pieOption)
// this.clickPie(maxIndex)
// let fun = function (params) {
// _that.clickPie(params.dataIndex)
// }
// this.$refs.pieChart.handleClick(fun)
} else {
this.$refs.pieChart.setNoData(true)
}
},
async handleChangeState (index) {
await this.getApiData()
this.assignPieChart()
},
async handleChangeAgency (value) {
let orgArray = []
let key = this.agencyIdArray.length > 0 ? this.agencyIdArray[this.agencyIdArray.length - 1] : ''
if (key) {
orgArray = key.split('-')
this.orgId = orgArray[0]
this.orgType = orgArray[1] === 'grid' ? 'grid' : 'agency'
} else {
this.orgId = ''
this.orgType = ''
}
await this.getApiData()
this.assignPieChart()
},
//
async getTable () {
const url = "/gov/issue/issue/resibuzz";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/issue/issue/resibuzz";
let params = {
status: this.status,
orgId: this.orgId,
orgType: this.orgType,
pageNo: this.demand.pageNo,
pageSize: this.demand.pageSize,
};
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) => {
return [
item.sort ? item.sort : '--',
item.issueTitle ? item.issueTitle : '',
item.suggestion ? item.suggestion : '',
item.categoryName.join(','),
item.status ? item.status : '',
item.createdTime ? item.createdTime : '',
item.issueOriginator ? item.issueOriginator : '',
item.voteAccount ? item.voteAccount : '',
item.supportCount ? item.supportCount : 0,
item.oppositionCount ? item.oppositionCount : 0,
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}
},
handlePageNoChange_demand (val) {
this.demand.pageNo = val;
this.getTable();
},
async toIssueInfo (index) {
const { tableList } = this;
this.issueId = tableList[index].issueId
this.showIssue = true
},
},
props: {
uid: {
type: String,
default: "",
// default: "8ada68cb6f1e4b9a8333348a39ef3aee",
},
},
computed: {},
components: {
cptCard,
cptTb,
screenEchartsFrame,
ScreenLoading,
ScreenNodata,
issueInfo
},
watch: {
uid (id) {
this.userId = id;
},
userId () {
this.getApiData();
window.scrollTo(0, 0);
},
},
};
</script>
<style
lang="scss"
src="@/assets/scss/modules/visual/resibuzz.scss"
scoped
></style>
<style lang=scss scoped>
</style>

29
src/views/modules/visual/communityGovern/resibuzz.vue

@ -57,7 +57,7 @@
:page-size="demand.pageSize"
:total="demand.total"
background
layout="prev, pager, next"
layout="prev, pager, next,total"
@current-change="handlePageNoChange_demand">
</el-pagination>
</div>
@ -82,7 +82,7 @@ import screenEchartsFrame from "@/views/modules/visual/components/screen-echarts
import ScreenLoading from "@/views/modules/visual/components/screen-loading";
import ScreenNodata from "@/views/modules/visual/components/screen-nodata";
import { pieOption } from './resiPieOption.js'
import nextTick from 'dai-js/tools/nextTick'
import issueInfo from "./cpt/issue-info";
@ -327,6 +327,7 @@ export default {
element.label = {
show: true,
};
element.labelLine = {
show: true,
@ -353,6 +354,7 @@ export default {
}
});
this.pieOption.series[1].data = this.pieData
this.$refs.pieChart.setOption(this.pieOption)
@ -371,14 +373,26 @@ export default {
this.pieData[0].selected = true
this.pieData.forEach((item, index) => {
this.pieTotal = this.pieTotal + item.count
});
this.pieData.forEach((item, index) => {
item.name = item.categoryName
item.value = item.count
let aa = parseInt(item.count) / parseInt(this.pieTotal)
let percent = (aa * 100).toFixed(1)
// percent = percent + '%'
item.value = percent
this.colorArray.push(item.color)
this.pieTotal = this.pieTotal + item.value
if (item.value > maxValue) {
maxValue = item.value
if (item.count > maxValue) {
maxValue = item.count
maxIndex = index
item.selected = true
} else if (index !== 0) {
@ -387,7 +401,7 @@ export default {
});
// pieChart
this.pieOption = pieOption(this.pieChartS)
this.pieOption = pieOption(this.pieChartS, this.pieData)
this.pieOption.title.text = this.pieTotal
this.pieOption.series[1].itemStyle = {
color: function (params) {
@ -445,6 +459,7 @@ export default {
this.demand.loading = false;
if (code === 0) {
this.demand.total = data.total;
this.tableList = data.list
this.demand.list = data.list.map((item) => {

1
src/views/modules/visual/communityGovern/typeAnalyze.vue

@ -414,6 +414,7 @@ export default {
this.demand.loading = false;
if (code === 0) {
this.demand.total = data.total;
this.tableList = data.list
if (data.list && data.list.length > 0) {

14
src/views/modules/visual/communityParty/community.vue

@ -397,6 +397,7 @@ export default {
if (val.length > 0) {
const _arr = val[val.length - 1].split('-')
const orgType = _arr[1] !== 'grid' ? 'agency' : 'grid'
this.agencyId = _arr[0]
this.getList(_arr[0])
this.getMapUnitList(_arr[0])
this.getCateCount(_arr[0])
@ -424,11 +425,10 @@ export default {
return y + '-' + m + '-' + d + ' 00:00:00'
},
async loadUnit () {
const url = "/heart/icresidemanddict/subcodelist"
// const url = "http://yapi.elinkservice.cn/mock/245/heart/icpartyunit/option"
const url = "/heart/serviceitem/dict-list"
let params = {
parentCategoryCode: '1010'
}
const { data, code, msg } = await requestPost(url, params)
@ -572,16 +572,16 @@ export default {
},
handleSelectChange (val) {
this.getList();
this.getList(this.agencyId);
},
pageSizeChangeHandleNew (val) {
this.pageNo = 1;
this.pageSize = val;
this.getList();
this.getList(this.agencyId);
},
pageCurrentChangeHandleNew (val) {
this.pageNo = val;
this.getList();
this.getList(this.agencyId);
},
},
};
@ -649,7 +649,7 @@ export default {
margin-left: 10px;
.el-input__inner {
font-size: 18px;
font-weight: 800;
// font-weight: 800;
color: #fff;
background: #06186d;
border: 1px solid #1a64cc;

31
src/views/modules/visual/communityParty/party.vue

@ -46,7 +46,7 @@
<screen-table
:headerList="headerList"
:tableData="ageList"
:visibleLoading="visibleLoading"
:visibleLoading="visibleAgeLoading"
:operate="false"
@row="handleClickRow"
></screen-table>
@ -153,7 +153,10 @@ export default {
eduTotalCount: 0,
propTree: [],
value2: '',
visibleAgeLoading: true,
visibleLoading: true,
agencyId: '',
orgType: '',
pageNo: 1,
pageSize: 10,
agePageNo: 1,
@ -596,6 +599,7 @@ export default {
}
}
})
this.ageTotalCount = 0
data.forEach(item => {
this.ageTotalCount += Number(item.value)
})
@ -618,6 +622,7 @@ export default {
isClick: false
}
})
this.eduTotalCount = 0
data.forEach(item => {
this.eduTotalCount += Number(item.value)
})
@ -627,7 +632,7 @@ export default {
},
async getAgeList(orgId, orgType, _code) {
this.visibleLoading = true
this.visibleAgeLoading = true
const url = "/epmetuser/icresiuser/partymemberagelist";
let params = {
orgId,
@ -649,9 +654,10 @@ export default {
this.$message.error(msg)
}
// if (_code == 0 || _code) this.noInit = true
this.visibleLoading = false
this.visibleAgeLoading = false
},
async getEduList(orgId, orgType, _code) {
this.visibleLoading = true
const url = "/epmetuser/icresiuser/partymembereducationlist";
let params = {
orgId,
@ -672,6 +678,7 @@ export default {
} else {
this.$message.error(msg)
}
this.visibleLoading = false
},
async getAgencyList(node, resolve) {
// const url = "/gov/org/customeragency/staffinagencylist";
@ -683,6 +690,8 @@ export default {
if (code === 0) {
console.log('data-org----o', data)
this.selectAgency = [`${data.agencyId}-${data.level}`]
this.orgType = data.level
this.agencyId = data.agencyId
let arr = []
arr.push(data)
this.propTree = arr && this.getTreeData(arr)
@ -728,6 +737,12 @@ export default {
console.log('val-vvv', val)
const _arr = val[val.length - 1].split('-')
const orgType = _arr[1] !== 'grid' ? 'agency': 'grid'
this.agencyId = _arr[0]
this.orgType = orgType
this.noInit = false
this.noEduInit = false
this.getAgeCount(_arr[0], orgType)
this.getEduCount(_arr[0], orgType)
this.getAgeList(_arr[0], orgType)
this.getEduList(_arr[0], orgType)
},
@ -742,20 +757,20 @@ export default {
pageSizeChangeHandleAge(val) {
this.agePageNo = 1
this.agePageSize = val
this.getAgeList()
this.getAgeList(this.agencyId, this.orgType)
},
pageCurrentChangeHandleAge (val) {
this.agePageSize = val
this.getAgeList()
this.getAgeList(this.agencyId, this.orgType)
},
pageSizeChangeHandleNew(val) {
this.pageNo = 1;
this.pageSize = val;
this.getEduList()
this.getEduList(this.agencyId, this.orgType)
},
pageCurrentChangeHandleNew(val) {
this.pageNo = val;
this.getEduList()
this.getEduList(this.agencyId, this.orgType)
},
},
};
@ -828,7 +843,7 @@ export default {
width: 180px;
.el-input__inner {
font-size: 18px;
font-weight: 800;
// font-weight: 800;
color: #fff;
background: #06186d;
border: 1px solid #1a64cc;

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

@ -187,9 +187,9 @@ const vueGis = {
this.iconTextStyle = iconTextStyle
this.distanceMax = distanceMax
iconArrays.forEach(item => {
console.log(item.type, item.urlIndex, item.latitude, item.longitude)
});
// iconArrays.forEach(item => {
// console.log(item.type, item.urlIndex, item.latitude, item.longitude)
// });
//
@ -411,7 +411,7 @@ const vueGis = {
computedDistance (lon, lat, max) {
let c1 = [2]; c1[0] = lon; c1[1] = lat;
let distance = getDistance(this.centerPoint, c1);
console.log(distance)
// console.log(distance)
return (distance < max || distance === max)
@ -629,7 +629,8 @@ const vueGis = {
return feature;
});
if (feature) {
console.log(feature)
// console.log(feature)
if (_that.clickType === 'back') {
_that.$emit('clickFeature', feature)
@ -637,15 +638,6 @@ const vueGis = {
} else if (_that.clickType === 'popup') {
_that.$emit('clickFeature', feature)
// _that.overlay.getElement().parentNode.style.display = 'block'
// _that.overlay.getElement().parentNode.parentNode.style.display = 'block'
// content.innerHTML = `
// <p></p>
// <p><p><code> </code> <p>
// <p></p>X&nbsp;&nbsp; Y: `;
// _that.overlay.setPosition(evt.coordinate); // overlay x,y
} else {
console.log('此处没有标注')

24
src/views/modules/visual/cpts/line-chart.vue

@ -1,13 +1,13 @@
<template>
<div class="m-chart">
<canvas id="myChart"
:width="width"
:height="height" />
<canvas id="myChart" :width="width" :height="height" />
</div>
</template>
<script>
import nextTick from "dai-js/tools/nextTick";
import F2 from "@antv/f2/lib/index-all";
// iosbug
const fontFamily = "PingFang SC";
const fontSize = 14;
@ -28,7 +28,7 @@ const addTextShape = () => {
const group = canvas.addGroup();
const shapes = {};
function addFn (list) {
function addFn(list) {
const listLength = list.length;
list.forEach(function (obj, index) {
//
@ -68,7 +68,7 @@ const addTextShape = () => {
};
const iniChart = function (config, srcData) {
chart = new window.F2.Chart({
chart = new F2.Chart({
id: "myChart",
...config,
});
@ -132,7 +132,7 @@ const iniChart = function (config, srcData) {
items: [
{
name: "支持",
marker (x, y, r, ctx) {
marker(x, y, r, ctx) {
ctx.lineWidth = 10;
ctx.strokeStyle = supColor;
ctx.moveTo(x - r - 15, y);
@ -143,7 +143,7 @@ const iniChart = function (config, srcData) {
},
{
name: "反对",
marker (x, y, r, ctx) {
marker(x, y, r, ctx) {
ctx.lineWidth = 10;
ctx.strokeStyle = oppColor;
ctx.moveTo(x - r - 15, y);
@ -200,19 +200,19 @@ export default {
default: 260,
},
},
data () {
data() {
return {
iniLoading: false,
};
},
watch: {
list (data) {
list(data) {
chart.changeData(data);
srcData = data;
addTextShape();
},
},
async created () {
async created() {
await nextTick(200);
iniChart(this.config, this.list);
await nextTick(200);
@ -220,12 +220,12 @@ export default {
},
methods: {
setList (data) {
setList(data) {
chart.changeData(data);
srcData = data;
addTextShape();
},
}
},
};
</script>

6
src/views/modules/visual/heart/index.vue

@ -221,7 +221,11 @@ export default {
//
async getTb1 () {
const { agencyId, areaCode } = this;
const url = "/data/report/screen/index/advancedbranchrank";
const url =
localStorage.getItem("customerId") == "b09527201c4409e19d1dbc5e3c3429a1"
? "/data/report/screen/index/advancedbranchrank-shibei"
: "/data/report/screen/index/advancedbranchrank";
let params = {
agencyId,
areaCode,

5
src/views/modules/visual/measure/dialogInfo.vue

@ -280,6 +280,11 @@ export default {
margin-bottom: 15px;
font-size: 16px;
cursor: pointer;
.item-field {
flex-shrink: 0;
}
}
.item-desc {
font-size: 16px;

2
src/views/modules/visual/measure/service.vue

@ -634,7 +634,7 @@ export default {
width: 180px;
.el-input__inner {
font-size: 18px;
font-weight: 800;
// font-weight: 800;
color: #fff;
background: #06186d;
border: 1px solid #1a64cc;

2
src/views/modules/visual/measure/volunteer.vue

@ -649,7 +649,7 @@ export default {
width: 180px;
.el-input__inner {
font-size: 18px;
font-weight: 800;
// font-weight: 800;
color: #fff;
background: #06186d;
border: 1px solid #1a64cc;

64
src/views/modules/visual/warning/components/screen-table/index.vue

@ -23,23 +23,32 @@
:key="indexs"
:style="tableContentStyle[indexs]"
>
<span @click="toUserInfo(item)">{{ item }}</span>
<div v-if="Array.isArray(item)">
<span
v-show="rIndex < 3"
:key="resi.userId"
v-for="(resi, rIndex) in item"
>
{{ rIndex != 0 ? "、" : "" }}
<a @click="toUserInfo(resi.userId)">{{ resi.residentName }}</a>
</span>
</div>
<span v-else>{{ item }}</span>
<span
v-if="indexs + 1 == value.length && item.length > 8"
v-if="indexs + 1 == value.length && item.length > 3"
class="more"
@click.stop="onClickMorePop(index)"
ref="morePop"
>
更多>
<span
class="more-pop"
@click="toUserInfo(item)"
v-if="visiblePopList[index]"
>
<!-- 李佳琪刘阳赵欣丁一嘉敏李岩何嘉慧
李易峰赵敏何军曲树惠 -->
{{ item }}
</span>
<div class="more-pop" v-if="visiblePopList[index]">
<span :key="resi.userId" v-for="(resi, rIndex) in item">
{{ rIndex != 0 ? "、" : "" }}
<a @click="toUserInfo(resi.userId)">{{
resi.residentName
}}</a>
</span>
</div>
</span>
</div>
</div>
@ -185,7 +194,7 @@ export default {
methods: {
toUserInfo(uid) {
// this.$router.push({ path: `/main-shuju/visual-basicinfo-people/${uid}` });
this.$router.push({ path: `/main-shuju/visual-basicinfo-people/${uid}` });
},
onClickMorePop(index) {
@ -222,7 +231,19 @@ export default {
&-th {
text-align: center;
width: calc(100% / 5);
width: 20%;
&:nth-child(1) {
width: 5%;
}
&:nth-child(2) {
width: 25%;
}
&:nth-child(3) {
width: 25%;
}
&:nth-child(5) {
width: 25%;
}
}
}
@ -244,7 +265,22 @@ export default {
.td {
text-align: center;
width: calc(100% / 5);
width: 20%;
&:nth-child(1) {
width: 5%;
}
&:nth-child(2) {
width: 25%;
}
&:nth-child(3) {
width: 25%;
}
&:nth-child(5) {
width: 25%;
}
a {
cursor: pointer;
}
.more {
font-size: 18px;
font-weight: 400;

2
src/views/modules/visual/warning/index.vue

@ -133,7 +133,7 @@ export default {
item.gridName,
item.neighborhoodName,
item.buildingName,
item.residentNames ? item.residentNames : "暂无",
item.userList,
]);
});
this.tableData = tableData;

Loading…
Cancel
Save