Browse Source

合并songzhen分支代码

V1.0
SongZhen 3 years ago
parent
commit
9520c99a38
  1. 8
      src/components/Dialog/index.vue
  2. 22
      src/components/GridTree/nodeWrap.vue
  3. 2
      src/router/index.js
  4. 1
      src/views/components/resiForm.vue
  5. 2
      src/views/components/smartSearchRule.vue
  6. 2
      src/views/dataBoard/organizational/dangTree/index.vue
  7. 2
      src/views/dataBoard/organizational/gridTree/index.vue
  8. 2
      src/views/dataBoard/organizational/jwTree/index.vue
  9. 157
      src/views/dataBoard/organizational/microgrid/components/reportAnEvent.vue
  10. 160
      src/views/dataBoard/organizational/microgrid/components/safetyhazard.vue
  11. 112
      src/views/dataBoard/organizational/microgrid/index.vue
  12. 4
      src/views/dataBoard/satisfactionEval/components/Title/index.vue
  13. 20
      src/views/modules/base/organization/organization.vue
  14. 1066
      src/views/modules/communityService/gangweizhaoren/addForm.vue
  15. 399
      src/views/modules/communityService/gangweizhaoren/detailForm.vue
  16. 825
      src/views/modules/communityService/gangweizhaoren/editForm.vue
  17. 856
      src/views/modules/communityService/gangweizhaoren/index.vue
  18. 486
      src/views/modules/communityService/gangweizhaoren/personList.vue
  19. 1066
      src/views/modules/communityService/jinengzhaoren/addForm.vue
  20. 399
      src/views/modules/communityService/jinengzhaoren/detailForm.vue
  21. 825
      src/views/modules/communityService/jinengzhaoren/editForm.vue
  22. 856
      src/views/modules/communityService/jinengzhaoren/index.vue
  23. 486
      src/views/modules/communityService/jinengzhaoren/personList.vue
  24. 1066
      src/views/modules/communityService/wennuanzhaoren/addForm.vue
  25. 399
      src/views/modules/communityService/wennuanzhaoren/detailForm.vue
  26. 825
      src/views/modules/communityService/wennuanzhaoren/editForm.vue
  27. 856
      src/views/modules/communityService/wennuanzhaoren/index.vue
  28. 486
      src/views/modules/communityService/wennuanzhaoren/personList.vue
  29. 4
      src/views/modules/goverhotline/index.vue
  30. 4
      src/views/modules/home/index.vue
  31. 1
      src/views/modules/satisfaction/communitySelfInsp/followUpDetail.vue
  32. 88
      src/views/modules/satisfaction/communitySelfInsp/index.vue
  33. 2
      src/views/modules/satisfaction/detail/index.vue
  34. 6
      src/views/modules/shequ/cpts/smatr-rules.vue
  35. 26
      src/views/modules/shequzhili/event/cpts/add.vue
  36. 32
      src/views/modules/shequzhili/event/cpts/event-info.vue
  37. 2
      src/views/modules/shequzhili/event/cpts/myCascader.vue
  38. 13
      src/views/modules/shequzhili/event/cpts/process-form-designate.vue
  39. 2
      src/views/modules/shequzhili/event/cpts/process-form.vue
  40. 116
      src/views/modules/shequzhili/event/eventList.vue
  41. 9
      src/views/modules/workSys/role/role.vue

8
src/components/Dialog/index.vue

@ -1,6 +1,6 @@
<template>
<div class="m-pop">
<div class="wrap">
<div class="wrap" :style="{ width: width + 'px' }">
<div>
<div class="title">
<img src="@/assets/images/shuju/main/card-subtitle-icon.png" />
@ -28,6 +28,10 @@ export default {
type: String,
default: "详情",
},
width: {
type: Number,
default: 820,
},
},
components: {},
@ -62,7 +66,7 @@ export default {
box-sizing: border-box;
margin: 80px auto 0;
padding: 24px 16px;
width: 820px;
// width: 820px;
background: #00023a;
box-shadow: inset 0px 0px 40px 0px rgba(26, 149, 255, 0.45);
border-radius: 4px;

22
src/components/GridTree/nodeWrap.vue

@ -30,7 +30,7 @@
</div>
</div>
<div v-if="item.level === 'unit_chief'">
<div @click="gotoPersonnel" class="dyzxh" :title="item.name">
<div @click="gotoPersonnel(item)" class="dyzxh" :title="item.name">
{{ spliceNameFun(item.name, 3) }}
</div>
</div>
@ -74,8 +74,24 @@ export default {
return row;
},
gotoPersonnel() {
this.$router.push("/organizational/microgrid");
findParentParentId(nodeConfig, pid) {
let parentParentId = "";
if (nodeConfig.id === pid) {
return nodeConfig.pid;
} else {
if (nodeConfig.children && nodeConfig.children.length > 0) {
for (let i = 0; i < nodeConfig.children.length; i++) {
parentParentId = this.findParentParentId(nodeConfig.children[i], pid);
if (parentParentId) {
return parentParentId;
}
}
}
}
},
gotoPersonnel(item) {
const grandPid = this.findParentParentId(this.nodeConfig, item.pid);
this.$router.push(`/organizational/microgrid/${item.id}/${grandPid}`);
},
},
};

2
src/router/index.js

@ -422,7 +422,7 @@ export const dataBoardRoutes = {
},
},
{
path: "/organizational/microgrid",
path: "/organizational/microgrid/:id/:pid",
props: true,
component: () => import("@/views/dataBoard/organizational/microgrid/index"),
name: "Microgrid",

1
src/views/components/resiForm.vue

@ -479,6 +479,7 @@ export default {
{
label: '国籍',
itemType: "select",
requiredFlag: true,
formName: 'nationality',
opction: [],
},

2
src/views/components/smartSearchRule.vue

@ -679,7 +679,7 @@ export default {
// const url = 'http://yapi.elinkservice.cn/mock/245/gov/org/isServiceProject/service/serviceScopeTree'
let params = {
formCode: 'resi_base_info',
policyFlag: '1'
// policyFlag: '1'
}
const { data, code, msg } = await requestPost(url, params)

2
src/views/dataBoard/organizational/dangTree/index.vue

@ -70,7 +70,7 @@ export default {
getTreeData() {
this.loading = true;
this.$http
.get(`/actual/base/organizational/structure/partyCommitteeOrg?agencyId=${this.$store.state.chooseArea.chooseName}`)
.get(`/actual/base/organizational/structure/partyCommitteeOrg?agencyId=${this.$store.state.chooseArea.chooseName.orgId}`)
.then((res) => {
const {
data: { code, data },

2
src/views/dataBoard/organizational/gridTree/index.vue

@ -73,7 +73,7 @@ export default {
getTreeData() {
this.loading = true;
this.$http
.get(`/gov/org/organizational/neighborhood/getGridCommitteeOrgTreeList?agencyId=${this.$store.state.chooseArea.chooseName}`)
.get(`/gov/org/organizational/neighborhood/getGridCommitteeOrgTreeList?agencyId=${this.$store.state.chooseArea.chooseName.orgId}`)
.then((res) => {
const {
data: { code, data },

2
src/views/dataBoard/organizational/jwTree/index.vue

@ -76,7 +76,7 @@ export default {
getTreeData() {
this.loading = true;
this.$http
.get(`/gov/org/organizational/neighborhood/getNeighborhoodCommitteeOrgTreeList?agencyId=${this.$store.state.chooseArea.chooseName}`)
.get(`/gov/org/organizational/neighborhood/getNeighborhoodCommitteeOrgTreeList?agencyId=${this.$store.state.chooseArea.chooseName.orgId}`)
.then((res) => {
const {
data: { code, data },

157
src/views/dataBoard/organizational/microgrid/components/reportAnEvent.vue

@ -3,49 +3,73 @@
<template>
<div class="eventWrap">
<el-row :gutter="32">
<el-col :span="13">
<el-col :span="13" style="padding-left: 40px">
<div class="leftEvent">
<div class="eventDetails">事件详情</div>
<div>
<div class="eventItem">
<span>所属组织</span>
<span>海伦路社区</span>
</div>
<div>
<div class="eventItem">
<span>上报渠道</span>
<span>12345</span>
</div>
<div>
<div class="eventItem">
<span>接受时间</span>
<span>2023-05-15 14:11:32</span>
</div>
<div>
<!-- <div class="eventItem">
<div>问题描述</div>
<div>空间的规划宽带山东快书嘉豪个客户时刻见风使舵和高科技皇上高考结束后高考结束后给沙发快接电话个空间里都是高科技时代合格的考生嘉豪收到反馈各家各户的沙发空间规划上宽带价格好恐惧的沙发和高科技手段和高科技手段好是空间的规划k</div>
</div>
<div>
</div> -->
<div class="eventItem">
<span>联系人</span>
<span>王先生</span>
</div>
<div>
<div class="eventItem">
<span>联系电话</span>
<span>12323434567</span>
</div>
<div>
<div class="eventItem">
<span>详细地址</span>
<span>的经典款亟待解决宽带</span>
</div>
<div>
<div class="eventItem">
<span>办结时限</span>
<span>2023-3-45 12:12:12</span>
</div>
<div>
<div class="eventItem">
<span>满意度评价</span>
<span>基本满意</span>
</div>
</div>
</el-col>
<el-col :span="11">
<div class="rightEvent"></div>
<div class="rightEvent m-info">
<div class="eventDetails">办理进展</div>
<!-- <el-timeline>
<el-timeline-item v-for="(activity, index) in activities" :key="index" :timestamp="activity.timestamp">
{{ activity.content }}
</el-timeline-item>
</el-timeline> -->
<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.reply_time }}</div>
</div>
<div class="content">
<div class="field">回复人</div>
<div class="value">{{ item.user_show_name }}</div>
</div>
<div class="content">
<div class="field">回复内容</div>
<div class="value">{{ item.reply_content }}</div>
</div>
</el-timeline-item>
</el-timeline>
</div>
</el-col>
</el-row>
</div>
@ -57,30 +81,125 @@
import Dialog from "@/components/Dialog/index.vue";
export default {
name: "residentDetails",
name: "ReportAnEvent",
components: { Dialog },
props: {
resiId: {
id: {
type: String,
default: "",
},
},
components: { Dialog },
data() {
return {};
return {
activities: [
{
reply_content: "活动按期开始",
reply_time: "2018-04-15",
user_show_name: "qqqq",
},
{
reply_content: "活动按期开始",
reply_time: "2018-04-15",
user_show_name: "qqqq",
},
{
reply_content: "活动按期开始",
reply_time: "2018-04-15",
user_show_name: "qqqq",
},
],
};
},
computed: {},
watch: {
id: {
handler(val) {
if (val) {
this.getDetailsData(val);
this.getProcessData(val);
}
},
immediate: true,
},
},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
},
getDetailsData(id) {
this.$http.post("/governance/icEvent/detail", { icEventId: id }).then((res) => {
console.log(res);
});
},
getProcessData(id) {
this.$http.post("/governance/icEvent/process", { icEventId: id }).then((res) => {
console.log(res);
});
},
// /governance/icEvent/detail
// /governance/icEvent/process
},
};
</script>
<style lang="scss" scoped></style>
<style lang="scss" src="@/assets/scss/dataBoard/popup-info.scss" scoped></style>
<style lang="scss" scoped>
.eventWrap {
height: 500px;
overflow-y: auto;
overflow-x: hidden;
.eventDetails {
font-size: 16px;
margin: 24px 0;
}
.m-info {
padding: 0px !important;
.timeline {
padding: 0px !important;
.content {
.field {
font-size: 14px;
text-align: left;
opacity: 1;
color: #fff;
}
.value {
font-size: 14px;
}
}
.status-box {
.timestamp {
color: #fff;
opacity: 1;
font-size: 14px;
}
.status2 {
width: 90px !important;
border-radius: 0 !important;
}
}
}
}
.leftEvent {
color: #fff;
.eventItem {
font-size: 14px;
margin-bottom: 24px;
span:first-child {
}
span:last-child {
}
}
}
.rightEvent {
color: #fff;
}
}
</style>

160
src/views/dataBoard/organizational/microgrid/components/safetyhazard.vue

@ -0,0 +1,160 @@
<template>
<Dialog title="安全隐患" width="1200" @close="handleClose">
<template>
<div class="saftHard">
<div class="saftDetails">
<div class="title" style="margin-bottom: 32px">事件详情</div>
<div class="content">
<el-row :gutter="16" class="columnHeight">
<el-col :span="6">
<div class="item">
<span>场所名称:</span>
<span>张亮麻辣烫</span>
</div>
</el-col>
<el-col :span="6">
<div class="item">
<span>占地面积:</span>
<span>120平米</span>
</div>
</el-col>
<el-col :span="6">
<div class="item">
<span>场所规模:</span>
<span>260</span>
</div>
</el-col>
<el-col :span="6">
<div class="item">
<span>所属组织:</span>
<span>亿联社区第一网格</span>
</div>
</el-col>
</el-row>
<el-row :gutter="16" class="columnHeight">
<el-col :span="6">
<div class="item">
<span>所属级别:</span>
<span>久小场所</span>
</div>
</el-col>
<el-col :span="6">
<div class="item">
<span>场所类型:</span>
<span>学校</span>
</div>
</el-col>
<el-col :span="6">
<div class="item">
<span>负责人:</span>
<span>张三</span>
</div>
</el-col>
<el-col :span="6">
<div class="item">
<span>联系电话:</span>
<span>13234343434</span>
</div>
</el-col>
</el-row>
<div class="item columnHeight">
<span>场所地址</span>
<span></span>
</div>
<div class="item">
<span>备注</span>
<span></span>
</div>
</div>
</div>
<div class="saftRecords">
<div class="title" style="margin-top: 48px">巡查记录</div>
<div class="table">
<el-table :data="list" :loading="loading">
<el-table-column label="序号" type="index" width="80" />
<el-table-column prop="name" label="巡查时间" />
<el-table-column prop="address" label="巡查人员" />
<el-table-column prop="address" label="联系电话" />
<el-table-column prop="address" label="检查结果" />
<el-table-column prop="address" label="发现隐患" />
<el-table-column prop="address" label="是否回复" />
<el-table-column prop="address" label="拟复查时间" />
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text">详情</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</template>
</Dialog>
</template>
<script>
import Dialog from "@/components/Dialog/index.vue";
export default {
name: "Safetyhazard",
props: {
resiId: {
type: String,
default: "",
},
},
components: { Dialog },
data() {
return {};
},
computed: {},
mounted() {},
methods: {
handleClose() {
this.$emit("close", false);
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/dataBoard/table.scss";
.saftHard {
height: 500px;
overflow-y: auto;
overflow-x: hidden;
.title {
font-size: 18px !important;
padding: 0 !important;
color: #fff;
margin-bottom: 16px;
}
.saftDetails {
padding: 18px 0 0 22px;
.content {
.columnHeight {
margin-bottom: 32px;
}
.item {
color: #fff;
font-size: 16px;
span:first-child {
display: inline-block;
width: 90px;
}
span:last-child {
display: inline-block;
}
}
}
}
.saftRecords {
padding: 18px 0 0 22px;
}
}
</style>

112
src/views/dataBoard/organizational/microgrid/index.vue

@ -13,44 +13,44 @@
<el-table-column label="序号" type="index" width="80" />
<!-- 上报事件 -->
<template v-if="otherTabel === 'sbsj'">
<el-table-column prop="name" label="事件类型" />
<el-table-column prop="address" label="事件描述" />
<el-table-column prop="address" label="办理情况" />
<el-table-column prop="address" label="上报时间" />
<el-table-column prop="categoryName" label="事件类型" />
<el-table-column prop="addeventContentress" label="事件描述" />
<el-table-column prop="status" label="办理情况" />
<el-table-column prop="happenTime" label="上报时间" />
</template>
<!-- 居民需求 -->
<template v-if="otherTabel === 'jmxq'">
<el-table-column prop="name" label="需求类型" />
<el-table-column prop="address" label="需求描述" />
<el-table-column prop="address" label="办理情况" />
<el-table-column prop="address" label="上报时间" />
<el-table-column prop="categoryName" label="需求类型" />
<el-table-column prop="content" label="需求描述" />
<el-table-column prop="status" label="办理情况" />
<el-table-column prop="reportTime" label="上报时间" />
</template>
<!-- 统治人群 -->
<template v-if="otherTabel === 'tzrq'">
<el-table-column prop="name" label="所属组织" />
<el-table-column prop="address" label="所属网格" />
<el-table-column prop="address" label="所属家庭" />
<el-table-column prop="address" label="姓名" />
<el-table-column prop="address" label="联系电话" />
<el-table-column prop="address" label="性别" />
<el-table-column prop="address" label="证件号" />
<el-table-column prop="address" label="人员类别" />
<el-table-column prop="address" label="备注" />
<el-table-column prop="organizationName" label="所属组织" />
<el-table-column prop="gridName" label="所属网格" />
<el-table-column prop="familyName" label="所属家庭" />
<el-table-column prop="name" label="姓名" />
<el-table-column prop="mobile" label="联系电话" />
<el-table-column prop="gender" label="性别" />
<el-table-column prop="idNum" label="证件号" />
<el-table-column prop="categoryType" label="人员类别" />
<el-table-column prop="remark" label="备注" />
</template>
<!-- 安全隐患 -->
<template v-if="otherTabel === 'aqyh'">
<el-table-column prop="name" label="场所名称" />
<el-table-column prop="address" label="巡查时间" />
<el-table-column prop="address" label="巡查人员" />
<el-table-column prop="address" label="联系电话" />
<el-table-column prop="address" label="隐患明细" />
<el-table-column prop="address" label="图片" />
<el-table-column prop="address" label="拟复查时间" />
<el-table-column prop="placeOrgName" label="场所名称" />
<el-table-column prop="patrolTime" label="巡查时间" />
<el-table-column prop="staffName" label="巡查人员" />
<el-table-column prop="mobile" label="联系电话" />
<el-table-column prop="detailed" label="隐患明细" />
<el-table-column prop="attachmentUrl" label="图片" />
<el-table-column prop="reviewTime" label="拟复查时间" />
</template>
<el-table-column label="操作" width="90" align="center">
<template slot-scope="data">
<el-button type="text" @click="handleView">查看</el-button>
<template slot-scope="scope">
<el-button type="text" @click="handleView(scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
@ -59,7 +59,10 @@
<same-dialog @close="close" />
</div>
<div v-if="showDialogEvent">
<report-an-event @close="closeEvent" />
<report-an-event :id="rowId" @close="closeEvent" />
</div>
<div v-if="showDialogSaft">
<Safetyhazard @close="closeSaft" />
</div>
<Pagination v-show="total > 0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" @pagination="getList" />
</div>
@ -70,10 +73,10 @@ import Breadcrumb from "@/views/dataBoard/satisfactionEval/components/Breadcrumb
import Pagination from "@/views/dataBoard/satisfactionEval/components/Pagination";
import SameDialog from "./components/popDetails.vue";
import ReportAnEvent from "./components/reportAnEvent.vue";
import Safetyhazard from "./components/safetyhazard.vue";
export default {
name: "Microgrid",
components: { Breadcrumb, Pagination, SameDialog, ReportAnEvent },
components: { Breadcrumb, Pagination, SameDialog, ReportAnEvent, Safetyhazard },
data() {
return {
loading: false,
@ -112,17 +115,56 @@ export default {
name: "微网格",
},
],
rowId: null,
itemNav: 1,
showDialog: false,
showDialogEvent: false,
showDialogSaft: false,
otherTabel: "sbsj",
monthOptions: new Array(12).fill(0).map((_, index) => {
return { label: index - 0 + 1 + "月", value: index - 0 + 1 };
}),
list: [{}, {}, {}],
paramsData: {},
list: [],
};
},
watch: {
otherTabel(n) {
if (n) {
this.getList();
}
},
},
created() {
this.paramsData = this.$route.params;
},
mounted() {
this.getList();
},
methods: {
getList() {
this.loading = true;
const getUrl = new Map([
["sbsj", `/gov/org/organizational/neighborhood/getBuildingUnitLevelEvent?unitId=1634090229723381761`],
["jmxq", `/gov/org/organizational/neighborhood/getBuildingUnitLevelUserDemand?unitId=1565599676446027778`],
["tzrq", `/gov/org/organizational/neighborhood/getBuildingUnitLevelCtp?unitId=1483661223332417537`],
["aqyh", `/gov/org/organizational/neighborhood/getEnterprisePatrolRecord?unitId=f896b59f3cddf1f54280546d79803652`],
]);
const url = getUrl.get(this.otherTabel);
// unitId=${this.paramsData.id}
this.$http.get(`${url}&pageNo=${this.pageNum}&pageSize=${this.pageSize}`).then((res) => {
const {
code,
data: { total, list },
} = res.data;
if (code === 0) {
this.total = total;
this.list = list;
this.loading = false;
}
});
},
chooseNav(item) {
this.itemNav = item.key;
this.otherTabel = item.key === 1 ? "sbsj" : item.key === 2 ? "jmxq" : item.key === 3 ? "tzrq" : "aqyh";
@ -140,14 +182,20 @@ export default {
closeEvent(flag) {
this.showDialogEvent = flag;
},
getList() {},
handleView() {
closeSaft(flag) {
this.showDialogSaft = flag;
},
handleView(row) {
this.rowId = row.id;
if (this.itemNav === 1) {
this.showDialogEvent = true;
}
if (this.itemNav === 3) {
this.showDialog = true;
}
if (this.itemNav === 4) {
this.showDialogSaft = true;
}
},
},
};

4
src/views/dataBoard/satisfactionEval/components/Title/index.vue

@ -26,8 +26,8 @@ export default {
<style scoped lang="scss">
.title {
background: url(../../../../../assets/images/shuju/overview/title-bg.png)
no-repeat 0 0 fixed;
// background: url(../../../../../assets/images/shuju/overview/title-bg.png)
// no-repeat 0 0 fixed;
padding: 8px 16px 8px 32px;
display: flex;
align-items: center;

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

@ -543,7 +543,7 @@
<el-select v-model="peoForm.duty"
multiple
placeholder="请选择">
<el-option v-for="item in "
<el-option v-for="item in dutyList"
:key="item.roleId"
:label="item.roleName"
:value="item.roleId"
@ -756,6 +756,15 @@
<div id="jiedao" class="div_map"></div>
</div>
</el-form-item>
<el-form-item label="机构简介">
<el-input class="u-edit-width-normal"
type="textarea"
maxlength="500"
show-word-limit
:rows="3"
placeholder="请输入简介,不超过500字"
v-model="agencyForm.description"></el-input>
</el-form-item>
</el-form>
<div slot="footer">
<el-button @click="canceladdNewAgency"> </el-button>
@ -1149,6 +1158,7 @@ export default {
contacts: "",
mobile: "",
code: "",
description:"",
},
//
tree: [],
@ -1795,6 +1805,7 @@ export default {
(this.agencyForm.areaName = ""),
(this.agencyForm.contacts = ""),
(this.agencyForm.mobile = ""),
(this.agencyForm.description = ""),
(this.agencyForm.code = ""),
(this.latitude = ""),
(this.longitude = "");
@ -1995,7 +2006,7 @@ export default {
existedDutyArr.push(sysDuty.roleId);
}
});
this.peoForm.duty = existedDutyArr;
this.peoForm.dutyList = existedDutyArr;
//
let existedRoleArr = [];
data.newRoleList.forEach(function (sysRole) {
@ -2011,21 +2022,17 @@ export default {
},
//
async xiuPeo (row) {
console.log('2');
this.modifyPeo = true;
this.peoForm.orgType = "agency";
this.userStaffId = row.staffId;
const url = "/gov/org/staff/editstaffinit";
let params = {
staffId: row.staffId,
agencyId: this.currentAgencyId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.peoForm.name = data.name;
this.peoForm.mobile = data.mobile;
@ -2490,6 +2497,7 @@ export default {
areaName: this.agencyForm.areaName,
contacts: this.agencyForm.contacts,
mobile: this.agencyForm.mobile,
description: this.agencyForm.description,
code: this.agencyForm.code,
latitude: this.latitude,
longitude: this.longitude,

1066
src/views/modules/communityService/gangweizhaoren/addForm.vue

File diff suppressed because it is too large

399
src/views/modules/communityService/gangweizhaoren/detailForm.vue

@ -0,0 +1,399 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<div v-if="initLoading" class="m-row">
<div class="m-info">
<div class="info-prop">
<span class="info-title-2">服务名称</span>
<span>{{ formData.serviceName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务组织</span>
<span>{{ serviceOrgName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务范围</span>
<span>{{ formData.gridIdListName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">政策依据</span>
<span>{{ formData.policyTitle || "--" }}</span>
<!-- <el-button
v-if="formData.policyId"
style="margin-left: 10px"
type="primary"
size="small"
@click="handlePersonList"
>预览</el-button
> -->
</div>
<div class="info-prop">
<span class="info-title-2">经办人</span>
<span>{{ formData.principalName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">联系方式</span>
<span>{{ formData.principalContact || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务时间</span>
<span>{{ formData.serviceTimeStart || "--" }}</span
>
<span>{{ formData.serviceTimeEnd || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">享受服务人员: </span>
<span>{{ resiSearchTagName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">备注</span>
<span>{{ formData.remark || "--" }}</span>
</div>
<div v-show="formData.serviceStatus === 'completed'">
<h3 class="d-h3">反馈内容</h3>
<div class="info-prop">
<span class="info-title-2">备注</span>
<span>{{ feedbackFormData.serviceGoal || "--" }}</span>
</div>
<!-- <div class="info-prop">
<span class="info-title-2">服务效果</span>
<span>{{ feedbackFormData.serviceEffect || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务人数</span>
<span>{{ feedbackFormData.servicePeopleNumber || 0 }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务状态</span>
<span>{{ feedbackFormData.serviceStatusShow || "--" }}</span>
</div> -->
<div class="info-prop">
<span class="info-title-2">满意度</span>
<span>{{ feedbackFormData.satisfactionShow || "--" }}</span>
</div>
<!-- <div class="info-prop">
<span class="info-title-2">地理位置</span>
<span>{{ feedbackFormData.address || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">地图位置</span>
<div class="div_map">
<div id="app_detail"></div>
</div>
</div>
<div class="info-prop">
<span class="info-title-2">附件</span>
<file-list
v-if="fileList.length > 0"
:fileList="fileList"
></file-list>
<span v-else>--</span>
</div> -->
</div>
</div>
</div>
</div>
<div class="div-btn">
</div>
<el-row type="flex" justify="right">
<el-col :span="24" align="right">
<el-button size="small" @click="handleCancle" style="margin-right:16px;"> </el-button>
</el-col>
</el-row>
<el-dialog
v-if="showPersonList"
:visible.sync="showPersonList"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'政策预览'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false"
>
<person-list
ref="ref_detail_form"
:policyId="policyId"
:ruleList="ruleList"
@handleOk="handleOk"
@handleClose="handleClose"
>
</person-list>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
// import personList from "../policy/oldPersonList.vue";
import fileList from "@/views/components/fileList";
import daiMap from "@/utils/dai-map";
var map;
let loading; //
export default {
data() {
return {
initLoading: false,
keyWords: "",
formData: {},
resiSearchTagName:"",
feedbackFormData: {
serviceProjectId: "", // id
serviceName: "",
serviceGoal: "", //
serviceEffect: "", //
servicePeopleNumber: null, //
serviceStatus: "completed", // in_servicecompleted:
satisfaction: "", //:bad:good:perfect
longitude: "", //
latitude: "", //
address: "",
fileList: [], //
},
policyId: "",
showPersonList: false,
ruleList: [],
policyList: [],
};
},
components: { fileList },
async mounted() {
// if (this.serviceRecordId) {//
await this.loadInfo();
this.initLoading = true;
if (
this.formData.serviceStatus === "completed" &&
this.feedbackFormData.latitude
) {
this.$nextTick(() => {
this.initMap();
});
}
},
methods: {
diaDestroy() {},
//
async handlePersonList() {
if (!this.formData.policyId) {
this.$message.info("请先选择政策");
return false;
}
this.policyId = this.formData.policyId;
await this.loadRuleList();
this.showPersonList = true;
},
async loadRuleList() {
const url = "/governance/policy/rulelist/" + this.policyId;
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.ruleList = data;
} else {
this.$message.error(msg);
}
},
handleClose() {
this.showPersonList = false;
},
//
async loadInfo() {
const url = "/governance/icServicePostRecord/detail";
let params = {
serviceRecordId: this.serviceRecordId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.formData = { ...data };
this.formData.serviceRecordId = this.serviceRecordId;
this.feedbackFormData = { ...data.feedback };
this.formData.gridIdListName = "";
this.feedbackFormData.serviceStatusShow = "";
this.feedbackFormData.satisfactionShow = "";
await this.getTagName()
let arr = [];
this.formData.gridIdList.forEach((element) => {
arr.push(element.objectName);
});
this.formData.gridIdListName = arr.join(",");
this.statusArray.forEach((element) => {
if (this.formData.serviceStatus === element.value) {
this.feedbackFormData.serviceStatusShow = element.label;
}
});
this.satisfyArray.forEach((element) => {
if (this.feedbackFormData.satisfaction === element.value) {
this.feedbackFormData.satisfactionShow = element.label;
}
});
this.fileList = [];
if (
data.feedback &&
data.feedback.fileList &&
data.feedback.fileList.length > 0
) {
data.feedback.fileList.forEach((element) => {
let obj = {
name: element.name,
format: element.format,
url: element.url,
type: element.type,
};
this.fileList.push(obj);
});
}
} else {
this.$message.error(msg);
}
},
async getTagName() {
const url = "/governance/resiSearchTag/listResiSearchTags";
let params = {
pageSize: 99,
};
let { data, msg, code } = await requestPost(url, params);
if (code == 0) {
let showAddProduct = data.list.filter(item=>{
return [this.formData.resiSearchTagId].includes(item.tagId)
})
if(this.formData.resiSearchTagId){
this.resiSearchTagName = showAddProduct[0].tagName
}else{
this.resiSearchTagName = '--'
}
} else {
this.$message.error(msg);
}
},
handleCancle() {
this.resetData();
this.$emit("diaDetailClose");
},
// init
initMap() {
let { latitude, longitude } = this.feedbackFormData;
map = new daiMap(
document.getElementById("app_detail"),
{ latitude, longitude },
{
zoom: 16.2, //
pitch: 43.5, //
rotation: 45, //
}
);
map.setCenter(latitude, longitude);
map.setMarker(latitude, longitude);
},
handleOk() {
this.showPersonList = false;
},
resetData() {
this.formData = {};
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
computed: {
dataRule() {
return {
serviceTimeStart: [
{ required: true, message: "服务时间不能为空", trigger: "blur" },
],
};
},
// resiSearchTagNameText(){
// let text = ""
// if(this.resiSearchTagName){
// text = this.resiSearchTagName
// }else {
// text = '--'
// }
// return text
// },
},
props: {
serviceRecordId: {
type: String,
required: true,
},
serviceOrgName: {
type: String,
required: true,
},
satisfyArray: {
type: Array,
default() {
return [];
},
},
statusArray: {
type: Array,
default() {
return [];
},
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/detail-main.scss";
.info-prop{
margin-top: 29px;
}
.scroll-h{
padding: 0 90px !important;
}
</style>

825
src/views/modules/communityService/gangweizhaoren/editForm.vue

@ -0,0 +1,825 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form ref="ref_form"
:inline="true"
:model="formData"
:rules="dataRule"
class="div_form">
<el-form-item label="服务名称"
prop="serviceName"
label-width="150px"
style="display: block">
<span>{{formData.serviceName}}</span>
<!-- <el-select class="item_width_1"
v-model="formData.serviceProjectId"
placeholder="请选择"
filterable
clearable>
<el-option v-for="(item,index) in projectList"
@click.native="hancleClickProject(index)"
:key="item.serviceProjectId"
:label="item.serviceName"
:value="item.serviceProjectId">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="服务组织"
prop="serviceOrgId"
label-width="150px"
style="display: block">
<span>{{serviceOrgName}}</span>
<!-- <el-select class="item_width_1"
v-model="formData.serviceOrgId"
placeholder="请选择"
filterable
clearable>
<el-option v-for="item in orgList"
:key="item.icServiceOrgId"
:label="item.orgName"
:value="item.icServiceOrgId">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="服务范围"
prop="gridIdList"
label-width="150px"
style="display: block">
<div v-for="item in formData.gridIdList"
:key="item.objectId">
<div>{{item.objectName}}</div>
</div>
<!-- <el-cascader class="item_width_1"
ref="myCascader"
v-model="scopeIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeScope"></el-cascader> -->
</el-form-item>
<el-form-item label="政策依据"
prop="policyId"
label-width="150px"
style="display: block">
<el-select :disabled="formType==='detail'"
v-model="formData.policyId"
class="input-width-small"
placeholder="请选择"
clearable>
<el-option v-for="item in policyList"
:key="item.policyId"
:label="item.title"
:value="item.policyId">
</el-option>
</el-select>
<!--
<el-button style="margin-left: 10px"
type="primary"
size="small"
@click="handlePersonList">预览</el-button> -->
</el-form-item>
<el-form-item label="经办人"
prop="principalName"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
placeholder="请输入经办人姓名"
v-model="formData.principalName">
</el-input>
</el-form-item>
<el-form-item label="联系方式"
prop="principalContact"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
placeholder="请输入联系方式"
v-model="formData.principalContact">
</el-input>
</el-form-item>
<el-form-item label="指派服务" label-width="150px">
<el-switch v-model="assignSwitch"> </el-switch>
</el-form-item>
<el-form-item
label="查找享受服务人员"
prop="principalContact"
label-width="150px"
style="display: block"
v-show="this.assignSwitch"
>
<input type="text" v-model="formData.resiSearchTagId" v-show="false">
<template v-if="this.resiSearchTagName">
<el-tag @close="handleCloseTag" closable style="margin-right:10px;">
{{this.resiSearchTagName }}
</el-tag>
</template>
<el-button type="primary" @click="handleClickLabel" size="mini">
<span> <i class="el-icon-plus"></i> 按标签查找 </span>
</el-button>
</el-form-item>
<el-form-item label="服务时间"
label-width="150px"
prop="serviceTimeStart"
style="display: block">
<el-date-picker :disabled="formType==='detail'"
v-model="formData.serviceTimeStart"
:picker-options="startPickerOptions"
class="item_width_2"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker :disabled="formType==='detail'"
v-model="formData.serviceTimeEnd"
:picker-options="endPickerOptions"
class="item_width_2 u-data-tag"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注"
prop="remark"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
type="textarea"
maxlength="500"
show-word-limit
:rows="3"
placeholder="请输入备注,不超过500字"
v-model="formData.remark"></el-input>
</el-form-item>
</el-form>
<div v-show="formData.serviceStatus==='completed'">
<h3 class="d-h3">反馈内容</h3>
<el-form ref="ref_form_feedback"
:inline="true"
:disabled="true"
:model="feedbackFormData"
class="div_form">
<el-form-item label="服务目标"
prop="serviceGoal"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入服务目标,不超过1000字"
v-model="feedbackFormData.serviceGoal"></el-input>
</el-form-item>
<el-form-item label="服务效果"
prop="serviceEffect"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入服务效果,不超过1000字"
v-model="feedbackFormData.serviceEffect"></el-input>
</el-form-item>
<el-form-item label="服务人数"
style="display: block"
prop="servicePeopleNumber"
label-width="150px">
<el-input-number class="item_width_2"
v-model="feedbackFormData.servicePeopleNumber"
:min="0"
:max="9999"
label="服务人数"></el-input-number>
</el-form-item>
<el-form-item label="服务状态"
label-width="150px"
style="display: block"
prop="serviceStatus">
<span>已完成</span>
<!-- <el-select class="item_width_1"
v-model="feedbackFormData.serviceStatus"
placeholder="全部"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="满意度"
style="display: block"
label-width="150px"
prop="satisfaction">
<el-select class="item_width_2"
v-model="feedbackFormData.satisfaction"
placeholder="全部"
clearable>
<el-option v-for="item in satisfyArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="地址"
prop="address"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
v-model="feedbackFormData.address"></el-input>
</el-form-item>
<!-- <el-form-item label="地图位置"
label-width="150px"
style="display: block">
<div style="width:500px">
<div class="div_map">
<div id="map_app">
</div>
<div class="div_searchmap">
<el-input maxlength="50"
size="mini"
placeholder="请输入关键字"
v-model="keyWords">
</el-input>
<el-button style="margin-left: 10px"
type="primary"
size="mini"
@click="handleSearchMap">查询</el-button>
</div>
</div>
</div>
</el-form-item> -->
<el-form-item class="block"
label="附件"
label-width="150px"
prop="attach">
<!-- <el-upload :headers="$getElUploadHeaders()" v-if="feedbackFormData.fileList&&feedbackFormData.fileList.length>0"
class="upload-demo"
:on-preview="handleFileDownload"
accept=".doc,.pdf,.xls,.docx,.xlsx,.jpg,.png,.jpeg,.bmp,.mp4,.wma,.m4a,.mp3"
:limit="3"
:file-list="fileList">
</el-upload> -->
<div v-if="feedbackFormData.fileList&&feedbackFormData.fileList.length>0"
class="attachement-list">
<a :href="att.url"
target="_blank"
:key="att.url"
v-for="att in feedbackFormData.fileList">
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
</div>
<span v-else>无附件</span>
</el-form-item>
</el-form>
</div>
</div>
<div class="div_btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
v-if="formType != 'detail'"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"> </el-button>
</div>
<el-dialog v-if="showPersonList"
:visible.sync="showPersonList"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'标签查找'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false">
<person-list ref="ref_detail_form"
:policyId="policyId"
:ruleList="ruleList"
@handleOk="handleOk"
@handleClose="handleClose">
</person-list>
</el-dialog>
<el-dialog
v-if="showLabelForm"
:visible.sync="showLabelForm"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'标签配置'"
width="900px"
top="5vh"
class="dialog-h"
@closed="showLabelForm = false"
>
<label-form
ref="ref_label_form"
:policyId="policyId"
:ruleList="ruleList"
@dialogCancle="addFormCancle"
@dialogOk="addFormOk"
>
<!-- @handleOk="handleOk"
@handleClose="handleClose" -->
</label-form>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
// import personList from "../policy/oldPersonList.vue";
import labelForm from "../labelConfig/addForm.vue";
import { nextTick } from 'vue';
var map
var search
var markers
var infoWindowList
var geocoder //
let loading //
export default {
data () {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.serviceTimeStart) {
let serviceTimeStart = new Date(this.formData.serviceTimeStart)
return time.getTime() > nowData || time.getTime() < serviceTimeStart || time.getTime() === serviceTimeStart
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
btnDisable: false,
keyWords: '',
assignSwitch: true,
formData: {
},
showLabelForm: false,
resiSearchTagName:'',
feedbackFormData: {
serviceProjectId: '',// id
serviceName: '',
serviceGoal: '',//
serviceEffect: '',//
servicePeopleNumber: null,//
serviceStatus: 'completed',// in_servicecompleted:
satisfaction: '',//:bad:good:perfect
longitude: '',//
latitude: '',//
address: '',
fileList: [],//
},
serviceList: [],//list
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
policyList: [],
projectList: [],
fileList: [],
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile',
policyId: '',
showPersonList: false,
ruleList: []
}
},
components: { labelForm},
mounted () {
this.getPolicyList()
if (this.serviceRecordId) {//
this.loadInfo()
}
// this.initMap()
},
methods: {
//
async handlePersonList () {
if (!this.formData.policyId) {
this.$message.info('请先选择政策')
return false
}
this.policyId = this.formData.policyId
await this.loadRuleList()
this.showPersonList = true;
},
async loadRuleList () {
const url = "/governance/policy/rulelist/" + this.policyId
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.ruleList = data
} else {
this.$message.error(msg)
}
},
handleClose () {
this.showPersonList = false
},
handleOk () {
this.showPersonList = false
},
handleClickLabel() {
this.showLabelForm = true;
this.$nextTick(() => {
this.$refs["ref_label_form"].initForm("info");
});
},
async getPolicyList () {
const url = '/governance/policy/policyList'
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.policyList = data
} else {
this.$message.error(msg)
}
},
//
async loadInfo () {
const url = '/governance/icServicePostRecord/detail'
let params = {
serviceRecordId: this.serviceRecordId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.formData = { ...data }
this.formData.serviceRecordId = this.serviceRecordId
this.feedbackFormData = { ...data.feedback }
await this.getTagName()
this.fileList = []
if (data.feedback && data.feedback.fileList && data.feedback.fileList.length > 0) {
data.feedback.fileList.forEach(element => {
let obj = {
name: element.name,
format: element.format,
url: element.url,
}
this.fileList.push(obj)
});
}
} else {
this.$message.error(msg)
}
},
async getTagName() {
const url = "/governance/resiSearchTag/listResiSearchTags";
let params = {
pageSize: 99,
};
let { data, msg, code } = await requestPost(url, params);
if (code == 0) {
let showAddProduct = data.list.filter(item=>{
return [this.formData.resiSearchTagId].includes(item.tagId)
})
this.resiSearchTagName = showAddProduct[0].tagName
this.assignSwitch = true
} else {
this.$message.error(msg);
}
},
async handleComfirm () {
this.btnDisable = true
setTimeout(() => {
this.btnDisable = false
}, 10000)
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj)
this.btnDisable = false
} else {
this.editFuwu()
}
})
},
async editFuwu () {
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //
if (this.formData.principalContact && regPhone.test(this.formData.principalContact) === false) {
this.btnDisable = false
this.$message({
type: 'warning',
message: '请输入正确的联系电话'
})
return false;
}
console.log(this.formData);
let url = '/governance/icServicePostRecord/edit'
// let url = "http://yapi.elinkservice.cn/mock/245/governance/icServiceProject/service/update"
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {
this.$message({
type: 'success',
message: '操作成功'
})
this.resetData()
this.$emit('handleOk')
} else {
this.btnDisable = false
this.$message.error(msg)
}
},
handleCancle () {
this.resetData()
this.$emit('handleClose')
},
addFormOk(val) {
this.showLabelForm = false;
this.formData.resiSearchTagId = val.tagId;
this.resiSearchTagName = val.tagName;
},
addFormCancle() {
this.showLabelForm = false;
},
handleCloseTag(){
this.resiSearchTagName = ''
this.formData.resiSearchTagId = ''
},
//
handleFileDownload (file) {
var a = document.createElement('a');
var event = new MouseEvent('click');
a.download = file.name;
console.log(a)
a.href = file.url;
a.dispatchEvent(event);
},
// init
initMap () {
//
var center = new window.TMap.LatLng(36.0722275, 120.38945519)
// map TMap.Map()
map = new window.TMap.Map(document.getElementById('app'), {
center: center, //
zoom: 17.2, //
pitch: 43.5, //
rotation: 45 //
})
search = new window.TMap.service.Search({ pageSize: 10 })
//
markers = new TMap.MultiMarker({
map: map,
geometries: []
})
infoWindowList = Array(10)
geocoder = new TMap.service.Geocoder(); //
//
map.on('panend', () => {
this.handleMoveCenter()
})
this.handleMoveCenter()
this.convert()
},
setMarker (lat, lng) {
markers.setGeometries([])
markers.add([
{
id: '4',
styleId: 'marker',
position: new TMap.LatLng(lat, lng),
properties: {
title: 'marker4'
}
}
])
},
handleSearchMap () {
infoWindowList.forEach((infoWindow) => {
infoWindow.close()
})
infoWindowList.length = 0
markers.setGeometries([])
//
search
.searchNearby({
keyword: this.keyWords,
radius: 1000,
autoExtend: true,
center: map.getCenter(),
})
.then((result) => {
let { data } = result
if (Array.isArray(data) && data.length > 0) {
const {
location: { lat, lng }
} = data[0]
map.setCenter(new TMap.LatLng(lat, lng))
this.setMarker(lat, lng)
this.formData.latitude = lat
this.formData.longitude = lng
this.convert()
} else {
this.$message.error('未检索到相关位置坐标')
}
})
},
handleMoveCenter () {
//
const center = map.getCenter()
const lat = center.getLat()
const lng = center.getLng()
this.formData.latitude = lat
this.formData.longitude = lng
this.setMarker(lat, lng)
this.convert(lat, lng)
},
convert (lat, lng) {
markers.setGeometries([]);
// var input = document.getElementById('location').value.split(',');
let location
if (lat && lng) {
location = new TMap.LatLng(lat, lng);
} else {
location = new TMap.LatLng(this.formData.latitude, this.formData.longitude);
}
// map.setCenter(location);
markers.updateGeometries([
{
id: 'main', //
position: location,
},
]);
geocoder
.getAddress({ location: location }) //
.then((result) => {
this.formData.address = result.result.address
//
});
},
resetData () {
this.formData = {}
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule () {
return {
serviceTimeStart: [
{ required: true, message: '服务时间不能为空', trigger: 'blur' }
],
}
},
},
props: {
serviceRecordId: {
type: String,
required: true
},
serviceOrgName: {
type: String,
required: true
},
formType: {// addeditdetail,feedback
type: String,
required: true
},
satisfyArray: {
type: Array,
default () {
return []
}
},
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/form-main.scss";
.attachement-list {
// padding-left: 20px;
a {
display: block;
cursor: pointer;
// color: #4df0ff;
font-size: 14px;
i {
color: #333;
}
}
}
</style>

856
src/views/modules/communityService/gangweizhaoren/index.vue

@ -0,0 +1,856 @@
<template>
<div class="g-main">
<div>
<div class="m-search">
<el-form :inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'100px'">
<el-form-item prop="serviceType"
label="服务类别"
>
<el-select class="u-item-width-daterange"
v-model.trim="formData.serviceTypeLevel1Id"
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceTypesLevel1"
@click.native="handleChangeServiceTypeLevel1"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="serviceType">
<el-select class="u-item-width-daterange"
v-model.trim="formData.serviceTypeLevel2Id"
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceTypesLevel2"
@click.native=""
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="服务时间"
prop="serviceTimeStart">
<el-date-picker v-model="formData.serviceTimeStart"
:picker-options="startPickerOptions"
class="u-item-width-daterange"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker v-model="formData.serviceTimeEnd"
:picker-options="endPickerOptions"
class="u-item-width-daterange u-data-tag"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="服务事项"
prop="serviceName">
<el-input v-model="formData.serviceName"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="服务组织"
prop="serviceOrgType">
<el-select v-model="formData.serviceOrgType"
class="u-item-width-daterange"
placeholder="请选择"
size="small"
clearable
@change="handleServiceChange('add', $event)">
<el-option v-for="item in serviceOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="formData.serviceOrgId"
class="u-item-width-daterange u-data-tag"
filterable
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceOptiondList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="服务状态"
prop="serviceStatus">
<el-select class="u-item-width-normal"
v-model="formData.serviceStatus"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="满意度"
prop="satisfaction">
<el-select class="u-item-width-normal"
v-model="formData.satisfaction"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in satisfyArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-row type="flex" >
<el-col :span="24" align="right">
<el-button style="margin-left:30px"
size="small"
type="primary "
@click="handleSearch">查询</el-button>
<el-button style="margin-left:10px"
is-plain
class="diy-button--white el-button--default"
size="small"
@click="resetSearch">重置</el-button>
</el-col>
</el-row>
</el-form>
</div>
<div class="m-table">
<div class="div_btn">
<div class="div_btn_left">
<el-button
size="small"
@click="handleAdd"
type="primary"
icon="el-icon-plus"
style="margin-right:10px"
>新增</el-button>
</div>
<el-button @click="handleExport"
type="primary"
size="small"
class="diy-button--white el-button--default"
>导出</el-button>
<el-button type="primary" @click="onDeleteBatch" size="small">
批量删除
</el-button>
</div>
<el-table :data="tableData"
border
v-loading="tableLoading"
class="m-table-item"
style="width: 100%"
:height="maxTableHeight"
@select-all="onMultiSelect"
@selection-change="onMultiSelect">
<el-table-column
type="selection"
fixed="left"
align="center"
width="50"/>
<el-table-column label="序号"
fixed="left"
type="index"
align="center"
width="50" />
<el-table-column prop="serviceTypeName"
label="服务类型"
align="center"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceName"
align="center"
min-width="150"
label="服务事项"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="sourceName"
align="center"
min-width="150"
label="来自"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceTimeStart"
align="center"
width="300"
:show-overflow-tooltip="true"
label="服务时间">
<template slot-scope="scope">
<span>{{scope.row.serviceTimeStart}}{{scope.row.serviceTimeEnd}}</span>
</template>
</el-table-column>
<el-table-column prop="serviceOrgName"
align="center"
min-width="150"
label="服务方"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceStatus"
align="center"
width="100"
label="服务状态"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{scope.row.serviceStatus==='in_service'?'进行中':'已完成'}}</span>
</template>
</el-table-column>
<el-table-column prop="servedPersonQty"
align="center"
width="110"
label="服务人数"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<el-button @click="handlePersonList(scope.row)" type="text" size="small">
{{ scope.row.servedPersonQty }}
</el-button>
</template>
</el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"
width="220">
<template slot-scope="scope">
<el-button @click="handleDetail(scope.row)"
type="text"
size="small"
>查看</el-button>
<el-button
@click="handleEdit(scope.row)"
type="text"
size="small"
>编辑</el-button>
<!-- 临时去掉人员名单与反馈 -->
<el-button v-if="scope.row.serviceStatus==='in_service'"
@click="handleFeedback(scope.row)"
type="text"
size="small"
>反馈</el-button>
<!-- <el-button v-if="scope.row.policyId"
@click="handlePersonList(scope.row)"
type="text"
size="small"
>人员名单</el-button> -->
<!-- 暂时不限制删除按钮任何状态都允许删除产品要求的 -->
<!-- v-if="scope.row.serviceStatus==='in_service'" -->
<el-button
@click="handleDel(scope.row)"
type="text"
size="small"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total"
:total="total">
</el-pagination>
</div>
</div>
</div>
<el-dialog v-if="showAdd"
:visible.sync="showAdd"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="addDiaTitle"
:modal-append-to-body="false"
width="720px"
top="5vh"
class="dialog-h"
@closed="showAdd = false">
<add-form ref="ref_add_form"
:formType="formType"
:statusArray="statusArray"
:satisfyArray="satisfyArray"
:serviceRecordId="serviceRecordId"
:serviceName="serviceName"
@handleOk="handleOk"
@handleClose="handleClose"></add-form>
</el-dialog>
<!-- 编辑与新增写在一个组件中 -->
<!-- <el-dialog v-if="showEdit"
:visible.sync="showEdit"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'编辑'"
:modal-append-to-body="false"
width="850px"
top="5vh"
class="dialog-h"
@closed="showEdit = false">
<edit-form ref="ref_edit_form"
:serviceRecordId="serviceRecordId"
:serviceOrgName="serviceOrgName"
:satisfyArray="satisfyArray"
:statusArray="statusArray"
@handleOk="handleOk"
@handleClose="handleClose"
:formType="formType">
</edit-form>
</el-dialog> -->
<el-dialog v-if="showDetail"
:visible.sync="showDetail"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="detailDiaTitle"
:modal-append-to-body="false"
width="850px"
top="5vh"
class="dialog-h"
@closed="diaDetailClose">
<detail-form ref="ref_detail_form"
:serviceRecordId="serviceRecordId"
:serviceOrgName="serviceOrgName"
:satisfyArray="satisfyArray"
:statusArray="statusArray"
@diaDetailClose="diaDetailClose">
</detail-form>
</el-dialog>
<el-dialog v-if="showPersonList"
:visible.sync="showPersonList"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'人员名单'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false">
<person-list ref="ref_person_list"
:serviceId="commonServiceId"
:tagId="tagId">
</person-list>
</el-dialog>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick";
import { mapGetters } from "vuex";
// import eventInfo from "./cpts/event-info";
import axios from "axios";
import addForm from "./addForm";
import detailForm from "./detailForm.vue";
import editForm from "./editForm";
import feedBackForm from "./addForm";
import personList from "./personList";
//
export default {
components: { addForm, detailForm, feedBackForm, editForm, personList },
data () {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.serviceTimeStart) {
let serviceTimeStart = new Date(this.formData.serviceTimeStart)
return time.getTime() > nowData || time.getTime() < serviceTimeStart || time.getTime() === serviceTimeStart
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
//
serviceTypesLevel1:[],
serviceTypesLevel2:[],
tableLoading: false,
user: {},
agencyId: '',
searchH:0,
tableData: [],
statusArray: [
{
value: "in_service",
label: "进行中",
},
{
value: "completed",
label: "已完成",
},
],
satisfyArray: [
{
value: "bad",
label: "不满意",
},
{
value: "good",
label: "基本满意",
},
{
value: "perfect",
label: "非常满意",
},
],
formData: {
serviceTypeLevel1Id:'',// id
serviceTypeLevel2Id:'',// id
serviceName: '',//
serviceOrgType: '',//
serviceOrgId: '',//Id
serviceTimeStart: '',//yyyy-MM-dd
serviceTimeEnd: '',//yyyy-MM-dd
serviceStatus: '',//in_servicecompleted:
satisfaction: '',//.:bad:good:perfect
},
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
serviceRecordId: '',
serviceName: '',
serviceOrgName: '',
showAdd: false,
showEdit: false,
showDetail: false,
showFeedback: false,
formType: 'add',
addDiaTitle: '指派服务',
detailDiaTitle: '服务详情',
serviceOptions: [],
serviceOptiondList: [],
commonServiceId: null,
tagId: null,
showPersonList: false,
ruleList: [],
//
multiSelectedRows: []
};
},
computed: {
maxTableHeight () {
const h =
this.clientHeight - this.searchH - 450 + this.iframeHeight;
const _h = this.clientHeight - 450 - this.searchH;
return this.$store.state.inIframe ? h : _h;
},
...mapGetters(["clientHeight", "iframeHeight"]),
},
watch: {
// "formData.serviceTimeEnd": function (val) {
// if (val && val != '') {
// let arrayTemp = val.split(' ')
// this.formData.serviceTimeEnd = arrayTemp[0] + ' 23:59:59'
// }
// },
},
mounted () {
console.log(this.$store.state)
this.user = this.$store.state.user
this.agencyId = this.user.agencyId
this.getDictOptions()
this.getTableData();
},
methods: {
//
handleChangeServiceTypeLevel1() {
this.formData.serviceTypeLevel2Id = ''
this.$http
.get("/governance/commonServiceType/selectList/" + this.formData.serviceTypeLevel1Id)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceTypesLevel2 = res.data;
}
})
.catch(() => {
return this.$message.error("网络错误");
})
},
handleSearch (val) {
console.log(this.formData);
this.pageNo = 1;
this.getTableData();
},
//
async getDictOptions () {
const url = "/sys/dict/data/dictlist"
let params = {
dictType: 'user_demand_service_type'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.serviceOptions = data;
} else {
this.$message.error(msg)
}
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("网络错误");
});
},
handleServiceChange (type, val) {
this.formData.serviceOrgId = ''
if (val === "social_org") {
if (type === "add") {
this.getServiceuserList(val, "add_demand");
} else {
this.getServiceuserList(val, "query_demand");
}
} else {
this.getServiceuserList(val, "");
}
},
async getServiceuserList (serviceType, query) {
if (!serviceType) return false;
const params = {
serviceName: "",
serviceType: serviceType,
queryPurpose: query,
};
await this.$http
.post("/governance/userdemand/servicelist", params)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceOptiondList = res.data
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
//
async handlePersonList (row) {
this.commonServiceId = row.serviceRecordId;
this.tagId = row.resiSearchTagId;
this.showPersonList = true;
},
async loadRuleList () {
const url = "/governance/policy/rulelist/" + this.policyId
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.ruleList = data
} else {
this.$message.error(msg)
}
},
async handleAdd () {
this.addDiaTitle = '指派服务'
this.formType = 'add'
this.showAdd = true;
},
async handleDetail (row) {
this.detailDiaTitle = "服务详情"
this.serviceRecordId = row.serviceRecordId
this.serviceOrgName = row.serviceOrgName
// this.formType = 'detail'
this.showDetail = true
},
diaDetailClose () {
console.log(this.$refs.ref_detail)
this.$refs.ref_detail_form.diaDestroy()
this.showDetail = false
},
async handleEdit (row) {
this.addDiaTitle = "编辑服务"
this.serviceRecordId = row.serviceRecordId
this.serviceOrgName = row.serviceOrgName
this.formType = 'edit'
this.showAdd = true
},
//
async handleFeedback (row) {
this.serviceRecordId = row.serviceRecordId
this.serviceName = row.serviceName
this.addDiaTitle = '服务反馈'
this.formType = 'feedback'
this.showAdd = true;
},
handleClose () {
this.serviceRecordId = ""
this.formType = ''
this.showAdd = false
this.showDetail = false
this.showEdit = false
},
handleOk () {
this.handleClose()
this.pageNo = 1
this.getTableData()
},
async handleDel (row) {
this.serviceRecordId = row.serviceRecordId
this.$confirm("确认删除服务?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.cancelFuwu([row.serviceRecordId])
})
.catch(err => {
if (err == "cancel") {
// this.$message({
// type: "info",
// message: ""
// });
}
});
},
async cancelFuwu (serviceRecordIds) {
const url = '/governance/icServicePostRecord/searchDeleteBatch';
const { data, code, msg } = await requestPost(url, serviceRecordIds);
if (code === 0) {
this.$message.success("取消成功!");
this.getTableData();
} else {
this.$message.error(msg);
}
},
async getTableData () {
this.tableLoading = true
const url = "/governance/icServicePostRecord/searchList";
const { pageSize, pageNo, formData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...formData,
});
this.tableLoading = false
if (code === 0) {
this.total = data.total ;
this.tableData = data.list
} else {
this.$message.error(msg);
}
},
async handleExport () {
//-''
const url = "/governance/icServicePostRecord/searchExport";
const { pageSize, pageNo, formData } = this;
axios({
url: window.SITE_CONFIG["apiURL"] + url,
method: "post",
data: {
pageSize,
pageNo,
...formData,
},
responseType: "blob",
})
.then((res) => {
let fileName = window.decodeURI(
res.headers["content-disposition"].split(";")[1].split("=")[1]
);
console.log("filename", fileName);
let blob = new Blob([res.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
var url = window.URL.createObjectURL(blob);
var aLink = document.createElement("a");
aLink.style.display = "none";
aLink.href = url;
aLink.setAttribute("download", fileName);
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink); //
window.URL.revokeObjectURL(url); //blob
})
.catch((err) => {
console.log("获取导出情失败", err);
return this.$message.error("网络错误");
});
},
handleSizeChange (val) {
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
this.pageNo = val;
this.getTableData();
},
resetSearch () {
this.formData = {
serviceTypeLevel1Id:'',// id
serviceTypeLevel2Id:'',// id
serviceName: '',//
serviceOrgType: '',//
serviceOrgId: '',//Id
serviceTimeStart: '',//yyyy-MM-dd
serviceTimeEnd: '',//yyyy-MM-dd
serviceStatus: '',//in_servicecompleted:
satisfaction: '',//.:bad:good:perfect
}
this.pageNo = 1
this.getTableData()
},
//
onMultiSelect(row) {
this.multiSelectedRows = row;
},
//
onDeleteBatch() {
if (this.multiSelectedRows.length == 0) {
return;
}
this.$confirm("删除之后无法恢复,确认删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let serviceRecordIds = this.multiSelectedRows.map(item => item.serviceRecordId)
this.cancelFuwu(serviceRecordIds)
})
.catch((err) => {
if (err == "cancel") {
}
});
}
},
props: {
}
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
</style>

486
src/views/modules/communityService/gangweizhaoren/personList.vue

@ -0,0 +1,486 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form
:inline="true"
:model="searchFormData"
ref="ref_searchform"
:label-width="'110px'">
<el-form-item label="所属组织" prop="orgId">
<el-cascader
@change="handleOrgChange"
:options="orgTree"
:props="orgOptionProps"
clearable
placeholder="请选择组织"></el-cascader>
</el-form-item>
<el-form-item label="人员姓名" prop="title">
<el-input
v-model="searchFormData.name"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="手机号" prop="title">
<el-input
v-model="searchFormData.mobile"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="身份证号" prop="title">
<el-input
v-model="searchFormData.idCard"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="享受服务次数" prop="title">
<el-input
v-model="searchFormData.serveTimes"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="家庭住址" prop="title">
<el-select v-model="searchFormData.villageId" placeholder="请选择小区"
@change="handleQuarterSelectorsChange" clearable>
<el-option
v-for="item in quartersSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.buildId" placeholder="请选择楼栋"
@change="handleBuildSelectorsChange" clearable>
<el-option
v-for="item in buildingSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.unitId" placeholder="请选择单元"
@change="handleUnitSelectorsChange" clearable>
<el-option
v-for="item in unitSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.homeId" placeholder="请选择房屋"
@change="handleUnitSelectorsChange" clearable>
<el-option
v-for="item in homeSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button type="primary" size="small" class="diy-button--blue" @click="handleIncrementServeTimes">标记享受服务人员</el-button>
<el-button type="primary" size="small" class="diy-button--blue" @click="handleSearch">查询</el-button>
</div>
<div class="m-table">
<!--表格-->
<el-table
:data="personList"
height="250"
border
@select-all="handleSelectAll"
@selection-change="handleTableRowsSelected"
style="width: 100%">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
prop="agencyName"
label="所属组织"
width="180">
</el-table-column>
<el-table-column
prop="gridName"
label="所属网格"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名">
</el-table-column>
<el-table-column
prop="genderDisplay"
label="性别">
</el-table-column>
<el-table-column
prop="birthday"
width="170"
label="出生日期">
</el-table-column>
<el-table-column
prop="age"
label="年龄">
</el-table-column>
<el-table-column
prop="mobile"
width="120"
label="手机号">
</el-table-column>
<el-table-column
prop="idCard"
width="180"
label="身份证号">
</el-table-column>
<el-table-column
prop="address"
width="250"
label="家庭住址">
</el-table-column>
<el-table-column
prop="serveTimes"
label="享受服务次数">
</el-table-column>
</el-table>
</div>
<!--分页条-->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="searchFormData.pageNo"
:page-sizes="pageSizes"
:page-size="searchFormData.pageSize"
layout="sizes, prev, pager, next, total"
background
:total="total">
</el-pagination>
</div>
</template>
<script>
import { requestPost } from '@/js/dai/request'
import { requestGet } from '@/js/dai/request'
import { EpmetResultResolver } from '@/js/epmet-result-resolver'
import nextTick from 'dai-js/tools/nextTick'
export default {
mounted () {
this.epmetResultResolver = new EpmetResultResolver(this);
this.searchFormData.serviceId = this.serviceId;
this.initOrgTree();
this.handleSearch();
},
data () {
return {
//
searchFormData: {
serviceId: null,
orgId: null,
orgType: null,
tagId: null,
name: null,
mobile: null,
idCard: null,
serveTimes: null,
villageId: null,
buildId: null,
unitId: null,
homeId: null,
pageSize: 10,
pageNo: 1,
},
//
pageSizes: [10, 20, 50, 100, 200],
total: 0, //
//
quartersSelectItems: [],
buildingSelectItems: [],
unitSelectItems: [],
homeSelectItems: [],
orgTree: [], //
//
orgOptionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
//
selectedPersonListIds: [], // id
personList: [], //
epmetResultResolver: null
}
},
methods: {
/**
* 行选中事件
* @returns {Promise<void>}
*/
async handleTableRowsSelected(selection) {
this.selectedPersonListIds = selection.map(e => e.id);
},
/**
* 全选
* @param selection
* @returns {Promise<void>}
*/
async handleSelectAll(selection) {
this.selectedPersonListIds = selection.map(e => e.id);
},
/**
* 搜索事件
* @returns {Promise<void>}
*/
async handleSearch () {
let url = '/actual/base/residentBaseInfo/commonServicePersonList/list'
this.searchFormData.tagId = this.tagId
this.searchFormData.serviceId = this.serviceId
let result = await requestPost(url, this.searchFormData)
this.epmetResultResolver
.success((data) => {
this.personList = data.list;
this.total = data.total;
})
.parse(result);
},
/**
* 标记享受服务人员
* @returns {Promise<void>}
*/
async handleIncrementServeTimes() {
let params = {
recIds: this.selectedPersonListIds
};
let url = "/actual/base/residentBaseInfo/commonServicePersonList/incrementServeTimes";
const rst = await requestPost(url, params);
this.epmetResultResolver.parse(result);
//
this.handleSearch();
},
/**
* 组织选择触发事件
* @returns {Promise<void>}
*/
async initOrgTree () {
let url = '/gov/org/customeragency/agencygridtree'
const { data, code, msg } = await requestPost(url, {})
if (code === 0) {
debugger
this.orgTree.push(data)
}
},
/**
* 加载和填充小区下拉框
* @returns {Promise<void>}
*/
async handleOrgChange (selectedOrgNodes) {
let selectedLastNode = selectedOrgNodes[selectedOrgNodes.length - 1]
this.searchFormData.orgId = selectedLastNode
const { orgId, level } = this.getSelectedOrgIdAndType(selectedLastNode, this.orgTree)
let url = '/actual/base/communityQuarters/listQuartersOptions'
let params = {}
this.searchFormData.orgId = orgId
if (level === 'grid') {
params['gridId'] = orgId
this.searchFormData.orgType = 'grid'
} else {
params['agencyId'] = orgId
this.searchFormData.orgType = 'agency'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.quartersSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 小区选择器change填充楼栋下拉框
* @returns {Promise<void>}
*/
async handleQuarterSelectorsChange (quartersId) {
let url = '/actual/base/communityBuilding/buildingoption'
let params = {
quartersId: quartersId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.buildingSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 楼栋选择器change填充单元下拉框
* @param selectedQuarter
* @returns {Promise<void>}
*/
async handleBuildSelectorsChange (buildId) {
let url = '/actual/base/communityBuildingUnit/unitoption'
let params = {
buildingId: buildId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.unitSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 单元下拉框选择器change填充房屋
* @param unitId
* @returns {Promise<void>}
*/
async handleUnitSelectorsChange (unitId) {
let url = '/actual/base/communityHouse/houseoption'
let params = {
unitId: unitId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.homeSelectItems = data.map(e => {
return {
label: e.label,
value: e.value,
}
})
}
},
/**
* 递归搜索组织树选出选中的节点
* @param orgId
* @param orgList
* @returns {*}
*/
getSelectedOrgIdAndType (orgId, orgList) {
for (let org of orgList) {
if (org.agencyId === orgId) {
return { orgId: org.agencyId, level: org.level }
}
if (org.subAgencyList && org.subAgencyList.length > 0) {
let selectedOrg = this.getSelectedOrgIdAndType(orgId, org.subAgencyList)
if (selectedOrg) {
return selectedOrg
}
}
}
},
//
handleSizeChange (newPageSize) {
this.searchFormData.pageSize = newPageSize
this.handleSearch()
},
//
handleCurrentChange (pageNo) {
this.searchFormData.pageNo = pageNo
this.handleSearch()
}
},
props: {
serviceId: {
type: String,
required: true,
},
tagId: {
type: String,
required: true,
},
serviceId: {
type: String,
required: true,
}
}
}
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/form-main.scss";
.btn-add-rule {
margin-left: 150px;
display: flex;
justify-content: flex-start;
margin-bottom: 20px;
}
.item_width_short {
width: 380px;
}
.item_rule {
display: flex;
justify-content: flex-start;
}
.item_label {
flex: 0 0 150px;
line-height: 30px;
text-align: right;
padding-right: 12px;
}
.item_label:before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
</style>

1066
src/views/modules/communityService/jinengzhaoren/addForm.vue

File diff suppressed because it is too large

399
src/views/modules/communityService/jinengzhaoren/detailForm.vue

@ -0,0 +1,399 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<div v-if="initLoading" class="m-row">
<div class="m-info">
<div class="info-prop">
<span class="info-title-2">服务名称</span>
<span>{{ formData.serviceName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务组织</span>
<span>{{ serviceOrgName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务范围</span>
<span>{{ formData.gridIdListName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">政策依据</span>
<span>{{ formData.policyTitle || "--" }}</span>
<!-- <el-button
v-if="formData.policyId"
style="margin-left: 10px"
type="primary"
size="small"
@click="handlePersonList"
>预览</el-button
> -->
</div>
<div class="info-prop">
<span class="info-title-2">经办人</span>
<span>{{ formData.principalName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">联系方式</span>
<span>{{ formData.principalContact || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务时间</span>
<span>{{ formData.serviceTimeStart || "--" }}</span
>
<span>{{ formData.serviceTimeEnd || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">享受服务人员: </span>
<span>{{ resiSearchTagName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">备注</span>
<span>{{ formData.remark || "--" }}</span>
</div>
<div v-show="formData.serviceStatus === 'completed'">
<h3 class="d-h3">反馈内容</h3>
<div class="info-prop">
<span class="info-title-2">备注</span>
<span>{{ feedbackFormData.serviceGoal || "--" }}</span>
</div>
<!-- <div class="info-prop">
<span class="info-title-2">服务效果</span>
<span>{{ feedbackFormData.serviceEffect || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务人数</span>
<span>{{ feedbackFormData.servicePeopleNumber || 0 }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务状态</span>
<span>{{ feedbackFormData.serviceStatusShow || "--" }}</span>
</div> -->
<div class="info-prop">
<span class="info-title-2">满意度</span>
<span>{{ feedbackFormData.satisfactionShow || "--" }}</span>
</div>
<!-- <div class="info-prop">
<span class="info-title-2">地理位置</span>
<span>{{ feedbackFormData.address || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">地图位置</span>
<div class="div_map">
<div id="app_detail"></div>
</div>
</div>
<div class="info-prop">
<span class="info-title-2">附件</span>
<file-list
v-if="fileList.length > 0"
:fileList="fileList"
></file-list>
<span v-else>--</span>
</div> -->
</div>
</div>
</div>
</div>
<div class="div-btn">
</div>
<el-row type="flex" justify="right">
<el-col :span="24" align="right">
<el-button size="small" @click="handleCancle" style="margin-right:16px;"> </el-button>
</el-col>
</el-row>
<el-dialog
v-if="showPersonList"
:visible.sync="showPersonList"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'政策预览'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false"
>
<person-list
ref="ref_detail_form"
:policyId="policyId"
:ruleList="ruleList"
@handleOk="handleOk"
@handleClose="handleClose"
>
</person-list>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
// import personList from "../policy/oldPersonList.vue";
import fileList from "@/views/components/fileList";
import daiMap from "@/utils/dai-map";
var map;
let loading; //
export default {
data() {
return {
initLoading: false,
keyWords: "",
formData: {},
resiSearchTagName:"",
feedbackFormData: {
serviceProjectId: "", // id
serviceName: "",
serviceGoal: "", //
serviceEffect: "", //
servicePeopleNumber: null, //
serviceStatus: "completed", // in_servicecompleted:
satisfaction: "", //:bad:good:perfect
longitude: "", //
latitude: "", //
address: "",
fileList: [], //
},
policyId: "",
showPersonList: false,
ruleList: [],
policyList: [],
};
},
components: { fileList },
async mounted() {
// if (this.serviceRecordId) {//
await this.loadInfo();
this.initLoading = true;
if (
this.formData.serviceStatus === "completed" &&
this.feedbackFormData.latitude
) {
this.$nextTick(() => {
this.initMap();
});
}
},
methods: {
diaDestroy() {},
//
async handlePersonList() {
if (!this.formData.policyId) {
this.$message.info("请先选择政策");
return false;
}
this.policyId = this.formData.policyId;
await this.loadRuleList();
this.showPersonList = true;
},
async loadRuleList() {
const url = "/governance/policy/rulelist/" + this.policyId;
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.ruleList = data;
} else {
this.$message.error(msg);
}
},
handleClose() {
this.showPersonList = false;
},
//
async loadInfo() {
const url = "/governance/icServiceSkillRecord/detail";
let params = {
serviceRecordId: this.serviceRecordId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.formData = { ...data };
this.formData.serviceRecordId = this.serviceRecordId;
this.feedbackFormData = { ...data.feedback };
this.formData.gridIdListName = "";
this.feedbackFormData.serviceStatusShow = "";
this.feedbackFormData.satisfactionShow = "";
await this.getTagName()
let arr = [];
this.formData.gridIdList.forEach((element) => {
arr.push(element.objectName);
});
this.formData.gridIdListName = arr.join(",");
this.statusArray.forEach((element) => {
if (this.formData.serviceStatus === element.value) {
this.feedbackFormData.serviceStatusShow = element.label;
}
});
this.satisfyArray.forEach((element) => {
if (this.feedbackFormData.satisfaction === element.value) {
this.feedbackFormData.satisfactionShow = element.label;
}
});
this.fileList = [];
if (
data.feedback &&
data.feedback.fileList &&
data.feedback.fileList.length > 0
) {
data.feedback.fileList.forEach((element) => {
let obj = {
name: element.name,
format: element.format,
url: element.url,
type: element.type,
};
this.fileList.push(obj);
});
}
} else {
this.$message.error(msg);
}
},
async getTagName() {
const url = "/governance/resiSearchTag/listResiSearchTags";
let params = {
pageSize: 99,
};
let { data, msg, code } = await requestPost(url, params);
if (code == 0) {
let showAddProduct = data.list.filter(item=>{
return [this.formData.resiSearchTagId].includes(item.tagId)
})
if(this.formData.resiSearchTagId){
this.resiSearchTagName = showAddProduct[0].tagName
}else{
this.resiSearchTagName = '--'
}
} else {
this.$message.error(msg);
}
},
handleCancle() {
this.resetData();
this.$emit("diaDetailClose");
},
// init
initMap() {
let { latitude, longitude } = this.feedbackFormData;
map = new daiMap(
document.getElementById("app_detail"),
{ latitude, longitude },
{
zoom: 16.2, //
pitch: 43.5, //
rotation: 45, //
}
);
map.setCenter(latitude, longitude);
map.setMarker(latitude, longitude);
},
handleOk() {
this.showPersonList = false;
},
resetData() {
this.formData = {};
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
computed: {
dataRule() {
return {
serviceTimeStart: [
{ required: true, message: "服务时间不能为空", trigger: "blur" },
],
};
},
// resiSearchTagNameText(){
// let text = ""
// if(this.resiSearchTagName){
// text = this.resiSearchTagName
// }else {
// text = '--'
// }
// return text
// },
},
props: {
serviceRecordId: {
type: String,
required: true,
},
serviceOrgName: {
type: String,
required: true,
},
satisfyArray: {
type: Array,
default() {
return [];
},
},
statusArray: {
type: Array,
default() {
return [];
},
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/detail-main.scss";
.info-prop{
margin-top: 29px;
}
.scroll-h{
padding: 0 90px !important;
}
</style>

825
src/views/modules/communityService/jinengzhaoren/editForm.vue

@ -0,0 +1,825 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form ref="ref_form"
:inline="true"
:model="formData"
:rules="dataRule"
class="div_form">
<el-form-item label="服务名称"
prop="serviceName"
label-width="150px"
style="display: block">
<span>{{formData.serviceName}}</span>
<!-- <el-select class="item_width_1"
v-model="formData.serviceProjectId"
placeholder="请选择"
filterable
clearable>
<el-option v-for="(item,index) in projectList"
@click.native="hancleClickProject(index)"
:key="item.serviceProjectId"
:label="item.serviceName"
:value="item.serviceProjectId">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="服务组织"
prop="serviceOrgId"
label-width="150px"
style="display: block">
<span>{{serviceOrgName}}</span>
<!-- <el-select class="item_width_1"
v-model="formData.serviceOrgId"
placeholder="请选择"
filterable
clearable>
<el-option v-for="item in orgList"
:key="item.icServiceOrgId"
:label="item.orgName"
:value="item.icServiceOrgId">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="服务范围"
prop="gridIdList"
label-width="150px"
style="display: block">
<div v-for="item in formData.gridIdList"
:key="item.objectId">
<div>{{item.objectName}}</div>
</div>
<!-- <el-cascader class="item_width_1"
ref="myCascader"
v-model="scopeIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeScope"></el-cascader> -->
</el-form-item>
<el-form-item label="政策依据"
prop="policyId"
label-width="150px"
style="display: block">
<el-select :disabled="formType==='detail'"
v-model="formData.policyId"
class="input-width-small"
placeholder="请选择"
clearable>
<el-option v-for="item in policyList"
:key="item.policyId"
:label="item.title"
:value="item.policyId">
</el-option>
</el-select>
<!--
<el-button style="margin-left: 10px"
type="primary"
size="small"
@click="handlePersonList">预览</el-button> -->
</el-form-item>
<el-form-item label="经办人"
prop="principalName"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
placeholder="请输入经办人姓名"
v-model="formData.principalName">
</el-input>
</el-form-item>
<el-form-item label="联系方式"
prop="principalContact"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
placeholder="请输入联系方式"
v-model="formData.principalContact">
</el-input>
</el-form-item>
<el-form-item label="指派服务" label-width="150px">
<el-switch v-model="assignSwitch"> </el-switch>
</el-form-item>
<el-form-item
label="查找享受服务人员"
prop="principalContact"
label-width="150px"
style="display: block"
v-show="this.assignSwitch"
>
<input type="text" v-model="formData.resiSearchTagId" v-show="false">
<template v-if="this.resiSearchTagName">
<el-tag @close="handleCloseTag" closable style="margin-right:10px;">
{{this.resiSearchTagName }}
</el-tag>
</template>
<el-button type="primary" @click="handleClickLabel" size="mini">
<span> <i class="el-icon-plus"></i> 按标签查找 </span>
</el-button>
</el-form-item>
<el-form-item label="服务时间"
label-width="150px"
prop="serviceTimeStart"
style="display: block">
<el-date-picker :disabled="formType==='detail'"
v-model="formData.serviceTimeStart"
:picker-options="startPickerOptions"
class="item_width_2"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker :disabled="formType==='detail'"
v-model="formData.serviceTimeEnd"
:picker-options="endPickerOptions"
class="item_width_2 u-data-tag"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注"
prop="remark"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
type="textarea"
maxlength="500"
show-word-limit
:rows="3"
placeholder="请输入备注,不超过500字"
v-model="formData.remark"></el-input>
</el-form-item>
</el-form>
<div v-show="formData.serviceStatus==='completed'">
<h3 class="d-h3">反馈内容</h3>
<el-form ref="ref_form_feedback"
:inline="true"
:disabled="true"
:model="feedbackFormData"
class="div_form">
<el-form-item label="服务目标"
prop="serviceGoal"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入服务目标,不超过1000字"
v-model="feedbackFormData.serviceGoal"></el-input>
</el-form-item>
<el-form-item label="服务效果"
prop="serviceEffect"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入服务效果,不超过1000字"
v-model="feedbackFormData.serviceEffect"></el-input>
</el-form-item>
<el-form-item label="服务人数"
style="display: block"
prop="servicePeopleNumber"
label-width="150px">
<el-input-number class="item_width_2"
v-model="feedbackFormData.servicePeopleNumber"
:min="0"
:max="9999"
label="服务人数"></el-input-number>
</el-form-item>
<el-form-item label="服务状态"
label-width="150px"
style="display: block"
prop="serviceStatus">
<span>已完成</span>
<!-- <el-select class="item_width_1"
v-model="feedbackFormData.serviceStatus"
placeholder="全部"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="满意度"
style="display: block"
label-width="150px"
prop="satisfaction">
<el-select class="item_width_2"
v-model="feedbackFormData.satisfaction"
placeholder="全部"
clearable>
<el-option v-for="item in satisfyArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="地址"
prop="address"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
v-model="feedbackFormData.address"></el-input>
</el-form-item>
<!-- <el-form-item label="地图位置"
label-width="150px"
style="display: block">
<div style="width:500px">
<div class="div_map">
<div id="map_app">
</div>
<div class="div_searchmap">
<el-input maxlength="50"
size="mini"
placeholder="请输入关键字"
v-model="keyWords">
</el-input>
<el-button style="margin-left: 10px"
type="primary"
size="mini"
@click="handleSearchMap">查询</el-button>
</div>
</div>
</div>
</el-form-item> -->
<el-form-item class="block"
label="附件"
label-width="150px"
prop="attach">
<!-- <el-upload :headers="$getElUploadHeaders()" v-if="feedbackFormData.fileList&&feedbackFormData.fileList.length>0"
class="upload-demo"
:on-preview="handleFileDownload"
accept=".doc,.pdf,.xls,.docx,.xlsx,.jpg,.png,.jpeg,.bmp,.mp4,.wma,.m4a,.mp3"
:limit="3"
:file-list="fileList">
</el-upload> -->
<div v-if="feedbackFormData.fileList&&feedbackFormData.fileList.length>0"
class="attachement-list">
<a :href="att.url"
target="_blank"
:key="att.url"
v-for="att in feedbackFormData.fileList">
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
</div>
<span v-else>无附件</span>
</el-form-item>
</el-form>
</div>
</div>
<div class="div_btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
v-if="formType != 'detail'"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"> </el-button>
</div>
<el-dialog v-if="showPersonList"
:visible.sync="showPersonList"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'标签查找'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false">
<person-list ref="ref_detail_form"
:policyId="policyId"
:ruleList="ruleList"
@handleOk="handleOk"
@handleClose="handleClose">
</person-list>
</el-dialog>
<el-dialog
v-if="showLabelForm"
:visible.sync="showLabelForm"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'标签配置'"
width="900px"
top="5vh"
class="dialog-h"
@closed="showLabelForm = false"
>
<label-form
ref="ref_label_form"
:policyId="policyId"
:ruleList="ruleList"
@dialogCancle="addFormCancle"
@dialogOk="addFormOk"
>
<!-- @handleOk="handleOk"
@handleClose="handleClose" -->
</label-form>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
// import personList from "../policy/oldPersonList.vue";
import labelForm from "../labelConfig/addForm.vue";
import { nextTick } from 'vue';
var map
var search
var markers
var infoWindowList
var geocoder //
let loading //
export default {
data () {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.serviceTimeStart) {
let serviceTimeStart = new Date(this.formData.serviceTimeStart)
return time.getTime() > nowData || time.getTime() < serviceTimeStart || time.getTime() === serviceTimeStart
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
btnDisable: false,
keyWords: '',
assignSwitch: true,
formData: {
},
showLabelForm: false,
resiSearchTagName:'',
feedbackFormData: {
serviceProjectId: '',// id
serviceName: '',
serviceGoal: '',//
serviceEffect: '',//
servicePeopleNumber: null,//
serviceStatus: 'completed',// in_servicecompleted:
satisfaction: '',//:bad:good:perfect
longitude: '',//
latitude: '',//
address: '',
fileList: [],//
},
serviceList: [],//list
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
policyList: [],
projectList: [],
fileList: [],
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile',
policyId: '',
showPersonList: false,
ruleList: []
}
},
components: { labelForm},
mounted () {
this.getPolicyList()
if (this.serviceRecordId) {//
this.loadInfo()
}
// this.initMap()
},
methods: {
//
async handlePersonList () {
if (!this.formData.policyId) {
this.$message.info('请先选择政策')
return false
}
this.policyId = this.formData.policyId
await this.loadRuleList()
this.showPersonList = true;
},
async loadRuleList () {
const url = "/governance/policy/rulelist/" + this.policyId
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.ruleList = data
} else {
this.$message.error(msg)
}
},
handleClose () {
this.showPersonList = false
},
handleOk () {
this.showPersonList = false
},
handleClickLabel() {
this.showLabelForm = true;
this.$nextTick(() => {
this.$refs["ref_label_form"].initForm("info");
});
},
async getPolicyList () {
const url = '/governance/policy/policyList'
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.policyList = data
} else {
this.$message.error(msg)
}
},
//
async loadInfo () {
const url = '/governance/icServiceSkillRecord/detail'
let params = {
serviceRecordId: this.serviceRecordId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.formData = { ...data }
this.formData.serviceRecordId = this.serviceRecordId
this.feedbackFormData = { ...data.feedback }
await this.getTagName()
this.fileList = []
if (data.feedback && data.feedback.fileList && data.feedback.fileList.length > 0) {
data.feedback.fileList.forEach(element => {
let obj = {
name: element.name,
format: element.format,
url: element.url,
}
this.fileList.push(obj)
});
}
} else {
this.$message.error(msg)
}
},
async getTagName() {
const url = "/governance/resiSearchTag/listResiSearchTags";
let params = {
pageSize: 99,
};
let { data, msg, code } = await requestPost(url, params);
if (code == 0) {
let showAddProduct = data.list.filter(item=>{
return [this.formData.resiSearchTagId].includes(item.tagId)
})
this.resiSearchTagName = showAddProduct[0].tagName
this.assignSwitch = true
} else {
this.$message.error(msg);
}
},
async handleComfirm () {
this.btnDisable = true
setTimeout(() => {
this.btnDisable = false
}, 10000)
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj)
this.btnDisable = false
} else {
this.editFuwu()
}
})
},
async editFuwu () {
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //
if (this.formData.principalContact && regPhone.test(this.formData.principalContact) === false) {
this.btnDisable = false
this.$message({
type: 'warning',
message: '请输入正确的联系电话'
})
return false;
}
console.log(this.formData);
let url = '/governance/icServiceSkillRecord/edit'
// let url = "http://yapi.elinkservice.cn/mock/245/governance/icServiceProject/service/update"
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {
this.$message({
type: 'success',
message: '操作成功'
})
this.resetData()
this.$emit('handleOk')
} else {
this.btnDisable = false
this.$message.error(msg)
}
},
handleCancle () {
this.resetData()
this.$emit('handleClose')
},
addFormOk(val) {
this.showLabelForm = false;
this.formData.resiSearchTagId = val.tagId;
this.resiSearchTagName = val.tagName;
},
addFormCancle() {
this.showLabelForm = false;
},
handleCloseTag(){
this.resiSearchTagName = ''
this.formData.resiSearchTagId = ''
},
//
handleFileDownload (file) {
var a = document.createElement('a');
var event = new MouseEvent('click');
a.download = file.name;
console.log(a)
a.href = file.url;
a.dispatchEvent(event);
},
// init
initMap () {
//
var center = new window.TMap.LatLng(36.0722275, 120.38945519)
// map TMap.Map()
map = new window.TMap.Map(document.getElementById('app'), {
center: center, //
zoom: 17.2, //
pitch: 43.5, //
rotation: 45 //
})
search = new window.TMap.service.Search({ pageSize: 10 })
//
markers = new TMap.MultiMarker({
map: map,
geometries: []
})
infoWindowList = Array(10)
geocoder = new TMap.service.Geocoder(); //
//
map.on('panend', () => {
this.handleMoveCenter()
})
this.handleMoveCenter()
this.convert()
},
setMarker (lat, lng) {
markers.setGeometries([])
markers.add([
{
id: '4',
styleId: 'marker',
position: new TMap.LatLng(lat, lng),
properties: {
title: 'marker4'
}
}
])
},
handleSearchMap () {
infoWindowList.forEach((infoWindow) => {
infoWindow.close()
})
infoWindowList.length = 0
markers.setGeometries([])
//
search
.searchNearby({
keyword: this.keyWords,
radius: 1000,
autoExtend: true,
center: map.getCenter(),
})
.then((result) => {
let { data } = result
if (Array.isArray(data) && data.length > 0) {
const {
location: { lat, lng }
} = data[0]
map.setCenter(new TMap.LatLng(lat, lng))
this.setMarker(lat, lng)
this.formData.latitude = lat
this.formData.longitude = lng
this.convert()
} else {
this.$message.error('未检索到相关位置坐标')
}
})
},
handleMoveCenter () {
//
const center = map.getCenter()
const lat = center.getLat()
const lng = center.getLng()
this.formData.latitude = lat
this.formData.longitude = lng
this.setMarker(lat, lng)
this.convert(lat, lng)
},
convert (lat, lng) {
markers.setGeometries([]);
// var input = document.getElementById('location').value.split(',');
let location
if (lat && lng) {
location = new TMap.LatLng(lat, lng);
} else {
location = new TMap.LatLng(this.formData.latitude, this.formData.longitude);
}
// map.setCenter(location);
markers.updateGeometries([
{
id: 'main', //
position: location,
},
]);
geocoder
.getAddress({ location: location }) //
.then((result) => {
this.formData.address = result.result.address
//
});
},
resetData () {
this.formData = {}
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule () {
return {
serviceTimeStart: [
{ required: true, message: '服务时间不能为空', trigger: 'blur' }
],
}
},
},
props: {
serviceRecordId: {
type: String,
required: true
},
serviceOrgName: {
type: String,
required: true
},
formType: {// addeditdetail,feedback
type: String,
required: true
},
satisfyArray: {
type: Array,
default () {
return []
}
},
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/form-main.scss";
.attachement-list {
// padding-left: 20px;
a {
display: block;
cursor: pointer;
// color: #4df0ff;
font-size: 14px;
i {
color: #333;
}
}
}
</style>

856
src/views/modules/communityService/jinengzhaoren/index.vue

@ -0,0 +1,856 @@
<template>
<div class="g-main">
<div>
<div class="m-search">
<el-form :inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'100px'">
<el-form-item prop="serviceType"
label="服务类别"
>
<el-select class="u-item-width-daterange"
v-model.trim="formData.serviceTypeLevel1Id"
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceTypesLevel1"
@click.native="handleChangeServiceTypeLevel1"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="serviceType">
<el-select class="u-item-width-daterange"
v-model.trim="formData.serviceTypeLevel2Id"
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceTypesLevel2"
@click.native=""
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="服务时间"
prop="serviceTimeStart">
<el-date-picker v-model="formData.serviceTimeStart"
:picker-options="startPickerOptions"
class="u-item-width-daterange"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker v-model="formData.serviceTimeEnd"
:picker-options="endPickerOptions"
class="u-item-width-daterange u-data-tag"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="服务事项"
prop="serviceName">
<el-input v-model="formData.serviceName"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="服务组织"
prop="serviceOrgType">
<el-select v-model="formData.serviceOrgType"
class="u-item-width-daterange"
placeholder="请选择"
size="small"
clearable
@change="handleServiceChange('add', $event)">
<el-option v-for="item in serviceOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="formData.serviceOrgId"
class="u-item-width-daterange u-data-tag"
filterable
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceOptiondList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="服务状态"
prop="serviceStatus">
<el-select class="u-item-width-normal"
v-model="formData.serviceStatus"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="满意度"
prop="satisfaction">
<el-select class="u-item-width-normal"
v-model="formData.satisfaction"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in satisfyArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-row type="flex" >
<el-col :span="24" align="right">
<el-button style="margin-left:30px"
size="small"
type="primary "
@click="handleSearch">查询</el-button>
<el-button style="margin-left:10px"
is-plain
class="diy-button--white el-button--default"
size="small"
@click="resetSearch">重置</el-button>
</el-col>
</el-row>
</el-form>
</div>
<div class="m-table">
<div class="div_btn">
<div class="div_btn_left">
<el-button
size="small"
@click="handleAdd"
type="primary"
icon="el-icon-plus"
style="margin-right:10px"
>新增</el-button>
</div>
<el-button @click="handleExport"
type="primary"
size="small"
class="diy-button--white el-button--default"
>导出</el-button>
<el-button type="primary" @click="onDeleteBatch" size="small">
批量删除
</el-button>
</div>
<el-table :data="tableData"
border
v-loading="tableLoading"
class="m-table-item"
style="width: 100%"
:height="maxTableHeight"
@select-all="onMultiSelect"
@selection-change="onMultiSelect">
<el-table-column
type="selection"
fixed="left"
align="center"
width="50"/>
<el-table-column label="序号"
fixed="left"
type="index"
align="center"
width="50" />
<el-table-column prop="serviceTypeName"
label="服务类型"
align="center"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceName"
align="center"
min-width="150"
label="服务事项"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="sourceName"
align="center"
min-width="150"
label="来自"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceTimeStart"
align="center"
width="300"
:show-overflow-tooltip="true"
label="服务时间">
<template slot-scope="scope">
<span>{{scope.row.serviceTimeStart}}{{scope.row.serviceTimeEnd}}</span>
</template>
</el-table-column>
<el-table-column prop="serviceOrgName"
align="center"
min-width="150"
label="服务方"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceStatus"
align="center"
width="100"
label="服务状态"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{scope.row.serviceStatus==='in_service'?'进行中':'已完成'}}</span>
</template>
</el-table-column>
<el-table-column prop="servedPersonQty"
align="center"
width="110"
label="服务人数"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<el-button @click="handlePersonList(scope.row)" type="text" size="small">
{{ scope.row.servedPersonQty }}
</el-button>
</template>
</el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"
width="220">
<template slot-scope="scope">
<el-button @click="handleDetail(scope.row)"
type="text"
size="small"
>查看</el-button>
<el-button
@click="handleEdit(scope.row)"
type="text"
size="small"
>编辑</el-button>
<!-- 临时去掉人员名单与反馈 -->
<el-button v-if="scope.row.serviceStatus==='in_service'"
@click="handleFeedback(scope.row)"
type="text"
size="small"
>反馈</el-button>
<!-- <el-button v-if="scope.row.policyId"
@click="handlePersonList(scope.row)"
type="text"
size="small"
>人员名单</el-button> -->
<!-- 暂时不限制删除按钮任何状态都允许删除产品要求的 -->
<!-- v-if="scope.row.serviceStatus==='in_service'" -->
<el-button
@click="handleDel(scope.row)"
type="text"
size="small"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total"
:total="total">
</el-pagination>
</div>
</div>
</div>
<el-dialog v-if="showAdd"
:visible.sync="showAdd"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="addDiaTitle"
:modal-append-to-body="false"
width="720px"
top="5vh"
class="dialog-h"
@closed="showAdd = false">
<add-form ref="ref_add_form"
:formType="formType"
:statusArray="statusArray"
:satisfyArray="satisfyArray"
:serviceRecordId="serviceRecordId"
:serviceName="serviceName"
@handleOk="handleOk"
@handleClose="handleClose"></add-form>
</el-dialog>
<!-- 编辑与新增写在一个组件中 -->
<!-- <el-dialog v-if="showEdit"
:visible.sync="showEdit"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'编辑'"
:modal-append-to-body="false"
width="850px"
top="5vh"
class="dialog-h"
@closed="showEdit = false">
<edit-form ref="ref_edit_form"
:serviceRecordId="serviceRecordId"
:serviceOrgName="serviceOrgName"
:satisfyArray="satisfyArray"
:statusArray="statusArray"
@handleOk="handleOk"
@handleClose="handleClose"
:formType="formType">
</edit-form>
</el-dialog> -->
<el-dialog v-if="showDetail"
:visible.sync="showDetail"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="detailDiaTitle"
:modal-append-to-body="false"
width="850px"
top="5vh"
class="dialog-h"
@closed="diaDetailClose">
<detail-form ref="ref_detail_form"
:serviceRecordId="serviceRecordId"
:serviceOrgName="serviceOrgName"
:satisfyArray="satisfyArray"
:statusArray="statusArray"
@diaDetailClose="diaDetailClose">
</detail-form>
</el-dialog>
<el-dialog v-if="showPersonList"
:visible.sync="showPersonList"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'人员名单'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false">
<person-list ref="ref_person_list"
:serviceId="commonServiceId"
:tagId="tagId">
</person-list>
</el-dialog>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick";
import { mapGetters } from "vuex";
// import eventInfo from "./cpts/event-info";
import axios from "axios";
import addForm from "./addForm";
import detailForm from "./detailForm.vue";
import editForm from "./editForm";
import feedBackForm from "./addForm";
import personList from "./personList";
//
export default {
components: { addForm, detailForm, feedBackForm, editForm, personList },
data () {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.serviceTimeStart) {
let serviceTimeStart = new Date(this.formData.serviceTimeStart)
return time.getTime() > nowData || time.getTime() < serviceTimeStart || time.getTime() === serviceTimeStart
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
//
serviceTypesLevel1:[],
serviceTypesLevel2:[],
tableLoading: false,
user: {},
agencyId: '',
searchH:0,
tableData: [],
statusArray: [
{
value: "in_service",
label: "进行中",
},
{
value: "completed",
label: "已完成",
},
],
satisfyArray: [
{
value: "bad",
label: "不满意",
},
{
value: "good",
label: "基本满意",
},
{
value: "perfect",
label: "非常满意",
},
],
formData: {
serviceTypeLevel1Id:'',// id
serviceTypeLevel2Id:'',// id
serviceName: '',//
serviceOrgType: '',//
serviceOrgId: '',//Id
serviceTimeStart: '',//yyyy-MM-dd
serviceTimeEnd: '',//yyyy-MM-dd
serviceStatus: '',//in_servicecompleted:
satisfaction: '',//.:bad:good:perfect
},
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
serviceRecordId: '',
serviceName: '',
serviceOrgName: '',
showAdd: false,
showEdit: false,
showDetail: false,
showFeedback: false,
formType: 'add',
addDiaTitle: '指派服务',
detailDiaTitle: '服务详情',
serviceOptions: [],
serviceOptiondList: [],
commonServiceId: null,
tagId: null,
showPersonList: false,
ruleList: [],
//
multiSelectedRows: []
};
},
computed: {
maxTableHeight () {
const h =
this.clientHeight - this.searchH - 450 + this.iframeHeight;
const _h = this.clientHeight - 450 - this.searchH;
return this.$store.state.inIframe ? h : _h;
},
...mapGetters(["clientHeight", "iframeHeight"]),
},
watch: {
// "formData.serviceTimeEnd": function (val) {
// if (val && val != '') {
// let arrayTemp = val.split(' ')
// this.formData.serviceTimeEnd = arrayTemp[0] + ' 23:59:59'
// }
// },
},
mounted () {
console.log(this.$store.state)
this.user = this.$store.state.user
this.agencyId = this.user.agencyId
this.getDictOptions()
this.getTableData();
},
methods: {
//
handleChangeServiceTypeLevel1() {
this.formData.serviceTypeLevel2Id = ''
this.$http
.get("/governance/commonServiceType/selectList/" + this.formData.serviceTypeLevel1Id)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceTypesLevel2 = res.data;
}
})
.catch(() => {
return this.$message.error("网络错误");
})
},
handleSearch (val) {
console.log(this.formData);
this.pageNo = 1;
this.getTableData();
},
//
async getDictOptions () {
const url = "/sys/dict/data/dictlist"
let params = {
dictType: 'user_demand_service_type'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.serviceOptions = data;
} else {
this.$message.error(msg)
}
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("网络错误");
});
},
handleServiceChange (type, val) {
this.formData.serviceOrgId = ''
if (val === "social_org") {
if (type === "add") {
this.getServiceuserList(val, "add_demand");
} else {
this.getServiceuserList(val, "query_demand");
}
} else {
this.getServiceuserList(val, "");
}
},
async getServiceuserList (serviceType, query) {
if (!serviceType) return false;
const params = {
serviceName: "",
serviceType: serviceType,
queryPurpose: query,
};
await this.$http
.post("/governance/userdemand/servicelist", params)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceOptiondList = res.data
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
//
async handlePersonList (row) {
this.commonServiceId = row.serviceRecordId;
this.tagId = row.resiSearchTagId;
this.showPersonList = true;
},
async loadRuleList () {
const url = "/governance/policy/rulelist/" + this.policyId
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.ruleList = data
} else {
this.$message.error(msg)
}
},
async handleAdd () {
this.addDiaTitle = '指派服务'
this.formType = 'add'
this.showAdd = true;
},
async handleDetail (row) {
this.detailDiaTitle = "服务详情"
this.serviceRecordId = row.serviceRecordId
this.serviceOrgName = row.serviceOrgName
// this.formType = 'detail'
this.showDetail = true
},
diaDetailClose () {
console.log(this.$refs.ref_detail)
this.$refs.ref_detail_form.diaDestroy()
this.showDetail = false
},
async handleEdit (row) {
this.addDiaTitle = "编辑服务"
this.serviceRecordId = row.serviceRecordId
this.serviceOrgName = row.serviceOrgName
this.formType = 'edit'
this.showAdd = true
},
//
async handleFeedback (row) {
this.serviceRecordId = row.serviceRecordId
this.serviceName = row.serviceName
this.addDiaTitle = '服务反馈'
this.formType = 'feedback'
this.showAdd = true;
},
handleClose () {
this.serviceRecordId = ""
this.formType = ''
this.showAdd = false
this.showDetail = false
this.showEdit = false
},
handleOk () {
this.handleClose()
this.pageNo = 1
this.getTableData()
},
async handleDel (row) {
this.serviceRecordId = row.serviceRecordId
this.$confirm("确认删除服务?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.cancelFuwu([row.serviceRecordId])
})
.catch(err => {
if (err == "cancel") {
// this.$message({
// type: "info",
// message: ""
// });
}
});
},
async cancelFuwu (serviceRecordIds) {
const url = '/governance/icServiceSkillRecord/searchDeleteBatch';
const { data, code, msg } = await requestPost(url, serviceRecordIds);
if (code === 0) {
this.$message.success("取消成功!");
this.getTableData();
} else {
this.$message.error(msg);
}
},
async getTableData () {
this.tableLoading = true
const url = "/governance/icServiceSkillRecord/searchList";
const { pageSize, pageNo, formData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...formData,
});
this.tableLoading = false
if (code === 0) {
this.total = data.total ;
this.tableData = data.list
} else {
this.$message.error(msg);
}
},
async handleExport () {
//-''
const url = "/governance/icServiceSkillRecord/searchExport";
const { pageSize, pageNo, formData } = this;
axios({
url: window.SITE_CONFIG["apiURL"] + url,
method: "post",
data: {
pageSize,
pageNo,
...formData,
},
responseType: "blob",
})
.then((res) => {
let fileName = window.decodeURI(
res.headers["content-disposition"].split(";")[1].split("=")[1]
);
console.log("filename", fileName);
let blob = new Blob([res.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
var url = window.URL.createObjectURL(blob);
var aLink = document.createElement("a");
aLink.style.display = "none";
aLink.href = url;
aLink.setAttribute("download", fileName);
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink); //
window.URL.revokeObjectURL(url); //blob
})
.catch((err) => {
console.log("获取导出情失败", err);
return this.$message.error("网络错误");
});
},
handleSizeChange (val) {
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
this.pageNo = val;
this.getTableData();
},
resetSearch () {
this.formData = {
serviceTypeLevel1Id:'',// id
serviceTypeLevel2Id:'',// id
serviceName: '',//
serviceOrgType: '',//
serviceOrgId: '',//Id
serviceTimeStart: '',//yyyy-MM-dd
serviceTimeEnd: '',//yyyy-MM-dd
serviceStatus: '',//in_servicecompleted:
satisfaction: '',//.:bad:good:perfect
}
this.pageNo = 1
this.getTableData()
},
//
onMultiSelect(row) {
this.multiSelectedRows = row;
},
//
onDeleteBatch() {
if (this.multiSelectedRows.length == 0) {
return;
}
this.$confirm("删除之后无法恢复,确认删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let serviceRecordIds = this.multiSelectedRows.map(item => item.serviceRecordId)
this.cancelFuwu(serviceRecordIds)
})
.catch((err) => {
if (err == "cancel") {
}
});
}
},
props: {
}
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
</style>

486
src/views/modules/communityService/jinengzhaoren/personList.vue

@ -0,0 +1,486 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form
:inline="true"
:model="searchFormData"
ref="ref_searchform"
:label-width="'110px'">
<el-form-item label="所属组织" prop="orgId">
<el-cascader
@change="handleOrgChange"
:options="orgTree"
:props="orgOptionProps"
clearable
placeholder="请选择组织"></el-cascader>
</el-form-item>
<el-form-item label="人员姓名" prop="title">
<el-input
v-model="searchFormData.name"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="手机号" prop="title">
<el-input
v-model="searchFormData.mobile"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="身份证号" prop="title">
<el-input
v-model="searchFormData.idCard"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="享受服务次数" prop="title">
<el-input
v-model="searchFormData.serveTimes"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="家庭住址" prop="title">
<el-select v-model="searchFormData.villageId" placeholder="请选择小区"
@change="handleQuarterSelectorsChange" clearable>
<el-option
v-for="item in quartersSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.buildId" placeholder="请选择楼栋"
@change="handleBuildSelectorsChange" clearable>
<el-option
v-for="item in buildingSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.unitId" placeholder="请选择单元"
@change="handleUnitSelectorsChange" clearable>
<el-option
v-for="item in unitSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.homeId" placeholder="请选择房屋"
@change="handleUnitSelectorsChange" clearable>
<el-option
v-for="item in homeSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button type="primary" size="small" class="diy-button--blue" @click="handleIncrementServeTimes">标记享受服务人员</el-button>
<el-button type="primary" size="small" class="diy-button--blue" @click="handleSearch">查询</el-button>
</div>
<div class="m-table">
<!--表格-->
<el-table
:data="personList"
height="250"
border
@select-all="handleSelectAll"
@selection-change="handleTableRowsSelected"
style="width: 100%">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
prop="agencyName"
label="所属组织"
width="180">
</el-table-column>
<el-table-column
prop="gridName"
label="所属网格"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名">
</el-table-column>
<el-table-column
prop="genderDisplay"
label="性别">
</el-table-column>
<el-table-column
prop="birthday"
width="170"
label="出生日期">
</el-table-column>
<el-table-column
prop="age"
label="年龄">
</el-table-column>
<el-table-column
prop="mobile"
width="120"
label="手机号">
</el-table-column>
<el-table-column
prop="idCard"
width="180"
label="身份证号">
</el-table-column>
<el-table-column
prop="address"
width="250"
label="家庭住址">
</el-table-column>
<el-table-column
prop="serveTimes"
label="享受服务次数">
</el-table-column>
</el-table>
</div>
<!--分页条-->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="searchFormData.pageNo"
:page-sizes="pageSizes"
:page-size="searchFormData.pageSize"
layout="sizes, prev, pager, next, total"
background
:total="total">
</el-pagination>
</div>
</template>
<script>
import { requestPost } from '@/js/dai/request'
import { requestGet } from '@/js/dai/request'
import { EpmetResultResolver } from '@/js/epmet-result-resolver'
import nextTick from 'dai-js/tools/nextTick'
export default {
mounted () {
this.epmetResultResolver = new EpmetResultResolver(this);
this.searchFormData.serviceId = this.serviceId;
this.initOrgTree();
this.handleSearch();
},
data () {
return {
//
searchFormData: {
serviceId: null,
orgId: null,
orgType: null,
tagId: null,
name: null,
mobile: null,
idCard: null,
serveTimes: null,
villageId: null,
buildId: null,
unitId: null,
homeId: null,
pageSize: 10,
pageNo: 1,
},
//
pageSizes: [10, 20, 50, 100, 200],
total: 0, //
//
quartersSelectItems: [],
buildingSelectItems: [],
unitSelectItems: [],
homeSelectItems: [],
orgTree: [], //
//
orgOptionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
//
selectedPersonListIds: [], // id
personList: [], //
epmetResultResolver: null
}
},
methods: {
/**
* 行选中事件
* @returns {Promise<void>}
*/
async handleTableRowsSelected(selection) {
this.selectedPersonListIds = selection.map(e => e.id);
},
/**
* 全选
* @param selection
* @returns {Promise<void>}
*/
async handleSelectAll(selection) {
this.selectedPersonListIds = selection.map(e => e.id);
},
/**
* 搜索事件
* @returns {Promise<void>}
*/
async handleSearch () {
let url = '/actual/base/residentBaseInfo/commonServicePersonList/list'
this.searchFormData.tagId = this.tagId
this.searchFormData.serviceId = this.serviceId
let result = await requestPost(url, this.searchFormData)
this.epmetResultResolver
.success((data) => {
this.personList = data.list;
this.total = data.total;
})
.parse(result);
},
/**
* 标记享受服务人员
* @returns {Promise<void>}
*/
async handleIncrementServeTimes() {
let params = {
recIds: this.selectedPersonListIds
};
let url = "/actual/base/residentBaseInfo/commonServicePersonList/incrementServeTimes";
const rst = await requestPost(url, params);
this.epmetResultResolver.parse(result);
//
this.handleSearch();
},
/**
* 组织选择触发事件
* @returns {Promise<void>}
*/
async initOrgTree () {
let url = '/gov/org/customeragency/agencygridtree'
const { data, code, msg } = await requestPost(url, {})
if (code === 0) {
debugger
this.orgTree.push(data)
}
},
/**
* 加载和填充小区下拉框
* @returns {Promise<void>}
*/
async handleOrgChange (selectedOrgNodes) {
let selectedLastNode = selectedOrgNodes[selectedOrgNodes.length - 1]
this.searchFormData.orgId = selectedLastNode
const { orgId, level } = this.getSelectedOrgIdAndType(selectedLastNode, this.orgTree)
let url = '/actual/base/communityQuarters/listQuartersOptions'
let params = {}
this.searchFormData.orgId = orgId
if (level === 'grid') {
params['gridId'] = orgId
this.searchFormData.orgType = 'grid'
} else {
params['agencyId'] = orgId
this.searchFormData.orgType = 'agency'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.quartersSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 小区选择器change填充楼栋下拉框
* @returns {Promise<void>}
*/
async handleQuarterSelectorsChange (quartersId) {
let url = '/actual/base/communityBuilding/buildingoption'
let params = {
quartersId: quartersId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.buildingSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 楼栋选择器change填充单元下拉框
* @param selectedQuarter
* @returns {Promise<void>}
*/
async handleBuildSelectorsChange (buildId) {
let url = '/actual/base/communityBuildingUnit/unitoption'
let params = {
buildingId: buildId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.unitSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 单元下拉框选择器change填充房屋
* @param unitId
* @returns {Promise<void>}
*/
async handleUnitSelectorsChange (unitId) {
let url = '/actual/base/communityHouse/houseoption'
let params = {
unitId: unitId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.homeSelectItems = data.map(e => {
return {
label: e.label,
value: e.value,
}
})
}
},
/**
* 递归搜索组织树选出选中的节点
* @param orgId
* @param orgList
* @returns {*}
*/
getSelectedOrgIdAndType (orgId, orgList) {
for (let org of orgList) {
if (org.agencyId === orgId) {
return { orgId: org.agencyId, level: org.level }
}
if (org.subAgencyList && org.subAgencyList.length > 0) {
let selectedOrg = this.getSelectedOrgIdAndType(orgId, org.subAgencyList)
if (selectedOrg) {
return selectedOrg
}
}
}
},
//
handleSizeChange (newPageSize) {
this.searchFormData.pageSize = newPageSize
this.handleSearch()
},
//
handleCurrentChange (pageNo) {
this.searchFormData.pageNo = pageNo
this.handleSearch()
}
},
props: {
serviceId: {
type: String,
required: true,
},
tagId: {
type: String,
required: true,
},
serviceId: {
type: String,
required: true,
}
}
}
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/form-main.scss";
.btn-add-rule {
margin-left: 150px;
display: flex;
justify-content: flex-start;
margin-bottom: 20px;
}
.item_width_short {
width: 380px;
}
.item_rule {
display: flex;
justify-content: flex-start;
}
.item_label {
flex: 0 0 150px;
line-height: 30px;
text-align: right;
padding-right: 12px;
}
.item_label:before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
</style>

1066
src/views/modules/communityService/wennuanzhaoren/addForm.vue

File diff suppressed because it is too large

399
src/views/modules/communityService/wennuanzhaoren/detailForm.vue

@ -0,0 +1,399 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<div v-if="initLoading" class="m-row">
<div class="m-info">
<div class="info-prop">
<span class="info-title-2">服务名称</span>
<span>{{ formData.serviceName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务组织</span>
<span>{{ serviceOrgName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务范围</span>
<span>{{ formData.gridIdListName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">政策依据</span>
<span>{{ formData.policyTitle || "--" }}</span>
<!-- <el-button
v-if="formData.policyId"
style="margin-left: 10px"
type="primary"
size="small"
@click="handlePersonList"
>预览</el-button
> -->
</div>
<div class="info-prop">
<span class="info-title-2">经办人</span>
<span>{{ formData.principalName || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">联系方式</span>
<span>{{ formData.principalContact || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务时间</span>
<span>{{ formData.serviceTimeStart || "--" }}</span
>
<span>{{ formData.serviceTimeEnd || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">享受服务人员: </span>
<span>{{ resiSearchTagName }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">备注</span>
<span>{{ formData.remark || "--" }}</span>
</div>
<div v-show="formData.serviceStatus === 'completed'">
<h3 class="d-h3">反馈内容</h3>
<div class="info-prop">
<span class="info-title-2">备注</span>
<span>{{ feedbackFormData.serviceGoal || "--" }}</span>
</div>
<!-- <div class="info-prop">
<span class="info-title-2">服务效果</span>
<span>{{ feedbackFormData.serviceEffect || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务人数</span>
<span>{{ feedbackFormData.servicePeopleNumber || 0 }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">服务状态</span>
<span>{{ feedbackFormData.serviceStatusShow || "--" }}</span>
</div> -->
<div class="info-prop">
<span class="info-title-2">满意度</span>
<span>{{ feedbackFormData.satisfactionShow || "--" }}</span>
</div>
<!-- <div class="info-prop">
<span class="info-title-2">地理位置</span>
<span>{{ feedbackFormData.address || "--" }}</span>
</div>
<div class="info-prop">
<span class="info-title-2">地图位置</span>
<div class="div_map">
<div id="app_detail"></div>
</div>
</div>
<div class="info-prop">
<span class="info-title-2">附件</span>
<file-list
v-if="fileList.length > 0"
:fileList="fileList"
></file-list>
<span v-else>--</span>
</div> -->
</div>
</div>
</div>
</div>
<div class="div-btn">
</div>
<el-row type="flex" justify="right">
<el-col :span="24" align="right">
<el-button size="small" @click="handleCancle" style="margin-right:16px;"> </el-button>
</el-col>
</el-row>
<el-dialog
v-if="showPersonList"
:visible.sync="showPersonList"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'政策预览'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false"
>
<person-list
ref="ref_detail_form"
:policyId="policyId"
:ruleList="ruleList"
@handleOk="handleOk"
@handleClose="handleClose"
>
</person-list>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import { Loading } from "element-ui"; // Loading
import { requestPost } from "@/js/dai/request";
// import personList from "../policy/oldPersonList.vue";
import fileList from "@/views/components/fileList";
import daiMap from "@/utils/dai-map";
var map;
let loading; //
export default {
data() {
return {
initLoading: false,
keyWords: "",
formData: {},
resiSearchTagName:"",
feedbackFormData: {
serviceProjectId: "", // id
serviceName: "",
serviceGoal: "", //
serviceEffect: "", //
servicePeopleNumber: null, //
serviceStatus: "completed", // in_servicecompleted:
satisfaction: "", //:bad:good:perfect
longitude: "", //
latitude: "", //
address: "",
fileList: [], //
},
policyId: "",
showPersonList: false,
ruleList: [],
policyList: [],
};
},
components: { fileList },
async mounted() {
// if (this.serviceRecordId) {//
await this.loadInfo();
this.initLoading = true;
if (
this.formData.serviceStatus === "completed" &&
this.feedbackFormData.latitude
) {
this.$nextTick(() => {
this.initMap();
});
}
},
methods: {
diaDestroy() {},
//
async handlePersonList() {
if (!this.formData.policyId) {
this.$message.info("请先选择政策");
return false;
}
this.policyId = this.formData.policyId;
await this.loadRuleList();
this.showPersonList = true;
},
async loadRuleList() {
const url = "/governance/policy/rulelist/" + this.policyId;
let params = {};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.ruleList = data;
} else {
this.$message.error(msg);
}
},
handleClose() {
this.showPersonList = false;
},
//
async loadInfo() {
const url = "/governance/icServiceWarmRecord/detail";
let params = {
serviceRecordId: this.serviceRecordId,
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {
this.formData = { ...data };
this.formData.serviceRecordId = this.serviceRecordId;
this.feedbackFormData = { ...data.feedback };
this.formData.gridIdListName = "";
this.feedbackFormData.serviceStatusShow = "";
this.feedbackFormData.satisfactionShow = "";
await this.getTagName()
let arr = [];
this.formData.gridIdList.forEach((element) => {
arr.push(element.objectName);
});
this.formData.gridIdListName = arr.join(",");
this.statusArray.forEach((element) => {
if (this.formData.serviceStatus === element.value) {
this.feedbackFormData.serviceStatusShow = element.label;
}
});
this.satisfyArray.forEach((element) => {
if (this.feedbackFormData.satisfaction === element.value) {
this.feedbackFormData.satisfactionShow = element.label;
}
});
this.fileList = [];
if (
data.feedback &&
data.feedback.fileList &&
data.feedback.fileList.length > 0
) {
data.feedback.fileList.forEach((element) => {
let obj = {
name: element.name,
format: element.format,
url: element.url,
type: element.type,
};
this.fileList.push(obj);
});
}
} else {
this.$message.error(msg);
}
},
async getTagName() {
const url = "/governance/resiSearchTag/listResiSearchTags";
let params = {
pageSize: 99,
};
let { data, msg, code } = await requestPost(url, params);
if (code == 0) {
let showAddProduct = data.list.filter(item=>{
return [this.formData.resiSearchTagId].includes(item.tagId)
})
if(this.formData.resiSearchTagId){
this.resiSearchTagName = showAddProduct[0].tagName
}else{
this.resiSearchTagName = '--'
}
} else {
this.$message.error(msg);
}
},
handleCancle() {
this.resetData();
this.$emit("diaDetailClose");
},
// init
initMap() {
let { latitude, longitude } = this.feedbackFormData;
map = new daiMap(
document.getElementById("app_detail"),
{ latitude, longitude },
{
zoom: 16.2, //
pitch: 43.5, //
rotation: 45, //
}
);
map.setCenter(latitude, longitude);
map.setMarker(latitude, longitude);
},
handleOk() {
this.showPersonList = false;
},
resetData() {
this.formData = {};
},
//
startLoading() {
loading = Loading.service({
lock: true, //
text: "正在加载……", //
background: "rgba(0,0,0,.7)", //
});
},
//
endLoading() {
// clearTimeout(timer);
if (loading) {
loading.close();
}
},
},
computed: {
dataRule() {
return {
serviceTimeStart: [
{ required: true, message: "服务时间不能为空", trigger: "blur" },
],
};
},
// resiSearchTagNameText(){
// let text = ""
// if(this.resiSearchTagName){
// text = this.resiSearchTagName
// }else {
// text = '--'
// }
// return text
// },
},
props: {
serviceRecordId: {
type: String,
required: true,
},
serviceOrgName: {
type: String,
required: true,
},
satisfyArray: {
type: Array,
default() {
return [];
},
},
statusArray: {
type: Array,
default() {
return [];
},
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/detail-main.scss";
.info-prop{
margin-top: 29px;
}
.scroll-h{
padding: 0 90px !important;
}
</style>

825
src/views/modules/communityService/wennuanzhaoren/editForm.vue

@ -0,0 +1,825 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form ref="ref_form"
:inline="true"
:model="formData"
:rules="dataRule"
class="div_form">
<el-form-item label="服务名称"
prop="serviceName"
label-width="150px"
style="display: block">
<span>{{formData.serviceName}}</span>
<!-- <el-select class="item_width_1"
v-model="formData.serviceProjectId"
placeholder="请选择"
filterable
clearable>
<el-option v-for="(item,index) in projectList"
@click.native="hancleClickProject(index)"
:key="item.serviceProjectId"
:label="item.serviceName"
:value="item.serviceProjectId">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="服务组织"
prop="serviceOrgId"
label-width="150px"
style="display: block">
<span>{{serviceOrgName}}</span>
<!-- <el-select class="item_width_1"
v-model="formData.serviceOrgId"
placeholder="请选择"
filterable
clearable>
<el-option v-for="item in orgList"
:key="item.icServiceOrgId"
:label="item.orgName"
:value="item.icServiceOrgId">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="服务范围"
prop="gridIdList"
label-width="150px"
style="display: block">
<div v-for="item in formData.gridIdList"
:key="item.objectId">
<div>{{item.objectName}}</div>
</div>
<!-- <el-cascader class="item_width_1"
ref="myCascader"
v-model="scopeIdArray"
:key="iscascaderShow"
:options="casOptions"
:props="optionProps"
:show-all-levels="false"
@change="handleChangeScope"></el-cascader> -->
</el-form-item>
<el-form-item label="政策依据"
prop="policyId"
label-width="150px"
style="display: block">
<el-select :disabled="formType==='detail'"
v-model="formData.policyId"
class="input-width-small"
placeholder="请选择"
clearable>
<el-option v-for="item in policyList"
:key="item.policyId"
:label="item.title"
:value="item.policyId">
</el-option>
</el-select>
<!--
<el-button style="margin-left: 10px"
type="primary"
size="small"
@click="handlePersonList">预览</el-button> -->
</el-form-item>
<el-form-item label="经办人"
prop="principalName"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
placeholder="请输入经办人姓名"
v-model="formData.principalName">
</el-input>
</el-form-item>
<el-form-item label="联系方式"
prop="principalContact"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
placeholder="请输入联系方式"
v-model="formData.principalContact">
</el-input>
</el-form-item>
<el-form-item label="指派服务" label-width="150px">
<el-switch v-model="assignSwitch"> </el-switch>
</el-form-item>
<el-form-item
label="查找享受服务人员"
prop="principalContact"
label-width="150px"
style="display: block"
v-show="this.assignSwitch"
>
<input type="text" v-model="formData.resiSearchTagId" v-show="false">
<template v-if="this.resiSearchTagName">
<el-tag @close="handleCloseTag" closable style="margin-right:10px;">
{{this.resiSearchTagName }}
</el-tag>
</template>
<el-button type="primary" @click="handleClickLabel" size="mini">
<span> <i class="el-icon-plus"></i> 按标签查找 </span>
</el-button>
</el-form-item>
<el-form-item label="服务时间"
label-width="150px"
prop="serviceTimeStart"
style="display: block">
<el-date-picker :disabled="formType==='detail'"
v-model="formData.serviceTimeStart"
:picker-options="startPickerOptions"
class="item_width_2"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker :disabled="formType==='detail'"
v-model="formData.serviceTimeEnd"
:picker-options="endPickerOptions"
class="item_width_2 u-data-tag"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注"
prop="remark"
label-width="150px"
style="display: block">
<el-input :disabled="formType==='detail'"
class="item_width_1"
type="textarea"
maxlength="500"
show-word-limit
:rows="3"
placeholder="请输入备注,不超过500字"
v-model="formData.remark"></el-input>
</el-form-item>
</el-form>
<div v-show="formData.serviceStatus==='completed'">
<h3 class="d-h3">反馈内容</h3>
<el-form ref="ref_form_feedback"
:inline="true"
:disabled="true"
:model="feedbackFormData"
class="div_form">
<el-form-item label="服务目标"
prop="serviceGoal"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入服务目标,不超过1000字"
v-model="feedbackFormData.serviceGoal"></el-input>
</el-form-item>
<el-form-item label="服务效果"
prop="serviceEffect"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
type="textarea"
maxlength="1000"
show-word-limit
:rows="3"
placeholder="请输入服务效果,不超过1000字"
v-model="feedbackFormData.serviceEffect"></el-input>
</el-form-item>
<el-form-item label="服务人数"
style="display: block"
prop="servicePeopleNumber"
label-width="150px">
<el-input-number class="item_width_2"
v-model="feedbackFormData.servicePeopleNumber"
:min="0"
:max="9999"
label="服务人数"></el-input-number>
</el-form-item>
<el-form-item label="服务状态"
label-width="150px"
style="display: block"
prop="serviceStatus">
<span>已完成</span>
<!-- <el-select class="item_width_1"
v-model="feedbackFormData.serviceStatus"
placeholder="全部"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select> -->
</el-form-item>
<el-form-item label="满意度"
style="display: block"
label-width="150px"
prop="satisfaction">
<el-select class="item_width_2"
v-model="feedbackFormData.satisfaction"
placeholder="全部"
clearable>
<el-option v-for="item in satisfyArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="地址"
prop="address"
label-width="150px"
style="display: block">
<el-input class="item_width_1"
v-model="feedbackFormData.address"></el-input>
</el-form-item>
<!-- <el-form-item label="地图位置"
label-width="150px"
style="display: block">
<div style="width:500px">
<div class="div_map">
<div id="map_app">
</div>
<div class="div_searchmap">
<el-input maxlength="50"
size="mini"
placeholder="请输入关键字"
v-model="keyWords">
</el-input>
<el-button style="margin-left: 10px"
type="primary"
size="mini"
@click="handleSearchMap">查询</el-button>
</div>
</div>
</div>
</el-form-item> -->
<el-form-item class="block"
label="附件"
label-width="150px"
prop="attach">
<!-- <el-upload :headers="$getElUploadHeaders()" v-if="feedbackFormData.fileList&&feedbackFormData.fileList.length>0"
class="upload-demo"
:on-preview="handleFileDownload"
accept=".doc,.pdf,.xls,.docx,.xlsx,.jpg,.png,.jpeg,.bmp,.mp4,.wma,.m4a,.mp3"
:limit="3"
:file-list="fileList">
</el-upload> -->
<div v-if="feedbackFormData.fileList&&feedbackFormData.fileList.length>0"
class="attachement-list">
<a :href="att.url"
target="_blank"
:key="att.url"
v-for="att in feedbackFormData.fileList">
<i class="el-icon-folder-opened"></i>
{{ att.name }}
</a>
</div>
<span v-else>无附件</span>
</el-form-item>
</el-form>
</div>
</div>
<div class="div_btn">
<el-button size="small"
@click="handleCancle"> </el-button>
<el-button size="small"
v-if="formType != 'detail'"
type="primary"
:disabled="btnDisable"
@click="handleComfirm"> </el-button>
</div>
<el-dialog v-if="showPersonList"
:visible.sync="showPersonList"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'标签查找'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false">
<person-list ref="ref_detail_form"
:policyId="policyId"
:ruleList="ruleList"
@handleOk="handleOk"
@handleClose="handleClose">
</person-list>
</el-dialog>
<el-dialog
v-if="showLabelForm"
:visible.sync="showLabelForm"
:append-to-body="true"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'标签配置'"
width="900px"
top="5vh"
class="dialog-h"
@closed="showLabelForm = false"
>
<label-form
ref="ref_label_form"
:policyId="policyId"
:ruleList="ruleList"
@dialogCancle="addFormCancle"
@dialogOk="addFormOk"
>
<!-- @handleOk="handleOk"
@handleClose="handleClose" -->
</label-form>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { Loading } from 'element-ui' // Loading
import { requestPost } from '@/js/dai/request'
// import personList from "../policy/oldPersonList.vue";
import labelForm from "../labelConfig/addForm.vue";
import { nextTick } from 'vue';
var map
var search
var markers
var infoWindowList
var geocoder //
let loading //
export default {
data () {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.serviceTimeStart) {
let serviceTimeStart = new Date(this.formData.serviceTimeStart)
return time.getTime() > nowData || time.getTime() < serviceTimeStart || time.getTime() === serviceTimeStart
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
btnDisable: false,
keyWords: '',
assignSwitch: true,
formData: {
},
showLabelForm: false,
resiSearchTagName:'',
feedbackFormData: {
serviceProjectId: '',// id
serviceName: '',
serviceGoal: '',//
serviceEffect: '',//
servicePeopleNumber: null,//
serviceStatus: 'completed',// in_servicecompleted:
satisfaction: '',//:bad:good:perfect
longitude: '',//
latitude: '',//
address: '',
fileList: [],//
},
serviceList: [],//list
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
policyList: [],
projectList: [],
fileList: [],
uploadUlr: window.SITE_CONFIG['apiURL'] + '/oss/file/uploadvariedfile',
policyId: '',
showPersonList: false,
ruleList: []
}
},
components: { labelForm},
mounted () {
this.getPolicyList()
if (this.serviceRecordId) {//
this.loadInfo()
}
// this.initMap()
},
methods: {
//
async handlePersonList () {
if (!this.formData.policyId) {
this.$message.info('请先选择政策')
return false
}
this.policyId = this.formData.policyId
await this.loadRuleList()
this.showPersonList = true;
},
async loadRuleList () {
const url = "/governance/policy/rulelist/" + this.policyId
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.ruleList = data
} else {
this.$message.error(msg)
}
},
handleClose () {
this.showPersonList = false
},
handleOk () {
this.showPersonList = false
},
handleClickLabel() {
this.showLabelForm = true;
this.$nextTick(() => {
this.$refs["ref_label_form"].initForm("info");
});
},
async getPolicyList () {
const url = '/governance/policy/policyList'
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.policyList = data
} else {
this.$message.error(msg)
}
},
//
async loadInfo () {
const url = '/governance/icServiceWarmRecord/detail'
let params = {
serviceRecordId: this.serviceRecordId
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.formData = { ...data }
this.formData.serviceRecordId = this.serviceRecordId
this.feedbackFormData = { ...data.feedback }
await this.getTagName()
this.fileList = []
if (data.feedback && data.feedback.fileList && data.feedback.fileList.length > 0) {
data.feedback.fileList.forEach(element => {
let obj = {
name: element.name,
format: element.format,
url: element.url,
}
this.fileList.push(obj)
});
}
} else {
this.$message.error(msg)
}
},
async getTagName() {
const url = "/governance/resiSearchTag/listResiSearchTags";
let params = {
pageSize: 99,
};
let { data, msg, code } = await requestPost(url, params);
if (code == 0) {
let showAddProduct = data.list.filter(item=>{
return [this.formData.resiSearchTagId].includes(item.tagId)
})
this.resiSearchTagName = showAddProduct[0].tagName
this.assignSwitch = true
} else {
this.$message.error(msg);
}
},
async handleComfirm () {
this.btnDisable = true
setTimeout(() => {
this.btnDisable = false
}, 10000)
this.$refs['ref_form'].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj)
this.btnDisable = false
} else {
this.editFuwu()
}
})
},
async editFuwu () {
const regPhone = /^1(3|4|5|6|7|8|9)\d{9}$/; //
if (this.formData.principalContact && regPhone.test(this.formData.principalContact) === false) {
this.btnDisable = false
this.$message({
type: 'warning',
message: '请输入正确的联系电话'
})
return false;
}
console.log(this.formData);
let url = '/governance/icServiceWarmRecord/edit'
// let url = "http://yapi.elinkservice.cn/mock/245/governance/icServiceProject/service/update"
const { data, code, msg } = await requestPost(url, this.formData)
if (code === 0) {
this.$message({
type: 'success',
message: '操作成功'
})
this.resetData()
this.$emit('handleOk')
} else {
this.btnDisable = false
this.$message.error(msg)
}
},
handleCancle () {
this.resetData()
this.$emit('handleClose')
},
addFormOk(val) {
this.showLabelForm = false;
this.formData.resiSearchTagId = val.tagId;
this.resiSearchTagName = val.tagName;
},
addFormCancle() {
this.showLabelForm = false;
},
handleCloseTag(){
this.resiSearchTagName = ''
this.formData.resiSearchTagId = ''
},
//
handleFileDownload (file) {
var a = document.createElement('a');
var event = new MouseEvent('click');
a.download = file.name;
console.log(a)
a.href = file.url;
a.dispatchEvent(event);
},
// init
initMap () {
//
var center = new window.TMap.LatLng(36.0722275, 120.38945519)
// map TMap.Map()
map = new window.TMap.Map(document.getElementById('app'), {
center: center, //
zoom: 17.2, //
pitch: 43.5, //
rotation: 45 //
})
search = new window.TMap.service.Search({ pageSize: 10 })
//
markers = new TMap.MultiMarker({
map: map,
geometries: []
})
infoWindowList = Array(10)
geocoder = new TMap.service.Geocoder(); //
//
map.on('panend', () => {
this.handleMoveCenter()
})
this.handleMoveCenter()
this.convert()
},
setMarker (lat, lng) {
markers.setGeometries([])
markers.add([
{
id: '4',
styleId: 'marker',
position: new TMap.LatLng(lat, lng),
properties: {
title: 'marker4'
}
}
])
},
handleSearchMap () {
infoWindowList.forEach((infoWindow) => {
infoWindow.close()
})
infoWindowList.length = 0
markers.setGeometries([])
//
search
.searchNearby({
keyword: this.keyWords,
radius: 1000,
autoExtend: true,
center: map.getCenter(),
})
.then((result) => {
let { data } = result
if (Array.isArray(data) && data.length > 0) {
const {
location: { lat, lng }
} = data[0]
map.setCenter(new TMap.LatLng(lat, lng))
this.setMarker(lat, lng)
this.formData.latitude = lat
this.formData.longitude = lng
this.convert()
} else {
this.$message.error('未检索到相关位置坐标')
}
})
},
handleMoveCenter () {
//
const center = map.getCenter()
const lat = center.getLat()
const lng = center.getLng()
this.formData.latitude = lat
this.formData.longitude = lng
this.setMarker(lat, lng)
this.convert(lat, lng)
},
convert (lat, lng) {
markers.setGeometries([]);
// var input = document.getElementById('location').value.split(',');
let location
if (lat && lng) {
location = new TMap.LatLng(lat, lng);
} else {
location = new TMap.LatLng(this.formData.latitude, this.formData.longitude);
}
// map.setCenter(location);
markers.updateGeometries([
{
id: 'main', //
position: location,
},
]);
geocoder
.getAddress({ location: location }) //
.then((result) => {
this.formData.address = result.result.address
//
});
},
resetData () {
this.formData = {}
},
//
startLoading () {
loading = Loading.service({
lock: true, //
text: '正在加载……', //
background: 'rgba(0,0,0,.7)' //
})
},
//
endLoading () {
// clearTimeout(timer);
if (loading) {
loading.close()
}
}
},
computed: {
dataRule () {
return {
serviceTimeStart: [
{ required: true, message: '服务时间不能为空', trigger: 'blur' }
],
}
},
},
props: {
serviceRecordId: {
type: String,
required: true
},
serviceOrgName: {
type: String,
required: true
},
formType: {// addeditdetail,feedback
type: String,
required: true
},
satisfyArray: {
type: Array,
default () {
return []
}
},
}
}
</script>
<style lang="scss" scoped >
@import "@/assets/scss/modules/management/form-main.scss";
.attachement-list {
// padding-left: 20px;
a {
display: block;
cursor: pointer;
// color: #4df0ff;
font-size: 14px;
i {
color: #333;
}
}
}
</style>

856
src/views/modules/communityService/wennuanzhaoren/index.vue

@ -0,0 +1,856 @@
<template>
<div class="g-main">
<div>
<div class="m-search">
<el-form :inline="true"
:model="formData"
ref="ref_searchform"
:label-width="'100px'">
<el-form-item prop="serviceType"
label="服务类别"
>
<el-select class="u-item-width-daterange"
v-model.trim="formData.serviceTypeLevel1Id"
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceTypesLevel1"
@click.native="handleChangeServiceTypeLevel1"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="serviceType">
<el-select class="u-item-width-daterange"
v-model.trim="formData.serviceTypeLevel2Id"
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceTypesLevel2"
@click.native=""
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="服务时间"
prop="serviceTimeStart">
<el-date-picker v-model="formData.serviceTimeStart"
:picker-options="startPickerOptions"
class="u-item-width-daterange"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="开始时间">
</el-date-picker>
<span class="u-data-tag"></span>
<el-date-picker v-model="formData.serviceTimeEnd"
:picker-options="endPickerOptions"
class="u-item-width-daterange u-data-tag"
size="small"
type="date"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item label="服务事项"
prop="serviceName">
<el-input v-model="formData.serviceName"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="服务组织"
prop="serviceOrgType">
<el-select v-model="formData.serviceOrgType"
class="u-item-width-daterange"
placeholder="请选择"
size="small"
clearable
@change="handleServiceChange('add', $event)">
<el-option v-for="item in serviceOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="formData.serviceOrgId"
class="u-item-width-daterange u-data-tag"
filterable
placeholder="请选择"
size="small"
clearable>
<el-option v-for="item in serviceOptiondList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="服务状态"
prop="serviceStatus">
<el-select class="u-item-width-normal"
v-model="formData.serviceStatus"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in statusArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="满意度"
prop="satisfaction">
<el-select class="u-item-width-normal"
v-model="formData.satisfaction"
placeholder="全部"
size="small"
clearable>
<el-option v-for="item in satisfyArray"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-row type="flex" >
<el-col :span="24" align="right">
<el-button style="margin-left:30px"
size="small"
type="primary "
@click="handleSearch">查询</el-button>
<el-button style="margin-left:10px"
is-plain
class="diy-button--white el-button--default"
size="small"
@click="resetSearch">重置</el-button>
</el-col>
</el-row>
</el-form>
</div>
<div class="m-table">
<div class="div_btn">
<div class="div_btn_left">
<el-button
size="small"
@click="handleAdd"
type="primary"
icon="el-icon-plus"
style="margin-right:10px"
>新增</el-button>
</div>
<el-button @click="handleExport"
type="primary"
size="small"
class="diy-button--white el-button--default"
>导出</el-button>
<el-button type="primary" @click="onDeleteBatch" size="small">
批量删除
</el-button>
</div>
<el-table :data="tableData"
border
v-loading="tableLoading"
class="m-table-item"
style="width: 100%"
:height="maxTableHeight"
@select-all="onMultiSelect"
@selection-change="onMultiSelect">
<el-table-column
type="selection"
fixed="left"
align="center"
width="50"/>
<el-table-column label="序号"
fixed="left"
type="index"
align="center"
width="50" />
<el-table-column prop="serviceTypeName"
label="服务类型"
align="center"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceName"
align="center"
min-width="150"
label="服务事项"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="sourceName"
align="center"
min-width="150"
label="来自"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceTimeStart"
align="center"
width="300"
:show-overflow-tooltip="true"
label="服务时间">
<template slot-scope="scope">
<span>{{scope.row.serviceTimeStart}}{{scope.row.serviceTimeEnd}}</span>
</template>
</el-table-column>
<el-table-column prop="serviceOrgName"
align="center"
min-width="150"
label="服务方"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column prop="serviceStatus"
align="center"
width="100"
label="服务状态"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{scope.row.serviceStatus==='in_service'?'进行中':'已完成'}}</span>
</template>
</el-table-column>
<el-table-column prop="servedPersonQty"
align="center"
width="110"
label="服务人数"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<el-button @click="handlePersonList(scope.row)" type="text" size="small">
{{ scope.row.servedPersonQty }}
</el-button>
</template>
</el-table-column>
<el-table-column fixed="right"
label="操作"
align="center"
width="220">
<template slot-scope="scope">
<el-button @click="handleDetail(scope.row)"
type="text"
size="small"
>查看</el-button>
<el-button
@click="handleEdit(scope.row)"
type="text"
size="small"
>编辑</el-button>
<!-- 临时去掉人员名单与反馈 -->
<el-button v-if="scope.row.serviceStatus==='in_service'"
@click="handleFeedback(scope.row)"
type="text"
size="small"
>反馈</el-button>
<!-- <el-button v-if="scope.row.policyId"
@click="handlePersonList(scope.row)"
type="text"
size="small"
>人员名单</el-button> -->
<!-- 暂时不限制删除按钮任何状态都允许删除产品要求的 -->
<!-- v-if="scope.row.serviceStatus==='in_service'" -->
<el-button
@click="handleDel(scope.row)"
type="text"
size="small"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<div>
<el-pagination @size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="pageNo"
:page-sizes="[20, 50, 100, 200]"
:page-size="parseInt(pageSize)"
layout="sizes, prev, pager, next, total"
:total="total">
</el-pagination>
</div>
</div>
</div>
<el-dialog v-if="showAdd"
:visible.sync="showAdd"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="addDiaTitle"
:modal-append-to-body="false"
width="720px"
top="5vh"
class="dialog-h"
@closed="showAdd = false">
<add-form ref="ref_add_form"
:formType="formType"
:statusArray="statusArray"
:satisfyArray="satisfyArray"
:serviceRecordId="serviceRecordId"
:serviceName="serviceName"
@handleOk="handleOk"
@handleClose="handleClose"></add-form>
</el-dialog>
<!-- 编辑与新增写在一个组件中 -->
<!-- <el-dialog v-if="showEdit"
:visible.sync="showEdit"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'编辑'"
:modal-append-to-body="false"
width="850px"
top="5vh"
class="dialog-h"
@closed="showEdit = false">
<edit-form ref="ref_edit_form"
:serviceRecordId="serviceRecordId"
:serviceOrgName="serviceOrgName"
:satisfyArray="satisfyArray"
:statusArray="statusArray"
@handleOk="handleOk"
@handleClose="handleClose"
:formType="formType">
</edit-form>
</el-dialog> -->
<el-dialog v-if="showDetail"
:visible.sync="showDetail"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="detailDiaTitle"
:modal-append-to-body="false"
width="850px"
top="5vh"
class="dialog-h"
@closed="diaDetailClose">
<detail-form ref="ref_detail_form"
:serviceRecordId="serviceRecordId"
:serviceOrgName="serviceOrgName"
:satisfyArray="satisfyArray"
:statusArray="statusArray"
@diaDetailClose="diaDetailClose">
</detail-form>
</el-dialog>
<el-dialog v-if="showPersonList"
:visible.sync="showPersonList"
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'人员名单'"
width="1150px"
top="5vh"
class="dialog-h"
@closed="showPersonList = false">
<person-list ref="ref_person_list"
:serviceId="commonServiceId"
:tagId="tagId">
</person-list>
</el-dialog>
</div>
</template>
<script>
import { requestPost } from "@/js/dai/request";
import nextTick from "dai-js/tools/nextTick";
import { mapGetters } from "vuex";
// import eventInfo from "./cpts/event-info";
import axios from "axios";
import addForm from "./addForm";
import detailForm from "./detailForm.vue";
import editForm from "./editForm";
import feedBackForm from "./addForm";
import personList from "./personList";
//
export default {
components: { addForm, detailForm, feedBackForm, editForm, personList },
data () {
let endDisabledDate = (time) => {//datareturn
let nowData = Date.now()
if (this.formData.serviceTimeStart) {
let serviceTimeStart = new Date(this.formData.serviceTimeStart)
return time.getTime() > nowData || time.getTime() < serviceTimeStart || time.getTime() === serviceTimeStart
} else {
return time.getTime() > nowData
}
}
let startDisabledDate = (time) => {//datareturn
let nowData = Date.now()
return time.getTime() > nowData
}
return {
//
serviceTypesLevel1:[],
serviceTypesLevel2:[],
tableLoading: false,
user: {},
agencyId: '',
searchH:0,
tableData: [],
statusArray: [
{
value: "in_service",
label: "进行中",
},
{
value: "completed",
label: "已完成",
},
],
satisfyArray: [
{
value: "bad",
label: "不满意",
},
{
value: "good",
label: "基本满意",
},
{
value: "perfect",
label: "非常满意",
},
],
formData: {
serviceTypeLevel1Id:'',// id
serviceTypeLevel2Id:'',// id
serviceName: '',//
serviceOrgType: '',//
serviceOrgId: '',//Id
serviceTimeStart: '',//yyyy-MM-dd
serviceTimeEnd: '',//yyyy-MM-dd
serviceStatus: '',//in_servicecompleted:
satisfaction: '',//.:bad:good:perfect
},
pageNo: 1,
pageSize: window.localStorage.getItem("pageSize") || 20,
total: 1,
endPickerOptions: {
disabledDate: endDisabledDate
},
startPickerOptions: {
disabledDate: startDisabledDate
},
serviceRecordId: '',
serviceName: '',
serviceOrgName: '',
showAdd: false,
showEdit: false,
showDetail: false,
showFeedback: false,
formType: 'add',
addDiaTitle: '指派服务',
detailDiaTitle: '服务详情',
serviceOptions: [],
serviceOptiondList: [],
commonServiceId: null,
tagId: null,
showPersonList: false,
ruleList: [],
//
multiSelectedRows: []
};
},
computed: {
maxTableHeight () {
const h =
this.clientHeight - this.searchH - 450 + this.iframeHeight;
const _h = this.clientHeight - 450 - this.searchH;
return this.$store.state.inIframe ? h : _h;
},
...mapGetters(["clientHeight", "iframeHeight"]),
},
watch: {
// "formData.serviceTimeEnd": function (val) {
// if (val && val != '') {
// let arrayTemp = val.split(' ')
// this.formData.serviceTimeEnd = arrayTemp[0] + ' 23:59:59'
// }
// },
},
mounted () {
console.log(this.$store.state)
this.user = this.$store.state.user
this.agencyId = this.user.agencyId
this.getDictOptions()
this.getTableData();
},
methods: {
//
handleChangeServiceTypeLevel1() {
this.formData.serviceTypeLevel2Id = ''
this.$http
.get("/governance/commonServiceType/selectList/" + this.formData.serviceTypeLevel1Id)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceTypesLevel2 = res.data;
}
})
.catch(() => {
return this.$message.error("网络错误");
})
},
handleSearch (val) {
console.log(this.formData);
this.pageNo = 1;
this.getTableData();
},
//
async getDictOptions () {
const url = "/sys/dict/data/dictlist"
let params = {
dictType: 'user_demand_service_type'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.serviceOptions = data;
} else {
this.$message.error(msg)
}
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("网络错误");
});
},
handleServiceChange (type, val) {
this.formData.serviceOrgId = ''
if (val === "social_org") {
if (type === "add") {
this.getServiceuserList(val, "add_demand");
} else {
this.getServiceuserList(val, "query_demand");
}
} else {
this.getServiceuserList(val, "");
}
},
async getServiceuserList (serviceType, query) {
if (!serviceType) return false;
const params = {
serviceName: "",
serviceType: serviceType,
queryPurpose: query,
};
await this.$http
.post("/governance/userdemand/servicelist", params)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
} else {
this.serviceOptiondList = res.data
}
})
.catch(() => {
return this.$message.error("网络错误");
});
},
//
async handlePersonList (row) {
this.commonServiceId = row.serviceRecordId;
this.tagId = row.resiSearchTagId;
this.showPersonList = true;
},
async loadRuleList () {
const url = "/governance/policy/rulelist/" + this.policyId
let params = {}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.ruleList = data
} else {
this.$message.error(msg)
}
},
async handleAdd () {
this.addDiaTitle = '指派服务'
this.formType = 'add'
this.showAdd = true;
},
async handleDetail (row) {
this.detailDiaTitle = "服务详情"
this.serviceRecordId = row.serviceRecordId
this.serviceOrgName = row.serviceOrgName
// this.formType = 'detail'
this.showDetail = true
},
diaDetailClose () {
console.log(this.$refs.ref_detail)
this.$refs.ref_detail_form.diaDestroy()
this.showDetail = false
},
async handleEdit (row) {
this.addDiaTitle = "编辑服务"
this.serviceRecordId = row.serviceRecordId
this.serviceOrgName = row.serviceOrgName
this.formType = 'edit'
this.showAdd = true
},
//
async handleFeedback (row) {
this.serviceRecordId = row.serviceRecordId
this.serviceName = row.serviceName
this.addDiaTitle = '服务反馈'
this.formType = 'feedback'
this.showAdd = true;
},
handleClose () {
this.serviceRecordId = ""
this.formType = ''
this.showAdd = false
this.showDetail = false
this.showEdit = false
},
handleOk () {
this.handleClose()
this.pageNo = 1
this.getTableData()
},
async handleDel (row) {
this.serviceRecordId = row.serviceRecordId
this.$confirm("确认删除服务?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.cancelFuwu([row.serviceRecordId])
})
.catch(err => {
if (err == "cancel") {
// this.$message({
// type: "info",
// message: ""
// });
}
});
},
async cancelFuwu (serviceRecordIds) {
const url = '/governance/icServiceWarmRecord/searchDeleteBatch';
const { data, code, msg } = await requestPost(url, serviceRecordIds);
if (code === 0) {
this.$message.success("取消成功!");
this.getTableData();
} else {
this.$message.error(msg);
}
},
async getTableData () {
this.tableLoading = true
const url = "/governance/icServiceWarmRecord/searchList";
const { pageSize, pageNo, formData } = this;
const { data, code, msg } = await requestPost(url, {
pageSize,
pageNo,
...formData,
});
this.tableLoading = false
if (code === 0) {
this.total = data.total ;
this.tableData = data.list
} else {
this.$message.error(msg);
}
},
async handleExport () {
//-''
const url = "/governance/icServiceWarmRecord/searchExport";
const { pageSize, pageNo, formData } = this;
axios({
url: window.SITE_CONFIG["apiURL"] + url,
method: "post",
data: {
pageSize,
pageNo,
...formData,
},
responseType: "blob",
})
.then((res) => {
let fileName = window.decodeURI(
res.headers["content-disposition"].split(";")[1].split("=")[1]
);
console.log("filename", fileName);
let blob = new Blob([res.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
var url = window.URL.createObjectURL(blob);
var aLink = document.createElement("a");
aLink.style.display = "none";
aLink.href = url;
aLink.setAttribute("download", fileName);
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink); //
window.URL.revokeObjectURL(url); //blob
})
.catch((err) => {
console.log("获取导出情失败", err);
return this.$message.error("网络错误");
});
},
handleSizeChange (val) {
this.pageSize = val;
window.localStorage.setItem("pageSize", val);
this.getTableData();
},
handleCurrentChange (val) {
this.pageNo = val;
this.getTableData();
},
resetSearch () {
this.formData = {
serviceTypeLevel1Id:'',// id
serviceTypeLevel2Id:'',// id
serviceName: '',//
serviceOrgType: '',//
serviceOrgId: '',//Id
serviceTimeStart: '',//yyyy-MM-dd
serviceTimeEnd: '',//yyyy-MM-dd
serviceStatus: '',//in_servicecompleted:
satisfaction: '',//.:bad:good:perfect
}
this.pageNo = 1
this.getTableData()
},
//
onMultiSelect(row) {
this.multiSelectedRows = row;
},
//
onDeleteBatch() {
if (this.multiSelectedRows.length == 0) {
return;
}
this.$confirm("删除之后无法恢复,确认删除?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let serviceRecordIds = this.multiSelectedRows.map(item => item.serviceRecordId)
this.cancelFuwu(serviceRecordIds)
})
.catch((err) => {
if (err == "cancel") {
}
});
}
},
props: {
}
};
</script>
<style lang="scss" scoped>
@import "@/assets/scss/buttonstyle.scss";
@import "@/assets/scss/modules/management/list-main.scss";
@import "@/assets/scss/modules/shequzhili/event-info.scss";
</style>

486
src/views/modules/communityService/wennuanzhaoren/personList.vue

@ -0,0 +1,486 @@
<template>
<div>
<div class="dialog-h-content scroll-h">
<el-form
:inline="true"
:model="searchFormData"
ref="ref_searchform"
:label-width="'110px'">
<el-form-item label="所属组织" prop="orgId">
<el-cascader
@change="handleOrgChange"
:options="orgTree"
:props="orgOptionProps"
clearable
placeholder="请选择组织"></el-cascader>
</el-form-item>
<el-form-item label="人员姓名" prop="title">
<el-input
v-model="searchFormData.name"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="手机号" prop="title">
<el-input
v-model="searchFormData.mobile"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="身份证号" prop="title">
<el-input
v-model="searchFormData.idCard"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="享受服务次数" prop="title">
<el-input
v-model="searchFormData.serveTimes"
class="u-item-width-normal"
size="small"
clearable
placeholder="请输入">
</el-input>
</el-form-item>
<el-form-item label="家庭住址" prop="title">
<el-select v-model="searchFormData.villageId" placeholder="请选择小区"
@change="handleQuarterSelectorsChange" clearable>
<el-option
v-for="item in quartersSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.buildId" placeholder="请选择楼栋"
@change="handleBuildSelectorsChange" clearable>
<el-option
v-for="item in buildingSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.unitId" placeholder="请选择单元"
@change="handleUnitSelectorsChange" clearable>
<el-option
v-for="item in unitSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-select v-model="searchFormData.homeId" placeholder="请选择房屋"
@change="handleUnitSelectorsChange" clearable>
<el-option
v-for="item in homeSelectItems"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<div class="div_btn">
<el-button type="primary" size="small" class="diy-button--blue" @click="handleIncrementServeTimes">标记享受服务人员</el-button>
<el-button type="primary" size="small" class="diy-button--blue" @click="handleSearch">查询</el-button>
</div>
<div class="m-table">
<!--表格-->
<el-table
:data="personList"
height="250"
border
@select-all="handleSelectAll"
@selection-change="handleTableRowsSelected"
style="width: 100%">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
prop="agencyName"
label="所属组织"
width="180">
</el-table-column>
<el-table-column
prop="gridName"
label="所属网格"
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名">
</el-table-column>
<el-table-column
prop="genderDisplay"
label="性别">
</el-table-column>
<el-table-column
prop="birthday"
width="170"
label="出生日期">
</el-table-column>
<el-table-column
prop="age"
label="年龄">
</el-table-column>
<el-table-column
prop="mobile"
width="120"
label="手机号">
</el-table-column>
<el-table-column
prop="idCard"
width="180"
label="身份证号">
</el-table-column>
<el-table-column
prop="address"
width="250"
label="家庭住址">
</el-table-column>
<el-table-column
prop="serveTimes"
label="享受服务次数">
</el-table-column>
</el-table>
</div>
<!--分页条-->
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="searchFormData.pageNo"
:page-sizes="pageSizes"
:page-size="searchFormData.pageSize"
layout="sizes, prev, pager, next, total"
background
:total="total">
</el-pagination>
</div>
</template>
<script>
import { requestPost } from '@/js/dai/request'
import { requestGet } from '@/js/dai/request'
import { EpmetResultResolver } from '@/js/epmet-result-resolver'
import nextTick from 'dai-js/tools/nextTick'
export default {
mounted () {
this.epmetResultResolver = new EpmetResultResolver(this);
this.searchFormData.serviceId = this.serviceId;
this.initOrgTree();
this.handleSearch();
},
data () {
return {
//
searchFormData: {
serviceId: null,
orgId: null,
orgType: null,
tagId: null,
name: null,
mobile: null,
idCard: null,
serveTimes: null,
villageId: null,
buildId: null,
unitId: null,
homeId: null,
pageSize: 10,
pageNo: 1,
},
//
pageSizes: [10, 20, 50, 100, 200],
total: 0, //
//
quartersSelectItems: [],
buildingSelectItems: [],
unitSelectItems: [],
homeSelectItems: [],
orgTree: [], //
//
orgOptionProps: {
multiple: false,
value: 'agencyId',
label: 'agencyName',
children: 'subAgencyList',
checkStrictly: true
},
//
selectedPersonListIds: [], // id
personList: [], //
epmetResultResolver: null
}
},
methods: {
/**
* 行选中事件
* @returns {Promise<void>}
*/
async handleTableRowsSelected(selection) {
this.selectedPersonListIds = selection.map(e => e.id);
},
/**
* 全选
* @param selection
* @returns {Promise<void>}
*/
async handleSelectAll(selection) {
this.selectedPersonListIds = selection.map(e => e.id);
},
/**
* 搜索事件
* @returns {Promise<void>}
*/
async handleSearch () {
let url = '/actual/base/residentBaseInfo/commonServicePersonList/list'
this.searchFormData.tagId = this.tagId
this.searchFormData.serviceId = this.serviceId
let result = await requestPost(url, this.searchFormData)
this.epmetResultResolver
.success((data) => {
this.personList = data.list;
this.total = data.total;
})
.parse(result);
},
/**
* 标记享受服务人员
* @returns {Promise<void>}
*/
async handleIncrementServeTimes() {
let params = {
recIds: this.selectedPersonListIds
};
let url = "/actual/base/residentBaseInfo/commonServicePersonList/incrementServeTimes";
const rst = await requestPost(url, params);
this.epmetResultResolver.parse(result);
//
this.handleSearch();
},
/**
* 组织选择触发事件
* @returns {Promise<void>}
*/
async initOrgTree () {
let url = '/gov/org/customeragency/agencygridtree'
const { data, code, msg } = await requestPost(url, {})
if (code === 0) {
debugger
this.orgTree.push(data)
}
},
/**
* 加载和填充小区下拉框
* @returns {Promise<void>}
*/
async handleOrgChange (selectedOrgNodes) {
let selectedLastNode = selectedOrgNodes[selectedOrgNodes.length - 1]
this.searchFormData.orgId = selectedLastNode
const { orgId, level } = this.getSelectedOrgIdAndType(selectedLastNode, this.orgTree)
let url = '/actual/base/communityQuarters/listQuartersOptions'
let params = {}
this.searchFormData.orgId = orgId
if (level === 'grid') {
params['gridId'] = orgId
this.searchFormData.orgType = 'grid'
} else {
params['agencyId'] = orgId
this.searchFormData.orgType = 'agency'
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.quartersSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 小区选择器change填充楼栋下拉框
* @returns {Promise<void>}
*/
async handleQuarterSelectorsChange (quartersId) {
let url = '/actual/base/communityBuilding/buildingoption'
let params = {
quartersId: quartersId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.buildingSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 楼栋选择器change填充单元下拉框
* @param selectedQuarter
* @returns {Promise<void>}
*/
async handleBuildSelectorsChange (buildId) {
let url = '/actual/base/communityBuildingUnit/unitoption'
let params = {
buildingId: buildId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.unitSelectItems = data.map(e => {
return {
label: e.label,
value: e.value
}
})
}
},
/**
* 单元下拉框选择器change填充房屋
* @param unitId
* @returns {Promise<void>}
*/
async handleUnitSelectorsChange (unitId) {
let url = '/actual/base/communityHouse/houseoption'
let params = {
unitId: unitId,
}
const { data, code, msg } = await requestPost(url, params)
if (code === 0) {
this.homeSelectItems = data.map(e => {
return {
label: e.label,
value: e.value,
}
})
}
},
/**
* 递归搜索组织树选出选中的节点
* @param orgId
* @param orgList
* @returns {*}
*/
getSelectedOrgIdAndType (orgId, orgList) {
for (let org of orgList) {
if (org.agencyId === orgId) {
return { orgId: org.agencyId, level: org.level }
}
if (org.subAgencyList && org.subAgencyList.length > 0) {
let selectedOrg = this.getSelectedOrgIdAndType(orgId, org.subAgencyList)
if (selectedOrg) {
return selectedOrg
}
}
}
},
//
handleSizeChange (newPageSize) {
this.searchFormData.pageSize = newPageSize
this.handleSearch()
},
//
handleCurrentChange (pageNo) {
this.searchFormData.pageNo = pageNo
this.handleSearch()
}
},
props: {
serviceId: {
type: String,
required: true,
},
tagId: {
type: String,
required: true,
},
serviceId: {
type: String,
required: true,
}
}
}
</script>
<style lang="scss" scoped>
@import "@/assets/scss/modules/management/form-main.scss";
.btn-add-rule {
margin-left: 150px;
display: flex;
justify-content: flex-start;
margin-bottom: 20px;
}
.item_width_short {
width: 380px;
}
.item_rule {
display: flex;
justify-content: flex-start;
}
.item_label {
flex: 0 0 150px;
line-height: 30px;
text-align: right;
padding-right: 12px;
}
.item_label:before {
content: "*";
color: #f56c6c;
margin-right: 4px;
}
</style>

4
src/views/modules/goverhotline/index.vue

@ -580,9 +580,9 @@ export default {
this.hotlineChartOption.series[0].data=[];
},
//
//
exportReport() {
this.formData = {};
this.$message.info('功能即将开通,敬请期待')
},
//

4
src/views/modules/home/index.vue

@ -47,14 +47,14 @@
<div class=" m-pan m-box">
<div class="header">
<img src="@/assets/images/index/title-icon-sqzl.png" />
<span>社区总览</span>
<span>组织总览</span>
</div>
<div class="flex_box">
<div class="cnt">
<div class="cnt-left">
<div class="subtitle">
<img src="@/assets/images/index/i-sqjj.png" />
<span>社区简介</span>
<span>组织简介</span>
</div>
<p>
{{ pandectData.deptName }}<span v-if="pandectData.gridCount">划分为{{

1
src/views/modules/satisfaction/communitySelfInsp/followUpDetail.vue

@ -100,7 +100,6 @@ export default {
},
//
async created() {
console.log(this.period);
await this.getDicts()
await this.handleArr()
await this.getInspResult()

88
src/views/modules/satisfaction/communitySelfInsp/index.vue

@ -313,104 +313,18 @@ export default {
},
//
handleSearch(val) {
console.log(this.formData);
this.getTableData();
},
//
async getTableData() {
// this.tableLoading = true;
// this.tableData = [
// {
// satisfactionCategory: "culturalFacility",
// satisfactionCategoryName: "",
// score: "20",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// {
// satisfactionCategory: "sportsFacility",
// satisfactionCategoryName: "",
// score: "50",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// {
// satisfactionCategory: "ecologicalEnv",
// satisfactionCategoryName: "",
// score: "50",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// {
// satisfactionCategory: "socialSecurity",
// satisfactionCategoryName: "",
// score: "50",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// {
// satisfactionCategory: "socialAssistance",
// satisfactionCategoryName: "",
// score: "50",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// {
// satisfactionCategory: "oldPeopleProvide",
// satisfactionCategoryName: "",
// score: "50",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// {
// satisfactionCategory: "basicEducation",
// satisfactionCategoryName: "",
// score: "50",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// {
// satisfactionCategory: "medical",
// satisfactionCategoryName: "",
// score: "50",
// badQty: 40,
// goodQty: 20,
// veryGoodQty: 30,
// },
// ];
// const allowedCategories = this.dicts.satisfaction_category.map(
// (item) => item.value
// );
// this.tableData.forEach((item) => {
// if (allowedCategories.includes(item.satisfactionCategory)) {
// this.option.series[0].data.push(item.veryGoodQty);
// this.option.series[1].data.push(item.goodQty);
// this.option.series[2].data.push(item.badQty);
// this.option.xAxis.data.push(item.satisfactionCategoryName);
// this.satisfactionCategory.push(item.satisfactionCategory);
// this.score.push({
// score: item.score,
// satisfactionCategoryName: item.satisfactionCategoryName,
// imgUrl: require(`../../../../assets/img/satisfaction/${item.satisfactionCategory}.png`),
// });
// }
// });
// console.log(this.score, "");
const url = "/governance/satisfaction/communitySelfInsp/stats/synthesis";
const { formData } = this;
const { data, code, msg } = await requestGet(url, { ...formData });
this.tableLoading = false;
if (code === 0) {
this.total = data.total || 0;
this.score = []
this.tableData = data.categoryDatas;
this.formData.inspRecordId = data.inspRecordId;
this.synthesisScore = data.synthesisScore;

2
src/views/modules/satisfaction/detail/index.vue

@ -291,7 +291,7 @@ export default {
},
async handleExport() {
const url = "/governance/icEvent/export";
const url = "/governance/eventInspect/export";
const { pageSize, pageNo, formData } = this;
axios({
url: window.SITE_CONFIG["apiURL"] + url,

6
src/views/modules/shequ/cpts/smatr-rules.vue

@ -241,8 +241,8 @@ export default {
if (row.dataSource === "resi") {
url = "/oper/customize/icformitemgroup/list";
params = {
formCode: "resi_base_info",
policyFlag: "1",
formCode: "resident_base_info",
// policyFlag: "1",
};
} else if (row.dataSource === "house") {
url = "/oper/customize/icformitemgroup/list";
@ -289,7 +289,7 @@ export default {
} else {
params = {
groupId: row.itemGroupId,
policyFlag: "1",
// policyFlag: "1",
};
}
console.log(this.tableData[index], index);

26
src/views/modules/shequzhili/event/cpts/add.vue

@ -157,22 +157,22 @@ export default {
btnDisable: false,
gridList: [], //list--
qudaoArray: [
{
value: "1",
label: "多媒体反应",
},
{
value: "2",
label: "社区电话",
},
// {
// value: "1",
// label: "",
// },
// {
// value: "2",
// label: "",
// },
{
value: "3",
label: "12345",
},
{
value: "4",
label: "网络员手持终端",
},
// {
// value: "4",
// label: "",
// },
],
formData: iniFmData(),
@ -316,7 +316,7 @@ export default {
const url = "/gov/org/customergrid/gridoption";
let params = {
agencyId: this.agencyId,
purpose: "addorupdate",
purpose: "query",
};
const { data, code, msg } = await requestPost(url, params);
if (code === 0) {

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

@ -74,7 +74,7 @@
<template v-if="!item.timeLimit">
<div class="name">完成并回复</div>
</template>
<template v-else>
<template v-if="!item.agencyId && item.timeLimit">
<div class="name">{{ item.processName }}</div>
</template>
<div class="date">
@ -263,7 +263,6 @@ export default {
//
async getProjectProcess() {
const url = "/governance/icEvent/process";
// const url = "http://yapi.elinkservice.cn/mock/245/gov/project/icEvent/process";
const { data, code, msg } = await requestPost(url, {
icEventId: this.eventId,
});
@ -315,7 +314,7 @@ export default {
this.$refs.ref_processinfo_add.getProcessInfo();
this.formData.operationType = this.$refs.ref_processinfo_add.operationType;
this.eventInfoData.operationType = this.$refs.ref_processinfo_add.operationType;
if (this.formData.operationType === "0" || this.formData.operationType === "6") {
if (this.formData.operationType === '0' || this.formData.operationType === '6') {
this.project = {};
this.demand = {};
this.replayInfo = this.$refs.ref_processinfo_add.replayInfo;
@ -326,9 +325,10 @@ export default {
this.eventInfoData.categoryList = [];
this.eventInfoData.categoryList.push(this.replayInfo.categoryId);
}
} else {
} else if (this.formData.operationType === '5') {
this.project = {};
this.demand = {};
console.log(this.$refs.ref_process_form_designate.replayInfo);
this.replayInfo = this.$refs.ref_process_form_designate.replayInfo;
//
this.eventInfoData.content = this.replayInfo.content;
@ -337,6 +337,10 @@ export default {
this.eventInfoData.categoryList = [];
this.eventInfoData.categoryList.push(this.replayInfo.categoryId);
}
} else if (this.formData.operationType === '4') {
this.project = {};
this.demand = {};
this.replayInfo = {};
}
this.formData = {
...this.eventInfoData,
@ -348,7 +352,8 @@ export default {
},
async submit() {
if (this.formData.operationType == 0 || this.formData.operationType == 5) {
if (this.formData.operationType === '0' || this.formData.operationType === '5'
|| this.formData.operationType === '6' || this.formData.operationType === '4') {
const url = "/governance/icEvent/add";
const { formData } = this;
const { data, code, msg } = await requestPost(url, {
@ -372,20 +377,9 @@ export default {
this.$refs.ref_processinfo_dispose.getProcessInfo();
if (this.$refs.ref_processinfo_dispose.okflag) {
this.formData.operationType = this.$refs.ref_processinfo_dispose.operationType;
if (this.formData.operationType === "0" || this.formData.operationType === "6") {
this.replayInfo = this.$refs.ref_processinfo_dispose.replayInfo;
this.replayInfo.icEventId = this.eventId;
let url = "/governance/icEvent/reply";
await this.submitDispose(url, this.replayInfo);
} else if (this.formData.operationType === "5") {
this.replayInfo = this.$refs.ref_processinfo_dispose.replayInfo;
this.replayInfo.icEventId = this.eventId;
let url = "/governance/icEvent/designate";
console.log(this.replayInfo);
await this.submitDispose(url, this.replayInfo);
} else {
this.$message.info("请选择一种处理方式");
}
this.replayInfo = this.$refs.ref_processinfo_dispose.replayInfo;
this.replayInfo.icEventId = this.eventId;
await this.submitDispose('/governance/icEvent/reply', this.replayInfo);
} else {
return false;
}

2
src/views/modules/shequzhili/event/cpts/myCascader.vue

@ -51,4 +51,4 @@ export default {
watch: {},
};
</script>
<style lang="scss" scoped></style>>
<style lang="scss" scoped></style>

13
src/views/modules/shequzhili/event/cpts/process-form-designate.vue

@ -8,7 +8,7 @@
-->
<template>
<div class="search">
<el-form ref="ref_form1" :inline="false" :model="formData" :rules="dataRule">
<el-form ref="ref_form2" :inline="false" :model="formData" :rules="dataRule">
<el-form-item label="事件分类" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
prop="categoryList">
<div :class="{ 'visiual-form': source === 'visiual' }">
@ -17,7 +17,7 @@
@change="handleChangeCate"></el-cascader>
</div>
</el-form-item>
<el-form-item label="处理部门" prop="agencyId" label-width="150px" :class="{ 'form-item': source === 'visiual' }">
<el-form-item label="处理部门" prop="deptId" label-width="150px" :class="{ 'form-item': source === 'visiual' }">
<el-cascader class="cell-width-2" ref="agencyIdArray" v-model="agencyIdArray" :options="orgOptions"
:props="orgOptionProps" :show-all-levels="false" @change="handleChangeAgency"></el-cascader>
</el-form-item>
@ -54,7 +54,8 @@ export default {
timeLimit: "",//
categoryId: "",//
deptId: "", //
deptName: ""
deptName: "",
categoryList: []
},
orgOptions: [],
orgOptionProps: {
@ -123,7 +124,9 @@ export default {
if (this.eventId) {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
// eventDetailCopy
if (this.eventDetailCopy.parentCategoryId && his.eventDetailCopy.categoryId) {
if (this.eventDetailCopy.parentCategoryId && this.eventDetailCopy.categoryId) {
this.selCateObj = this.eventDetailCopy.selCateObj
this.formData.categoryId = this.eventDetailCopy.categoryId
this.selCategoryArray.push(this.eventDetailCopy.parentCategoryId, this.eventDetailCopy.categoryId)
}
}
@ -194,7 +197,7 @@ export default {
},
async getReplayInfo() {
this.okflag = false;
this.$refs["ref_form1"].validate((valid, messageObj) => {
this.$refs["ref_form2"].validate((valid, messageObj) => {
if (!valid) {
app.util.validateRule(messageObj);
} else {

2
src/views/modules/shequzhili/event/cpts/process-form.vue

@ -163,6 +163,8 @@ export default {
this.replayInfo = this.$refs.ref_process_form_replay_end.formData
this.okflag = true
}
}else {
return false
}
},
handleCancle() {

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

@ -101,6 +101,14 @@
<div class="m-table">
<div class="div_btn">
<el-button size="small" type="primary" @click="handleAdd">新增</el-button>
<el-button class="diy-button--white" size="small" @click="handleExportModule('room')">下载模板</el-button>
<el-upload :headers="$getElUploadHeaders()" ref="upload" class="upload-btn" action="uploadUlr"
:limit="1" :accept="'.xls,.xlsx'" :with-credentials="true" :show-file-list="false"
:auto-upload="true" :on-progress="handleProgress" :on-success="handleExcelSuccess"
:before-upload="beforeExcelUpload" :http-request="uploadHttpRequest"
style="display: inline-block;margin:0px 10px">
<el-button size="small" class="diy-button--white" :loading="importLoading">导入</el-button>
</el-upload>
<el-button @click="handleExport" class="diy-button--white" size="small">导出</el-button>
<el-dropdown size="small" split-button type="primary" style="margin: 0 10px; height: 30px"
@command="(command) => handleMarkDiffcult(command)">
@ -316,6 +324,7 @@ export default {
showVoice: false,
selVoiceUrl: "",
multipleSelection: [],
importLoading: false
};
},
computed: {
@ -491,6 +500,113 @@ export default {
this.$message.error(msg);
}
},
//
async handleExportModule() {
let url = '/governance/icEvent/downloadTemplate';
let params = {};
await this.$http({
method: 'POST',
url,
responseType: 'blob',
data: params
})
.then(res => {
if (res.headers['content-disposition']) {
let fileName = window.decodeURI(res.headers['content-disposition'].split(';')[1].split('=')[1]);
let blob = new Blob([res.data], {
type: 'application/vnd.ms-excel'
});
var url = window.URL.createObjectURL(blob);
var aLink = document.createElement('a');
aLink.style.display = 'none';
aLink.href = url;
aLink.setAttribute('download', fileName);
document.body.appendChild(aLink);
aLink.click();
document.body.removeChild(aLink); //
window.URL.revokeObjectURL(url); //blob
} else this.$message.error('下载失败');
})
.catch(err => {
console.log('err', err);
return this.$message.error('网络错误');
});
},
handleExcelSuccess(res, file) {
if (!res.code === 0 && !res.msg === 'success') {
this.$message.error(res.msg);
}
},
handleProgress(event, file, fileList) {
},
beforeExcelUpload(file) {
const isType = file.type === 'application/vnd.ms-excel';
const isTypeComputer = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
const fileType = isType || isTypeComputer;
const isLt1M = file.size / 1024 / 1024 < 10;
if (!fileType) {
this.$message.error('上传文件只能是xls/xlsx格式!');
}
if (!isLt1M) {
this.$message.error('上传文件大小不能超过 10MB!');
}
return fileType && isLt1M;
},
async uploadHttpRequest(file) {
this.importLoading = true;
this.importBtnTitle = '正在上传中...';
this.$message({
showClose: true,
dangerouslyUseHTMLString: true,
message: "导入中,请到系统管理-<a id='clickA' style='cursor: pointer;'>导入记录</a>中查看进度",
duration: 3000
});
let than = this;
document.getElementById('clickA').addEventListener('click', function () {
than.$router.replace('/main/importRecord-index');
});
const formData = new FormData(); //FormDataappend('key', value)
formData.append('file', file.file); //
formData.append('code', ''); //
await this.$http
.post('/governance/icEvent/importEvent', formData)
.then(res => {
console.log('res-up', res);
if (res.data.code == 0 && res.data.msg == 'success') {
const data = res.data.data;
this.dataList = [
...Object.keys(data.option.exist).map(k => {
return {
index: k,
srcField: data.option.exist[k],
exist: true,
field: data.option.exist[k]
};
}),
...Object.keys(data.option.notExist).map(k => {
return {
index: k,
srcField: data.option.notExist[k],
exist: false,
field: ''
};
})
];
this.importOption = data.option;
this.importCode = data.code;
this.fileData = file;
} else this.$message.error(res.data.msg);
})
.catch(err => {
console.log('失败', err);
file.onError(); //
});
this.importLoading = false;
this.importBtnTitle = '导入';
this.$refs.upload.clearFiles();
},
//
handleShowVoice(url) {

9
src/views/modules/workSys/role/role.vue

@ -69,6 +69,15 @@
label="角色名称"
min-width="100">
</el-table-column>
<el-table-column prop="defaultRole"
header-align="center"
align="center"
label="默认角色"
in-width="30">
<template slot-scope="scope">
{{ scope.row.defaultRole == '0' ? 'X' : '√' }}
</template>
</el-table-column>
<el-table-column prop="remark"
header-align="center"
align="center"

Loading…
Cancel
Save