Browse Source

对接需求未完成情况接口

feature
战立标 2 years ago
parent
commit
8416b58379
  1. 48
      src/App.vue
  2. 2
      src/assets/scss/dataBoard/table2.scss
  3. 258
      src/views/dataBoard/overview/components/Bmysxxq.vue
  4. 9
      src/views/dataBoard/overview/components/EventDetail.vue
  5. 6
      src/views/dataBoard/overview/components/EventDispatchOrder.vue
  6. 133
      src/views/dataBoard/overview/components/MapDialog/DemandList.vue
  7. 185
      src/views/dataBoard/overview/components/MapDialog/ResourceDispatch.vue
  8. 76
      src/views/dataBoard/overview/components/MapDialog/index.vue
  9. 15
      src/views/dataBoard/overview/components/RequirementList.vue
  10. 119
      src/views/dataBoard/overview/components/ResourceScheduling.vue
  11. 141
      src/views/dataBoard/overview/components/ServiceDetails.vue
  12. 4
      src/views/dataBoard/overview/index.vue

48
src/App.vue

@ -1,14 +1,15 @@
<template>
<transition name="el-fade-in-linear">
<router-view />
<router-view/>
</transition>
</template>
<script>
import { mapActions } from "vuex";
import {mapActions} from "vuex";
import Cookies from "js-cookie";
import { messages } from "@/i18n";
import {messages} from "@/i18n";
import Vue from "vue";
export default {
watch: {
"$i18n.locale": "i18nHandle",
@ -30,7 +31,7 @@ export default {
// In order to make the cached page re-rendered
this.$store.dispatch("delAllCachedViews", this.$route);
const { fullPath } = this.$route;
const {fullPath} = this.$route;
this.$nextTick(() => {
this.$router.replace({
@ -71,13 +72,13 @@ export default {
that.setSize("small");
//
that.setResolution("small");
Vue.prototype.$ELEMENT = { size: "medium", zIndex: 3000 };
Vue.prototype.$ELEMENT = {size: "medium", zIndex: 3000};
} else {
//
that.setSize("medium");
//
that.setResolution("medium");
Vue.prototype.$ELEMENT = { size: "medium", zIndex: 3000 };
Vue.prototype.$ELEMENT = {size: "medium", zIndex: 3000};
}
window.onresize = () => {
@ -110,18 +111,19 @@ export default {
.el-table {
td {
padding: 6px 0 !important;
font-size: 14px !important;
padding: 6px 0 !important;
}
}
//
.el-dialog__title {
font-size: 16px !important;
font-family: PingFangSC-Medium, PingFang SC !important;
font-size: 16px !important;
font-weight: 500 !important;
color: rgba(0, 0, 0, 0.85) !important;
}
.el-dialog__header {
padding-bottom: 16px !important;
border-bottom: 1px solid #dcdee0 !important;
@ -131,43 +133,52 @@ export default {
.tox-tinymce-aux {
z-index: 130000000;
}
.tox .tox-dialog-wrap {
z-index: 110000000;
}
.tox .tox-dialog-wrap__backdrop {
z-index: 100000;
}
.tox .tox-dialog {
z-index: 200000;
}
}
.search-card {
.el-card__body {
padding: 20px 20px 0 20px;
}
}
.name-a {
cursor: pointer;
color: #0056d6;
}
.dialog-h {
.el-dialog__body {
position: relative;
max-height: 83vh;
box-sizing: border-box;
max-height: 83vh;
padding: 0 0 16px;
.dialog-h-content {
max-height: calc(83vh - 80px);
overflow: auto;
box-sizing: border-box;
max-height: calc(83vh - 80px);
padding: 0 10px;
overflow: auto;
}
}
}
.resi-btns {
margin-top: 20px;
text-align: center;
}
.scroll-h {
&::-webkit-scrollbar {
// display: none;
@ -226,22 +237,37 @@ export default {
* {
@include scrollBar;
}
.selectPopClass {
border: none !important;
background: linear-gradient(180deg, #05326e 0%, #032a5d 100%) !important;
.el-select-dropdown__item {
color: #fff !important;
background: #05326e !important;
}
dropdown__item.hover,
.el-select-dropdown__item:hover {
background: #032a5d !important;
}
.popper__arrow {
border: none !important;
&::after {
border-bottom-color: #05326e !important;
}
}
.el-cascader-node.is-selectable.in-active-path {
color: #409eff!important;
}
.el-cascader-node:not(.is-disabled):focus,
.el-cascader-node:not(.is-disabled):hover {
background-color: rgba(#409eff, .5) !important;
}
.el-cascader-node {
color: #fff;
}
}
</style>

2
src/assets/scss/dataBoard/table2.scss

@ -7,7 +7,7 @@
}
/deep/ .el-table th {
padding: 6px 14px !important;
padding: 6px 0 !important;
border: none !important;
}

258
src/views/dataBoard/overview/components/Bmysxxq.vue

@ -12,27 +12,27 @@
>
<div class="content">
<div class="main-title main-title2">
<Title :text="!isSelect?'不满意事项详情':'共性需求派单'"/>
<Title :text="!isSelect?'共性需求详情':'共性需求派单'"/>
</div>
<div class="contents">
<el-row>
<el-col :span="12">
<div class="items">
<div class="label">需求类别</div>
<div class="value">{{detail.commonServiceTypeName}}</div>
<div class="value">{{ detail.categoryName }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">需求标题</div>
<div class="value">{{detail.title}}</div>
<div class="value">{{ detail.title }}</div>
</div>
</el-col>
<el-col :span="24">
<div class="items">
<div class="label">详细说明</div>
<div class="value">
{{detail.content}}
{{ detail.content }}
</div>
</div>
</el-col>
@ -42,11 +42,28 @@
<el-col :span="24">
<div class="items">
<div class="label">服务方</div>
<el-select v-model="form.roles" class="select" popper-class="selectPopClass">
<el-option label="志愿者" value="1"/>
<el-select
v-model="form.serverOrgType"
class="select"
clearable
popper-class="selectPopClass"
@change="handleServiceChange('add', $event)"
>
<el-option
v-for="item in serviceOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-select v-model="form.user" class="select" popper-class="selectPopClass">
<el-option label="王军(13210141412)" value="1"/>
<el-select v-model="form.serverOrgId" class="select" popper-class="selectPopClass">
<el-option
v-for="item in serviceOptiondList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
<CallPhone icon="el-icon-phone"/>
</div>
@ -54,18 +71,31 @@
<el-col :span="24">
<div class="items">
<div class="label">自动通知服务方</div>
<el-radio-group v-model="form.noticeType" text-color="#fff" class="select" popper-class="selectPopClass">
<el-radio label="短信通知" value="1"/>
<el-radio label="微信公众号通知" value="2"/>
</el-radio-group>
<el-checkbox-group
v-model="form.noticeApproches"
class="select"
popper-class="selectPopClass"
text-color="#fff"
>
<el-checkbox label="1" value="1">短信通知</el-checkbox>
<el-checkbox label="2" value="2">微信公众号消息通知</el-checkbox>
</el-checkbox-group>
</div>
</el-col>
<el-col :span="24">
<div class="items">
<div class="label">服务范围</div>
<el-select v-model="form.range" class="select" popper-class="selectPopClass">
<el-option label="志愿者" value="1"/>
</el-select>
<el-cascader
:key="iscascaderShow"
ref="myCascader"
v-model="form.serviceScopeList"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
class="select"
collapse-tags
popper-class="selectPopClass"
></el-cascader>
</div>
</el-col>
<el-col :span="24">
@ -81,7 +111,7 @@
range-separator="至"
start-placeholder="开始日期"
type="daterange"
value-format="yyyy-MM-dd"
value-format="yyyy-MM-dd HH:mm:ss"
/>
</div>
</el-col>
@ -99,7 +129,11 @@
</div>
</div>
</el-dialog>
<ResourceScheduling ref="ResourceScheduling"/>
<ResourceScheduling
ref="ResourceScheduling"
:currentLevelData="currentLevelData"
@handle="dispatchOrder"
/>
</div>
</template>
@ -108,31 +142,64 @@
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
import ResourceScheduling from "@/views/dataBoard/overview/components/ResourceScheduling.vue";
import CallPhone from "@/views/dataBoard/cpts/CallPhone";
import {requestPost} from "@/js/dai/request";
export default {
name: "ServiceDetails",
components: {Title, ResourceScheduling, CallPhone},
props: {
currentLevelData: {
type: Object,
default: () => {
},
}
},
data() {
return {
dialogVisible: false,
isSelect: false,
form: {
roles: "",
user: "",
date: [],
noticeApproches: [],
serviceScopeList: [], //
serviceTimeStart: "", //yyyy-MM-dd
serviceTimeEnd: "", //yyyy-MM-dd
serverOrgType: "", // community_org ic_user_volunteer party_unit
serverOrgId: "", //Id
},
detail: {}
detail: {},
iscascaderShow: 0,
casOptions: [],
optionProps: {
multiple: true,
value: "objectId",
label: "objectName",
children: "children",
checkStrictly: true,
emitPath: false,
},
serviceOptiondList: [],
serviceOptions: [],
sarr: [],
};
},
methods: {
handleClose(done) {
this.dialogVisible = false;
this.detail = {}
this.handleCancel()
},
handleCancel() {
this.isSelect = false;
this.form = {}
},
open(id) {
console.log(this.currentLevelData, 'this.currentLevelData2')
this.dialogVisible = true;
this.getDetail(id);
},
getDetail(id) {
this.$http.get('/governance/commonDemand/detail/'+id,{}).then(({data:{data}}) => {
this.$http.get('/governance/commonDemand/detail/' + id, {}).then(({data: {data}}) => {
this.detail = data
});
},
@ -142,12 +209,138 @@ export default {
handleSupervision() {
this.$refs.supervision.open()
},
handleCancel() {
async getDictOptions() {
this.$http
.post("/sys/dict/data/dictlist", {
dictType: "user_demand_service_type",
})
.then(({data: res}) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceOptions = res.data;
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
async handleServiceChange(type, val) {
this.form.serverOrgId = ''
await this.getServiceuserList(val);
},
async getServiceuserList(serverOrgType) {
if (!this.detail.commonServiceTypeId || !serverOrgType) return;
const url = "/actual/base/serviceitem/listServerOrg";
let params = {
serviceTypeId: this.detail.commonServiceTypeId,
serverOrgType: serverOrgType,
businessType: "common_service",
};
let {data, code, msg} = await requestPost(url, params);
if (code == 0) {
this.serviceOptiondList = data;
} else if (code >= 8000) {
this.$message.error(msg);
}
},
//
async loadScopeTree() {
const url = "/gov/org/icServiceProject/service/serviceScopeTree";
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/isServiceProject/service/serviceScopeTree'
let params = {};
const {data, code, msg} = await requestPost(url, params);
if (code === 0) {
++this.iscascaderShow;
this.casOptions = [];
this.scopeIdArray = [];
await this.handleData(data.children);
this.casOptions.push(data);
} else {
this.$message.error(rspMsg);
}
},
//null
handleData(data) {
for (let i = 0; i < data.length; i++) {
if (data[i].children != null) {
if (data[i].children.length == 0) {
data[i].children = null;
} else if (data[i].children != null) {
this.handleData(data[i].children);
}
}
}
return data;
},
getLastItem(list, vals, key) {
let LIST = list || [];
for (let item of LIST) {
// console.log(item[key]);
for (let i of vals) {
if (item[key] === i) {
this.sarr.push(item);
} else if (item["objectType"] == "district") {
this.getLastItem(item.children, vals, key);
} else {
this.getLastItem(item.children, vals, key);
}
}
}
},
handleSure() {
const map = new Map();
this.getLastItem(
this.casOptions,
this.form.serviceScopeList,
"objectId"
);
let serviceScopeListCopy = this.form.serviceScopeList.slice();
//,push,
this.newArr = this.sarr.filter(
(v) => !map.has(v.objectId) && map.set(v.objectId, 1)
);
for (let i in this.newArr) {
this.form.serviceScopeList.push({
objectId: this.newArr[i].objectId,
objectType: this.newArr[i].objectType,
objectName: this.newArr[i].objectName,
});
}
this.newArr = [];
//
let arr = [];
this.form.serviceScopeList.forEach((item) => {
if (typeof item != "string") {
arr.push(item);
}
});
this.form.serviceScopeList = arr;
let params = {
...this.detail,
assignFlag: 1,
assignInfo: {
serviceScopeList: this.form.serviceScopeList,
noticeApproches: this.form.noticeApproches.length > 0? this.form.noticeApproches: 0,
serviceTimeStart: this.form.date[0],
serviceTimeEnd: this.form.date[1],
serverOrgType: this.form.serverOrgType,
serverOrgId: this.form.serverOrgId,
}
}
this.$http.post('/governance/commonDemand/update', params).then((res) => {
this.handleClose()
this.$emit('ok')
})
},
dispatchOrder(data) {
this.isSelect = true
this.getDictOptions()
this.loadScopeTree()
}
},
};
</script>
@ -160,15 +353,16 @@ export default {
.items {
font-size: 14px;
line-height: 34px;
position: relative;
display: flex;
align-items: flex-start;
//align-items: flex-start;
align-items: center;
margin-bottom: 17px;
line-height: 34px;
.label {
color: #9CB4D3;
white-space: nowrap;
color: #9CB4D3;
}
.value {
@ -230,9 +424,11 @@ export default {
/deep/ .el-date-editor .el-range-separator {
color: #fff;
}
/deep/ .el-radio {
/deep/ .el-checkbox {
color: #fff;
}
/deep/ .el-input__inner {
width: 360px;
height: 40px;
@ -243,13 +439,13 @@ export default {
}
/deep/ .el-range-editor .el-range-input {
background: none;
color: #fff;
background: none;
}
::v-deep .date-current-weiyi {
background: rgba(3, 19, 51, 0.9);
border-color: #006cff;
background: rgba(3, 19, 51, 0.9);
box-shadow: inset 0px 0px 16px 0px rgba(0, 145, 255, 1);
.el-date-picker__header-label {
@ -281,4 +477,8 @@ export default {
border-bottom: solid 1px #006cff;
}
}
/deep/ .el-cascader__tags .el-tag {
background-color: rgba(#409eff, .5) !important;
color: #fff!important;
}
</style>

9
src/views/dataBoard/overview/components/EventDetail.vue

@ -191,8 +191,8 @@
</div>
</el-dialog>
<ResourceScheduling ref="ResourceScheduling"/>
<Supervision ref="supervision"/>
<ResourceScheduling ref="ResourceScheduling" :currentLevelData="currentLevelData"/>
<Supervision ref="supervision" :currentLevelData="currentLevelData"/>
</div>
</template>
@ -211,6 +211,11 @@ export default {
Supervision
},
props: {
currentLevelData: {
type: Object,
default: () => {
},
},
id: {
type: String,
default: "",

6
src/views/dataBoard/overview/components/EventDispatchOrder.vue

@ -140,12 +140,11 @@
<script>
import Title from "@/views/dataBoard/satisfactionEval/components/Title";
import ResourceScheduling from "@/views/dataBoard/overview/components/ResourceScheduling.vue";
import CallPhone from "@/views/dataBoard/cpts/CallPhone";
export default {
name: "EventDispatchOrder",
components: {Title, ResourceScheduling, CallPhone},
components: {Title, CallPhone},
data() {
return {
dialogVisible: false,
@ -168,9 +167,6 @@ export default {
},
getDetail(id) {
},
handleDispatch() {
this.$refs.ResourceScheduling.open()
},
handleSupervision() {
this.$refs.supervision.open()

133
src/views/dataBoard/overview/components/MapDialog/DemandList.vue

@ -1,15 +1,16 @@
<template>
<div>
<Tabs v-model="type" :list="typeList" @changeVal="typeChange"/>
<div class="table">
<div v-if="type === '1'" class="table">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0, 0, 0, 0.3)"
height="250px">
<el-table-column label="需求类别" prop="key"/>
<el-table-column label="需求内容" prop="key"/>
<el-table-column label="需求人" prop="key"/>
<el-table-column label="需求人联系电话" prop="key" width="200"/>
<el-table-column label="状态" prop="key"/>
<el-table-column label="服务方" prop="key"/>
<el-table-column label="需求类别" prop="categoryAllName"/>
<el-table-column label="需求内容" prop="content"/>
<el-table-column label="需求人" prop="reportUserName"/>
<el-table-column label="需求人联系电话" prop="reportUserMobile" width="200"/>
<el-table-column label="状态" prop="statusName"/>
<el-table-column label="服务方" prop="serviceName"/>
<el-table-column label="操作" prop="op" width="250">
<template slot-scope="scope">
<CallPhone text="拨打电话"/>
@ -23,9 +24,39 @@
:limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNo"
:total="total"
@pagination="getList"
@pagination="getCommonList"
/>
</div>
<div v-if="type === '2'" class="table">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0, 0, 0, 0.3)"
height="250px">
<el-table-column label="需求类别" prop="commonServiceTypeName" show-overflow-tooltip/>
<el-table-column label="需求标题" prop="title" show-overflow-tooltip/>
<el-table-column label="指派服务" prop="assignFlag" width="100">
<template slot-scope="scope">
{{ scope.row.assignFlag == "0" ? "未指派" : "已指派" }}
</template>
</el-table-column>
<el-table-column label="需求发布时间" prop="createdTime" width="150"/>
<el-table-column label="操作" prop="op" width="250">
<template slot-scope="scope">
<CallPhone text="拨打电话"/>
<span class="handle">处理</span>
<span class="view" @click="handleViews(scope.row)">查看</span>
</template>
</el-table-column>
</el-table>
<Pagination
v-show="total > 0"
:limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNo"
:total="total"
@pagination="getCommonList"
/>
</div>
<ServiceDetails ref="ServiceDetails" :currentLevelData="currentLevelData" @ok="typeChange(type)"/>
<Bmysxxq ref="Bmysxxq" :currentLevelData="currentLevelData" @ok="typeChange(type)"/>
</div>
</template>
@ -33,17 +64,33 @@
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import Tabs from "@/views/dataBoard/satisfactionEval/components/Tabs/index.vue";
import CallPhone from "@/views/dataBoard/cpts/CallPhone";
import ServiceDetails from "@/views/dataBoard/overview/components/ServiceDetails.vue";
import Bmysxxq from "@/views/dataBoard/overview/components/Bmysxxq.vue";
export default {
name: "DisputeDispatch",
components: {Pagination, Tabs, CallPhone},
components: {Pagination, Tabs, CallPhone, ServiceDetails, Bmysxxq},
props: {
categoryCode: {
type: [String, Number],
default: ''
},
currentLevelData: {
type: Object,
default: () => {
},
}
},
data() {
return {
total: 10,
queryParams: {},
total: 0,
queryParams: {
pageSize: 5,
pageNo: 1
},
type: "1",
list: [],
loading: false,
loading: true,
typeList: [
{
label: "个性服务",
@ -58,13 +105,67 @@ export default {
},
mounted() {
},
watch: {
categoryCode() {
this.typeChange(this.type)
}
},
methods: {
getList() {
this.$http.post('/governance/userdemand/pagelist', {
categoryCode: this.categoryCode,
level: 1,
status: 'pending',
pageNo: this.queryParams.pageNo
}).then(res => {
this.loading = false
console.log(res, 'resresres')
this.list = res.data.data.list
this.total = res.data.data.total
}).catch(() => {
this.loading = false
})
},
typeChange() {
getCommonList() {
this.$http.post('/governance/commonDemand/list', {
categoryCode: this.categoryCode,
assignFlag: '0',
pageNo: this.queryParams.pageNo
}).then(res => {
console.log(res, 'resresres')
this.list = res.data.data.list
this.total = res.data.data.total
this.loading = false
}).catch(() => {
this.loading = false
})
},
typeChange(val) {
this.type = val
this.list = []
this.queryParams.pageNo = 1
this.total = 0
if (val === "1") {
this.getList()
} else {
this.getCommonList()
}
this.loading = true
},
showDetail(demandRecId) {
this.$refs.ServiceDetails.open(demandRecId);
},
showDetail2(id) {
this.$refs.Bmysxxq.open(id);
},
handleViews(data) {
if(this.type === '1') {
this.showDetail(data.demandRecId)
}
if(this.type === '2') {
this.showDetail2(data.id)
}
}
}
}
@ -81,11 +182,13 @@ export default {
font-size: 14px;
margin-left: 10px;
color: #9A69EC;
cursor: pointer;
}
.view {
font-size: 14px;
margin-left: 10px;
color: #007FF1;
cursor: pointer;
}
</style>

185
src/views/dataBoard/overview/components/MapDialog/ResourceDispatch.vue

@ -1,15 +1,90 @@
<template>
<div>
<Tabs v-model="type" :list="typeList" @changeVal="typeChange"/>
<div class="table">
<div class="table" v-if="type === '4'">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0, 0, 0, 0.3)"
height="250px">
<el-table-column label="资源类型" prop="key"/>
<el-table-column label="所属网格" prop="key"/>
<el-table-column label="姓名/名称" prop="key"/>
<el-table-column label="联系电话" prop="key"/>
<el-table-column label="状态" prop="name"/>
<el-table-column label="距离" prop="name"/>
<el-table-column label="资源类型" min-width="120" prop="personnelType">
<template slot-scope="{row}">
社区自组织
</template>
</el-table-column>
<el-table-column label="所属组织" min-width="180" prop="agencyName"/>
<el-table-column label="负责人" min-width="120" prop="principalName"/>
<el-table-column label="联系电话" min-width="120" prop="principalPhone">
<template slot-scope="scope">
{{ $sensitive(scope.row.principalPhone, 3, 7) }}
</template>
</el-table-column>
<!-- <el-table-column label="状态" prop="name"/>-->
<!-- <el-table-column label="距离" prop="name"/>-->
<el-table-column label="操作" prop="op" width="250">
<template slot-scope="scope">
<CallPhone text="拨打电话"/>
<span class="view" @click="handleViews(scope.row)">查看</span>
</template>
</el-table-column>
</el-table>
<Pagination
v-show="total > 0"
:limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNo"
:total="total"
@pagination="pageChange"
/>
</div>
<div class="table" v-if="type === '5'">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0, 0, 0, 0.3)"
height="250px">
<el-table-column label="资源类型" min-width="120" prop="personnelType">
<template slot-scope="{row}">
联建单位
</template>
</el-table-column>
<el-table-column label="所属组织" min-width="180" prop="agencyName"/>
<el-table-column label="联系人" min-width="120" prop="contact"/>
<el-table-column label="联系电话" min-width="120" prop="contactMobile">
<template slot-scope="scope">
{{ $sensitive(scope.row.contactMobile, 3, 7) }}
</template>
</el-table-column>
<!-- <el-table-column label="状态" prop="name"/>-->
<!-- <el-table-column label="距离" prop="name"/>-->
<el-table-column label="操作" prop="op" width="250">
<template slot-scope="scope">
<CallPhone text="拨打电话"/>
<span class="view" @click="handleViews(scope.row)">查看</span>
</template>
</el-table-column>
</el-table>
<Pagination
v-show="total > 0"
:limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNo"
:total="total"
@pagination="pageChange"
/>
</div>
<div class="table" v-if="type !== '4' && type !== '5'">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0, 0, 0, 0.3)"
height="250px">
<el-table-column label="资源类型" min-width="120" prop="personnelType">
<template slot-scope="{row}">
{{
row.personnelType ? typeList.filter(item => item.value === row.personnelType)[0].label : ''
}}
</template>
</el-table-column>
<el-table-column label="所属组织" min-width="180" prop="orgName"/>
<el-table-column label="姓名/名称" min-width="120" prop="name"/>
<el-table-column label="联系电话" min-width="120" prop="mobile">
<template slot-scope="scope">
{{ $sensitive(scope.row.mobile, 3, 7) }}
</template>
</el-table-column>
<!-- <el-table-column label="状态" prop="name"/>-->
<!-- <el-table-column label="距离" prop="name"/>-->
<el-table-column label="操作" prop="op" width="250">
<template slot-scope="scope">
<CallPhone text="拨打电话"/>
@ -22,9 +97,10 @@
:limit.sync="queryParams.pageSize"
:page.sync="queryParams.pageNo"
:total="total"
@pagination="getList"
@pagination="pageChange"
/>
</div>
</div>
</template>
@ -36,25 +112,44 @@ import CallPhone from "@/views/dataBoard/cpts/CallPhone";
export default {
name: "DisputeDispatch",
components: {Pagination, Tabs, CallPhone},
props: {
currentLevelData: {
type: Object,
default: () => {
}
},
catVal: {
type: [String,Number],
default: ""
}
},
watch: {
catVal() {
this.typeChange(this.type)
}
},
data() {
return {
total: 10,
queryParams: {},
type: "1",
total: 0,
queryParams: {
pageSize: 5,
pageNo: 1,
},
type: "staffGrid",
list: [],
loading: false,
typeList: [
{
label: "网格员",
value: "1",
value: "staffGrid",
},
{
label: "公益岗",
value: "2",
value: "publicWelfareNum",
},
{
label: "志愿者",
value: "3",
value: "volunteer",
},
{
label: "社区自组织",
@ -66,27 +161,77 @@ export default {
},
{
label: "15分钟生活圈商家",
value: "5",
value: "6",
},
],
}
},
mounted() {
this.getList()
},
methods: {
getList() {
this.loading = true;
this.$http.get("/actual/base/streetOverview/queryPersonnelGroup" +
"?level=" + this.currentLevelData.orgLevel +
"&orgId=" + this.currentLevelData.orgId +
"&personnelType=" + this.type)
.then(({data: {data}}) => {
this.loading = false;
this.list = data.personnelInfoVOList;
});
},
typeChange() {
getZzzList() {
this.loading = true;
this.$http.post('/actual/base/iccommunityselforganization/communityselforganizationlist', {
agencyId: this.currentLevelData.orgId,
...this.queryParams
}).then(res => {
this.loading = false;
this.list = res.data.data.list;
this.total = res.data.data.total;
})
},
getLjdwList() {
this.loading = true;
this.$http.post('/actual/base/icpartyunit/list', {
agencyId: this.currentLevelData.orgId,
serviceMatter: this.catVal,
...this.queryParams
}).then(res => {
this.loading = false;
this.list = res.data.data.list;
this.total = res.data.data.total;
})
},
pageChange() {
if (this.type === '4') {
this.getZzzList();
} else if (this.type === '5') {
this.getLjdwList();
} else {
this.getList()
}
},
typeChange(val) {
this.type = val
this.total = 0;
this.queryParams.pageNo = 1
if (val === '4') {
this.getZzzList();
} else if (val === '5') {
this.getLjdwList();
} else {
this.getList()
}
}
}
}
</script>
<style scoped lang="scss">
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table2.scss";
.table {
margin-top: 20px;
}

76
src/views/dataBoard/overview/components/MapDialog/index.vue

@ -32,7 +32,12 @@
icon-class="el-icon-arrow-right"
node-key="value"
@node-click="handleNodeClick"
/>
>
<span slot-scope="{ node, data }" class="custom-tree-node">
<span>{{ node.label }}</span>
<span v-if="data.total">{{ data.total}}</span>
</span>
</el-tree>
</div>
</el-col>
<el-col :span="19">
@ -70,12 +75,12 @@
<img :height="18" :width="18" src="@/assets/images/manyidu/tc-title-icon.png"/>
{{ catLabel }}-资源调度
</div>
<ResourceDispatch :catVal="catVal"/>
<ResourceDispatch :catVal="catVal" :currentLevelData="currentLevelData"/>
<div class="eventDetails">
<img :height="18" :width="18" src="@/assets/images/manyidu/tc-title-icon.png"/>
{{ catLabel }}-需求列表
</div>
<DemandList :catVal="catVal"/>
<DemandList :currentLevelData="currentLevelData" :categoryCode="catVal"/>
</template>
</el-col>
</el-row>
@ -179,36 +184,15 @@ export default {
}]
}
],
xqwwcqkTree: [
{
label: '教育讲座类',
value: 1
}, {
label: '社会治理类',
value: 2
}, {
label: '公益事业类',
value: 3
}, {
label: '公共服务类',
value: 4
}, {
label: '设施维护类',
value: 5
}, {
label: '技能培训类',
value: 6
}, {
label: '岗位提供类',
value: 7
}
],
xqwwcqkTree: [],
defaultProps: {
children: 'children',
label: 'label'
},
catVal: 1,
catLabel: ''
catVal: '',
catLabel: '',
totalCount: [],
currentLevelData: {}
};
},
methods: {
@ -217,8 +201,8 @@ export default {
},
open(data) {
this.dialogVisible = true;
this.currentLevelData = data
this.getDetail(data);
this.catLabel = this.xqwwcqkTree[0].label;
this.$nextTick(() => {
this.$refs.tree.setCurrentKey(this.catVal)
})
@ -232,14 +216,40 @@ export default {
console.log('data', data)
})
}
if (this.type === 'xqwwcqk') {
this.getDemandOptions(orgId)
}
},
handleViews() {
this.$refs.ResourceInfo.open()
},
async getDemandOptions(orgId) {
this.$http.post('/governance/streetOverview/getUnResolveTaskStatic?org_id=' + orgId, {org_id: orgId})
.then(({data: {data}}) => {
this.xqwwcqkTree = data.map(item => {
return {
label: item.name,
value: item.code,
total: item.total
}
});
this.xqwwcqkTree = this.xqwwcqkTree.filter(item => item.value)
this.catLabel = this.xqwwcqkTree[0].label;
})
.catch(() => {
return this.$message.error("网络错误");
});
},
handleNodeClick(item) {
this.catLabel = item.label
console.log(this.getTopLevel(item.value))
this.catVal = this.getTopLevel(item.value) || item.value
if (this.type === "xqwwcqk") {
this.catLabel = item.label
this.catVal = item.value
} else {
this.catLabel = item.label
console.log(this.getTopLevel(item.value))
this.catVal = this.getTopLevel(item.value) || item.value
}
},
getTopLevel(key) {
const currentNode = this.$refs.tree.getNode(key);

15
src/views/dataBoard/overview/components/RequirementList.vue

@ -21,8 +21,8 @@
</template>
</DemandSwiperList>
<DemandCharts v-else/>
<ServiceDetails ref="ServiceDetails"/>
<Bmysxxq ref="Bmysxxq"/>
<ServiceDetails ref="ServiceDetails" :currentLevelData="currentLevelData"/>
<Bmysxxq ref="Bmysxxq" :currentLevelData="currentLevelData"/>
</div>
</template>
@ -42,6 +42,13 @@ export default {
ServiceDetails,
Bmysxxq
},
props: {
currentLevelData: {
type: Object,
default: () => {
},
}
},
data() {
return {
tabval: 1,
@ -67,6 +74,7 @@ export default {
mounted() {
this.getUserDemandList()
this.getCommonDemandList()
console.log(this.currentLevelData,'this.currentLevelData32')
},
methods: {
showDetail({demandRecId}) {
@ -85,7 +93,8 @@ export default {
this.$http.get('/governance/commonDemand/list?assignFlag=0&pageSize=20').then(({data: {data}}) => {
this.commonDemandList = data ? data.list : []
})
}
},
}
}
</script>

119
src/views/dataBoard/overview/components/ResourceScheduling.vue

@ -22,7 +22,9 @@
:data="data"
:default-expand-all="true"
:props="defaultProps"
highlight-current
icon-class="el-icon-arrow-right"
node-key="value"
@node-click="handleNodeClick"
/>
</div>
@ -31,16 +33,26 @@
<div class="table">
<el-table v-loading="loading" :data="list" element-loading-background="rgba(0, 0, 0, 0.3)"
max-height="600px">
<el-table-column label="资源类型" prop="orgName" width="120"/>
<el-table-column label="所属组织" prop="name" width="180"/>
<el-table-column label="姓名/名称" prop="name" width="120"/>
<el-table-column label="联系电话" prop="name" width="120"/>
<el-table-column label="状态" prop="name" width="120"/>
<el-table-column label="距离" prop="name" width="120"/>
<el-table-column label="资源类型" min-width="120" prop="personnelType">
<template slot-scope="{row}">
{{
row.personnelType ? data[0].children.filter(item => item.value === row.personnelType)[0].label : ''
}}
</template>
</el-table-column>
<el-table-column label="所属组织" min-width="180" prop="orgName"/>
<el-table-column label="姓名/名称" min-width="120" prop="name"/>
<el-table-column label="联系电话" min-width="120" prop="mobile">
<template slot-scope="scope">
{{ $sensitive(scope.row.mobile, 3, 7) }}
</template>
</el-table-column>
<!-- <el-table-column label="状态" prop="" width="120"/>-->
<!-- <el-table-column label="距离" prop="" width="120"/>-->
<el-table-column label="操作" prop="op" width="250">
<template slot-scope="scope">
<CallPhone text="拨打电话"/>
<span class="handle">处理</span>
<CallPhone :mobile="scope.row.mobile" text="拨打电话"/>
<span class="handle" @click="handleHandle">处理</span>
<span class="view" @click="handleViews(scope.row)">查看</span>
</template>
</el-table-column>
@ -63,46 +75,47 @@ import ResourceInfo from "@/views/dataBoard/overview/components/ResourceInfo";
export default {
name: "ResourceScheduling",
components: {Title, CallPhone, ResourceInfo},
props: {
currentLevelData: {
type: Object,
default: () => {
},
}
},
data() {
return {
loading: false,
dialogVisible: false,
list: [{}, {}],
list: [],
peopleType: "staffAgency",
data: [
{
label: '一级 1',
label: '人资源',
children: [{
label: '二级 1-1',
children: [{
label: '三级 1-1-1'
}]
}]
}, {
label: '一级 2',
children: [{
label: '二级 2-1',
children: [{
label: '三级 2-1-1'
}]
label: '社区工作者',
value: 'staffAgency'
}, {
label: '二级 2-2',
children: [{
label: '三级 2-2-1'
}]
}]
}, {
label: '一级 3',
children: [{
label: '二级 3-1',
children: [{
label: '三级 3-1-1'
}]
label: '网格员',
value: 'staffGrid'
}, {
label: '楼组/单元长',
value: 'chief'
}, {
label: '二级 3-2',
children: [{
label: '三级 3-2-1'
}]
label: '公益岗',
value: 'publicWelfareNum'
}, {
label: '单位/组织',
value: 'staffDepartment'
}, {
label: '志愿者',
value: 'volunteer'
}]
}, {
label: '物资源',
children: []
}, {
label: '场所资源',
children: []
}],
defaultProps: {
children: 'children',
@ -116,16 +129,34 @@ export default {
},
open(id) {
this.dialogVisible = true;
this.getDetail(id);
this.getList();
},
getDetail(id) {
getList() {
this.loading = true;
console.log(this.currentLevelData, 'this.currentLevelData')
this.$http.get("/actual/base/streetOverview/queryPersonnelGroup" +
"?level=" + this.currentLevelData.orgLevel +
"&orgId=" + this.currentLevelData.orgId +
"&personnelType=" + this.peopleType)
.then(({data: {data}}) => {
this.loading = false;
this.list = data.personnelInfoVOList;
});
},
handleViews() {
this.$refs.ResourceInfo.open()
},
handleNodeClick() {
handleNodeClick(data) {
console.log(data.value)
if (data.value) {
this.peopleType = data.value;
console.log(data);
this.getList()
}
},
handleHandle(data) {
this.handleClose()
this.$emit('handle', data);
}
},
};
@ -140,11 +171,13 @@ export default {
font-size: 14px;
margin-left: 10px;
color: #9A69EC;
cursor: pointer;
}
.view {
font-size: 14px;
margin-left: 10px;
color: #007FF1;
cursor: pointer;
}
</style>

141
src/views/dataBoard/overview/components/ServiceDetails.vue

@ -20,38 +20,38 @@
<el-col :span="12">
<div class="items">
<div class="label">所属网格</div>
<div class="value">{{detail.gridName}}</div>
<div class="value">{{ detail.gridName }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">需求类型</div>
<div class="value">缺字段</div>
<div class="value">{{ detail.categoryName }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">上报类型</div>
<div class="value">{{detail.reportTypeName}}</div>
<div class="value">{{ detail.reportTypeName }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">上报人</div>
<div class="value">{{detail.reportUserName}}</div>
<div class="value">{{ detail.reportUserName }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">上报人联系电话</div>
<div class="value">{{detail.reportUserMobile}}</div>
<div class="value">{{ detail.reportUserMobile }}</div>
<CallPhone icon="el-icon-phone"/>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">上报时间</div>
<div class="value">{{detail.reportTime}}</div>
<div class="value">{{ detail.reportTime }}</div>
</div>
</el-col>
</el-row>
@ -60,27 +60,27 @@
<el-col :span="12">
<div class="items">
<div class="label">需求人</div>
<div class="value">{{detail.demandUserName}}</div>
<div class="value">{{ detail.demandUserName }}</div>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">需求人联系电话</div>
<div class="value">{{detail.demandUserMobile}}</div>
<div class="value">{{ detail.demandUserMobile }}</div>
<CallPhone icon="el-icon-phone"/>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">服务时间</div>
<div class="value">{{detail.serviceStartTime}}-{{detail.serviceEndTime}}</div>
<div class="value">{{ detail.serviceStartTime }}-{{ detail.serviceEndTime }}</div>
</div>
</el-col>
<el-col :span="24">
<div class="items">
<div class="label">需求内容</div>
<div class="value">
{{detail.content}}
{{ detail.content }}
</div>
</div>
</el-col>
@ -89,27 +89,49 @@
<el-row v-if="!isSelect">
<el-col :span="12">
<div class="items">
{{isSelect}}
<div class="label">服务方</div>
<div class="value">{{detail.serviceShowName}}</div>
</div>
</el-col>
<el-col :span="12">
<div class="items">
<div class="label">服务方联系电话</div>
<div class="value">缺字段</div>
<CallPhone icon="el-icon-phone"/>
<div class="value">{{ detail.serviceShowName }}</div>
</div>
</el-col>
<!-- <el-col :span="12">
<div class="items">
<div class="label">服务方联系电话</div>
<div class="value">缺字段</div>
<CallPhone icon="el-icon-phone"/>
</div>
</el-col>-->
</el-row>
<el-row v-else>
<el-col :span="24">
<div class="items">
<div class="label">服务方</div>
<el-select v-model="form.roles" class="select" popper-class="selectPopClass">
<el-option label="志愿者" value="1"/>
<el-select
v-model="form.serviceType"
class="select"
popper-class="selectPopClass"
@change="getServiceuserList($event, 'add_demand')"
>
<el-option
v-for="item in serviceOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
<el-select v-model="form.user" class="select" popper-class="selectPopClass">
<el-option label="王军(13210141412)" value="1"/>
<el-select
v-model="form.serverId"
class="select"
filterable
popper-class="selectPopClass"
>
<el-option
v-for="item in serviceOptiondList"
:key="item.value"
:label="item.label"
:value="item.id"
/>
</el-select>
<CallPhone icon="el-icon-phone"/>
</div>
@ -129,8 +151,8 @@
</div>
</div>
</el-dialog>
<ResourceScheduling ref="ResourceScheduling"/>
<Supervision ref="supervision"/>
<ResourceScheduling ref="ResourceScheduling" :currentLevelData="currentLevelData" @handle="dispatchOrder"/>
<Supervision ref="supervision" :currentLevelData="currentLevelData"/>
</div>
</template>
@ -143,23 +165,38 @@ import CallPhone from "@/views/dataBoard/cpts/CallPhone";
export default {
name: "ServiceDetails",
components: {Title, ResourceScheduling, CallPhone, Supervision},
props: {
currentLevelData: {
type: Object,
default: () => {
},
}
},
data() {
return {
dialogVisible: false,
isSelect: false,
form: {
roles: "",
user: "",
serviceType: "",
serverId: "",
},
detail: {
gridName: ""
},
detail: {}
serviceOptions: [],
serviceOptiondList: [],
demandRecId: ''
};
},
methods: {
handleClose(done) {
this.dialogVisible = false;
this.detail = {}
this.handleCancel()
},
open(id) {
this.dialogVisible = true;
this.demandRecId = id
this.getDetail(id);
},
getDetail(id) {
@ -174,10 +211,56 @@ export default {
this.$refs.supervision.open()
},
handleCancel() {
this.isSelect = false;
this.form = {}
},
handleSure() {
this.$http.post('/governance/userdemand/assign',{
...this.form,
demandRecId: this.demandRecId
}).then(res => {
this.handleClose()
this.$emit('ok')
})
},
dispatchOrder() {
console.log(6666)
this.isSelect = true
this.$http
.post("/sys/dict/data/dictlist", {
dictType: "user_demand_service_type",
})
.then(({data: res}) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceOptions = res.data;
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
async getServiceuserList(serviceType, query) {
const {demandUserId} = this.form;
const url = "/actual/base/serviceitem/listServerOrg";
let params = {
serviceTypeId: this.detail.categoryCode[1],//ID
serverOrgType: serviceType,//
businessType: "resi_service",
};
await this.$http
.post(url, params)
.then(({data: res}) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceOptiondList = res.data || {}
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
},
};

4
src/views/dataBoard/overview/index.vue

@ -139,7 +139,6 @@
<cpt-loading v-show="false"/>
</div>
</template>
<script>
import gridMap from "@/views/dataBoard/cpts/sjkb-map/index";
import cptBread from "@/views/dataBoard/renfang/cpts/bread";
@ -459,8 +458,9 @@ export default {
orgId: this.orgId,
orgLevel: this.currentLevel,
};
console.log(this.currentLevelData,'this.currentLevelData 33210')
this.peopleType = this.currentLevel === "grid" ? "unit" : "staffAgency";
// this.$refs.MapDialog.open(this.currentLevelData)
this.$refs.MapDialog.open(this.currentLevelData)
});
},

Loading…
Cancel
Save