Browse Source

Merge branch 'v1.1' into preview

feature
mk 2 years ago
parent
commit
b315e1fd62
  1. 4
      .env.development
  2. 2
      .env.production.sit
  3. 2
      README.md
  4. 1
      package.json
  5. BIN
      src/assets/images/index/father.png
  6. BIN
      src/assets/images/index/girl.png
  7. BIN
      src/assets/images/index/grandma.png
  8. BIN
      src/assets/images/index/grandpa.png
  9. BIN
      src/assets/images/index/home.png
  10. BIN
      src/assets/images/index/mother.png
  11. BIN
      src/assets/images/index/son.png
  12. BIN
      src/assets/images/index/头像/叔叔.png
  13. BIN
      src/assets/images/index/头像/阿姨.png
  14. 11
      src/assets/scss/modules/management/form-main.scss
  15. 55
      src/assets/scss/pages/resiAdd.scss
  16. 143
      src/assets/scss/pages/resiInfo.scss
  17. 12
      src/js/columns/constants/index.js
  18. 3
      src/main.js
  19. 36
      src/router/index.js
  20. 1930
      src/views/components/addResi.vue
  21. 3012
      src/views/components/editResi.vue
  22. 950
      src/views/components/editResiCopy.vue
  23. 360
      src/views/components/resiExpand/editExpand.vue
  24. 311
      src/views/components/resiExpand/index.vue
  25. 14
      src/views/components/resiForm.vue
  26. 20
      src/views/components/resiInfo/ensureHouseDto/index.vue
  27. 20
      src/views/components/resiInfo/oldPeopleDto/index.vue
  28. 20
      src/views/components/resiInfo/parymemberInfoDto/index.vue
  29. 20
      src/views/components/resiInfo/postDto/index.vue
  30. 20
      src/views/components/resiInfo/specialSupportDto/index.vue
  31. 20
      src/views/components/resiInfo/unitedFrontDto/index.vue
  32. 20
      src/views/components/resiInfo/veteranDto/index.vue
  33. 20
      src/views/components/resiInfo/volunteerDto/index.vue
  34. 568
      src/views/components/resiSearch.vue
  35. 16
      src/views/modules/base/community/roomTable.vue
  36. 2705
      src/views/modules/base/resi.vue
  37. 1
      src/views/modules/communityParty/elegant/detail.vue
  38. 2
      src/views/modules/plugins/change/resichange.vue
  39. 2
      src/views/modules/plugins/change/resideath.vue
  40. 2
      src/views/modules/plugins/change/resiwelfare.vue
  41. 2
      src/views/modules/plugins/rent/resi.vue
  42. 10
      src/views/modules/portrayal/fangwu/index.vue
  43. 298
      src/views/modules/portrayal/house/cpts/businessRecord.vue
  44. 206
      src/views/modules/portrayal/house/cpts/details/fwdetail.vue
  45. 189
      src/views/modules/portrayal/house/cpts/details/shengdetail.vue
  46. 306
      src/views/modules/portrayal/house/cpts/details/sjdetail.vue
  47. 283
      src/views/modules/portrayal/house/cpts/details/sqdetail.vue
  48. 188
      src/views/modules/portrayal/house/cpts/details/xqdetail.vue
  49. 187
      src/views/modules/portrayal/house/cpts/graph.vue
  50. 56
      src/views/modules/portrayal/house/cpts/table/changeRecord.vue
  51. 104
      src/views/modules/portrayal/house/cpts/table/complain.vue
  52. 63
      src/views/modules/portrayal/house/cpts/table/fuwu.vue
  53. 60
      src/views/modules/portrayal/house/cpts/table/sheng.vue
  54. 59
      src/views/modules/portrayal/house/cpts/table/shequ.vue
  55. 105
      src/views/modules/portrayal/house/cpts/table/shijian.vue
  56. 103
      src/views/modules/portrayal/house/cpts/table/xuqiu.vue
  57. 346
      src/views/modules/portrayal/house/index.vue
  58. 109
      src/views/modules/portrayal/jumin/cpts/businessRecord.vue
  59. 277
      src/views/modules/portrayal/jumin/cpts/graph.vue
  60. 104
      src/views/modules/portrayal/jumin/cpts/pointsRecord.vue
  61. 262
      src/views/modules/portrayal/jumin/cpts/staffTag.vue
  62. 57
      src/views/modules/portrayal/jumin/cpts/table/changeRecord.vue
  63. 7
      src/views/modules/portrayal/jumin/cpts/table/complain.vue
  64. 6
      src/views/modules/portrayal/jumin/cpts/table/fuwu.vue
  65. 6
      src/views/modules/portrayal/jumin/cpts/table/sheng.vue
  66. 6
      src/views/modules/portrayal/jumin/cpts/table/shequ.vue
  67. 6
      src/views/modules/portrayal/jumin/cpts/table/shijian.vue
  68. 6
      src/views/modules/portrayal/jumin/cpts/table/xuqiu.vue
  69. 137
      src/views/modules/portrayal/jumin/cpts/xiangshoufuwu.vue
  70. 1577
      src/views/modules/portrayal/jumin/index.vue
  71. 5
      src/views/modules/shequzhili/event/eventList.vue
  72. 4
      vue.config.js

4
.env.development

@ -1,9 +1,9 @@
NODE_ENV=development
# VUE_APP_API_SERVER = https://epmet-preview.elinkservice.cn/api
# VUE_APP_API_SERVER = http://localhost:8080/api
# VUE_APP_API_SERVER = http://192.168.1.60:8080/api
VUE_APP_API_SERVER = http://219.146.91.110:30801/api
# VUE_APP_API_SERVER = http://219.146.91.110:30801/api
# VUE_APP_API_SERVER = http://219.146.91.110:30801/api219.146.91.110:30801
# VUE_APP_API_SERVER = https://epmet-yantai.elinkservice.cn/api
# VUE_APP_API_SERVER = https://epmet-test.elinkservice.cn/api
# VUE_APP_API_SERVER = https://epmet-cloud.elinkservice.cn/api

2
.env.production.sit

@ -1,7 +1,7 @@
NODE_ENV=production
# VUE_APP_API_SERVER = https://epmet-test.elinkservice.cn/api
# VUE_APP_API_SERVER = http://192.168.1.140/api
VUE_APP_API_SERVER = http://219.146.91.110:30801/api
# VUE_APP_API_SERVER = http://192.168.1.60:8080/api
VUE_APP_BIPASS_API_SERVER = http://dcommunity-dev.elinkservice.cn:30801/linkdata/linkdata-gateway/route
VUE_APP_NODE_ENV=prod:sit
VUE_APP_PUBLIC_PATH=epmet-oper

2
README.md

@ -19,3 +19,5 @@ npm run build
```
npm run lint
```
export NODE_OPTIONS=--max-old-space-size=4096

1
package.json

@ -48,6 +48,7 @@
"proj4": "^2.8.0",
"qs": "^6.7.0",
"quill": "^1.3.6",
"relation-graph": "^2.1.31",
"screenfull": "^4.2.1",
"sortablejs": "^1.12.0",
"svg-sprite-loader": "^4.1.6",

BIN
src/assets/images/index/father.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
src/assets/images/index/girl.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
src/assets/images/index/grandma.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

BIN
src/assets/images/index/grandpa.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
src/assets/images/index/home.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
src/assets/images/index/mother.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
src/assets/images/index/son.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

BIN
src/assets/images/index/头像/叔叔.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

BIN
src/assets/images/index/头像/阿姨.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

11
src/assets/scss/modules/management/form-main.scss

@ -29,8 +29,15 @@
.list_item_width_3 {
width: 185px;
}
.u-item-width-communitycascader{
width: 141px;
}
.u-item-width-buildcascader{
width: 96px;
}
.u-item-width-agency {
width: 200px;
}
.item_width_5{
width: 320px;
}

55
src/assets/scss/pages/resiAdd.scss

@ -0,0 +1,55 @@
.div_form {
height: 100%;
padding:16px;
.item_width_1{
width: 514px;
}
.form{
background-color: #fff;
padding:16px;
}
}
h5 {
position: relative;
font-size: 16px;
margin: 22px 0;
&::after {
content: "";
position: absolute;
display: inline-block;
left: -15px;
top: -0px;
width: 5px;
height: 16px;
background-color: #0056d6;
}
}
.basicInfo, .house, .expand {
::v-deep .el-form-item{
margin-bottom: 24px;
}
}
.font-color-orange{
::v-deep .el-form-item__label{
color:#ff5107 ;
}
}
.font-color-blue{
::v-deep .el-form-item__label{
color:#3876f2;
position: relative;
&::before{
content: '*';
position: absolute;
top: 0px;
left: 16px;
}
}
}
.font-color-blue2{
::v-deep .el-form-item__label{
&::before{
left: 2px;
}
}
}

143
src/assets/scss/pages/resiInfo.scss

@ -0,0 +1,143 @@
.g-main{
display: flex;
box-sizing: border-box;
height:auto;
padding: 24px 16px 0;
.left{
min-width: 184px;
margin-right: 16px;
background: #ffffff;
.user{
display: flex;
flex-direction: column;
height: 120px;
justify-content: center;
align-items: center;
position: relative;
font-weight: bold;
color: #000000;
&::after{
content: '';
position: absolute;
bottom: 0;
left: 16px;
width: 152px;
height: 1px;
background: #EBEDF0;
}
img{
width: 50px;
height: 56px;
margin-bottom: 10px;
}
}
.menu{
.progress{
padding: 0 16px;
box-sizing: border-box;
.text{
display: flex;
justify-content: space-between;
align-items: center;
margin:9px 0px 11px 0px;
font-size: 12px;
>:nth-child(2){
color: #0056D6;
font-size: 14px;
font-weight: bold;
}
}
}
.list{
margin-top:14px ;
.item{
margin-bottom: 8px;
height: 38px;
color: #333333;
padding-left: 16px;
cursor: pointer;
line-height: 38px;
.full{
color: #0056d6;
}
.incomplete{
color: #ff5107;
}
}
.active{
background: #F7FAFF;
color: #0056D6 !important;
position: relative;
&::after{
content: '';
position: absolute;
right: 0;
width: 4px;
height: 37px;
background: #0056D6;
}
}
}
}
}
.right{
flex: 1;
height: 100%;
background: #ffffff;
position: relative;
padding-bottom: 16px;
.editBtn{
z-index: 10;
position: absolute;
right: 16px;
top: 16px;
}
.title-small{
font-size: 16px;
font-family: PingFang SC;
font-weight: bold;
color: #333333;
position: relative;
padding-left: 11px;
margin-left: 0px;
margin-top: 22px;
}
.f-label {
width: 100px;
text-align: right;
color: rgba(51, 51, 51, .85) ;
>b{
font-weight: 400;
position: relative;
color: rgba(51, 51, 51, .85) ;
&::after{
content: '*';
position: absolute;
top: 0px;
color: #ff5107;
left: -7px;
}
}
}
.f-labels{
width: 155px;
text-align: right;
}
.f-flex{
align-items: center;
}
.f-m-top23{
margin-top: 23px;
}
}
}
::v-deep .el-button--text{
padding: 0;
}
::v-deep .el-row{
padding-left: 37px;
}

12
src/js/columns/constants/index.js

@ -2,7 +2,7 @@
* @Author: mk 2403457699@qq.com
* @Date: 2023-08-01 10:13:40
* @LastEditors: mk 2403457699@qq.com
* @LastEditTime: 2023-08-04 18:02:54
* @LastEditTime: 2024-02-27 19:04:44
* @Description: 此文件针对于本地字典,常用的男女或者是否一类需要在前端写的可以在此文件中添加
*
*
@ -49,6 +49,16 @@ export const disabilityFlagList = [
value: 0
}
]
export const hasOptions = [
{
label: '有',
value: 1
},
{
label: '无',
value: 0
}
]
export const dormitoryTypeList = [
{
label: '楼长',

3
src/main.js

@ -44,6 +44,8 @@ import NodeWrapGrid from "@/components/GridTree/nodeWrap.vue";
import PopTips from "@/components/PopTips/index.vue";
import PopHomeTip from "@/components/PopHomeTip/index.vue";
import NameSplit from "@/components/NameSplit/index.vue";
import RelationGraph from "relation-graph";
// import AddNodeJw from "@/components/JwTree/addNode.vue";
//按钮
Vue.component("nodeWrap", NodeWrap);
@ -76,6 +78,7 @@ Vue.use(Element, {
size: "default",
i18n: (key, value) => i18n.t(key, value),
});
Vue.use(RelationGraph);
Vue.prototype.$message = message;
Vue.prototype.$moment = Moment;

36
src/router/index.js

@ -118,6 +118,16 @@ export const moduleRoutes = {
title: "",
},
},
{
path: "house-huaxiang",
props: true,
name: "house-huaxiang",
component: () => import("@/views/modules/portrayal/house/index"),
meta: {
isTab: true,
title: "",
},
},
{
path: "fangwu-huaxiang",
props: true,
@ -137,7 +147,27 @@ export const moduleRoutes = {
isTab: true,
title: "",
},
}
},
{
path: "add-resi",
props: true,
name: "add-resi",
component: () => import("@/views/components/addResi"),
meta: {
isTab: true,
title: "新增居民",
},
},
{
path: "edit-resi",
props: true,
name: "edit-resi",
component: () => import("@/views/components/editResi"),
meta: {
isTab: true,
title: "编辑居民",
},
}
],
};
// pc端菜单的 如果没有配置 默认的 或者配置了默认的 但没有权限 默认选中第一
@ -912,6 +942,10 @@ router.beforeEach((to, from, next) => {
to.meta.title = store.state.huaXiang.userInfo.name
return next();
}
if (to.name === 'house-huaxiang') {
to.meta.title = store.state.huaXiang.houseInfo.houseName
return next();
}
if (to.name === 'fangwu-huaxiang') {
to.meta.title = store.state.huaXiang.houseInfo.doorName
return next();

1930
src/views/components/addResi.vue

File diff suppressed because it is too large

3012
src/views/components/editResi.vue

File diff suppressed because it is too large

950
src/views/components/editResiCopy.vue

@ -0,0 +1,950 @@
<template>
<div :id="formId"
class="resi-container">
<el-form :ref="formId"
class="resi-form"
:model="form"
:rules="rulesForm"
:label-width="labelWidth">
<template v-if="supportAdd">
<el-row style="margin-bottom: 10px;">
<el-col :span="24">
<el-button icon="el-icon-plus"
size="small"
@click="handleAddRow"></el-button>
</el-col>
</el-row>
<edit-form v-for="(item, index) in addList"
:key="index"
:ref="'baseForms' + index"
:columns="3"
:form-list="item.itemList || formList"
:form-id="'baseForms' + item.row" />
</template>
<template v-else>
<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="所属网格">
<!-- <div class="resi-cell"> -->
<!-- <div class="resi-cell-label">{{n.label}}</div> -->
<div class="resi-cell-value">
<el-select v-model.trim="form.GRID_ID"
:disabled="disabled"
placeholder="请选择网格"
size="small"
clearable
class="resi-cell-select"
@change="handleChangeGrid">
<el-option v-for="item in optionsG"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
<!-- </div> -->
</el-form-item>
</el-col>
<el-col :span="18">
<el-form-item label="所属房屋"
required>
<div class="resi-cell-value">
<div class="resi-cell-col">
<el-form-item prop="VILLAGE_ID">
<el-select v-model.trim="form.VILLAGE_ID"
placeholder="请选择小区"
size="small"
clearable
class="resi-cell-select"
:disabled="disabled"
@change="handleChangeV">
<el-option v-for="item in optionsV"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="BUILD_ID">
<el-select v-model.trim="form.BUILD_ID"
placeholder="请选择楼号"
size="small"
clearable
:disabled="disabled"
class="resi-cell-select resi-cell-select-middle"
@change="handleChangeB">
<el-option v-for="item in optionsB"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="UNIT_ID">
<el-select v-model.trim="form.UNIT_ID"
placeholder="请选择单元"
size="small"
clearable
:disabled="disabled"
class="resi-cell-select resi-cell-select-middle"
@change="handleChangeD">
<el-option v-for="item in optionsD"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="HOME_ID">
<el-select v-model.trim="form.HOME_ID"
placeholder="请选择房号"
size="small"
clearable
:disabled="disabled"
class="resi-cell-select resi-cell-select-middle"
@change="handleChangeH">
<el-option v-for="item in optionsH"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</div>
<!-- <el-col :span="6">
</el-col>
<el-col :span="6">
</el-col>
<el-col :span="6">
</el-col>
<el-col :span="6">
</el-col> -->
</div>
</el-form-item>
</el-col>
<!-- <el-col :span="6">
<el-form-item :prop="form.BUILD_ID" label="所属楼宇">
<div class="resi-cell-value">
<el-select v-model.trim="form.BUILD_ID" :disabled="disabled" placeholder="请选择楼号" size="small"
clearable class="resi-cell-select"
>
<el-option
v-for="item in optionsB"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item :prop="form.HOME_ID" label="所属家庭">
<div class="resi-cell-value">
<el-select v-model.trim="form.HOME_ID" :disabled="disabled" placeholder="请选择" size="small"
clearable class="resi-cell-select"
>
<el-option
v-for="item in optionsH"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
</el-form-item>
</el-col> -->
</el-row>
<el-row v-for="(item, index) in sliceList(formList, columns)"
:key="index"
class="resi-row" :class="{'width-40':index==3||index==2||index==4||index==5}">
<!-- <el-col v-for="n in item" :key="n.id" :span="n.itemType === 'textarea'&&24 || (24/columns)"> -->
<el-col v-for="n in item"
:key="n.itemId"
:span="item.length === 1 ? 24 : (24/columns) "
:style="n.itemType === 'divider' && 'display: none;'">
<el-form-item :prop="n.columnName"
:label="n.itemType != 'radio'?n.label:''">
<!-- <div class="resi-cell"> -->
<!-- <div class="resi-cell-label">{{n.label}}</div> -->
<div class="resi-cell-value">
<template v-if="n.itemType === 'input' || n.itemType === 'textarea'">
<!-- <span v-if="n.columnName==='MOBILE'||n.columnName==='ID_CARD'">{{ form[n.columnName]||'--'}}</span> -->
<el-input v-if="n.columnName==='MOBILE'||n.columnName==='ID_CARD'"
v-model.trim="form[n.columnName]"
:disabled="disabled"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入内容">
</el-input>
<el-input v-else-if="n.validType"
v-model.trim="form[n.columnName]"
:disabled="disabled"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入内容">
</el-input>
<el-input v-else
v-model.trim="form[n.columnName]"
:disabled="disabled"
class="resi-cell-input"
size="small"
clearable
placeholder="请输入内容">
</el-input>
</template>
<!-- <template v-if="n.itemType === 'textarea'">
<el-input
v-model.trim="form[n.columnName]"
class="resi-cell-textarea"
size="small"
type="textarea"
clearable
placeholder="请输入内容"
>
</el-input>
</template> -->
<el-date-picker v-else-if="n.itemType === 'datepicker'"
v-model.trim="form[n.columnName]"
:disabled="disabled"
class="resi-cell-input"
type="date"
size="small"
clearable
placeholder="选择日期"
format="yyyy 年 MM 月 dd 日"
value-format="yyyy-MM-dd">
</el-date-picker>
<el-date-picker v-else-if="n.itemType === 'daterange'"
v-model.trim="form[n.columnName]"
:disabled="disabled"
type="daterange"
align="right"
unlink-panels
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期">
</el-date-picker>
<el-time-picker v-else-if="n.itemType === 'timepicker'"
v-model.trim="form[n.columnName]"
:disabled="disabled"
placeholder="任意时间点">
</el-time-picker>
<el-time-picker v-else-if="n.itemType === 'timerange'"
v-model.trim="form[n.columnName]"
:disabled="disabled"
is-range
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
placeholder="选择时间范围">
</el-time-picker>
<el-select v-else-if="n.itemType === 'select'"
v-model.trim="form[n.columnName]"
:multiple="n.multiSelect"
:disabled="disabled"
placeholder="请选择"
size="small"
clearable
class="resi-cell-select">
<el-option v-for="item in n.options || options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<!-- <el-cascader
:options="options"
:props="{ checkStrictly: true }"
clearable></el-cascader> -->
<el-cascader v-else-if="n.itemType === 'cascader'"
v-model.trim="form[n.columnName]"
:options="n.options"
:disabled="disabled"
:props="{ emitPath: false }"
clearable
size="small"
class="resi-cell-select">
</el-cascader>
<template v-else-if="n.itemType === 'radio'">
<!-- <el-radio v-for="ns in n.options"
:key="ns.value"
v-model.trim="form[n.columnName]"
:disabled="disabled"
:label="ns.value">
{{ ns.label }}
</el-radio> -->
<el-checkbox-group v-model.trim="form[n.columnName]">
<el-checkbox
:key="n.value"
:label="n.value"
:disabled="disabled">{{n.label}}</el-checkbox>
<!-- <el-checkbox label="n.la"></el-checkbox> -->
</el-checkbox-group>
<!-- <el-radio v-model.trim="form[n.columnName]" label="1">备选项</el-radio> -->
</template>
<template v-else-if="n.itemType === 'checkbox'">
<el-checkbox-group v-model.trim="form[n.columnName]">
<el-checkbox v-for="ns in n.options"
:key="ns.value"
:label="ns.value"
:disabled="disabled">{{ns.label}}</el-checkbox>
<!-- <el-checkbox label="n.la"></el-checkbox> -->
</el-checkbox-group>
</template>
</div>
<!-- </div> -->
</el-form-item>
</el-col>
</el-row>
</template>
</el-form>
</div>
</template>
<script>
import { isCard, isMobile, isPhone } from '@/utils/validate'
import { requestPost } from "@/js/dai/request";
export default {
name: 'editForm',
props: {
editUserId: {
type: String,
default: ''
},
fixed: {
type: Boolean,
default: false
},
labelWidth: {
type: String,
default: '100px'
},
formId: {
type: String,
default: 'resiForm'
},
agencyId: {
type: String,
default: ''
},
formList: {
type: Array,
default: function () {
return []
}
},
formInfo: {
type: Object,
default: function () {
return {}
}
},
mutiList: {
type: Array,
default: function () {
return []
}
},
//
columns: {
type: Number,
default: 3
},
supportAdd: { //
type: Boolean,
default: false
},
disabled: { //
type: Boolean,
default: false
}
},
data () {
// let form = {}
// let rules = {}
let checkMObile = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入联系电话'))
} else {
if (!isMobile(value) && !isPhone(value)) {
callback(new Error('联系电话格式不正确'))
}
callback()
}
}
let checkIdCard = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入证件号'))
} else {
if (!isCard(value)) {
callback(new Error('请输入正确的证件号或护照号'))
}
callback()
}
}
let initForm = (obj, arr) => {
let _form = {}
// console.log('formInfo', obj)
if (Object.keys(obj).length > 0) {
_form = { ...obj }
// return _form
}
const itemTypes = ['daterange', 'timerange']
arr.forEach(item => {
if (item.multiSelect || itemTypes.includes(item.itemType)) {
if (item.columnValue && item.columnValue.indexOf(',') > -1) _form[item.columnName] = item.columnValue.split(',')
else _form[item.columnName] = (item.columnValue && [item.columnValue]) || []
} else _form[item.columnName] = item.columnValue || ''
})
// console.log('_from0000---', arr)
return _form
}
let initRules = (arr) => {
let rules = {}
arr.forEach(item => {
if (item.required) {
if (item.validType === 'mobile') {
rules[item.columnName] = [
{ required: true, validator: checkMObile, trigger: 'blur' }
]
} else if (item.validType === 'id_card') {
rules[item.columnName] = [
{ required: true, validator: checkIdCard, trigger: 'blur' }
]
} else {
rules[item.columnName] = [
{ required: true, message: `请输入${item.label}`, trigger: 'blur' }
]
}
}
})
return rules
}
let form = initForm(this.formInfo, this.formList)
let rules = initRules(this.formList)
let tempFormList = [...this.formList]
let constForm = {
...form
}
console.log('-----------------哈哈哈哈哈哈rules', rules)
return {
openSearch: false,
fixedForm: {
GRID_ID: '',
VILLAGE_ID: '',
BUILD_ID: '',
UNIT_ID: '',
HOME_ID: ''
},
fixedList: {},
form: {
...form
},
constForm,
tempFormList,
addCount: 0,
addList: [],
rulesForm: {
...rules,
VILLAGE_ID: [{ required: true, message: `请选择小区`, trigger: 'blur' }],
GRID_ID: [{ required: true, message: `请选择网格`, trigger: 'blur' }],
BUILD_ID: [{ required: true, message: `请选择楼号`, trigger: 'blur' }],
UNIT_ID: [{ required: true, message: `请选择单元`, trigger: 'blur' }],
HOME_ID: [{ required: true, message: `请选择房号`, trigger: 'blur' }]
},
// rules,
value: '',
optionsV: [],
optionsB: [],
optionsH: [],
optionsG: [],
optionsD: [],
pickerOptions: {
shortcuts: [{
text: '最近一周',
onClick (picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
picker.$emit('pick', [start, end])
}
}, {
text: '最近一个月',
onClick (picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
picker.$emit('pick', [start, end])
}
}, {
text: '最近三个月',
onClick (picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
picker.$emit('pick', [start, end])
}
}]
}
}
},
computed: {
sliceList () {
return function (data, count) {
if (data !== undefined) {
let index = 0
let arrTemp = []
let arrTemp1 = []
let arr1 = []
let arr2 = []
let _i = 0
let _index = 0
for (let i = 0; i < data.length; i++) {
if (data[i].itemType === 'divider' || data[i].itemType === 'checkbox') {
_i = i + 1
}
}
arr1 = data.slice(0, _i)
arr2 = data.slice(_i, data.length)
for (let i = 0; i < arr1.length; i++) {
index = parseInt(i / count)
if (arrTemp.length <= index) {
arrTemp.push([])
}
arrTemp[index].push(arr1[i])
}
for (let i = 0; i < arr2.length; i++) {
_index = parseInt(i / count)
if (arrTemp1.length <= _index) {
arrTemp1.push([])
}
arrTemp1[_index].push(arr2[i])
}
arrTemp = arrTemp.concat(arrTemp1)
return arrTemp
}
}
}
},
watch: {
form: {
handler (val, val2) {
console.log('valpppp----', val, val2)
for (let n in val) {
if (this.constForm[n] !== val[n]) {
this.handleChangeForm(n)
console.log('nnnnnn', n)
this.handleChangeGroup(n, val[n])
}
}
this.constForm = { ...val }
},
deep: true
}
},
created () {
this.initForm()
console.log('formInfo---gggreg', this.rulesForm)
console.log('formList', this.formList)
if (this.supportAdd) {
this.addList = [...this.mutiList]
// console.log('addList----111', this.addList)
}
if (this.fixed) {
this.getGridList()
this.getValiheList()
this.getBuildList()
this.getUniList()
this.getHouseList()
}
},
mounted () {
console.log('this.editUserId', this.editUserId)
if (this.editUserId) {
this.handleTuomin()
}
},
methods: {
async handleTuomin () {
const url = "/data/aggregator/epmetuser/detailByType";
const { data, code, msg } = await requestPost(url, {
id: this.editUserId,
type: "checkIcResiUser",
});
if (code === 0) {
this.$set(this.form, 'MOBILE', data.mobile)
this.$set(this.form, 'ID_CARD', data.idCard)
} else {
this.$message.error(msg);
}
},
initForm () {
this.formList.forEach(async item => {
if (item.optionSourceType === 'remote') {
await this.getOptionsLists(item.optionSourceValue).then(res => {
item.options = this.getTreeData(res)
})
}
})
},
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 }
}
return _item
})
return arr
},
handleOpenSearch () {
this.openSearch = !this.openSearch
},
handleAddRow () {
this.addList.push({
row: this.addList.length,
itemList: this.formList
})
},
//
handleFiexedForm (val) {
let item = {
[val]: this.fixedForm[val]
}
this.fixedList.push(item)
this.$set(this.fixedList, val, this.fixedForm[val])
},
//
handleChangeGroup (columnName, value) {
this.tempFormList.forEach(item => {
if (item.columnName === columnName && item.itemType === 'radio' && item.childGroup) {
console.log('columnName', item.columnName, columnName)
this.$emit('changegroup', { value, childGroup: item.childGroup })
}
})
},
// form
handleChangeForm (val) {
if (this.fixed) {
for (let n in this.fixedForm) {
if (n === val) {
this.$set(this.fixedList, val, this.form[val])
}
}
}
this.tempFormList.forEach(item => {
if (item.columnName === val) item.isChange = true
})
},
handleChange () {
// this.handleForm()
},
handleChangeGrid (val) {
console.log('val', val)
this.form.VILLAGE_ID = ''
this.form.BUILD_ID = ''
this.form.UNIT_ID = ''
this.form.HOME_ID = ''
this.getValiheList()
this.getBuildList()
this.getUniList()
this.getHouseList()
},
handleChangeV (val) {
console.log('val', val)
this.form.BUILD_ID = ''
this.form.UNIT_ID = ''
this.form.HOME_ID = ''
this.getBuildList()
this.getUniList()
this.getHouseList()
},
handleChangeB (val) {
console.log('val', val)
this.form.UNIT_ID = ''
this.form.HOME_ID = ''
this.getUniList()
this.getHouseList()
},
handleChangeD () {
this.form.HOME_ID = ''
this.getHouseList()
},
//
handleChangeH (val) {
let item = this.optionsH.find(item => item.value === val);
if (item && item.type == '1') {
this.form.IS_TENANT = '1'
console.log('item-----', item)
} else this.form.IS_TENANT = '0'
},
handlerMuscForm () {
let arr = []
this.addList.forEach(item => {
// console.log('handlerMuscForm----000', this.$refs['baseForms' + item.row || item][0].handleForm())
arr.push([...this.$refs['baseForms' + item.row][0].handleForm()])
})
if (arr.length === 0) return arr
let arr2 = arr.reduce(function (a, b) { return a.concat(b) })
let hash = {}
let i = 0
let res = []
// let finalArr = []
arr2.forEach((item) => {
let name = item.tableName
if (hash[name]) {
res[hash[name] - 1].list.push(...item.list)
} else {
hash[name] = ++i
res.push({
list: [...item.list],
supportAdd: this.supportAdd,
tableName: name
})
}
})
return res
},
resetForm () {
this.$refs[this.formId].resetFields()
},
handleForm () {
let newForm = []
this.$refs[this.formId].validate((valid) => {
if (valid) {
var hash = {}
var i = 0
var res = []
let ID = this.tempFormList[0].ID
this.tempFormList.forEach(function (item) {
var name = item.tableName
hash[name] ? res[hash[name] - 1].list.push(item) : hash[name] = ++i && res.push({
list: [item],
ID: item.ID,
tableName: name
})
})
// console.log('resssssss', res)
const itemTypes = ['cascader', 'daterange', 'timerange']
res.forEach(item => {
let _form = {}
item.list.filter(n => n.isChange).forEach(r => {
_form[r.columnName] = r.multiSelect || itemTypes.includes(r.itemType) ? this.form[r.columnName].toString() : this.form[r.columnName]
if (r.ID) {
_form.ID = r.ID
}
// return _form
})
if (this.fixed) {
for (let n in this.fixedList) {
_form[n] = this.fixedList[n]
}
if (Object.keys(_form).length > 0) {
if (!_form.AGENCY_ID) _form.AGENCY_ID = this.agencyId
}
if (!_form.ID) _form.ID = ID
}
console.log('objeckeyssss', Object.keys(_form), _form)
newForm.push({
tableName: item.tableName,
supportAdd: this.supportAdd,
ID: item.ID,
list: Object.keys(_form).length > 0 ? [{ ..._form }] : []
})
})
console.log('newFormhhhhh', newForm)
return newForm
} else {
console.log('error submit!!')
return false
}
})
if (this.supportAdd) newForm = this.handlerMuscForm()
return newForm
},
async getOptionsLists (url) {
let options = []
// console.log('getOptionsList----', url)
await this.$http
.post(url, { formCode: 'resi_base_info' })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
options = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
return options
},
getGridList () {
const { user } = this.$store.state
let purpose = 'query'
if (this.disabled) purpose = 'query'
else purpose = 'addorupdate'
this.$http
.post('/gov/org/customergrid/gridoption', { agencyId: this.agencyId, purpose })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsG = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
getValiheList () {
const { user } = this.$store.state
this.$http
.post('/actual/base/communityQuarters/listQuartersOptions', { gridId: this.form.GRID_ID, agencyId: this.agencyId })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsV = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
getBuildList () {
this.$http
.post('/actual/base/communityBuilding/buildingoption', { quartersId: this.form.VILLAGE_ID })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsB = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
getUniList () {
this.$http
.post('/actual/base/communityBuildingUnit/unitoption', { buildingId: this.form.BUILD_ID })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsD = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
getHouseList () {
this.$http
.post('/actual/base/communityHouse/houseoption', { unitId: this.form.UNIT_ID })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsH = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
}
}
}
</script>
<style lang="scss" scoped>
.resi-form {
:deep .el-date-editor.el-input,
.el-date-editor.el-input__inner {
width: 100% !important;
}
}
.resi-cell-value .resi-cell-input {
width: 168px;
}
</style>
<style lang="scss" scoped>
.resi-form .resi-row {
margin-bottom: 0;
}
// .resi-form .resi-cell {
// display: flex;
// align-items: center;
// .resi-cell-label {
// width: 70px;
// box-sizing: border-box;
// margin-right: 15px;
// text-align: right;
// }
// .resi-cell-value-radio {
// display: flex;
// align-items: center;
// min-height: 36px;
// }
// .resi-cell-value .resi-cell-input {
// width: 180px;
// }
.resi-cell-value .resi-cell-textarea {
width: 300px;
}
.resi-cell-col {
display: flex;
.el-form-item {
margin-right: 10px;
}
}
.resi-cell-select {
width: 190px;
box-sizing: border-box;
margin-right: 10px;
&-middle {
width: 130px;
}
&-small {
width: 88px;
}
}
.resi-cell-select:last-child {
margin-right: 0;
}
// }
</style>

360
src/views/components/resiExpand/editExpand.vue

@ -0,0 +1,360 @@
<template>
<div class='g-main'>
<el-form :model="form">
<div v-for="itemH in formList">
<h5>{{ itemH.title }}</h5>
<template v-for="itemj in itemH.form">
<section class="f-flex" style="flex-wrap: wrap;">
<el-form-item v-for="(itemk, index) in itemj.children" :key="index" label-width="160px"
:label="itemk.label" :class="itemk.itemType == 'textarea' ? 'textareaDidth' : ''">
<template v-if="itemk.itemType == 'radio1'">
<section class="list_item_width_1">
<el-radio v-for="ns in itemk.opction" :key="ns.value" size="small"
v-model.trim="form[itemj.id][itemk.formName]" :label="ns.value"
@click.native="handleFormChange(itemj.id,itemk.formName,itemk.itemType)">
{{ ns.label }}
</el-radio>
</section>
</template>
<template v-else-if="itemk.itemType == 'select1' && itemk.showFlag !== '0'">
<el-select v-model="form[itemj.id][itemk.formName]" :placeholder="`请选择${itemk.label}`"
size="small" :multiple="itemk.multiple" :collapse-tags="itemk.collapseTags"
clearable
:style="{ 'width': itemk.formName == 'specialCategoryCode' ? '183px' : '' }"
class="list_item_width_1">
<el-option v-for="items in itemk.opction" :key="items.value" :label="items.label"
:value="items.value" @click.native="handleFormChange(itemj.id,itemk.formName,itemk.itemType)">
</el-option>
</el-select>
</template>
<template v-else-if="itemk.itemType == 'textarea1'">
<el-input type="textarea" :placeholder="`请输入${itemk.label}`" class="item-width-textarea"
maxlength="120" size="small" show-word-limit resize="none" rows="3"
v-model.trim="form[itemj.id][itemk.formName]" @change.native="handleFormChange(itemj.id,itemk.formName,itemk.itemType)">
</el-input>
</template>
<template v-else-if="itemk.itemType == 'input1'">
<el-input :placeholder="`请输入${itemk.label}`" class="list_item_width_1" size="small"
:style="{ 'margin-right': itemk.label == '备注' ? '50px' : '' }"
v-model.trim="form[itemj.id][itemk.formName]" clearable @change.native="handleFormChange(itemj.id,itemk.formName,itemk.itemType)">
</el-input>
</template>
<template v-else-if="itemk.itemType == 'inputNum'">
<el-input :placeholder="`请输入${itemk.label}`" size="small" class="list_item_width_1-text"
:style="{ 'margin-right': itemk.label == '备注' ? '50px' : '' }"
v-model.trim="form[itemj.id][itemk.formName]" clearable
@blur="checkNumberInput(itemj.id, itemk.formName)" @change.native="handleFormChange(itemj.id,itemk.formName,itemk.itemType)">
</el-input><span class="u-data-tag"></span>
</template>
<template v-else-if="itemk.itemType == 'checkbox'">
<el-checkbox-group size="small" v-model="form[itemj.id][itemk.formName]">
<el-checkbox v-for="items in itemk.opction" :label="items.value"
:style="{ 'margin-right': items.label != itemk.label ? '' : '19px' }"
:key="items.value" :value="items.value" @click.native="handleFormChange(itemj.id,itemk.formName,itemk.itemType)">{{ items.label }}</el-checkbox>
</el-checkbox-group>
</template>
<template v-else-if="itemk.itemType == 'datepicker1' && itemk.showFlag !== '0'">
<el-date-picker v-model.trim="form[itemj.id][itemk.formName]" class="list_item_width_1"
type="date" size="small" clearable placeholder="选择日期" format="yyyy 年 MM 月 dd 日"
value-format="yyyy-MM-dd" @change="handleFormChange(itemj.id,itemk.formName,itemk.itemType)">
</el-date-picker>
</template>
<template v-else-if="itemk.itemType == 'cascader1'">
<el-cascader v-model="form[itemj.id].partyOrgId" :props="casProps"
:options="itemk.opction" class="list_item_width_1" clearable size="small"
@change="handlePartyOrgCascadarChange" ></el-cascader>
</template>
<template v-else-if="itemk.itemType == 'number'">
<el-input-number class="list_item_width_1" size="small" :min="1" :max="10"
v-model.trim="form[itemj.id][itemk.formName]"></el-input-number>
</template>
</el-form-item>
</section>
</template>
</div>
</el-form>
</div>
</template>
<script>
import { requestPost, requestGet } from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick";
export default {
data() {
return {
formType: null,
formList: [],
form: {
//
parymemberInfoDto: {
joinTime: null,
positiveTime: null,
partyOrgId: null,
flowFlag: null,
flowActNum: null,
partyJob: null,
duty: null,
retiredFlag: null,
centerFlag: null,
studyNotNeed: null,
joinBranchName: null,
joinCommunityTime: null
},
//
healthDto: {
disabilityCategoryCode: null,
disabilityLevel: null,
disabilityNum: null,
disabilityDesc: null,
guardianFlag: null,
guardianName: null,
specialSkillFlag: null,
workCapacityFlag: null
},
//
seriousIllnessDto: {
illnessCodes: []
},
//
chronicDiseaseDto: {
chronicDiseaseCodes: []
},
//
deathDto: {
deathTime: null
},
//
oldPeopleDto: {
oldPeopleCategories: [],
resideSituation: null,
oldSubsidy: null
},
//
subsistenceAllowanceDto: {
reasons: null,
category: []
},
// 退
veteranDto: {
joinArmyTime: null,
leaveArmyTime: null,
serviceUnit: null,
receiveUnit: null,
settlementAmount: null,
trainDesc: null,
employmentSituation: null,
pubWelfareJobFlag: null
},
//
ensureHouseDto: {
liveCommunity: null,
housingNature: null
},
//
unitedFrontDto: {
unitedFrontType: null
},
//
specialSupportDto: {
specialSupportType: null,//
childName: null,//
childGender: null,//
childDeathDate: null,//
childDisabilityCategoryCode: null,//
childDisabilityLevel: null,//
},
//
volunteerDto: {
volunteerCategory: []
},
},
casProps: {
value: 'id',
label: 'partyOrgName',
lazy: true,
lazyLoad: (node, resolve) => {
this.handleNextOrgTreeClick(node, resolve)
},
isLeaf: (data, node) => {
console.log(data);
//
//el-tree
if (data.partyOrgLevel == 7 || data.childrenQty == 0) {
return true
}
},
checkStrictly: true,
multiple: false,
},
changId:null,
changPid:null,
changType:null,
partyOrgIdPath:null
};
},
props: {
},
created() { },
activated() {
},
mounted() {
},
methods: {
handleFormChange(pid,id,type){
this.changPid = pid;
this.changId = id;
this.changType = type;
nextTick(1000)
this.$emit('submitExpand', this.form,{changId:this.changId,changPid:this.changPid,changType:this.changType})
},
checkNumberInput(itemj, itemk) {
if (this.form[itemj][itemk]) {
if (isNaN(this.form[itemj][itemk])) {
this.$message.error("请输入数字");
this.form[itemj][itemk] = "";
} else {
this.form[itemj][itemk] = parseFloat(
this.form[itemj][itemk]
);
}
}
},
showForm() {
this.$nextTick(() => {
// console.log(this.formList,'formList');
// console.log(this.form,'form');
const promises = this.formList.forEach((item) => {
item.form.map(async (group) => {
return group.children.reduce(async (accPromise, item) => {
const acc = await accPromise;
acc[item.formName] = null;
this.form[item.pformName].id = item.id
if (item.itemType == 'checkbox') {
this.form[item.pformName][item.formName] = item.value || []
} else if (item.itemType == 'cascader1' && item.orgPath) {
this.partyOrgIdPath = item.orgPath.split(':')[0]
await this.getOrgTree()
this.form[item.pformName][item.formName] = item.value || null
} else {
this.form[item.pformName][item.formName] = item.value || null
}
if (item.opctionUrl) {
try {
item.opction = await this.getDictDataForm(item.opctionUrl, item.opctionParams);
} catch (error) {
console.error('Error fetching options:', error);
}
}
return acc;
}, Promise.resolve({}));
})
})
Promise.all(promises).then((results) => {
}).catch((error) => {
console.error('Error fetching options:', error);
});
})
},
async getDictDataForm(url, params) {
try {
const { data } = await this.$http.post(url, params);
return data.data;
} catch (error) {
console.log(error, `获取 ${opctionParams.dictType} 字典`);
}
},
handlePartyOrgCascadarChange(selectedNode) {
this.form.parymemberInfoDto.partyOrgId = selectedNode[selectedNode.length - 1];
this.handleFormChange('parymemberInfoDto','partyOrgId','cascader1')
},
async handleNextOrgTreeClick(node, resolve) {
await this.getTreeChildenList(node, resolve)
},
async getTreeChildenList(node, resolve) {
if (node.data.partyOrgLevel <= 8) {
resolve(null);
return;
}
const url = "/actual/base/party/org/listNextLevelPartyOrgTreeNodesByPid"
let params = {
partyOrgPid: node.data.id
}
const { data, code, msg } = await requestGet(url, params)
if (code === 0) {
data.forEach(item => {
item.children = null;
item.leaf = item.partyOrgLevel === 7 || item.childrenQty === 0
});
resolve(data)
} else {
this.$message.error(msg)
}
},
async getOrgTree() {
try {
const { data } = await requestGet('/actual/base/party/org/listPartyOrgTreeRoot4Select', { partyOrgId:this.partyOrgIdPath,depth:8 })
this.formList.forEach(c => {
if (c.formId == "parymemberInfoDto") {
for (let i of c.form[0].children) {
if (i.formName == 'partyOrgId') {
i.opction = [data];
}
}
}
})
} catch (error) {
console.log(error);
}
},
},
components: {},
computed: {},
watch: {
'form': {
handler(newVal, oldVal) {
this.$emit('submitExpand', this.form,{changId:this.changId,changPid:this.changPid,changType:this.changType})
},
deep: true,
immediate: true
}
},
}
</script>
<style lang='scss' scoped>
@import "@/assets/scss/modules/management/list-main.scss";
h5 {
position: relative;
font-size: 16px;
margin: 22px 0;
&::after {
content: "";
position: absolute;
display: inline-block;
left: -15px;
top: -0px;
width: 5px;
height: 16px;
background-color: #0056d6;
}
}
</style>

311
src/views/components/resiExpand/index.vue

@ -0,0 +1,311 @@
<template>
<div class='g-main'>
<el-form :model="form">
<template v-for="itemj in formList">
<section class="f-flex" style="flex-wrap: wrap;">
<el-form-item v-for="(itemk, index) in itemj.children" :key="index" label-width="160px"
:label="itemk.label" :class="itemk.itemType == 'textarea' ? 'textareaDidth' : ''">
<template v-if="itemk.itemType == 'radio1'">
<section class="list_item_width_1">
<el-radio v-for="ns in itemk.opction" :key="ns.value" size="small"
v-model.trim="form[itemj.id][itemk.formName]" :label="ns.value">
{{ ns.label }}
</el-radio>
</section>
</template>
<template v-else-if="itemk.itemType == 'select1' && itemk.showFlag !== '0'">
<el-select v-model="form[itemj.id][itemk.formName]" :placeholder="`请选择${itemk.label}`"
size="small" :multiple="itemk.multiple" :collapse-tags="itemk.collapseTags" clearable
:style="{ 'width': itemk.formName == 'specialCategoryCode' ? '183px' : '' }"
class="list_item_width_1">
<el-option v-for="items in itemk.opction" :key="items.value" :label="items.label"
:value="items.value">
</el-option>
</el-select>
</template>
<template v-else-if="itemk.itemType == 'textarea1'">
<el-input type="textarea" :placeholder="`请输入${itemk.label}`" class="item-width-textarea"
maxlength="120" size="small" show-word-limit resize="none" rows="3"
v-model.trim="form[itemj.id][itemk.formName]">
</el-input>
</template>
<template v-else-if="itemk.itemType == 'input1'">
<el-input :placeholder="`请输入${itemk.label}`" class="list_item_width_1" size="small"
:style="{ 'margin-right': itemk.label == '备注' ? '50px' : '' }"
v-model.trim="form[itemj.id][itemk.formName]" clearable>
</el-input>
</template>
<template v-else-if="itemk.itemType == 'inputNum'">
<el-input :placeholder="`请输入${itemk.label}`" size="small" class="list_item_width_1-text"
:style="{ 'margin-right': itemk.label == '备注' ? '50px' : '' }"
v-model.trim="form[itemj.id][itemk.formName]" clearable
@blur="checkNumberInput(itemj.id, itemk.formName)">
</el-input><span class="u-data-tag"></span>
</template>
<template v-else-if="itemk.itemType == 'checkbox'">
<el-checkbox-group size="small" v-model="form[itemj.id][itemk.formName]">
<el-checkbox v-for="items in itemk.opction" :label="items.value"
:style="{ 'margin-right': items.label != itemk.label ? '' : '19px' }" :key="items.value"
:value="items.value">{{ items.label }}</el-checkbox>
</el-checkbox-group>
</template>
<template v-else-if="itemk.itemType == 'datepicker1' && itemk.showFlag !== '0'">
<el-date-picker v-model.trim="form[itemj.id][itemk.formName]" class="list_item_width_1"
type="date" size="small" clearable placeholder="选择日期" format="yyyy 年 MM 月 dd 日"
value-format="yyyy-MM-dd">
</el-date-picker>
</template>
<template v-else-if="itemk.itemType == 'cascader1'">
<el-cascader v-model="form[itemj.id].partyOrgId" :props="casProps" :options="itemk.opction"
class="list_item_width_1" clearable size="small"
@change="handlePartyOrgCascadarChange"></el-cascader>
</template>
<template v-else-if="itemk.itemType == 'number'">
<el-input-number class="list_item_width_1" size="small" :min="1" :max="10"
v-model.trim="form[itemj.id][itemk.formName]"></el-input-number>
</template>
</el-form-item>
</section>
</template>
</el-form>
<el-row style="margin:24px" v-if="operationType == 'add'">
<el-col :span="24" align="center">
<el-button size="small" class="diy-button--white" @click="handlerCancle" plain>取消</el-button>
<el-button type="primary" size="small" @click="handleClickSUbmitExpand">保存</el-button>
</el-col>
</el-row>
</div>
</template>
<script>
import { requestPost, requestGet } from "@/js/dai/request";
export default {
data() {
return {
formType: null,
formList: [],
form: {
//
parymemberInfoDto: {
joinTime: null,
positiveTime: null,
partyOrgId: null,
flowFlag: null,
flowActNum: null,
partyJob: null,
duty: null,
retiredFlag: null,
centerFlag: null,
studyNotNeed: null,
joinBranchName: null,
joinCommunityTime: null
},
//
healthDto: {
disabilityCategoryCode: null,
disabilityLevel: null,
disabilityNum: null,
disabilityDesc: null,
guardianFlag: null,
guardianName: null,
specialSkillFlag: null,
workCapacityFlag: null
},
//
seriousIllnessDto: {
illnessCodes: []
},
//
chronicDiseaseDto: {
chronicDiseaseCodes: []
},
//
deathDto: {
deathTime: null
},
//
oldPeopleDto: {
oldPeopleCategories:[],
resideSituation: null,
oldSubsidy:null
},
//
subsistenceAllowanceDto: {
reasons: [],
category: null
},
// 退
veteranDto: {
joinArmyTime: null,
leaveArmyTime: null,
serviceUnit: null,
receiveUnit: null,
settlementAmount: null,
trainDesc: null,
employmentSituation: null,
pubWelfareJobFlag: null
},
//
ensureHouseDto: {
liveCommunity: null,
housingNature: null
},
//
unitedFrontDto: {
unitedFrontType: null
},
//
specialSupportDto: {
specialSupportType: null,//
childName: null,//
childGender: null,//
childDeathDate: null,//
childDisabilityCategoryCode: null,//
childDisabilityLevel: null,//
},
//
volunteerDto: {
volunteerCategory: []
},
},
casProps: {
value: 'id',
label: 'partyOrgName',
lazy: true,
lazyLoad: (node, resolve) => {
this.handleNextOrgTreeClick(node, resolve)
},
isLeaf: (data, node) => {
console.log(data);
//
//el-tree
if (data.partyOrgLevel == 7 || data.childrenQty == 0) {
return true
}
},
checkStrictly: true,
multiple: false,
},
};
},
props: {
operationType:{
type:String,
default:''
}
},
created() {
},
activated() {
this.getOrgTree()
},
mounted() {
},
methods: {
checkNumberInput(itemj, itemk) {
if (this.form[itemj][itemk]) {
if (isNaN(this.form[itemj][itemk])) {
this.$message.error("请输入数字");
this.form[itemj][itemk] = "";
} else {
this.form[itemj][itemk] = parseFloat(
this.form[itemj][itemk]
);
}
}
},
showForm() {
this.$nextTick(() => {
const promises = this.formList.map(async (group) => {
return group.children.reduce(async (accPromise, item) => {
const acc = await accPromise;
acc[item.formName] = null;
if (item.opctionUrl) {
try {
item.opction = await this.getDictDataForm(item.opctionUrl, item.opctionParams);
} catch (error) {
console.error('Error fetching options:', error);
}
}
return acc;
}, Promise.resolve({}));
});
Promise.all(promises).then((results) => {
}).catch((error) => {
console.error('Error fetching options:', error);
});
this.getOrgTree()
console.log(this.form, '子组件form');
console.log(this.formList, '子组件formList');
})
},
async getDictDataForm(url, params) {
try {
const { data } = await this.$http.post(url, params);
return data.data;
} catch (error) {
console.log(error, `获取 ${opctionParams.dictType} 字典`);
}
},
handlerCancle() {
this.$emit('hideExpand', this.formType)
},
handleClickSUbmitExpand() {
this.$emit('submitExpand', this.form, this.formType)
},
handlePartyOrgCascadarChange(selectedNode) {
this.form.parymemberInfoDto.partyOrgId = selectedNode[selectedNode.length - 1];
},
async handleNextOrgTreeClick(node, resolve) {
await this.getTreeChildenList(node, resolve)
},
async getTreeChildenList(node, resolve) {
if (node.data.partyOrgLevel === 7) {
resolve(null);
return;
}
const url = "/actual/base/party/org/listNextLevelPartyOrgTreeNodesByPid"
let params = {
partyOrgPid: node.data.id
}
const { data, code, msg } = await requestGet(url, params)
if (code === 0) {
data.forEach(item => {
item.children = null;
item.leaf = item.partyOrgLevel === 7 || item.childrenQty === 0
});
resolve(data)
} else {
this.$message.error(msg)
}
},
async getOrgTree() {
try {
const { data } = await requestGet('/actual/base/party/org/listPartyOrgTreeRoot4Select', { depth: 8 })
this.formList.forEach(c => {
for (let i of c.children) {
if (i.formName == 'partyOrgId') {
i.opction = [data];
}
}
})
} catch (error) {
console.log(error);
}
},
},
components: {},
computed: {},
watch: {},
}
</script>
<style lang='scss' scoped>
@import "@/assets/scss/modules/management/list-main.scss";
</style>

14
src/views/components/resiForm.vue

@ -177,7 +177,7 @@
</el-form-item>
</div>
<!-- 这里开始就是底部的input------------------------------------------------------------------->
<!-- 这里开始就是底部的表单------------------------------------------------------------------->
<el-tabs v-model="activeName"
@tab-click="handleClickTab">
<el-tab-pane v-for="item in tabsList"
@ -1714,7 +1714,6 @@ export default {
}
},
getValiheList () {
const { user } = this.$store.state
this.$http.post('/actual/base/communityQuarters/listQuartersOptions', { gridId: this.form.gridId, agencyId: user.agencyId }).then(({ data: res }) => {
@ -2299,7 +2298,7 @@ export default {
this.form.remark = data.remark ? data.remark : ''
if (data.categoryInfo) {
this.form.categoryId = data.categoryInfo.id,//
this.form.partyFlag = data.categoryInfo.partyFlag.toString()
this.form.partyFlag = data.categoryInfo.partyFlag.toString()
this.form.subsistenceAllowanceFlag = data.categoryInfo.subsistenceAllowanceFlag.toString()
this.form.ensureHouseFlag = data.categoryInfo.ensureHouseFlag.toString()
this.form.unemployedFlag = data.categoryInfo.unemployedFlag.toString()
@ -2446,9 +2445,10 @@ export default {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
if (res.data && res.data.chronicDiseaseCode) {
res.data.chronicDiseaseCode = res.data.chronicDiseaseCode.split(',')
}else{
res.data.chronicDiseaseCode = []
}
this.form.healthDto = res.data ? res.data : { //
@ -2478,7 +2478,7 @@ export default {
},
//
residentWorkInfo (id) {
if (this.newForm.healthDto) return
if (this.newForm.workInfoDto) return
this.$http.get(`/actual/base/residentWorkInfo/detail/${id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
@ -2932,7 +2932,6 @@ export default {
}
if (this.newForm.volunteerDto) {
this.newForm.volunteerDto = this.form.volunteerDto
}
@ -2946,12 +2945,9 @@ export default {
this.newForm.postDto = this.form.postDto
}
if (this.newForm.tenantDto) {
this.newForm.tenantDto = this.form.tenantDto
}
if (this.newForm.specialSupportDto) {
this.newForm.specialSupportDto = this.form.specialSupportDto
}
},

20
src/views/components/resiInfo/ensureHouseDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>保障房</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

20
src/views/components/resiInfo/oldPeopleDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>老年人</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

20
src/views/components/resiInfo/parymemberInfoDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>党员</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

20
src/views/components/resiInfo/postDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>公益岗</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

20
src/views/components/resiInfo/specialSupportDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>特扶人员</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

20
src/views/components/resiInfo/unitedFrontDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>统战人员</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

20
src/views/components/resiInfo/veteranDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>退役军人</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

20
src/views/components/resiInfo/volunteerDto/index.vue

@ -0,0 +1,20 @@
<template>
<div class=''>志愿者</div>
</template>
<script>
export default {
data() {
return {};
},
created() {},
methods: {},
components:{},
computed:{},
watch: {},
}
</script>
<style lang='scss'>
</style>

568
src/views/components/resiSearch.vue

@ -2,45 +2,152 @@
<div class="resi-container">
<!-- <el-card class="resi-card"> -->
<div class="g-main">
<el-form :inline="true"
class="header_form_box"
:model="form"
:label-width="'100px'">
<el-form :inline="true" class="header_form_box" :model="form" :label-width="'105px'">
<el-form-item label="居民姓名">
<el-form-item label="国籍">
<el-select v-model="form.nationality" class="u-item-width-normal" clearable size="small">
<template v-for="item in nationalityList">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="人户状况">
<el-select v-model="form.householdSituation" class="u-item-width-normal" clearable size="small">
<template v-for="item in household">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="政治面貌">
<el-select v-model="form.partyFlag" class="u-item-width-normal" clearable size="small">
<template v-for="item in partyList">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="就业状态">
<el-select v-model="form.careerStatus" class="u-item-width-normal" clearable size="small">
<template v-for="item in careerStatusList">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="民族">
<el-select v-model="form.nation" class="u-item-width-normal" clearable size="small">
<template v-for="item in nation">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="人房关系">
<el-select v-model="form.resiHouseRel" class="u-item-width-normal" clearable size="small">
<template v-for="item in resiHouseRelList">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="健康状态">
<el-select v-model="form.healthStatus" collapse-tags multiple class="u-item-width-normal" clearable
size="small">
<template v-for="item in healthStatusList">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="更新时间">
<el-date-picker v-model="form.updateTimeStart" type="datetime" size="small" class="u-item-width-daterange"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="开始日期" :picker-options="pickerOptionsStart">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker v-model="form.updateTimeEnd" type="datetime" size="small" value-format="yyyy-MM-dd HH:mm:ss"
class="u-item-width-daterange u-data-tag" placeholder="结束日期" :picker-options="pickerOptionsEnd">
</el-date-picker>
</el-form-item>
<el-form-item label="性别">
<el-select v-model="form.gender" class="u-item-width-normal" clearable size="small">
<el-option label='男' value='1'> </el-option>
<el-option label='女' value='2'> </el-option>
</el-select>
</el-form-item>
<el-form-item label="文化程度">
<el-select v-model="form.cultureLevel" class="u-item-width-normal" clearable size="small">
<template v-for="item in Education">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="关注人群">
<el-select v-model="form.attentionCrowds" collapse-tags multiple class="u-item-width-normal" clearable
size="small">
<template v-for="item in resiClass">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="名称模糊查询">
<el-select v-model="basicType" class="u-item-width-service" clearable size="small">
<template >
<el-option @click.native="handelClickBasicType" :label='item.label' :value='item.value' v-for="(item, index) in basicInfoList" :key="index"> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item v-for="(item, index) in basicInfoList" :key="index" v-if="basicType == item.value">
<el-input v-model="form[item.value]" class="u-item-width-service" placeholder="请输入" clearable size="small">
</el-input>
</el-form-item>
<el-form-item label="身份">
<el-select v-model="form.projectStaff" class="u-item-width-normal" clearable size="small">
<template v-for="item in projectStaffList">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="居民年龄">
<el-input v-model="form.ageStart" class="u-item-width-daterange" placeholder="请输入" clearable size="small">
</el-input>
<span class="u-data-tag"></span>
<el-input v-model="form.ageEnd" @change="handleAgeChange" class="u-item-width-daterange u-data-tag"
placeholder="请输入" clearable size="small">
</el-input>
</el-form-item>
<el-form-item label="特殊人群">
<el-select v-model="form.specialCategoryCodes" class="u-item-width-normal" clearable size="small" collapse-tags
multiple>
<template v-for="item in specialCategoryList">
<el-option :label='item.label' :value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<!-- <el-form-item label="居民姓名">
<el-input v-model="form.name"
placeholder="请输入"
size="small"
@keydown.native.enter="handleSearchFrom"
class="u-item-width-normal"
clearable></el-input>
</el-form-item>
<el-form-item label="联系电话">
</el-form-item> -->
<!-- <el-form-item label="联系电话">
<el-input v-model="form.mobile"
size="small"
placeholder="请输入"
class="u-item-width-normal"
clearable></el-input>
</el-form-item>
<el-form-item label="证件号">
</el-form-item> -->
<!-- <el-form-item label="证件号">
<el-input v-model="form.idNum"
size="small"
placeholder="请输入"
class="u-item-width-normal"
clearable></el-input>
</el-form-item>
<el-form-item label="居民性别">
<el-select v-model="form.gender"
class="u-item-width-normal"
clearable
size="small">
<el-option label='男'
value='1'> </el-option>
<el-option label='女'
value='2'> </el-option>
</el-select>
</el-form-item>
<el-form-item label="出生日期">
</el-form-item> -->
<!-- <el-form-item label="出生日期">
<el-date-picker v-model="form.birthdayStart"
type="date"
size="small"
@ -58,82 +165,20 @@
placeholder="结束日期"
:picker-options="pickerOptionsEnd">
</el-date-picker>
</el-form-item>
<el-form-item label="居民年龄">
<el-input v-model="form.ageStart"
class="u-item-width-daterange"
placeholder="请输入"
clearable
size="small">
</el-input>
<span class="u-data-tag"></span>
<el-input v-model="form.ageEnd"
@change="handleAgeChange"
class="u-item-width-daterange u-data-tag"
placeholder="请输入"
clearable
size="small">
</el-input>
</el-form-item>
<el-form-item label="文化程度">
<el-select v-model="form.cultureLevel"
class="u-item-width-normal"
clearable
size="small">
<template v-for="item in Education">
<el-option :label='item.label'
:value='item.value'> </el-option>
</template>
</el-form-item> -->
<!-- <el-form-item label="本地户籍">
<el-select v-model="form.localResidenceFlag" class="u-item-width-normal" clearable size="small">
<el-option label='是' value='1'> </el-option>
<el-option label='否' value='0'> </el-option>
</el-select>
</el-form-item>
<el-form-item label="本地户籍">
<el-select v-model="form.localResidenceFlag"
class="u-item-width-normal"
clearable
size="small">
<el-option label='是'
value='1'> </el-option>
<el-option label='否'
value='0'> </el-option>
</el-select>
</el-form-item>
<el-form-item label="居民类别">
<el-select v-model="form.categoryKey"
collapse-tags
multiple
class="u-item-width-normal"
clearable
size="small">
<template v-for="item in resiClass">
<el-option :label='item.label'
:value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="人户状况">
<el-select v-model="form.householdSituation"
class="u-item-width-normal"
clearable
size="small">
<template v-for="item in household">
<el-option :label='item.label'
:value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item label="民族">
<el-select v-model="form.nation"
class="u-item-width-normal"
clearable
size="small">
<template v-for="item in nation">
<el-option :label='item.label'
:value='item.value'> </el-option>
</template>
</el-select>
</el-form-item>
<el-form-item>
</el-form-item> -->
<!-- <el-form-item>
<span style="width:100px;text-align: right;padding-right:14px;display: inline-block; ">所属组织:</span>
<el-cascader class="u-item-width-normal"
size="small"
@ -144,8 +189,8 @@
:show-all-levels="false"
@change="handleChangeAgency"
clearable></el-cascader>
</el-form-item>
<el-form-item prop="villageId">
</el-form-item> -->
<!-- <el-form-item prop="villageId">
<div class="resi-cell">
<div class="resi-cell-value">
<span style="width:100px;text-align: right;padding-right:14px;display: inline-block; ">所属房屋:</span>
@ -213,45 +258,25 @@
</el-select>
</div>
</div>
</el-form-item>
</el-form-item> -->
<el-form-item label="备注">
<el-input v-model="form.remark"
placeholder="请输入"
size="small"
class="u-item-width-normal"
clearable></el-input>
<el-input v-model="form.remark" placeholder="请输入" size="small" class="u-item-width-normal" clearable></el-input>
</el-form-item>
</el-form>
</div>
<el-row v-if="showSmartSearchForm"
class="resi-row-more f-m0">
<el-row v-if="showSmartSearchForm" class="resi-row-more f-m0">
<el-col :span="24">
<el-button v-for="btnItem in btnList"
:key="btnItem.index"
size="small"
:class="selBtnIndex === btnItem.index ? 'diy-button--white' : 'diy-button--common'"
@click="handelSelSmartBtn(btnItem.index)">{{ btnItem.name }}</el-button>
<el-button v-for="btnItem in btnList" :key="btnItem.index" size="small"
:class="selBtnIndex === btnItem.index ? 'diy-button--white' : 'diy-button--common'"
@click="handelSelSmartBtn(btnItem.index)">{{ btnItem.name }}</el-button>
</el-col>
<el-col>
<smart-search-rule ref="ref_rule"
:formType="formType"></smart-search-rule>
<smart-search-rule ref="ref_rule" :formType="formType"></smart-search-rule>
</el-col>
</el-row>
<!-- <el-row v-if="isArrow" class="resi-search">
<el-col :span="24">
<el-button type="primary" size="small" plain class="diy-button--blue"
@click="handleSmartSearch"><span>{{showSmartSearchForm?'关闭智能查询':'智能查询'}}</span></el-button>
<el-button style="margin-left:10px" size="small" class="diy-button--white" type="primary" plain
@click="resetForm">重置</el-button>
<el-button type="primary" size="small" class="diy-button--blue" @click="handleSearch" plain>查询 </el-button>
<el-button style="margin-left:15px" size="small" class="div-table-button--blue showUnfold" type="text"
@click="boxHeight = !boxHeight">{{ boxHeight ? '收起' : '展开' }}<i
:class="boxHeight ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"></i></el-button>
</el-col>
</el-row> -->
</div>
</template>
@ -282,7 +307,7 @@ export default {
default: false
}
},
data () {
data() {
let initForm = (arr, columnName) => {
let _form = {}
arr.forEach((item) => {
@ -343,23 +368,143 @@ export default {
boxHeight: true,
pageLoading: false,
openSearch: false,
basicType: "name",
basicInfoList: [
{
label: '姓名',
value: 'name'
},
{
label: '联系电话',
value: 'mobile'
},
{
label: '证件号',
value: 'idNum'
},
{
label: '籍贯',
value: 'nativePlace'
},
{
label: '备注',
value: 'remark'
}
],
optionsV: [],
optionsB: [],
optionsH: [],
optionsD: [],
optionsG: [],
orgOptions: [],
orgOptionProps,
agencyIdArray: [],
value: '',
// 1
Education: [],
nation: [],
nationalityList: [],
household: [],
resiClass: [],
itemList,
fixedList: [],
constForm,
partyList: [
{
label: '群众',
value: 0
},
{
label: '党员',
value: 1
},
{
label: '共青团员',
value: 2
}
],
resiHouseRelList: [
{
label: '自住',
value: 0
},
{
label: '租住',
value: 1
}
],
healthStatusList: [
{
label: '残疾',
value: 'DISABILITY_FLAG'
},
{
label: '大病',
value: 'SERIOUS_ILLNESS_FLAG'
},
{
label: '慢病',
value: 'CHRONIC_DISEASE_FLAG'
}
],
projectStaffList: [
{
label: '志愿者',
value: 'volunteerFlag'
},
{
label: '楼长',
value: 'buildingChiefFlag'
},
{
label: '单元长',
value: 'unitChiefFlag'
},
{
label: '公益岗',
value: 'publicWelfareFlag'
}
],
specialCategoryList: [
{
label: "安置帮教",
value: "anzhibangjiao",
children: null
},
{
label: "吸毒人员",
value: "xidurenyuan",
children: null
},
{
label: "社区矫正",
value: "shequjiaozheng",
children: null
},
{
label: "不良青少年",
value: "buliangqingshaonian",
children: null
},
{
label: "肇事肇祸精神病",
value: "zhaoshizhaohuojingshenbing",
children: null
},
{
label: "邪教人员",
value: "xiejiaorenyuan",
children: null
},
{
label: "信访人员",
value: "petitionOfficerFlag",
children: null
},
{
label: "统战人员",
value: "unitedFrontFlag",
children: null
}
],
careerStatusList: [],
form: {
name: '',
mobile: '',
@ -379,12 +524,15 @@ export default {
unitId: '',
gridId: '',
villageId: '',
categoryKey: [],
attentionCrowds: [],
healthStatus: [],
nationality: '',
resiHouseRel: '',
partyFlag: '',
updateTimeStart: '',
updateTimeEnd: '',
specialCategoryCodes: [],
remark: '',
villageId: '',
buildId: '',
unitId: '',
homeId: '',
level: '',
orgType: ''
},
@ -394,7 +542,7 @@ export default {
shortcuts: [
{
text: '最近一周',
onClick (picker) {
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
@ -403,7 +551,7 @@ export default {
},
{
text: '最近一个月',
onClick (picker) {
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
@ -412,7 +560,7 @@ export default {
},
{
text: '最近三个月',
onClick (picker) {
onClick(picker) {
const end = new Date()
const start = new Date()
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
@ -518,11 +666,11 @@ export default {
}
}
},
optionsVPageNo:1
optionsVPageNo: 1
}
},
computed: {
sliceList () {
sliceList() {
return function (data, count) {
//
if (data !== undefined) {
@ -540,19 +688,19 @@ export default {
}
}
},
changeVDisabled () {
changeVDisabled() {
return !this.form.villageId
},
changeBDisabled () {
changeBDisabled() {
return !this.form.buildId
},
changeDDisabled () {
changeDDisabled() {
return !this.form.unitId
},
},
watch: {
form: {
handler (val, val2) {
handler(val, val2) {
// console.log('valpppp----', val, val2)
for (let n in val) {
if (this.constForm[n] !== val[n]) {
@ -565,7 +713,7 @@ export default {
deep: true
},
timer: {
handler (newVal) {
handler(newVal) {
this.handelWatchStartDate(newVal)
},
deep: true,
@ -573,7 +721,6 @@ export default {
}
},
directives: {
//data mounted
"el-select-loadmore": {
bind(el, binding) {
const SELECTWRAP_DOM = el.querySelector(
@ -589,55 +736,56 @@ export default {
},
},
},
created () {
created() {
// this.initForm()
// console.log('formcccc---', this.form)
this.getOrgTreeList()
this.getGridList()
this.getEducation()
this.getValiheList()
this.getDictList()
this.getHousehold()
this.getResident()
this.getNationality()
this.getCareerStatus()
if (this.columnName) this.handleChangeForm(this.columnName)
},
methods: {
handleSmartSearch () {
handleSmartSearch() {
this.showSmartSearchForm = !this.showSmartSearchForm
},
handelSelSmartBtn (index) {
handelSelSmartBtn(index) {
this.selBtnIndex = index
},
handelWatchStartDate (val) {
handelWatchStartDate(val) {
return val
},
initForm () {
initForm() {
this.formList.forEach((item) => {
this.$set(this.form, item.columnName, '')
})
console.log('formcccc---', this.form)
},
computdSpan (len) {
computdSpan(len) {
return len == 1 ? 24 : 6
},
handleClearVillage () {
handleClearVillage() {
this.form.buildId = ''
this.form.homeId = ''
},
handleClearBuild () {
handleClearBuild() {
this.form.buildId = ''
this.form.unitId = ''
this.form.homeId = ''
},
handleClearDan () {
handleClearDan() {
this.form.unitId = ''
this.form.homeId = ''
},
handleSearchFrom () {
handleSearchFrom() {
this.$emit('handleSearchFrom', '')
},
resetForm (formName) {
resetForm(formName) {
for (const n in this.form) {
if (n == 'age') {
this.form.age = {
@ -709,16 +857,14 @@ export default {
// }
// },
handleAgeChange () {
console.log(11 > 5);
console.log(11 > 10);
handleAgeChange() {
if (this.form.ageStart) {
if (this.form.ageStart > this.form.ageEnd) {
this.$message.warning('结束年龄不能小于开始年龄')
}
}
},
handleChangeAgency (val) {
handleChangeAgency(val) {
this.sarr = []
const map = new Map();
@ -732,7 +878,7 @@ export default {
this.getValiheList()
},
getLastItem (list, vals, key) {
getLastItem(list, vals, key) {
let LIST = list || [];
for (let item of LIST) {
// console.log(item[key]);
@ -745,7 +891,8 @@ export default {
}
}
},
handleChangeGrid (val) {
handleChangeGrid(val) {
console.log('val', val)
this.form.villageId = ''
this.form.buildId = ''
@ -753,26 +900,26 @@ export default {
this.form.homeId = ''
this.getValiheList()
},
handleChangeV (val) {
handleChangeV(val) {
console.log('小区val', val)
this.form.buildId = ''
this.form.unitId = ''
this.form.homeId = ''
this.getBuildList()
},
handleChangeB (val) {
handleChangeB(val) {
console.log('楼号val', val)
this.form.unitId = ''
this.form.homeId = ''
this.getUniList()
},
handleChangeD (val) {
handleChangeD(val) {
console.log('单元val', val)
this.form.homeId = ''
this.getHouseList()
},
// form
handleChangeForm (val) {
handleChangeForm(val) {
for (let n in this.fixedForm) {
if (n === val) {
if (this.fixedList.length > 0) {
@ -811,7 +958,7 @@ export default {
if (item.columnName === val) item.isChange = true
})
},
getOrgTreeList () {
getOrgTreeList() {
this.$http
.post('/gov/org/customeragency/agencygridtree', {})
.then(({ data: res }) => {
@ -827,27 +974,12 @@ export default {
return this.$message.error('网络错误')
})
},
getGridList () {
const { user } = this.$store.state
this.$http
.post('/gov/org/customergrid/gridoption', { agencyId: user.agencyId, purpose: 'addorupdate' })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
} else {
console.log('获取查询详情成功', res.data)
this.optionsG = res.data
}
})
.catch(() => {
return this.$message.error('网络错误')
})
},
loadmore() {
this.optionsVPageNo++;
this.getValiheList();
},
getValiheList () {
getValiheList() {
const { user } = this.$store.state
var agencyIdTemp = ''
if (this.form.agencyId.length == 0) {
@ -858,16 +990,16 @@ export default {
var gridIdQuery = '';
var agencyIdQuery = this.form.agencyId[0];
if (this.form.agencyId.length >= 2) {
agencyIdQuery= this.form.agencyId[this.form.agencyId.length - 2];
gridIdQuery = this.form.agencyId[this.form.agencyId.length - 1];
agencyIdQuery = this.form.agencyId[this.form.agencyId.length - 2];
gridIdQuery = this.form.agencyId[this.form.agencyId.length - 1];
}
this.$http
.post('/actual/base/communityQuarters/listQuartersOptions', {
gridId: gridIdQuery,
agencyId: agencyIdQuery,
pageNo: this.optionsVPageNo,
pageSize:20
pageSize: 20
// agencyId: user.agencyId
})
.then(({ data: res }) => {
@ -882,7 +1014,7 @@ export default {
return this.$message.error('网络错误')
})
},
getBuildList () {
getBuildList() {
this.$http
.post('/actual/base/communityBuilding/buildingoption', {
quartersId: this.form.villageId
@ -899,7 +1031,7 @@ export default {
return this.$message.error('网络错误')
})
},
getUniList () {
getUniList() {
this.$http
.post('/actual/base/communityBuildingUnit/unitoption', {
buildingId: this.form.buildId
@ -916,9 +1048,9 @@ export default {
return this.$message.error('网络错误')
})
},
getHouseList () {
getHouseList() {
this.$http
.post('/actual/base/communityHouse/houseoption', { buildingId: this.form.buildId,unitId: this.form.unitId })
.post('/actual/base/communityHouse/houseoption', { buildingId: this.form.buildId, unitId: this.form.unitId })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
@ -931,7 +1063,7 @@ export default {
return this.$message.error('网络错误')
})
},
getTreeData (data) {
getTreeData(data) {
if (!Array.isArray(data)) return [];
let arr = data.map((item) => {
let _item = {};
@ -946,7 +1078,7 @@ export default {
});
return arr;
},
async getEducation () {
async getEducation() {
try {
let { data } = await this.$http.post('sys/dict/data/education', { formCode: "resi_base_info" })
data.data = this.getTreeData(data.data)
@ -957,7 +1089,7 @@ export default {
}
},
async getDictList () {
async getDictList() {
try {
const { data } = await this.$http.post('sys/dict/data/nation', { formCode: "resi_base_info" })
this.nation = data.data
@ -967,7 +1099,24 @@ export default {
}
},
async getHousehold () {
async getNationality() {
try {
const { data } = await this.$http.post('sys/dict/data/dictlist', { 'dictType': 'nationality' })
this.nationalityList = data.data
} catch (error) {
console.log(error, '获取国籍字典');
}
},
async getCareerStatus() {
try {
const { data } = await this.$http.post('sys/dict/data/dictlist', { 'dictType': 'career_status' })
this.careerStatusList = data.data
} catch (error) {
console.log(error, '获取国籍字典');
}
},
async getHousehold() {
try {
const { data } = await this.$http.post('sys/dict/data/dictlist', { 'dictType': 'household_situation' })
this.household = data.data
@ -975,15 +1124,15 @@ export default {
console.log(error, '获取人户状况字典');
}
},
async getResident () {
async getResident() {
try {
const { data } = await this.$http.post('sys/dict/data/dictlist', { 'dictType': 'resident_category' })
const { data } = await this.$http.post('sys/dict/data/dictlist', { 'dictType': 'attention_crowd' })
this.resiClass = data.data
} catch (error) {
console.log(error, '获取居民类别字典');
}
},
computedBirth (age) {
computedBirth(age) {
let now = new Date();
let nowYear = now.getFullYear();
let nowMonth = now.getMonth() + 1;
@ -997,7 +1146,7 @@ export default {
}
return subYear + '-' + nowMonth + '-' + nowDay
},
computedBirth1 (age) {
computedBirth1(age) {
let now = new Date();
let nowYear = now.getFullYear();
let nowMonth = now.getMonth() + 1;
@ -1010,6 +1159,13 @@ export default {
nowDay = '0' + nowDay
}
return subYear - 1 + '-' + nowMonth + '-' + nowDay
},
handelClickBasicType(){
this.form.name = '';
this.form.mobile = '';
this.form.idNum = '';
this.form.nativePlace = '';
this.form.remark = '';
}
}
}
@ -1022,8 +1178,10 @@ export default {
display: flex;
flex-wrap: wrap;
}
.resi-search {
padding-bottom: 14px;
.el-col {
text-align: right;
}
@ -1041,25 +1199,31 @@ export default {
text-align: right;
// line-height: 32;
}
.resi-cell-label1 {
width: max-content;
}
.resi-cell-value-radio {
display: flex;
align-items: center;
min-height: 32px;
}
.resi-cell-input {
max-width: 200px;
}
.resi-cell--daterange {
max-width: 240px;
}
.el-form--inline {
::v-deep .el-form-item {
margin-right: 0px !important;
}
}
.resi-cell-select {
max-width: 200px;
box-sizing: border-box;
@ -1067,10 +1231,12 @@ export default {
&-middle {
width: 130px;
}
&-small {
width: 88px;
}
}
.resi-cell-select:last-child {
margin-right: 0;
}

16
src/views/modules/base/community/roomTable.vue

@ -602,12 +602,16 @@ export default {
},
handleDetail (row) {
this.detailShow = true;
// const _data = await this.detail(row)
this.$nextTick(() => {
this.$refs.ref_form_detail.initForm(row, this.agencyObj);
});
this.lookResiId = row.resiId;
let { agencyId, gridId, gridName, houseId, houseName} = row
this.$store.dispatch('saveDataH', { agencyId, gridId, gridName, houseId, houseName});
this.$router.push({ name: 'house-huaxiang' });
this.$store.state.contentTabs = this.$store.state.contentTabs.map(item => {
if (item.name === "house-huaxiang") {
return { ...item, title: name };
}
return item;
});
},
detailFormCancle () {

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

File diff suppressed because it is too large

1
src/views/modules/communityParty/elegant/detail.vue

@ -72,7 +72,6 @@ export default {
watch: {},
async mounted () {
console.log('mounted-----我执行了')
},

2
src/views/modules/plugins/change/resichange.vue

@ -283,7 +283,7 @@
import nextTick from 'dai-js/tools/nextTick'
import deathSearch from '../../../components/deathSearch.vue'
import resiForm from '../../../components/resiForm.vue'
import editResi from '../../../components/editResi.vue'
import editResi from '../../../components/editResiCopy.vue'
import axios from 'axios'
import { mapGetters } from 'vuex'
import resiChangeTransfer from '../../../components/resiChangeTransfer.vue'

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

@ -325,7 +325,7 @@
import nextTick from 'dai-js/tools/nextTick'
import deathSearch from '../../../components/deathSearch.vue'
import resiForm from '../../../components/resiForm.vue'
import editResi from '../../../components/editResi.vue'
import editResi from '../../../components/editResiCopy.vue'
import axios from 'axios'
import { mapGetters } from 'vuex'
import resiTransfer from '../../../components/resiTransfer.vue'

2
src/views/modules/plugins/change/resiwelfare.vue

@ -278,7 +278,7 @@
import nextTick from 'dai-js/tools/nextTick'
import deathSearch from '../../../components/deathSearch.vue'
import resiForm from '../../../components/resiForm.vue'
import editResi from '../../../components/editResi.vue'
import editResi from '../../../components/editResiCopy.vue'
import axios from 'axios'
import { mapGetters } from 'vuex'
import resiTransfer from '../../../components/resiTransfer.vue'

2
src/views/modules/plugins/rent/resi.vue

@ -278,7 +278,7 @@
import nextTick from 'dai-js/tools/nextTick'
import resiSearch from '../../../components/blackSearch.vue'
import resiForm from '../../../components/resiForm.vue'
import editResi from '../../../components/editResi.vue'
import editResi from '../../../components/editResiCopy.vue'
import axios from 'axios'
import { mapGetters } from 'vuex'
import resiTransfer from '../../../components/resiTransfer.vue'

10
src/views/modules/portrayal/fangwu/index.vue

@ -19,8 +19,8 @@
<div class="title">
<div><img src="../../../../assets/images/index/title-icon-ywjl.png" alt="">各项业务记录</div>
</div>
<right-top v-if="childrenFlag" :houseInfo="houseInfo" :familyResiList="familyResiList" :type="'1'"
:key="houseInfo.houseId"></right-top>
<business-Record v-if="childrenFlag" :houseInfo="houseInfo" :familyResiList="familyResiList" :type="'1'"
:key="houseInfo.houseId"></business-Record>
</div>
</div>
</div>
@ -52,7 +52,7 @@
import { requestPost, requestGet } from '@/js/dai/request'
import leftTop from "./cpts/leftTop";
import leftBto from "../jumin/cpts/leftBto";
import rightTop from "../jumin/cpts/rightTop";
import businessRecord from "../jumin/cpts/businessRecord";
import rightBto from "./cpts/rightBto";
import nextTick from "dai-js/tools/nextTick";
@ -104,8 +104,8 @@ export default {
},
},
//
// leftTop, leftBto, resiInfo, rightTop, pointsRecord, rightBto, xiangshoufuwu
components: { leftTop, leftBto, rightTop, rightBto },
// leftTop, leftBto, resiInfo, businessRecord, pointsRecord, rightBto, xiangshoufuwu
components: { leftTop, leftBto, businessRecord, rightBto },
//
computed: {},
//

298
src/views/modules/portrayal/house/cpts/businessRecord.vue

@ -0,0 +1,298 @@
<template>
<div style="padding:0 16px;margin-top: 7px;">
<el-tabs v-model="topTabs" @tab-click="tabClick">
<el-tab-pane :label="complainLabel" name="12345">
<complain :tableData="complainList" />
</el-tab-pane>
<el-tab-pane :label="shengLabel" name="sheng">
<sheng :tableData="shengList" />
</el-tab-pane>
<el-tab-pane :label="shequLabel" name="shequ">
<shequ :tableData="shequList" />
</el-tab-pane>
<el-tab-pane :label="shijianLabel" name="shijian">
<shijian :tableData="shijianList" />
</el-tab-pane>
<el-tab-pane :label="xuqiuLabel" name="xuqiu">
<xuqiu :tableData="xuqiuList" />
</el-tab-pane>
<el-tab-pane :label="fuwuLabel" name="fuwu">
<div style="display: flex; flex-direction: column; height: 100%">
<fuwu
:tableData="fuwuList"
style="flex: 1; overflow: auto"
/>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import complain from "./table/complain";
import sheng from "./table/sheng";
import shequ from "./table/shequ";
import shijian from "./table/shijian";
import xuqiu from "./table/xuqiu";
import fuwu from "./table/fuwu";
export default {
//
data() {
return {
topTabs: "12345",
complainTotal: 0,
complainList: [],
complainLabel: "",
shengLabel: "",
shengList: [],
shengTotal: 0,
shequLabel: "",
shequList: [],
shequTotal: 0,
shijianLabel: "",
shijianList: [],
shijianTotal: 0,
xuqiuLabel: "",
xuqiuList: [],
xuqiuTotal: 0,
fuwuLabel: "",
fuwuList: [],
fuwuTotal: 0,
pageNo: 1,
pageSize: 20,
};
},
//
created() {
},
async mounted() {
//
await this.getHouseRelationShip();
await this.getComplainList();
await this.getShengList();
await this.getShequList();
await this.getshijianList();
await this.getxuqiuList();
await this.getfuwuList();
},
props: {
houseId: {
type: String,
default: () => {},
},
familyResiList: {
type: Array,
default: () => [],
},
},
//
methods: {
tabClick(index) {},
handleSizeChange() {},
handleCurrentChange() {},
getComplainList() {
if (this.resiId.length == 0) {
this.complainList = [];
this.complainLabel = `12345投诉(0)`;
return;
}
let parm = {
residList: this.resiId,
pageNo: this.pageNo,
pageSize: this.pageSize,
eventType: "3",
};
const statusArr = {
processing: "处理中",
closed_case: "已办结",
};
const marktypes = ["普通事件", "难点读点", "矛盾纠纷", "自身问题"];
//
this.$http
.post("/actual/base/peopleRoomOverview/eventPageList", parm)
.then(({ data: res }) => {
this.complainList = res.data.list.map((item) => {
return {
...item,
status: item.status ? statusArr[item.status] : null,
marktype: marktypes[item.marktype],
};
});
this.complainTotal = res.data.total;
this.complainLabel = `12345投诉(${this.complainTotal}`;
});
},
getShengList() {
if (this.resiId.length == 0) {
this.shengList = [];
this.shengLabel = `省满意度调查(0)`;
return;
}
let parm = {
residList: this.resiId,
pageNo: this.pageNo,
pageSize: this.pageSize,
};
//
this.$http
.post(
"/actual/base/peopleRoomOverview/provincialSatisfactionPageList",
parm
)
.then(({ data: res }) => {
this.shengList = res.data;
this.shengTotal = res.data.length;
this.shengLabel = `省满意度调查(${this.shengTotal}`;
});
},
getShequList() {
if (this.resiId.length == 0) {
this.shequList = [];
this.shequLabel = `社区满意度自查(0)`;
return;
}
let parm = {
residList: this.resiId,
pageNo: this.pageNo,
pageSize: this.pageSize,
};
const completeFlags = {
"-2": "未知",
"-1": "不接受回访",
0: "接受回访/待回访",
1: "已回访",
};
this.$http
.post(
"/actual/base/peopleRoomOverview/communitySatisfactionPageList",
parm
)
.then(({ data: res }) => {
this.shequList = res.data.map((item) => {
return {
...item,
completeFlag: completeFlags[item.completeFlag],
};
});
this.shequTotal = this.shequList.length;
this.shequLabel = `社区满意度自查(${this.shequTotal}`;
});
},
getshijianList() {
if (this.resiId.length == 0) {
this.shijianList = [];
this.shijianLabel = `上报事件(0)`;
return;
}
let parm = {
residList: this.resiId,
pageNo: this.pageNo,
pageSize: this.pageSize,
};
const statusArr = {
processing: "处理中",
closed_case: "已办结",
};
const marktypes = ["普通事件", "难点读点", "矛盾纠纷", "自身问题"];
this.$http
.post("/actual/base/peopleRoomOverview/eventPageList", parm)
.then(({ data: res }) => {
this.shijianList = res.data.list.map((item) => {
return {
...item,
status: item.status ? statusArr[item.status] : null,
marktype: marktypes[item.marktype],
};
});
this.shijianTotal = this.shijianList.length;
this.shijianLabel = `上报事件(${this.shijianTotal}`;
});
},
getxuqiuList() {
if (this.resiId.length == 0) {
this.xuqiuList = [];
this.xuqiuLabel = `居民需求(0)`;
return;
}
let parm = {
residList: this.resiId,
pageNo: this.pageNo,
pageSize: this.pageSize,
};
//
this.$http
.post("/actual/base/peopleRoomOverview/demandOfResidentsPageList", parm)
.then(({ data: res }) => {
this.xuqiuList = res.data.map((item) => {
return {
...item,
};
});
this.xuqiuTotal = this.xuqiuList.length;
this.xuqiuLabel = `居民需求(${this.xuqiuTotal}`;
});
},
getfuwuList() {
if (this.resiId.length == 0) {
this.fuwuList = [];
this.fuwuLabel = `社区服务(0)`;
return;
}
let parm = {
residList: this.resiId,
pageNo: this.pageNo,
pageSize: this.pageSize,
};
this.$http
.post("/actual/base/peopleRoomOverview/communityServicePageList", parm)
.then(({ data: res }) => {
this.fuwuList = res.data.map((item) => {
return {
...item,
};
});
this.fuwuTotal = this.fuwuList.length;
this.fuwuLabel = `社区服务(${this.fuwuTotal}`;
});
},
//
async getHouseRelationShip() {
try {
var resiIds = [];
await this.$http.post("/actual/base/peopleRoomOverview/getFamilyRelationshipList?type=1&resid="+this.houseId).then(({ data: res }) => {
res.data.forEach(function(item) {
// "id"houseResiIds
resiIds.push(item.id);
},this);
});
this.resiId = resiIds;
} catch (error) {
console.log(error);
}
},
},
//
components: { complain, sheng, fuwu, shijian, xuqiu, shequ },
//
computed: {},
//
watch: {},
};
</script>
<style lang="less" scoped></style>

206
src/views/modules/portrayal/house/cpts/details/fwdetail.vue

@ -0,0 +1,206 @@
<template>
<el-dialog width="818px" :modal="true" :modal-append-to-body="false" :destroy-on-close="true" :visible="showDialog"
@close="handleClose" title="服务详情">
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="23" style="padding-left: 40px">
<div class="leftEvent">
<div class="eventItem">
<span>所属组织</span>
<span>{{ formData.principalName || '--' }}</span>
</div>
<div class="eventItem">
<span>服务类型</span>
<span>{{
formData.customerId && getFwType(formData.customerId)
}}</span>
</div>
<div class="eventItem">
<span>服务事项</span>
<span>{{ formData.serviceName || '--' }}</span>
</div>
<div class="eventItem">
<span>服务时间</span>
<span>{{ formData.serviceTimeStart || '--' }} ~
{{ formData.serviceTimeEnd || '--' }}</span>
</div>
<div class="eventItem">
<span>服务内容</span>
<span style="margin-top: 20px">{{ formData.remark || '--' }}</span>
</div>
<div class="eventItem">
<span>经办人</span>
<span>{{ formData.principalName || '--' }}</span>
</div>
<div class="eventItem">
<span>联系电话</span>
<span> {{ $sensitive(formData.principalContact, 3, 7) }}</span>
</div>
<div class="eventItem">
<span>服务组织</span>
<span>{{ formData.principalName || '--' }}</span>
</div>
<div class="eventItem">
<span>政策依据</span>
<span>{{ formData.policyTitle || '--' }}</span>
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
export default {
name: "ReportAnEvent",
components: {
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {},
loading: false,
activities: [],
//
serviceTypesLevel1: [],
formData: {}
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {
this.$http
.get("/governance/commonServiceType/selectList/0")
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceTypesLevel1 = res.data;
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getFwType(value) {
if (this.serviceTypesLevel1.length > 0 && value) {
return this.serviceTypesLevel1.filter(
(item) => item.customerId == value
)[0].name;
}
return "";
},
getDetailsData(id) {
this.loading = true;
this.$http
.post("/governance/icServiceRecordV2/detail", {
serviceRecordId: id,
})
.then((res) => {
const { code, data, msg } = res.data;
if (code === 0) {
this.formData = data;
this.loading = false;
} else {
this.loading = false;
this.$message.error(msg);
}
});
// this.$http
// .post("/governance/icEvent/process", { icEventId: id })
// .then((res) => {
// const { code, data, msg } = res.data;
// if (code === 0) {
// this.activities = data;
// } else {
// this.$message.error(msg);
// }
// });
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.eventWrap {
width: 1094px;
max-height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.detail {
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
.eventItem {
font-size: 14px;
margin-bottom: 24px;
}
}
}
</style>

189
src/views/modules/portrayal/house/cpts/details/shengdetail.vue

@ -0,0 +1,189 @@
<template>
<el-dialog width="818px" :modal="true" :modal-append-to-body="false" :destroy-on-close="true" :visible="showDialog"
@close="handleClose" title="省满意度调查不满意事项详情">
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="23" style="padding-left: 40px">
<div class="leftEvent">
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.agencyName || '--' }}</span>
</div>
<div class="eventItem">
<span>不满意事项来源</span>
<span>省满意度调查</span>
</div>
<div class="eventItem">
<span>不满意事项类型</span>
<span>{{ item.scopeId && getSxType(item.scopeId) }}</span>
</div>
<div class="eventItem">
<span>所属月份</span>
<span>{{
item.createdTime && getMonthData(item.createdTime)
}}</span>
</div>
<div class="eventItem">
<div>不满意事项描述</div>
<div style="margin-top: 20px">{{ item.problemDesc || '--' }}</div>
</div>
<div class="eventItem">
<span>提交人姓名</span>
<span>{{ item.name || '--' }}</span>
</div>
<div class="eventItem">
<span>提交人电话</span>
<span> {{ $sensitive(item.mobile, 3, 7) }}</span>
</div>
<div class="eventItem">
<span>完成时限</span>
<span>{{ item.completeTime || '--' }}</span>
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
export default {
components: {
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {
logList: [],
},
loading: false,
loading1: false,
activities: [],
//
satisfactionCategoryOptions: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() { },
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getSxType(value) {
if (this.satisfactionCategoryOptions.length > 0 && value) {
return this.satisfactionCategoryOptions.filter(
(item) => item.value == value
)[0].label;
}
return "";
},
getMonthData(time) {
if (time) {
return this.$moment(time).format("YYYY年MM月");
}
return "";
},
getDetailsData(id) {
this.loading = true;
this.$http
.post("/governance/provinceEvaluationRecord/" + id)
.then((res) => {
this.loading = false;
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
} else {
this.$message.error(msg);
}
});
this.$http
.get(
"/governance/satisfactionDetailList/getUnsatisfiedCategory?satisfactionSource="
)
.then(({ data: { data } }) => {
this.satisfactionCategoryOptions = data.map((item) => {
return {
label: item.categoryName,
value: item.categoryCode,
};
});
});
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.eventWrap {
width: 1094px;
max-height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.detail {
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
.eventItem {
font-size: 14px;
margin-bottom: 24px;
}
}
}
</style>

306
src/views/modules/portrayal/house/cpts/details/sjdetail.vue

@ -0,0 +1,306 @@
<template>
<el-dialog width="1118px" :modal="true" :modal-append-to-body="false" :destroy-on-close="true" :visible="showDialog"
@close="handleClose" title="事件详情">
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="13" style="padding-left: 40px">
<div class="leftEvent">
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.gridName || '--' }}</span>
</div>
<div class="eventItem">
<span>上报渠道</span>
<span>{{ item.sourceTypeName || '--' }}</span>
</div>
<div class="eventItem">
<span>事件类型</span>
<span>{{ item.categoryName || '--' }}</span>
</div>
<div class="eventItem">
<span>接受时间</span>
<span>{{ item.happenTime || '--' }}</span>
</div>
<!-- <div class="eventItem">
<span>工单号</span>
<span>{{ item.workOrderNum }}</span>
</div>-->
<div class="eventItem">
<div>问题描述</div>
<div style="margin-top: 20px">{{ item.eventContent || '--' }}</div>
</div>
<!-- <div class="eventItem">
<div>图片</div>
<div style="margin-top: 20px; display: flex">
<img
style="width: 100px; height: 100px; margin-right: 5px"
v-for="src in item.imageList"
:key="src"
:src="src"
alt="/"
@click="openImg(src)"
/>
</div>
</div>-->
<div class="eventItem">
<span>联系人</span>
<span>{{ item.name || '--' }}</span>
</div>
<div class="eventItem">
<span>联系电话</span>
<span>{{ item.mobile || '--' }}</span>
</div>
<div class="eventItem">
<span>详细地址</span>
<span>{{ item.address || '--' }}</span>
</div>
<div class="eventItem">
<span>办结时限</span>
<span>{{ item.latestOperatedTime || '--' }}</span>
</div>
<div class="eventItem">
<span>满意度评价</span>
<span>{{ item.satisfactionName || '--' }}</span>
</div>
</div>
</el-col>
<el-col :span="11">
<div class="rightEvent m-info">
<!-- <div class="eventDetails">
<img :width="18" :height="18" src="@/assets/images/manyidu/tc-title-icon.png" />办理进展
</div> -->
<!-- <el-timeline class="timeline" :reverse="true">
<el-timeline-item v-for="(item, index) in activities" :key="index" :class="index == activities.length - 1 ? 'sucess' : ''">
<div class="status-box">
<div class="status1" v-if="index == activities.length - 1">回复</div>
<div class="status2" v-else>完成并回复</div>
<div class="timestamp">{{ item.timeLimit ? $moment(item.timeLimit).format("YYYY-MM-DD hh:mm:ss") : "" }}</div>
</div>
<div class="content">
<div class="field">回复人</div>
<div class="value">{{ item.departmentName }}</div>
</div>
<div class="content">
<div class="field">回复内容</div>
<div class="value">{{ item.publicReply }}</div>
</div>
</el-timeline-item>
</el-timeline> -->
<div v-if="activities.length > 0">
<!-- <el-card :class="{ 'box-card': source === 'visiual' }" style="min-height: calc(88vh - 50px); overflow: auto"> -->
<div class="m-process">
<div class="list">
<div class="item" :class="[index === 0 ? 'z-on' : '']" :key="item.processId"
v-for="(item, index) in activities">
<div class="item-row">
<template v-if="item.agencyId">
<div class="name">指派</div>
</template>
<template v-if="!item.timeLimit">
<div class="name">完成并回复</div>
</template>
<template v-if="!item.agencyId && item.timeLimit">
<div class="name">{{ item.processName || '--' }}</div>
</template>
<div class="date">
{{
item.processTime ? getTrueTime(item.processTime) : ""
}}
</div>
</div>
<div v-if="item.type === 'event'">
<template v-if="item.agencyId">
<div class="detail">
<div class="detail-field">指派人</div>
<div class="detail-value">
{{ item.departmentName || '--' }}
</div>
</div>
<div class="detail">
<div class="detail-field">指派部门</div>
<div class="detail-value">
{{ item.agencyName || '--' }}
</div>
</div>
<div class="detail">
<div class="detail-field">转办意见</div>
<div class="detail-value">
{{ item.publicReply || '--' }}
</div>
</div>
<div class="detail">
<div class="detail-field">办结时限</div>
<div class="detail-value">
{{ item.timeLimit || '--' }}
</div>
</div>
</template>
<template v-else>
<div class="detail">
<div class="detail-field">回复人</div>
<div class="detail-value">
{{ item.departmentName || '--' }}
</div>
</div>
<div class="detail">
<div class="detail-field">回复内容</div>
<div class="detail-value">
{{ item.publicReply || '--' }}
</div>
</div>
<div class="detail" v-if="item.timeLimit">
<div class="detail-field">办结时限</div>
<div class="detail-value">
{{ getTrueTime(item.timeLimit) }}
</div>
</div>
</template>
</div>
</div>
</div>
</div>
<!-- </el-card> -->
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
export default {
name: "ReportAnEvent",
components: {
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {},
loading: false,
loading1: false,
activities: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
this.getProcessData(this.id);
} else {
this.item = {}
this.activities = []
}
},
immediate: true,
},
},
mounted() {
},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getDetailsData(id) {
this.loading = true;
this.$http
.post("/governance/icEvent/detail", { icEventId: id })
.then((res) => {
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
this.loading = false;
} else {
this.loading = false;
this.$message.error(msg);
}
});
},
getProcessData(id) {
this.$http
.post("/governance/icEvent/process", { icEventId: id })
.then((res) => {
const { code, data, msg } = res.data;
if (code === 0) {
this.activities = data;
this.loading1 = false;
} else {
this.loading1 = false;
this.$message.error(msg);
}
});
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.eventWrap {
width: 1094px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.detail {
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {}
}
}
}
</style>

283
src/views/modules/portrayal/house/cpts/details/sqdetail.vue

@ -0,0 +1,283 @@
<template>
<el-dialog
width="818px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
title="社区满意度自查不满意事项详情"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="24" style="padding-left: 40px">
</el-col>
<el-col
:span="23"
style="padding-left: 40px"
>
<div class="leftEvent">
<!-- <div class="eventItem">
<span>所属组织</span>
<span>{{ item.agencyName }}</span>
</div> -->
<div class="eventItem">
<span>不满意事项来源</span>
<span>社区意度自查</span>
</div>
<div class="eventItem">
<span>不满意事项类型</span>
<span>{{ getSxType(item) }}</span>
</div>
<!-- <div class="eventItem">
<span>所属月份</span>
<span>{{
item.createdTime && getMonthData(item.createdTime)
}}</span>
</div> -->
<div class="eventItem">
<div>不满意事项描述</div>
<div style="margin-top: 20px">{{ getSxReason(item) }}</div>
</div>
<div class="eventItem">
<span>提交人姓名</span>
<span>{{ item.reporterName || '--' }}</span>
</div>
<div class="eventItem">
<span>提交人电话</span>
<span> {{ $sensitive(item.reporterMobile, 3, 7) }}</span>
</div>
<!-- <div class="eventItem">
<span>完成时限</span>
<span>{{ item.completeTime }}</span>
</div> -->
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
export default {
components: {
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {
logList: [],
},
loading: false,
//
satisfactionCategoryOptions: [
{
key: "evaCulturalFacility",
value: "文化设施",
},
{
key: "evaSportsFacility",
value: "体育设施",
},
{
key: "evaEcologicalEnv",
value: "生态环境",
},
{
key: "evaSocialSecurity",
value: "社会治安",
},
{
key: "evaocialAssistance",
value: "社会救助",
},
{
key: "evaOldPeopleProvide",
value: "老有所养",
},
{
key: "evaBasicEducation",
value: "基础教育",
},
{
key: "evaMedical",
value: "病有所医",
},
],
reason: [
"basicEducationReason",
"culturalFacilityReason",
"ecologicalEnvReason",
"medicalReason",
"oldPeopleProvideReason",
"socialAssistanceReason",
"socialSecurityReason",
"sportsFacilityReason",
],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getSxType(row) {
let arr = [];
let text = "";
for (let k in row) {
if (row[k] == "bad") {
arr.push(k);
}
}
this.satisfactionCategoryOptions.forEach((item) => {
arr.forEach((item1) => {
if (item1 == item.key) {
if (text == "") {
text = item.value;
} else {
text = text + ", " + item.value;
}
}
});
});
return text;
},
getSxReason(row) {
let text = "";
this.reason.forEach((item) => {
for (let key in row) {
if (item == key && row[key]) {
if (text == "") {
text = row[key];
} else {
text = text + ";" + row[key];
}
}
}
});
return text;
},
getMonthData(time) {
if (time) {
return this.$moment(time).format("YYYY年MM月");
}
return "";
},
getDetailsData(id) {
this.loading = true;
this.$http
.get(
"/governance/satisfaction/communitySelfInsp/inspResult/detail/" + id
)
.then((res) => {
this.loading = false;
const { code, data, msg } = res.data;
if (code === 0) {
this.item = { ...data.reporter, ...data.satisfaction };
} else {
this.$message.error(msg);
}
});
// this.$http
// .post("/governance/provinceEvaluationRecord/" + id)
// .then((res) => {
// this.loading = false;
// const { code, data, msg } = res.data;
// if (code === 0) {
// this.item = data;
// } else {
// this.$message.error(msg);
// }
// });
// this.$http
// .get(
// "/governance/satisfactionDetailList/getUnsatisfiedCategory?satisfactionSource="
// )
// .then(({ data: { data } }) => {
// console.log('data::', data);
// this.satisfactionCategoryOptions = data.map((item) => {
// return {
// label: item.categoryName,
// value: item.categoryCode,
// };
// });
// });
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.eventWrap {
width: 1094px;
// max-height: 798px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.detail {
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
.eventItem {
font-size: 14px;
margin-bottom: 24px;
}
}
}
</style>

188
src/views/modules/portrayal/house/cpts/details/xqdetail.vue

@ -0,0 +1,188 @@
<template>
<el-dialog
width="818px"
:modal="true"
:modal-append-to-body="false"
:destroy-on-close="true"
:visible="showDialog"
@close="handleClose"
title="需求详情"
>
<div class="eventWrap">
<el-row :gutter="32">
<el-col
:span="23"
style="padding-left: 40px"
>
<div class="leftEvent">
<div class="eventItem">
<span>所属组织</span>
<span>{{ item.gridName||'--' }}</span>
</div>
<div class="eventItem">
<span>上报渠道</span>
<span>{{ item.reportTypeName||'--' }}</span>
</div>
<div class="eventItem">
<span>需求类型</span>
<span>{{ item.categoryName ||'--'}}</span>
</div>
<div class="eventItem">
<span>上报时间</span>
<span>{{ item.reportTime||'--' }}</span>
</div>
<div class="eventItem">
<div>需求描述</div>
<div style="margin-top: 20px">{{ item.content ||'--'}}</div>
</div>
<div class="eventItem">
<span>需求人姓名</span>
<span>{{ item.demandUserName ||'--'}}</span>
</div>
<div class="eventItem">
<span>需求人电话</span>
<span> {{ $sensitive(item.demandUserMobile, 3, 7) }}</span>
</div>
<div class="eventItem">
<span>完成时限</span>
<span>{{ item.wantServiceTime||'--' }}</span>
</div>
<div class="eventItem">
<span>需求人住址</span>
<span>{{ item.serviceAddress||'--' }}</span>
</div>
<div class="eventItem">
<span>上报人</span>
<span>{{ item.reportUserName||'--' }}</span>
</div>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
</template>
<script>
export default {
name: "ReportAnEvent",
components: {
},
props: {
id: {
type: String,
default: "",
},
showDialog: {
type: Boolean,
default: false,
},
},
data() {
return {
item: {
logList: [],
},
loading: false,
loading1: false,
activities: [],
};
},
computed: {},
watch: {
showDialog: {
handler(val) {
if (val) {
this.getDetailsData(this.id);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
this.item = {};
},
openImg(src) {
window.open(src);
},
getTrueTime(time) {
return this.$moment(time * 1000).format("YYYY-MM-DD hh:mm");
},
getDetailsData(id) {
this.loading = true;
let params = {
demandRecId: id,
};
this.$http
.post("/governance/userdemand/demandDetail", params)
.then((res) => {
this.loading = false;
const { code, data, msg } = res.data;
if (code === 0) {
this.item = data;
} else {
this.$message.error(msg);
}
});
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/shequzhili/event-info.scss";
.eventWrap {
width: 1094px;
height: 610px;
overflow-y: auto;
overflow-x: hidden;
padding: 24px;
.eventDetails {
font-size: 18px;
margin: 48px 24px 48px 0;
img {
margin-top: -4px;
margin-right: 8px;
}
}
.m-info {
padding: 0px !important;
.m-process {
margin: 0 !important;
.detail {
.detail-field {
flex: none !important;
}
}
}
}
.leftEvent {
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
}
</style>

187
src/views/modules/portrayal/house/cpts/graph.vue

@ -0,0 +1,187 @@
<template>
<div>
<div style="height:300px; width: 500px;">
<RelationGraph ref="seeksRelationGraph" :options="graphOptions" :on-node-click="onNodeClick"
:on-line-click="onLineClick" />
</div>
</div>
</template>
<script>
import { requestPost } from '@/js/dai/request'
export default {
name: 'RelationGraphDemo3',
components: {},
data() {
return {
graphOptions: {
disableDragNode: true,
defaultNodeBorderWidth: 0,
defaultNodeColor: 'rgba(238, 178, 94, 0)',
allowSwitchLineShape: true,
allowSwitchJunctionPoint: true,
defaultLineShape: 1,
allowShowMiniToolBar: false,
layouts: [
{
label: '中心',
layoutName: 'center',
layoutClassName: 'seeks-layout-center',
distance_coefficient: 1.5
}
],
defaultJunctionPoint: 'border',
// "Graph "
}
};
},
props: {
houseInfo: {
type: Object,
default: () => { }
}
},
mounted() {
this.$nextTick(() => {
this.getFamilyRelationshipList()
})
},
watch: {
houseInfo: {
handler(newVal, oldVal) {
this.getFamilyRelationshipList()
},
deep: true
}
},
methods: {
async getFamilyRelationshipList() {
let url = `/actual/base/peopleRoomOverview/getFamilyRelationshipList?type=1&resid=` + this.houseInfo.id;
let { code, data, msg } = await requestPost(url)
if (code == 0) {
//
const rootNode = {};
rootNode["id"] = this.houseInfo.id;
rootNode["name"] = this.houseInfo.fullName;
rootNode["type"] = 1;
data.unshift(rootNode);
let familyList = data.map((item, index) => ({
'id': `N${index + 1}`,
'text': item.name,
'innerHTML': `<div class="c-my-node${index == 0 ? '1' : '2'} c-my-node-${item.type == 1?'home':index == 0 ? item.gender == 1 ? 'father' : 'mother' : item.houseHolderRel == '配偶' ? item.gender == '1' ? 'mother' : 'father' : item.houseHolderRel == '女儿' ? 'girl' : item.houseHolderRel == '儿子' ? 'gon' : item.houseHolderRel == '父亲' || item.houseHolderRel == '祖父母' ? item.gender == 1 ? 'grandpa' : 'grandma' : item.houseHolderRel == '母亲' ? 'grandma' : item.gender == 1 ? 'father' : 'mother' }"><div class="c-node-name${index == 0 ? '1' : '2'}" style="color:#000">${item.type == 1?`${item.name}`:item.name.length === 2 ?
item.name.substring(0, 1) + '*' :
item.name.substring(0, 1) + '*' + item.name.substring(2)} ${item.age?`${item.age})岁`:''}</div></div>`
}))
let lineList = data.map((item, index) => ({
'from': 'N1',
'to': `N${index + 1}`,
'text':item.type ==1?'未知':data[index].houseHolderRel || '自住',
'isHideArrow': true,
'color': item.houseHolderRel === '父亲' ? '#3876f2' : (item.houseHolderRel === '母亲' || item.houseHolderRel === '祖父母' ? '#ff9696' : (item.houseHolderRel === '女儿' ? '#ffd5d5' : '#3876f2')),
'fontColor': item.houseHolderRel === '父亲' ? '#3876f2' : (item.houseHolderRel === '母亲' || item.houseHolderRel === '祖父母' ? '#ff9696' : (item.houseHolderRel === '女儿' ? '#ffd5d5' : '#3876f2'))
}));
lineList = lineList.slice(1)
const __graph_json_data = { rootId: 'root', nodes: familyList, lines: lineList }
this.$refs.seeksRelationGraph.setJsonData(__graph_json_data, (graphInstance) => {
//
});
} else {
this.$message.error(msg)
}
},
onNodeClick(nodeObject, $event) {
console.log('onNodeClick:', nodeObject);
},
onLineClick(lineObject, $event) {
console.log('onLineClick:', lineObject);
}
}
};
</script>
<style lang="scss" >
.c-my-node2 {
border: none;
background-position: center center;
background-size: 100%;
height: 74px;
width: 74px;
border-radius: 40px;
}
.c-node-name2 {
margin-left: -5px;
text-align: center;
margin-top: 63px;
line-height: 20px;
position: absolute;
width: 96px;
height: 20px;
background: #FFFFFF;
box-shadow: 0px 4px 6px 0px rgba(211, 213, 214, 0.4);
border-radius: 10px;
}
.c-my-node1 {
border: none;
background-size: 100%;
height: 100px;
width: 100px;
border-radius: 50px;
background-repeat: no-repeat;
background-position: center;
}
.c-my-node-son {
background-image: url(~@/assets/images/index/son.png) !important;
}
.c-my-node-girl {
background-image: url(~@/assets/images/index/girl.png) !important;
}
.c-my-node-father {
background-image: url(~@/assets/images/index/father.png) !important;
}
.c-my-node-mother {
background-image: url(~@/assets/images/index/mother.png) !important;
}
.c-my-node-grandpa {
background-image: url(~@/assets/images/index/grandpa.png) !important;
}
.c-my-node-grandma {
background-image: url(~@/assets/images/index/grandma.png) !important;
}
.c-my-node-home {
background-image: url(~@/assets/images/index/home.png) !important;
}
.c-node-name1 {
margin-left: -5px;
text-align: center;
margin-top: 63px;
line-height: 20px;
position: absolute;
width: 96px;
height: 20px;
background: #FFFFFF;
box-shadow: 0px 4px 6px 0px rgba(211, 213, 214, 0.4);
border-radius: 10px;
}
.rel-node-checked {
box-shadow: none !important;
}
</style>

56
src/views/modules/portrayal/house/cpts/table/changeRecord.vue

@ -0,0 +1,56 @@
<template>
<div class="table" style="padding:0 16px;">
<el-table class="m-table-item" :data="tableData" border style="width: 100%; margin-top:23px">
<el-table-column label="序号" type="index" fixed="left" align="left" width="50">
</el-table-column>
<el-table-column v-for="item in tableHeader" :key="item.columnName" :prop="item.columnName" :label="item.label"
align="left" :show-overflow-tooltip="true" :width="item.width || ''">
<template slot-scope="scope">
<span>{{ handleFilterSpan(scope.row, item) }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
components: {},
data() {
return {
tableHeader: [
{ columnName: "resiName", label: "变更人", width: 150 },
{ columnName: "typeName", label: "变更类型", width: 80 },
{ columnName: "beforeChange", label: "变更前", },
{ columnName: "afterChange", label: "变更后", },
{ columnName: "operatorName", label: "操作人", width: 80 },
{ columnName: "changeTime", label: "调整时间", width: 200 }
],
};
},
activated() {
},
watch: {
},
computed: {
},
mounted() { },
props: {
tableData: {
type: Array,
default: []
}
},
methods: {
handleFilterSpan(row, item) {
let _val = "";
return _val || row[item.columnName];
},
},
};
</script>
<style scoped lang="scss"></style>

104
src/views/modules/portrayal/house/cpts/table/complain.vue

@ -0,0 +1,104 @@
<template>
<div class="table">
<el-table :data="tableData" >
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="事件类型" prop="categorycode" width="" />
<el-table-column label="事件描述" prop="eventcontent" width="" />
<el-table-column label="办理状态" prop="status" width="" />
<el-table-column label="接收时间" prop="happentime" width="180" />
<el-table-column label="标记" prop="marktype" width="" />
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<sjdetails :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>
<script>
import sjdetails from "../details/sjdetail";
export default {
name: "community",
components: {
sjdetails
},
data() {
return {
queryParams: {
residList: [],
},
list: [],
total: 0,
rowId: null,
showDialog: false,
pageNo: 1,
pageSize: 20
};
},
activated() {
},
watch: {
},
mounted() { },
props: {
tableData: {
type: Array,
default: []
}
},
methods: {
getList() {
let parm = {
residList: [this.resiId],
pageNo: this.pageNo,
pageSize: this.pageSize
}
this.list = [];
this.total = 0;
// this.$emit("changeTotal", { name: 2, total: 0 });
// (-2-1访0访/访1访)
const completeFlags = {
"-2": "未知",
"-1": "不接受回访",
0: "接受回访/待回访",
1: "已回访",
};
//
this.$http.post("/actual/base/peopleRoomOverview/communitySatisfactionPageList", parm).then(({ data: res }) => {
this.list = []
// this.list = res.data.list.map((item) => {
// return {
// ...item,
// status: item.status ? statusArr[item.status] : null,
// marktype: marktypes[item.marktype],
// };
// });
this.total = this.list.length;
this.$emit("changeTotal", { name: 2, total: this.total });
});
},
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
handleSizeChange(val) {
this.pageSize = val;
this.pageNo = 1;
this.getList();
},
handleCurrentChange(val) {
this.pageNo = val;
this.getList();
},
},
};
</script>
<style scoped lang="scss"></style>

63
src/views/modules/portrayal/house/cpts/table/fuwu.vue

@ -0,0 +1,63 @@
<template>
<div class="table">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="需求类型" prop="serviceCategoryKey" width="" />
<el-table-column label="事件描述" prop="serviceName" width="" />
<el-table-column label="服务情况" prop="state" width="" />
<el-table-column label="创建时间" prop="serviceTimeStart" width="180" />
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<fwdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>
<script>
import fwdetail from "../details/fwdetail";
export default {
name: "community",
components: {
fwdetail
},
data() {
return {
queryParams: {
residList: [],
},
list: [],
total: 0,
rowId: null,
showDialog: false,
};
},
activated() {
},
watch: {
},
mounted() { },
props: {
tableData: {
type: Array,
default: []
}
},
methods: {
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
},
};
</script>
<style scoped lang="scss"></style>

60
src/views/modules/portrayal/house/cpts/table/sheng.vue

@ -0,0 +1,60 @@
<template>
<div class="table">
<el-table>
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="不满意事项类型" prop="scope" width="190" />
<el-table-column label="不满意事项描述" prop="problemDesc" width="" />
<el-table-column label="办理状态" prop="completeFlag" width="120" />
<el-table-column label="是否回访" prop="isReturn" width="120" />
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<shengdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>
<script>
import shengdetail from "../details/shengdetail";
export default {
name: "community",
components: {
shengdetail
},
data() {
return {
list: [],
total: 0,
rowId: null,
showDialog: false,
};
},
activated() {
},
watch: {
},
mounted() { },
props: {
tableData: {
type: Array,
default: []
}
},
methods: {
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
},
};
</script>
<style scoped lang="scss"></style>

59
src/views/modules/portrayal/house/cpts/table/shequ.vue

@ -0,0 +1,59 @@
<template>
<div class="table">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="不满意事项类型" prop="scope" width="190" />
<el-table-column label="不满意事项描述" prop="problemDesc" width="" />
<el-table-column label="办理状态" prop="completeFlag" width="120" />
<el-table-column label="是否回访" prop="isReturn" width="120" />
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<sqdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>
<script>
import sqdetail from "../details/sqdetail";
export default {
name: "community",
components: {
sqdetail
},
data() {
return {
list: [],
total: 0,
rowId: null,
showDialog: false,
};
},
activated() {
},
watch: {
},
mounted() { },
props: {
tableData: {
type: Array,
default: []
}
},
methods: {
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
},
};
</script>
<style scoped lang="scss"></style>

105
src/views/modules/portrayal/house/cpts/table/shijian.vue

@ -0,0 +1,105 @@
<template>
<div class="table">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="事件类型" prop="categorycode" width="" />
<el-table-column label="事件描述" prop="eventcontent" width="" />
<el-table-column label="办理状态" prop="status" width="" />
<el-table-column label="接收时间" prop="happentime" width="180" />
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<sjdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>
<script>
import sjdetail from "../details/sjdetail";
export default {
components: {
sjdetail
},
data() {
return {
queryParams: {
residList: [],
},
list: [],
total: 0,
rowId: null,
showDialog: false,
};
},
activated() {
},
mounted() { },
props: {
resiId: {
type: String,
default: ''
},
tableData: {
type: Array,
default: []
}
},
methods: {
getList() {
let residList = [this.resiId]
this.list = [];
this.total = 0;
// this.$emit("changeTotal", { name: 2, total: 0 });
// (-2-1访0访/访1访)
const completeFlags = {
"-2": "未知",
"-1": "不接受回访",
0: "接受回访/待回访",
1: "已回访",
};
//
this.$http.post("/actual/base/peopleRoomOverview/communitySatisfactionPageList", { residList }).then(({ data: res }) => {
this.list = [{
scope: "服务态度",
problemDesc: "服务人员态度不好",
completeFlag: "未办理",
isReturn: "否"
},
{
scope: "处理速度",
problemDesc: "等待时间过长",
completeFlag: "已办理",
isReturn: "是"
},
{
scope: "设备问题",
problemDesc: "使用的机器经常故障",
completeFlag: "办理中",
isReturn: "否"
},
{
scope: "其他",
problemDesc: "场地不够干净",
completeFlag: "已办理",
isReturn: "是"
}]
this.total = res.data.length;
// this.$emit("changeTotal", { name: 2, total: this.total });
});
},
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
},
};
</script>
<style scoped lang="scss"></style>

103
src/views/modules/portrayal/house/cpts/table/xuqiu.vue

@ -0,0 +1,103 @@
<template>
<div class="table">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="需求类型" prop="categoryName" width="" />
<el-table-column label="需求描述" prop="content" width="" />
<el-table-column label="办理情况" prop="status" width="" />
<el-table-column label="上报时间" prop="reportTime" width="180" />
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView(data.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
<xqdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>
<script>
import xqdetail from "../details/xqdetail";
export default {
name: "community",
components: {
xqdetail
},
data() {
return {
queryParams: {
residList: [],
},
list: [],
total: 0,
rowId: null,
showDialog: false,
};
},
activated() {
},
mounted() { },
props: {
tableData: {
type: Array,
default: []
}
},
methods: {
getList() {
let residList = [this.resiId]
this.list = [];
this.total = 0;
// this.$emit("changeTotal", { name: 2, total: 0 });
// (-2-1访0访/访1访)
const completeFlags = {
"-2": "未知",
"-1": "不接受回访",
0: "接受回访/待回访",
1: "已回访",
};
//
this.$http.post("/actual/base/peopleRoomOverview/communitySatisfactionPageList", { residList }).then(({ data: res }) => {
this.list = [{
scope: "服务态度",
problemDesc: "服务人员态度不好",
completeFlag: "未办理",
isReturn: "否"
},
{
scope: "处理速度",
problemDesc: "等待时间过长",
completeFlag: "已办理",
isReturn: "是"
},
{
scope: "设备问题",
problemDesc: "使用的机器经常故障",
completeFlag: "办理中",
isReturn: "否"
},
{
scope: "其他",
problemDesc: "场地不够干净",
completeFlag: "已办理",
isReturn: "是"
}]
this.total = res.data.length;
// this.$emit("changeTotal", { name: 2, total: this.total });
});
},
handleView(item) {
this.rowId = item.id;
this.showDialog = true;
},
close() {
this.showDialog = false;
},
},
};
</script>
<style scoped lang="scss"></style>

346
src/views/modules/portrayal/house/index.vue

@ -0,0 +1,346 @@
<template>
<div class="g-main" v-loading="loading">
<div class="right">
<!-- <div class="editBtn">
<el-button
class="diy-button--add"
type="primary"
size="small"
@click.native="handelClickHouseEdit"
>编辑</el-button
>
</div> -->
<div class="title-small" id="base">房屋信息</div>
<el-row type="flex" justify="" class="f-m-top23">
<el-col :span="6" class="f-flex">
<div class="f-label">房屋编码</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.houseCode || "--" }}
</div>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label">房屋类型</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.houseTypeName || "--" }}
</div>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label">房屋用途</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.purposeName || "--" }}
</div>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label">房屋状态</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.rentName || "--" }}
</div>
</el-col>
</el-row>
<el-row type="flex" justify="" class="f-m-top23">
<el-col :span="6" class="f-flex">
<div class="f-label">家庭标签</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.familyTags || "--" }}
</div>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label">房主姓名</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.ownerName || "--" }}
</div>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label"><b>证件号</b></div>
<div class="f-left8 f-font-color">
{{
houseDetailObj.ownerIdCard
? houseDetailObj.ownerIdCard
: "--"
}}
</div>
<img
v-show="showFlagIdCardBtn"
src="@/assets/img/yanjing1.png"
alt=""
width="14px"
style="margin-left: 10px"
/>
<img
v-show="!showFlagIdCardBtn"
src="@/assets/img/yanjing2.png"
alt=""
width="14px"
style="margin-left: 10px"
/>
<el-button
type="text"
class="div-table-button--blue"
size="small"
@click="handelCLickShowCheckPassword('idCard')"
>{{ showFlagIdCardBtn ? "显示" : "隐藏" }}</el-button
>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label"><b>联系电话</b></div>
<div class="f-left8 f-font-color">
{{
houseDetailObj.ownerPhone
? houseDetailObj.ownerPhone
: "--"
}}
</div>
<img
v-show="showFlagMobileBtn"
src="@/assets/img/yanjing1.png"
alt=""
width="14px"
style="margin-left: 10px"
/>
<img
v-show="!showFlagMobileBtn"
src="@/assets/img/yanjing2.png"
alt=""
width="14px"
style="margin-left: 10px"
/>
<el-button
type="text"
class="div-table-button--blue"
size="small"
@click="handelCLickShowCheckPassword('mobile')"
>{{ showFlagMobileBtn ? "显示" : "隐藏" }}</el-button
>
</el-col>
</el-row>
<el-row type="flex" justify="" class="f-m-top23">
<el-col :span="6" class="f-flex">
<div class="f-label">备注</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.remark || "--" }}
</div>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label">创建时间</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.createdTime || "--" }}
</div>
</el-col>
<el-col :span="6" class="f-flex">
<div class="f-label">更新时间</div>
<div class="f-left8 f-font-color" v-if="houseDetailObj">
{{houseDetailObj.updatedTime || "--" }}
</div>
</el-col>
</el-row>
<div class="title-small">关系图谱
<el-button type="primary" style="margin-left: 20px;" size="small"
@click="addResident()">新增居民</el-button>
</div>
<graph
:houseInfo="houseDetailObj"
v-if="houseDetailObj"
/>
<div class="title-small" id="businessRecord">业务记录</div>
<business-record :houseId="houseId"></business-record>
<div class="title-small" id="updateRecord">更新记录</div>
<change-record :tableData="houseChangeRecordList"></change-record>
</div>
<el-dialog title="密码验证" :visible.sync="showCheckPassword">
<el-form :model="form" :rules="rules" ref="form">
<el-form-item label="密码" prop="password">
<el-input
v-model="form.password"
autocomplete="off"
type="password"
placeholder="请输入当前账号密码"
></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="showCheckPassword = false"> </el-button>
<el-button type="primary" @click="handelClickCheckPassword"
> </el-button
>
</div>
</el-dialog>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import graph from "./cpts/graph.vue";
import businessRecord from "./cpts/businessRecord.vue";
import changeRecord from "./cpts/table/changeRecord.vue";
export default {
data() {
return {
loading: true,
checkType: "edit", //editview
houseChangeRecordList: [], //
houseDetailObj: {}, //
showFlagIdCardBtn: true,
showFlagMobileBtn: true,
showCheckPassword: false,
houseId:"",
form: {
password: "", //
},
rules: {
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
},
};
},
components: { graph, businessRecord, changeRecord },
created() {
},
mounted() {},
activated() {},
methods: {
//
async getChangeRecordDetailById() {
try {
const { data } = await this.$http.get(
`/actual/base/peopleRoomOverview/houseResidentChangeRecord?houseId=${this.houseId}`
);
if (data.data == null) {
this.houseChangeRecordList = [];
} else {
this.houseChangeRecordList = data.data;
}
} catch (error) {
console.log(error);
}
},
getHouseDetail() {
this.$http
.post(`/actual/base/communityHouse/getMaskedHouseDeatilById/${this.houseId}`)
.then(async (res) => {
if (res.data.code === 0) {
this.houseDetailObj = res.data.data || {};
} else if (res.data.code >= 8000) {
this.houseDetailObj = {};
this.$message.error(res.data.msg);
}
})
.catch((err) => {
console.log(err);
});
this.loading = false;
},
handelClickHouseEdit() {
this.checkType = "edit";
this.showCheckPassword = true;
},
handelCLickShowCheckPassword(type) {
this.form.password = "";
this.checkType = "view";
if (type === "idCard") {
if (this.showFlagIdCardBtn) {
this.showCheckPassword = true;
} else {
this.showFlagIdCardBtn = true;
this.$set(
this.houseDetailObj,
"ownerIdCard",
this.houseDetailObj.ownerIdCard.substr(0, 11) +
"****" +
this.houseDetailObj.ownerIdCard.substr(16, 2)
);
}
} else if (type === "mobile") {
if (this.showFlagMobileBtn) {
this.showCheckPassword = true;
} else {
this.showFlagMobileBtn = true;
this.$set(
this.houseDetailObj,
"ownerPhone",
this.houseDetailObj.ownerPhone.substr(0, 3) +
"****" +
this.houseDetailObj.ownerPhone.substr(7, 4)
);
}
}
this.tuominType = type;
},
handelClickCheckPassword() {
this.$refs.form.validate((vali) => {
if (vali) {
this.handleSaveTuomin(this.form.password);
} else {
return false;
}
});
},
addResident(){
// this.$router.push({ name: 'add-resi' });
this.$router.push({
name: "add-resi",
params: { agencyId: "1673584241869238273",gridId: "1673585475279826946",villageId:"1673600667388780545",buildId:"1673600667527192577",unitId:"1673600667577524226",homeId:"1673600737530126338"},
});
},
async handleSaveTuomin(password) {
const url = `/actual/base/communityHouse/getClearHouseDeatilById/${this.houseId}`;
let parm = {
password,
};
const { data, code, msg } = await requestPost(url, parm);
if (code === 0) {
if (this.tuominType === "mobile") {
this.$set(this.houseDetailObj, "ownerPhone", data.ownerPhone);
this.showFlagMobileBtn = !this.showFlagMobileBtn;
}
if (this.tuominType === "idCard") {
this.$set(this.houseDetailObj, "ownerIdCard", data.ownerIdCard);
this.showFlagIdCardBtn = !this.showFlagIdCardBtn;
}
this.showCheckPassword = false;
} else {
this.$message.error(msg);
}
},
},
computed: {},
watch: {
"$store.state.huaXiang.houseInfo.houseId": {
handler(newValue, oldValue) {
this.houseId = newValue;
this.houseDetailObj = {};
this.houseGraphObj = {};
this.getHouseDetail();
this.getChangeRecordDetailById();
this.loading = false;
},
deep: true, //
immediate: true, // handler
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/pages/resiInfo.scss";
@import "@/assets/scss/modules/management/list-main.scss";
</style>

109
src/views/modules/portrayal/jumin/cpts/rightTop.vue → src/views/modules/portrayal/jumin/cpts/businessRecord.vue

@ -1,100 +1,20 @@
<template>
<div class="">
<div style="padding:0 16px;margin-top: 7px;">
<el-tabs v-model="topTabs" @tab-click="tabClick">
<el-tab-pane :label="complainLabel" name="12345">
<complain :tableData="complainList" :key="resiId[0]" />
<el-row type="flex">
<el-col :span="12" align="left">
<div style="margin-top: 25px">{{ complainTotal }}</div>
</el-col>
<el-col :span="12" align="right">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-size="pageSize"
layout="prev, pager, next, jumper"
:total="complainTotal"
>
</el-pagination
></el-col>
</el-row>
</el-tab-pane>
<el-tab-pane :label="shengLabel" name="sheng">
<sheng :tableData="shengList" :key="resiId[0]" />
<el-row type="flex">
<el-col :span="12" align="left">
<div style="margin-top: 25px">{{ shengTotal }}</div>
</el-col>
<el-col :span="12" align="right">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-size="pageSize"
layout="prev, pager, next,jumper"
:total="shengTotal"
>
</el-pagination
></el-col>
</el-row>
</el-tab-pane>
<el-tab-pane :label="shequLabel" name="shequ">
<shequ :tableData="shequList" :key="resiId[0]" />
<el-row type="flex">
<el-col :span="12" align="left">
<div style="margin-top: 25px">{{ shequTotal }}</div>
</el-col>
<el-col :span="12" align="right">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-size="pageSize"
layout="prev, pager, next, jumper"
:total="shequTotal"
>
</el-pagination
></el-col>
</el-row>
</el-tab-pane>
<el-tab-pane :label="shijianLabel" name="shijian">
<shijian :tableData="shijianList" :key="resiId[0]" />
<el-row type="flex">
<el-col :span="12" align="left">
<div style="margin-top: 25px">{{ shijianTotal }}</div>
</el-col>
<el-col :span="12" align="right">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-size="pageSize"
layout="prev, pager, next, jumper"
:total="shijianTotal"
>
</el-pagination
></el-col>
</el-row>
</el-tab-pane>
<el-tab-pane :label="xuqiuLabel" name="xuqiu">
<xuqiu :tableData="xuqiuList" :key="resiId[0]" />
<el-row type="flex">
<el-col :span="12" align="left">
<div style="margin-top: 25px">{{ xuqiuTotal }}</div>
</el-col>
<el-col :span="12" align="right">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-size="pageSize"
layout="prev, pager, next, jumper"
:total="xuqiuTotal"
>
</el-pagination
></el-col>
</el-row>
</el-tab-pane>
<el-tab-pane :label="fuwuLabel" name="fuwu">
<div style="display: flex; flex-direction: column; height: 100%">
@ -103,22 +23,6 @@
:key="resiId[0]"
style="flex: 1; overflow: auto"
/>
<el-row type="flex">
<el-col :span="12" align="left">
<div style="margin-top: 25px">{{ fuwuTotal }}</div>
</el-col>
<el-col :span="12" align="right">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-size="pageSize"
layout="prev, pager, next, jumper"
:total="fuwuTotal"
>
</el-pagination>
</el-col>
</el-row>
</div>
</el-tab-pane>
</el-tabs>
@ -163,16 +67,12 @@ export default {
fuwuTotal: 0,
pageNo: 1,
pageSize:window.localStorage.getItem('pageSize') || 20,
pageSize: 20,
};
},
//
created() {
if (this.type == "0") {
this.resiId = [this.userInfo.resiId];
} else if (this.type == "1") {
this.resiId = this.familyResiList;
}
},
async mounted() {
await this.getComplainList();
@ -191,10 +91,7 @@ export default {
type: Array,
default: () => [],
},
type: {
type: String,
default: "0",
},
},
//
methods: {

277
src/views/modules/portrayal/jumin/cpts/graph.vue

@ -0,0 +1,277 @@
<template>
<div>
<div style="height:300px; width: 500px;">
<RelationGraph ref="seeksRelationGraph" :options="graphOptions" :on-node-click="onNodeClick"
:on-line-click="onLineClick" />
</div>
</div>
</template>
<script>
import { requestPost } from '@/js/dai/request'
export default {
name: 'RelationGraphDemo3',
components: {},
data() {
return {
graphOptions: {
disableDragNode: true,
defaultNodeBorderWidth: 0,
defaultNodeColor: 'rgba(238, 178, 94, 0)',
allowSwitchLineShape: true,
allowSwitchJunctionPoint: true,
defaultLineShape: 1,
allowShowMiniToolBar: false,
layouts: [
{
label: '中心',
layoutName: 'center',
layoutClassName: 'seeks-layout-center',
distance_coefficient: 1.5
}
],
defaultJunctionPoint: 'border',
// "Graph "
}
};
},
props: {
userInfo: {
type: Object,
default: () => { }
}
},
mounted() {
this.$nextTick(() => {
// this.showSeeksGraph();
this.getFamilyRelationshipList()
})
},
watch: {
userInfo: {
handler(newVal, oldVal) {
this.getFamilyRelationshipList()
},
deep: true
}
},
methods: {
async getFamilyRelationshipList() {
let url = `/actual/base/peopleRoomOverview/getFamilyRelationshipList?type=0&resid=` + this.userInfo.resiId;
let { code, data, msg } = await requestPost(url)
if (code == 0) {
//
let index = data.findIndex(item => item.name == this.userInfo.name);
if (index !== -1) {
//
const [item] = data.splice(index, 1);
data.unshift(item);
}
let familyList = data.map((item, index) => ({
'id': `N${index + 1}`,
'text': item.name,
'innerHTML': `<div class="c-my-node${index == 0 ? '1' : '2'} c-my-node-${item.type == 1?'home':index == 0 ? item.gender == 1 ? 'father' : 'mother' : item.houseHolderRel == '配偶' ? item.gender == '1' ? 'mother' : 'father' : item.houseHolderRel == '女儿' ? 'girl' : item.houseHolderRel == '儿子' ? 'gon' : item.houseHolderRel == '父亲' || item.houseHolderRel == '祖父母' ? item.gender == 1 ? 'grandpa' : 'grandma' : item.houseHolderRel == '母亲' ? 'grandma' : 'father'}"><div class="c-node-name${index == 0 ? '1' : '2'}" style="color:#000">${item.type == 1?`${item.name}`:item.name.length === 2 ?
item.name.substring(0, 1) + '*' :
item.name.substring(0, 1) + '*' + item.name.substring(2)} ${item.age?`${item.age})岁`:''}</div></div>`
}))
let lineList = data.map((item, index) => ({
'from': 'N1',
'to': `N${index + 1}`,
'text':item.type ==1?'房屋':data[index].houseHolderRel || '未知',
'isHideArrow': true,
'color': item.houseHolderRel === '父亲' ? '#3876f2' : (item.houseHolderRel === '母亲' || item.houseHolderRel === '祖父母' ? '#ff9696' : (item.houseHolderRel === '女儿' ? '#ffd5d5' : '#3876f2')),
'fontColor': item.houseHolderRel === '父亲' ? '#3876f2' : (item.houseHolderRel === '母亲' || item.houseHolderRel === '祖父母' ? '#ff9696' : (item.houseHolderRel === '女儿' ? '#ffd5d5' : '#3876f2'))
}));
lineList = lineList.slice(1)
const __graph_json_data = { rootId: 'root', nodes: familyList, lines: lineList }
this.$refs.seeksRelationGraph.setJsonData(__graph_json_data, (graphInstance) => {
//
});
this.familyList = data
} else {
this.$message.error(msg)
}
},
showSeeksGraph() {
const __graph_json_data = {
'rootId': 'N13', 'nodes': [
{ 'id': 'N1', 'text': '', 'borderColor': '#6cc0ff', 'data': { 'isGoodMan': false, 'sexType': '男' }, 'innerHTML': '<div class="c-my-node1 c-my-node-father"><div class="c-node-name1" style="color:#6cc0ff"></div></div>' }, { 'id': 'N2', 'text': '李*康', 'data': { 'isGoodMan': true, 'sexType': '男' }, 'innerHTML': '<div class="c-my-node2 c-my-node-girl" ><div class="c-node-name2" style="color:#ff875e">李*康</div></div>' }, { 'id': 'N3', 'text': '祁*伟', 'borderColor': '#6cc0ff', 'data': { 'isGoodMan': false, 'sexType': '男' }, 'innerHTML': '<div class="c-my-node2 c-my-node-son" ><div class="c-node-name2" style="color:#6cc0ff">祁*伟</div></div>' }, { 'id': 'N4', 'text': '陈*石', 'data': { 'isGoodMan': true, 'sexType': '男' }, 'innerHTML': '<div class="c-my-node2 c-my-node-mother" ><div class="c-node-name2" style="color:#ff875e">陈*石</div></div>' }, { 'id': 'N5', 'text': '陆*可', 'data': { 'isGoodMan': true, 'sexType': '女' }, 'innerHTML': '<div class="c-my-node2 c-my-node-grandpa" ><div class="c-node-name2" style="color:#ff875e">陆*可(25岁)</div></div>' }, { 'id': 'N6', 'text': '高*良', 'data': { 'isGoodMan': false, 'sexType': '男' }, 'innerHTML': '<div class="c-my-node2 c-my-node-grandma" ><div class="c-node-name2" style="color:#6cc0ff">高*良</div></div>' }, { 'id': 'N7', 'text': '沙*金', 'data': { 'isGoodMan': true, 'sexType': '男' }, 'innerHTML': '<div class="c-my-node2 c-my-node-home" ><div class="c-node-name2" style="color:#ff875e">沙*金</div></div>' }, { 'id': 'N9', 'text': '沙*金2', 'data': { 'isGoodMan': true, 'sexType': '男' }, 'innerHTML': '<div class="c-my-node2 c-my-node-home" ><div class="c-node-name2" style="color:#ff875e">沙*金2</div></div>' },], 'lines': [
{
'from': 'N1',
'to': 'N6',
'text': '',
'color': '#3b3b3b',
'fontColor': '#3b3b3b',
'isHideArrow': true,
'data': {
'type': '父亲'
},
},
{
'from': 'N1',
'to': 'N7',
'text': '父亲',
'color': '#3b3b3b',
'fontColor': '#3b3b3b',
'isHideArrow': true,
'data': {
'type': '母亲'
}
},
{
'from': 'N1',
'to': 'N8',
'text': '母亲',
'color': '#3b3b3b',
'fontColor': '#3b3b3b',
'isHideArrow': true,
'data': {
'type': '儿子'
}
},
{
'from': 'N1',
'to': 'N2',
'text': '儿子',
'color': '#3b3b3b',
'fontColor': '#3b3b3b',
'isHideArrow': true,
'data': {
'type': '女儿'
}
},
{
'from': 'N1',
'to': 'N3',
'text': '女儿',
'color': '#3b3b3b',
'fontColor': '#3b3b3b',
'isHideArrow': true,
'data': {
'type': '配偶'
}
},
{
'from': 'N1',
'to': 'N4',
'text': '配偶',
'color': '#d7e5ff',
'fontColor': '#3b3b3b',
'isHideArrow': true,
'data': {
'type': '岳父'
}
},
{
'from': 'N1',
'to': 'N5',
'text': '岳父',
'color': '#3b3b3b',
'fontColor': '#3b3b3b',
'isHideArrow': true,
'data': {
'type': '岳母'
}
},
{
'from': 'N1',
'to': 'N9',
'text': '岳母',
'isHideArrow': true,
'color': '#ffe4e4',
'fontColor': '#3b3b3b',
'data': {
'type': '岳母'
}
},
]
};
this.$refs.seeksRelationGraph.setJsonData(__graph_json_data, (graphInstance) => {
//
});
},
onNodeClick(nodeObject, $event) {
console.log('onNodeClick:', nodeObject);
},
onLineClick(lineObject, $event) {
console.log('onLineClick:', lineObject);
}
}
};
</script>
<style lang="scss" >
.c-my-node2 {
border: none;
background-position: center center;
background-size: 100%;
height: 74px;
width: 74px;
border-radius: 40px;
}
.c-node-name2 {
margin-left: -5px;
text-align: center;
margin-top: 63px;
line-height: 20px;
position: absolute;
width: 96px;
height: 20px;
background: #FFFFFF;
box-shadow: 0px 4px 6px 0px rgba(211, 213, 214, 0.4);
border-radius: 10px;
}
.c-my-node1 {
border: none;
background-size: 100%;
height: 100px;
width: 100px;
border-radius: 50px;
background-repeat: no-repeat;
background-position: center;
}
.c-my-node-son {
background-image: url(~@/assets/images/index/son.png) !important;
}
.c-my-node-girl {
background-image: url(~@/assets/images/index/girl.png) !important;
}
.c-my-node-father {
background-image: url(~@/assets/images/index/father.png) !important;
}
.c-my-node-mother {
background-image: url(~@/assets/images/index/mother.png) !important;
}
.c-my-node-grandpa {
background-image: url(~@/assets/images/index/grandpa.png) !important;
}
.c-my-node-grandma {
background-image: url(~@/assets/images/index/grandma.png) !important;
}
.c-my-node-home {
background-image: url(~@/assets/images/index/home.png) !important;
}
.c-node-name1 {
display: none;
}
.rel-node-checked {
box-shadow: none !important;
}
</style>

104
src/views/modules/portrayal/jumin/cpts/pointsRecord.vue

@ -1,104 +0,0 @@
<template>
<div class="enjoy-service">
<div class="enjoy-service-item" v-for="(item, index) in data">
<div class="num">+{{ item.classificationNum }}</div>
<div class="info">
<div class="title">{{ item.classification }}</div>
<div class="time">{{ item.recordTime }}</div>
</div>
</div>
</div>
</template>
<script>
export default {
//
data() {
return {
data: [],
};
},
//
created() {
this.getData();
},
props: {
resiId: {
type: String,
default: ''
}
},
//
methods: {
getData() {
this.data = [];
this.$http
.get("/actual/base/peopleRoomOverview/recorHistory")
.then(({ data: res }) => {
if (res.code == 0) {
this.data = res.data;
}
});
},
},
//
components: {},
//
computed: {},
//
watch: {},
}
</script>
<style lang="scss" scoped>
.enjoy-service {
padding-left: 26px;
margin-top: 12px;
height: 100%;
overflow-y: scroll;
}
.enjoy-service-item {
color: #333333;
display: flex;
padding: 14px 16px 14px;
margin-bottom: 8px;
background: #fff;
&:hover {
background: #f5f7fa !important;
color: #0056D6 !important;
*,
*::before,
*::after {
//
color: #0056D6 !important;
}
}
.num {
font-size: 24px;
font-weight: 500;
line-height: 22px;
color: #000000;
display: flex;
align-items: center;
}
.info {
font-size: 14px;
margin-left: 40px;
.title {
font-weight: 500;
margin-bottom: 10px;
}
.time {
font-weight: 400;
color: #000000;
opacity: 0.65;
}
}
}
</style>

262
src/views/modules/portrayal/jumin/cpts/staffTag.vue

@ -0,0 +1,262 @@
<template>
<div style="padding-left: 16px;margin-top: 24px;">
<el-form ref="formRef" :model="formData">
<el-table border ref="tableBox" :data="formData.tableData" :row-style="{ height: '50px' }"
:cell-style="{ padding: '0px' }">
<el-table-column prop="province" label="标签" width="120" align="center">
</el-table-column>
<el-table-column prop="city" label="内容" min-width="70" align="left">
<template slot-scope="scope">
<el-form-item v-if="scope.row.type == 'radio'">
<el-radio-group v-model="scope.row.value" v-for="(item, index) in scope.row.option"
:key="index" @change="handeleClickRadio(item.value)">
<el-radio :label="item.value" :disabled="formType == 'detail'"><span
style="margin-right: 50px;">{{ item.label
}}</span></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :prop="'tableData.' + scope.$index + '.value'"
v-if="scope.row.type == 'checkbox'">
<el-checkbox-group v-model="scope.row.value">
<el-checkbox @change="handeleClickchckbox(item, $event, scope.$index)"
:disabled="formType == 'detail'" v-for="(item, index) in scope.row.option"
:key="index" :label="item.value">{{ item.label
}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
</template>
</el-table-column>
</el-table>
</el-form>
</div>
</template>
<script>
export default {
data() {
return {
formData: {
name: '',
age: '',
tableData: [
{
index: 0,
province: '政治面貌',
value: 0,
type: 'radio',
option: [
{ label: '群众', value: 0 },
{ label: '党员', value: 1 },
{ label: '共青团员', value: 2 },
]
},
{
index: 1,
province: '健康状态',
value: [],
type: 'checkbox',
option: [
{
label: '残疾',
value: 'disabilityFlag'
},
{
label: '大病',
value: 'seriousIllnessFlag'
},
{
label: '慢病',
value: 'chronicDiseaseFlag'
},
{
label: '死亡',
value: 'deathFlag'
}
]
},
{
index: 2,
province: '关注人群',
value: [],
type: 'checkbox',
option: [
{
label: '老年人',
value: 'oldPeopleFlag'
},
{
label: '低保',
value: 'subsistenceAllowanceFlag'
},
{
label: '退役军人',
value: 'veteranFlag'
},
{
label: '保障房人员',
value: 'ensureHouseFlag'
},
{
label: '育龄妇女',
value: 'fertileWomanFlag'
},
{
label: '特扶人员',
value: 'specialSupportFlag'
}
]
},
{
index: 3,
province: '特殊人群',
value: [],
type: 'checkbox',
option: []
},
{
index: 4,
province: '身份',
value: [],
type: 'checkbox',
option: [
{
label: '志愿者',
value: 'volunteerFlag'
},
{
label: '楼长',
value: 'buildingChiefFlag'
},
{
label: '单元长',
value: 'unitChiefFlag'
},
{
label: '公益岗',
value: 'publicWelfareFlag'
}
]
},
]
},
};
},
props: {
userInfo: {
type: Object,
default: () => { }
},
formType: {
type: String,
default: ''
}
},
created() {
this.getDictData();
},
methods: {
async getDictData() {
try {
const { data } = await this.$http.post('sys/dict/data/dictlist', { dictType: 'special_resident_category' });
this.formData.tableData[3].option = data.data
} catch (error) {
console.log(error);
}
},
updatedForm() {
if (this.formType == 'add' || !this.userInfo.baseInfoDto.categoryInfo) return;
const updateValue = (flag, dataIndex) => {
const { tableData } = this.formData;
const valueArray = tableData[dataIndex].value;
if (this.userInfo.baseInfoDto.categoryInfo[flag] === 1) {
valueArray.push(flag);
} else {
this.formData.tableData[dataIndex].value = valueArray.filter(item => item !== flag);
}
};
if (this.userInfo.baseInfoDto.categoryInfo.specialCrowdFlag == 1) {
this.formData.tableData[3].value.push(...this.userInfo.specialDto.specialCategoryCodes);
}
this.formData.tableData[0].value = this.userInfo.baseInfoDto.categoryInfo.partyFlag;
//keyindex(formData.tableData)
updateValue('disabilityFlag', 1);
updateValue('deathFlag', 1);
updateValue('seriousIllnessFlag', 1);
updateValue('chronicDiseaseFlag', 1);
updateValue('emptyNesterFlag', 2);
updateValue('liveAloneFlag', 2);
updateValue('oldPeopleFlag', 2);
updateValue('subsistenceAllowanceFlag', 2);
updateValue('veteranFlag', 2);
updateValue('ensureHouseFlag', 2);
updateValue('specialSupportFlag', 2);
updateValue('fertileWomanFlag', 2);
updateValue('bereavedPersonFlag', 2);
updateValue('volunteerFlag', 4);
updateValue('buildingChiefFlag', 4);
updateValue('unitChiefFlag', 4);
updateValue('publicWelfareFlag', 4);
},
handeleClickRadio(val) {
if (val === 1) {
this.$emit('showDialog', { value: val }, val === 1)
this.formData.tableData[0].value= 1
}else if(this.formType != 'add'){
this.$confirm(`确认取消党员标签`, '确认信息', {
confirmButtonText: '确认取消',
cancelButtonText: '暂不取消',
type: 'warning'
}).then(() => {
this.$emit('showDialog', { value: val }, val === 1)
}).catch(() => {
this.formData.tableData[0].value= 1
});
}
},
handeleClickchckbox(item, event, index) {
item.index = index
if (event) {
this.$emit('showDialog', item, event)
} else {
this.$confirm(`确认取消${item.label}标签`, '确认信息', {
confirmButtonText: '确认取消',
cancelButtonText: '暂不取消',
type: 'warning'
}).then(() => {
this.$emit('showDialog', item, event)
}).catch(() => {
this.formData.tableData[index].value.push(item.value)
});
}
}
},
components: {},
computed: {},
watch: {
userInfo: {
handler(newVal, oldVal) {
this.formData.tableData.forEach((item, index) => {
if (index != 0) {
item.value = []
} else {
item.value = ''
}
})
this.updatedForm()
},
deep: true,
immediate: true
}
},
}
</script>
<style lang='scss' scoped>
::v-deep .el-form-item {
margin-bottom: 0px;
}
</style>

57
src/views/modules/portrayal/jumin/cpts/table/changeRecord.vue

@ -0,0 +1,57 @@
<template>
<div class="table" style="padding:0 16px;">
<el-table class="m-table-item" :data="tableData" border style="width: 100%; margin-top:23px">
<el-table-column label="序号" type="index" fixed="left" align="left" width="50">
</el-table-column>
<el-table-column v-for="item in tableHeader" :key="item.columnName" :prop="item.columnName" :label="item.label"
align="left" :show-overflow-tooltip="true" :width="item.width || ''">
<template slot-scope="scope">
<span>{{ handleFilterSpan(scope.row, item) }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
export default {
components: {},
data() {
return {
tableHeader: [
{ columnName: "typeName", label: "变更类型", width: 80 },
{ columnName: "fieldName", label: "变更信息", width: 150 },
{ columnName: "beforeChangeName", label: "变更前", width: 200 },
{ columnName: "afterChangeName", label: "变更后", width: 200 },
{ columnName: "operatorName", label: "操作人", width: 80 },
{ columnName: "changeTime", label: "调整时间", width: 150 },
{ columnName: "remark", label: "备注", width: '' },
],
};
},
activated() {
},
watch: {
},
computed: {
},
mounted() { },
props: {
tableData: {
type: Array,
default: []
}
},
methods: {
handleFilterSpan(row, item) {
let _val = "";
return _val || row[item.columnName];
},
},
};
</script>
<style scoped lang="scss"></style>

7
src/views/modules/portrayal/jumin/cpts/table/complain.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table v-if="tableData.length > 0" :data="tableData" max-height="214px" height="214px">
<el-table :data="tableData" >
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="事件类型" prop="categorycode" width="" />
<el-table-column label="事件描述" prop="eventcontent" width="" />
@ -13,11 +13,6 @@
</template>
</el-table-column>
</el-table>
<div v-else style="width: 100%; height: 363px; text-align: center; padding-top: 120px">
<img width="268px" height="128px" src="~@/assets/images/overview/zanwu.png" />
<div style="color: #fff">暂无数据</div>
</div>
<sjdetails :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>

6
src/views/modules/portrayal/jumin/cpts/table/fuwu.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table v-if="tableData.length > 0" :data="tableData" max-height="214px" height="214px">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="需求类型" prop="serviceCategoryKey" width="" />
<el-table-column label="事件描述" prop="serviceName" width="" />
@ -12,10 +12,6 @@
</template>
</el-table-column>
</el-table>
<div v-else style="width: 100%; height: 100%; text-align: center; padding-top: 120px">
<img width="268px" height="128px" src="~@/assets/images/overview/zanwu.png" />
<div style="color: #fff">暂无数据</div>
</div>
<fwdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>

6
src/views/modules/portrayal/jumin/cpts/table/sheng.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table v-if="tableData.length > 0" :data="tableData" max-height="214px" height="214px">
<el-table>
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="不满意事项类型" prop="scope" width="190" />
<el-table-column label="不满意事项描述" prop="problemDesc" width="" />
@ -12,10 +12,6 @@
</template>
</el-table-column>
</el-table>
<div v-else style="width: 100%; height: 100%; text-align: center; padding-top: 120px">
<img width="268px" height="128px" src="~@/assets/images/overview/zanwu.png" />
<div style="color: #fff">暂无数据</div>
</div>
<shengdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>

6
src/views/modules/portrayal/jumin/cpts/table/shequ.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table v-if="tableData.length > 0" :data="tableData" max-height="214px" height="214px">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="不满意事项类型" prop="scope" width="190" />
<el-table-column label="不满意事项描述" prop="problemDesc" width="" />
@ -12,10 +12,6 @@
</template>
</el-table-column>
</el-table>
<div v-else style="width: 100%; height: 100%; text-align: center; padding-top: 120px">
<img width="268px" height="128px" src="~@/assets/images/overview/zanwu.png" />
<div style="color: #fff">暂无数据</div>
</div>
<sqdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>

6
src/views/modules/portrayal/jumin/cpts/table/shijian.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table v-if="tableData.length > 0" :data="tableData" max-height="214px" height="214px">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="事件类型" prop="categorycode" width="" />
<el-table-column label="事件描述" prop="eventcontent" width="" />
@ -12,10 +12,6 @@
</template>
</el-table-column>
</el-table>
<div v-else style="width: 100%; height: 100%; text-align: center; padding-top: 120px">
<img width="268px" height="128px" src="~@/assets/images/overview/zanwu.png" />
<div style="color: #fff">暂无数据</div>
</div>
<sjdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>

6
src/views/modules/portrayal/jumin/cpts/table/xuqiu.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table v-if="tableData.length > 0" :data="tableData" max-height="214px" height="214px">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="需求类型" prop="categoryName" width="" />
<el-table-column label="需求描述" prop="content" width="" />
@ -12,10 +12,6 @@
</template>
</el-table-column>
</el-table>
<div v-else style="width: 100%; height: 100%; text-align: center; padding-top: 120px">
<img width="268px" height="128px" src="~@/assets/images/overview/zanwu.png" />
<div style="color: #fff">暂无数据</div>
</div>
<xqdetail :showDialog="showDialog" :id="rowId" @close="close" />
</div>
</template>

137
src/views/modules/portrayal/jumin/cpts/xiangshoufuwu.vue

@ -1,137 +0,0 @@
<template>
<div class="cnt-right">
<div class="list">
<div class="item f-hflex" :key="index" v-for="(item, index) in list">
<el-row type="flex" class="row">
<el-col :span="12" align="left">{{item.classification}}</el-col>
<el-col :span="12" align="right">{{item.classificationNum || 0}}</el-col>
</el-row>
<div class="item-progress">
<b :style="{
width: (item.per == 'NaN'?0:item.per) + '%',
}"></b>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
//
data() {
return {
list: [],
};
},
//
created() {
this.getData();
},
props: {
resiId: {
type: String,
default: ''
}
},
//
methods: {
getData() {
this.$http
.get("/actual/base/peopleRoomOverview/serviceNumber?resid=" + this.resiId)
.then(({ data: res }) => {
// res.data = [
// {
// "classification": "",
// "classificationNum": '12'
// },
// {
// "classification": "",
// "classificationNum": '15'
// },
// {
// "classification": "",
// "classificationNum": '20'
// },
// {
// "classification": "",
// "classificationNum": '40'
// }
// ]
let total = res.data.reduce((sum, item) => sum + Number(item.classificationNum), 0);
res.data = res.data.map(item => ({
...item,
per: (Number(item.classificationNum) / total * 100).toFixed(2) //
}));
this.list = res.data
});
},
},
//
components: {},
//
computed: {},
//
watch: {},
}
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/list-main.scss";
.cnt-right {
.list {
.item {
margin-top: 20px;
display: flex;
align-items: center;
font-size: 14px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(44, 53, 66, 0.85);
line-height: 24px;
cursor: pointer;
.row{
width: 100%;
margin: 0 0 10px;
padding: 0 10px 0 0;
}
.item-name {
margin-left: 5px;
width: 80px;
flex-shrink: 0;
}
.item-div {
width: 1px;
height: 12px;
background: #d8d8d8;
border-radius: 1px;
}
.item-count {
width: 90px;
flex-shrink: 0;
}
.item-per {
min-width: 70px;
}
.item-progress {
margin-right: 15px;
width: 100%;
height: 24px;
background: #e6f0ff;
border-radius: 1px;
overflow: hidden;
b {
display: block;
height: 24px;
background: #7ba6e6;
}
}
}
}
}
</style>

1577
src/views/modules/portrayal/jumin/index.vue

File diff suppressed because it is too large

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

@ -726,9 +726,6 @@ export default {
this.formData.secondIdList = this.eventTypeCheck
}
console.log("formData.agencyId1:");
console.log(this.formData.agencyId);
const { pageSize, pageNo, formData } = this;
// formData
const newFormData = { ...formData };
@ -758,8 +755,6 @@ export default {
} else {
this.$message.error(msg);
}
console.log("formData.agencyId2:");
console.log(this.formData.agencyId);
},
async getCateOptions() {
const url = "/governance/icEvent/getCategoryTree";

4
vue.config.js

@ -35,8 +35,8 @@ module.exports = {
target: "http://bipaas.elinkservice.cn", // 我们要代理的真实接口地址
},
"/api": {
// target: "http://219.146.91.110:30801", // 测试地址
target: "http://localhost:8080", // 本地地址
target: "http://219.146.91.110:30801", // 测试地址
// target: "http://192.168.1.60:8080", // 本地地址
// target: "https://epmet-preview.elinkservice.cn", // 演示地址
changeOrigin: true,
pathRewrite: {

Loading…
Cancel
Save