Browse Source

合并dev分支代码

V1.0
SongZhen 2 years ago
parent
commit
082bc22a5a
  1. 10
      src/router/index.js
  2. 33
      src/views/dataBoard/cpts/personnel/index.vue
  3. 1
      src/views/dataBoard/cpts/personnel/modules/BusinessRecords.vue
  4. 3
      src/views/dataBoard/cpts/personnel/modules/EnjoyService.vue
  5. 1
      src/views/dataBoard/cpts/personnel/modules/PointsRecord.vue
  6. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/community.vue
  7. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/complaint.vue
  8. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/economize.vue
  9. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/give-service.vue
  10. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/reporting-events.vue
  11. 2
      src/views/dataBoard/cpts/personnel/modules/businessTables/resident.vue
  12. 2
      src/views/dataBoard/cpts/resi-details.vue
  13. 2
      src/views/dataBoard/organizational/microgrid/components/popDetails.vue
  14. 11
      src/views/dataBoard/overview/index.vue
  15. 15
      src/views/dataBoard/renfang/index.vue
  16. 484
      src/views/dataBoard/renfang/resi/analyze.vue
  17. 38
      src/views/dataBoard/renfang/resi/class.vue
  18. 93
      src/views/dataBoard/renfang/resident/index.vue
  19. 1
      src/views/dataBoard/renfang/visualizing/components/dataTitle.vue
  20. 5
      src/views/dataBoard/renfang/visualizing/index.vue
  21. 51
      src/views/dataBoard/satisfactionEval/modules/EventSituation/index.vue
  22. 170
      src/views/dataBoard/satisfactionEval/modules/EventStatistics/index.vue
  23. 151
      src/views/dataBoard/satisfactionEval/modules/PersonnelPortrait/index.vue
  24. 44
      src/views/dataBoard/satisfactionEval/modules/PotentialPeople/index.vue
  25. 57
      src/views/dataBoard/satisfactionEval/modules/RiskStatistics/index.vue
  26. 178
      src/views/dataBoard/satisfactionEval/modules/SelfTrend/index.vue
  27. 218
      src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue
  28. 2
      src/views/modules/base/organization/organization.vue
  29. 176
      src/views/modules/home/index.vue
  30. 6
      src/views/modules/satisfaction/communitySelfInsp/followUpDetail.vue
  31. 24
      src/views/modules/satisfaction/communitySelfInsp/index.vue
  32. 2
      src/views/modules/satisfaction/satisfactionProvince/formList.vue
  33. 8
      src/views/modules/satisfaction/satisfactionProvince/index.vue
  34. 8
      src/views/modules/shequ/chaxun.vue
  35. 58
      src/views/modules/shequzhili/event/cpts/event-info.vue
  36. 97
      src/views/modules/shequzhili/event/cpts/process-form-designate.vue
  37. 85
      src/views/modules/shequzhili/event/cpts/process-form-replay-end.vue

10
src/router/index.js

@ -239,6 +239,16 @@ export const dataBoardRoutes = {
keepAlive: false,
},
},
{
path: "renfang/resident",
props: true,
component: () => import("@/views/dataBoard/renfang/resident/index"),
name: "dataBoard-renfang-resident",
meta: {
title: "居民画像",
isTab: false,
},
},
{
path: "renfang/warn-building",
props: true,

33
src/views/dataBoard/cpts/personnel/index.vue

@ -2,53 +2,67 @@
<div>
<el-row>
<el-col :span="10">
<div class="sub-title">事项详情</div>
<data-title title="事项详情">
<div style="width: 53%; text-align: right">
<a @click="popupShow = true">更多></a>
</div>
</data-title>
<MatterDetails />
<div class="sub-title">家庭关系</div>
<data-title title="家庭关系" />
<Family />
</el-col>
<el-col :span="13" :offset="1">
<div class="sub-title">居民各项业务记录</div>
<data-title title="居民各项业务记录" />
<BusinessRecords />
<el-row>
<el-col :span="12">
<div class="sub-title">享受服务次数统计</div>
<data-title title="享受服务次数统计" />
<EnjoyService />
</el-col>
<el-col :span="11" :offset="1">
<div class="sub-title">积分记录</div>
<data-title title="积分记录" />
<PointsRecord />
</el-col>
</el-row>
</el-col>
</el-row>
<resi-details
@close="popupShow = false"
:resi-id="resId"
v-if="popupShow"
/>
</div>
</template>
<script>
import Breadcrumb from "./components/Breadcrumb/index.vue";
import dataTitle from "@/views/dataBoard/renfang/visualizing/components/dataTitle.vue";
import MatterDetails from "./modules/MatterDetails";
import Family from "./modules/Family";
import BusinessRecords from "./modules/BusinessRecords";
import EnjoyService from "./modules/EnjoyService";
import PointsRecord from "./modules/PointsRecord";
import resiDetails from "@/views/dataBoard/cpts/resi-details";
export default {
name: "OrgPersonnel",
components: {
Breadcrumb,
MatterDetails,
Family,
BusinessRecords,
EnjoyService,
PointsRecord,
dataTitle,
resiDetails,
},
data() {
return {
popupShow: false,
resId: "",
};
},
mounted() {
const query = this.$route.query;
this.resId = query.user_id;
},
};
</script>
@ -66,4 +80,7 @@ export default {
.breadcrumb {
margin-bottom: 25px;
}
a:hover {
cursor: pointer;
}
</style>

1
src/views/dataBoard/cpts/personnel/modules/BusinessRecords.vue

@ -104,6 +104,7 @@ export default {
<style scoped lang="scss">
.business-records {
margin-top: 12px;
margin-bottom: 25px;
}
.table {

3
src/views/dataBoard/cpts/personnel/modules/EnjoyService.vue

@ -1,6 +1,6 @@
<template>
<div className="event-statistics">
<div id="enjoyServiceChart" style="height: 360px"></div>
<div id="enjoyServiceChart" style="height: 350px"></div>
</div>
</template>
@ -208,5 +208,6 @@ export default {
<style scoped lang="scss">
.event-statistics {
padding: 16px 16px;
margin-top: 12px;
}
</style>

1
src/views/dataBoard/cpts/personnel/modules/PointsRecord.vue

@ -38,6 +38,7 @@ export default {
<style scoped lang="scss">
.enjoy-service {
padding-left: 26px;
margin-top: 12px;
}
.enjoy-service-item {
color: #ffffff;

2
src/views/dataBoard/cpts/personnel/modules/businessTables/community.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table :data="list" max-height="375px" height="375px">
<el-table :data="list" max-height="363px" height="363px">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="不满意事项类型" prop="scope" width="190" />
<el-table-column label="不满意事项描述" prop="problemDesc" width="" />

2
src/views/dataBoard/cpts/personnel/modules/businessTables/complaint.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table :data="list" max-height="375px" height="375px">
<el-table :data="list" max-height="363px" height="363px">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="事件类型" prop="categorycode" width="" />
<el-table-column label="事件描述" prop="eventcontent" width="" />

2
src/views/dataBoard/cpts/personnel/modules/businessTables/economize.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table :data="list" max-height="375px" height="375px">
<el-table :data="list" max-height="363px" height="363px">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="不满意事项类型" prop="scope" width="190" />
<el-table-column label="不满意事项描述" prop="problemDesc" width="" />

2
src/views/dataBoard/cpts/personnel/modules/businessTables/give-service.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table :data="list" max-height="375px" height="375px">
<el-table :data="list" max-height="363px" height="363px">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="需求类型" prop="serviceCategoryKey" width="" />
<el-table-column label="事件描述" prop="serviceName" width="" />

2
src/views/dataBoard/cpts/personnel/modules/businessTables/reporting-events.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table :data="list" max-height="375px" height="375px">
<el-table :data="list" max-height="363px" height="363px">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="事件类型" prop="categorycode" width="" />
<el-table-column label="事件描述" prop="eventcontent" width="" />

2
src/views/dataBoard/cpts/personnel/modules/businessTables/resident.vue

@ -1,6 +1,6 @@
<template>
<div class="table">
<el-table :data="list" max-height="375px" height="375px">
<el-table :data="list" max-height="363px" height="363px">
<el-table-column label="序号" type="index" width="80" />
<el-table-column label="需求类型" prop="categoryName" width="" />
<el-table-column label="需求描述" prop="content" width="" />

2
src/views/dataBoard/cpts/resi-details.vue

@ -964,7 +964,6 @@ export default {
if (code === 0) {
this.srcTableData = data;
console.log('this.srcTableData ', this.srcTableData);
// this.total = data.total;
// service_num avg_satisfaction
this.list = data.map((item, index) => {
@ -981,7 +980,6 @@ export default {
];
});
console.log('this.list', this.list);
} else {
this.$message.error(msg);
}

2
src/views/dataBoard/organizational/microgrid/components/popDetails.vue

@ -794,7 +794,6 @@ export default {
if (code === 0) {
this.srcTableData = data;
console.log("this.srcTableData ", this.srcTableData);
// this.total = data.total;
// service_num avg_satisfaction
this.list = data.map((item, index) => {
@ -811,7 +810,6 @@ export default {
];
});
console.log("this.list", this.list);
} else {
this.$message.error(msg);
}

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

@ -254,7 +254,6 @@ export default {
this.rfphDate = e;
},
handleClickDotBtn(type, info) {
console.log("handleClickDotBtn", type, info);
if (type == "watch-resi") {
this.displayedResiId = info.user_id;
} else if (type == "watch-house") {
@ -267,7 +266,6 @@ export default {
},
clickAgencyItem(item) {
console.log(item, 'item')
this.toBread({
orgId: item.id,
orgLevel: item.level,
@ -291,7 +289,6 @@ export default {
//
handleClickSearchItem(item) {
console.log("handleClickSearchItem", item);
if (!item.longitude) {
return this.$message.error("请先设置坐标");
}
@ -303,21 +300,17 @@ export default {
//
async getMapData(orgId=this.$store.state.chooseArea.chooseName.orgId,level=this.$store.state.chooseArea.chooseName.level) {
console.log("=========================getMapData");
const url = "org_map";
this.$http.post(`/gov/org/agency/maporg`, {orgId, level}).then(({data: {data}}) => {
console.log(data,'datadatadata')
this.orgData = data;
this.orgId = this.orgData.org_id;
this.orgLevel = this.orgData.level;
this.currentLevel = this.orgData.agencyLevel;
console.log(this.orgData, 'orgData')
})
},
//
async getSubMapData() {
console.log("=========================getSubMapData");
const url = "sub_org_map";
const {data, code, msg} = await requestPostBi(
@ -345,10 +338,6 @@ export default {
};
});
this.orgData = {...orgData};
console.log(
"==========================getSubMapData:result",
this.orgData
);
} else {
this.$message.error(msg);
}

15
src/views/dataBoard/renfang/index.vue

@ -583,7 +583,6 @@ export default {
const { orgId } = item;
const { breadList } = this;
let index = breadList.findIndex((val) => val.orgId === orgId);
// return console.log(item, breadList, index);
if (index >= 0) {
this.breadList = breadList.slice(0, index + 1);
} else {
@ -607,7 +606,6 @@ export default {
//
async handleSearch() {
this.searchModule.result = [];
console.log(this.searchModule);
const { searchModule } = this;
const url = [
@ -662,10 +660,6 @@ export default {
...detailJson,
};
});
console.log(
"==========this.searchModule.result",
this.searchModule.result
);
} else {
this.$message.error(msg);
}
@ -673,7 +667,6 @@ export default {
// ps:
async getPerInfo() {
console.log("=========================getPerInfo");
const url = "resident_ratio";
const { data, code, msg } = await requestPostBi(
@ -700,7 +693,6 @@ export default {
//
async getResiCategoryData() {
console.log("=========================getResiCategoryData");
const url = "resident_class_statics";
const { data, code, msg } = await requestPostBi(
@ -733,7 +725,6 @@ export default {
//
async getResiCategoryForecastData() {
console.log("=========================getResiCategoryForecastData");
const url = "resident_class_predict";
const { data, code, msg } = await requestPostBi(
@ -766,7 +757,6 @@ export default {
//
async getMapData() {
console.log("=========================getMapData");
const url = "org_map";
const { data, code, msg } = await requestPostBi(
@ -801,7 +791,6 @@ export default {
//
async getSubMapData() {
console.log("=========================getSubMapData");
const url = "sub_org_map";
const { data, code, msg } = await requestPostBi(
@ -829,10 +818,6 @@ export default {
};
});
this.orgData = { ...orgData };
console.log(
"==========================getSubMapData:result",
this.orgData
);
} else {
this.$message.error(msg);
}

484
src/views/dataBoard/renfang/resi/analyze.vue

@ -1,41 +1,37 @@
<template>
<div class="g-pgi">
<!-- 组织路由 -->
<cpt-bread
:separator="'/'"
@tap="handleClickBreadItem"
:breadList="breadList"
></cpt-bread>
<div class="m-title">
<img
class="title_img"
src="@/assets/images/index/list-logo.png"
alt
/>
<div class="tip_title">{{ tableTitle }}</div>
<div class="title_line"></div>
</div>
<div class="g-listbox">
<cpt-tb
:col-list="colList"
:loading="loading"
:header="header"
:list="list"
:total="total"
@handleSizeChange="handleSizeChange"
@handlePageNoChange="handlePageNoChange"
@operate="showInfo"
></cpt-tb>
</div>
<resi-details
@close="displayedResiId = ''"
:resi-id="displayedResiId"
v-if="displayedResiId"
/>
</div>
<div class="g-pgi">
<!-- 组织路由 -->
<cpt-bread
:separator="'/'"
@tap="handleClickBreadItem"
:breadList="breadList"
></cpt-bread>
<div class="m-title">
<img class="title_img" src="@/assets/images/index/list-logo.png" alt />
<div class="tip_title">{{ tableTitle }}</div>
<div class="title_line"></div>
</div>
<div class="g-listbox">
<cpt-tb
:col-list="colList"
:loading="loading"
:header="header"
:list="list"
:total="total"
@handleSizeChange="handleSizeChange"
@handlePageNoChange="handlePageNoChange"
@operate="showInfo"
></cpt-tb>
</div>
<resi-details
@close="displayedResiId = ''"
:resi-id="displayedResiId"
v-if="displayedResiId"
/>
</div>
</template>
<script>
@ -46,213 +42,213 @@ import { requestPostBi } from "@/js/dai/request-bipass";
import getQueryPara from "dai-js/modules/getQueryPara";
export default {
name: "resi-list",
components: {
cptTb,
cptBread,
resiDetails,
},
data() {
return {
breadList: [
{
type: "back",
meta: {
title: "人房总览",
},
},
{
meta: {
title: "居民列表",
},
},
],
tableTitle: "居民列表",
searchName: "",
orgLevel: "",
org_id: "",
resiType: "", //
loading: true,
pageSize: parseInt(localStorage.getItem("dataBoard_PageSize")) || 20,
pageNo: 1,
total: 0,
srcTableData: [],
list: [],
colList: [
{
align: "left",
width: "5%",
},
{
align: "left",
width: "10%",
},
{
align: "left",
width: "20%",
},
{
align: "left",
width: "20%",
},
{
align: "left",
width: "15%",
},
{
align: "left",
width: "10%",
},
{
align: "left",
width: "5%",
},
{
align: "left",
width: "10%",
},
{
align: "left",
width: "10%",
},
],
header: [
"序号",
"姓名",
"所属网格",
"所属房屋",
"联系电话",
"证件号",
"性别",
"出生日期",
"操作",
],
displayedResiId: "",
};
},
activated() {
this.org_id = getQueryPara("org_id");
this.resiType = getQueryPara("type");
const type_name = getQueryPara("type_name");
this.breadList[1].meta.title = type_name + "居民列表";
this.tableTitle = type_name + "居民列表";
this.pageNo = 1;
this.getList();
this.getCount();
},
methods: {
handleClickBreadItem({ item }) {
if (item.type == "back") {
this.$router.back();
}
},
handleSearch() {},
showInfo(index) {
let item = this.srcTableData[index];
this.displayedResiId = item.user_id;
},
handlePageNoChange(pageNo) {
this.pageNo = pageNo;
this.getList();
},
handleSizeChange(pageSize) {
localStorage.setItem('dataBoard_PageSize', pageSize);
this.pageSize = pageSize;
this.getList();
},
async getList() {
const { org_id, resiType, pageNo, pageSize } = this;
this.loading = true;
const url = "resident_analyze_list";
const { data, code, msg } = await requestPostBi(
url,
{
queryParam: {
org_id,
type: resiType,
pageNo,
pageSize,
},
},
{
// mockId: 60069169,
}
);
this.loading = false;
if (code === 0) {
this.srcTableData = data;
// this.total = data.total;
this.list = data.map((item, index) => {
return [
index + 1,
item.user_name ? item.user_name : "--",
item.grid ? item.grid : "--",
item.house ? item.house : "--",
item.telephone ? item.telephone : "--",
item.idcard ? item.idcard : "--",
item.gender ? item.gender : "--",
item.birthday ? item.birthday : "--",
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}
},
async getCount() {
const { org_id, resiType, pageNo, pageSize } = this;
const url = "resident_analyze_list_total";
const { data, code, msg } = await requestPostBi(
url,
{
queryParam: {
org_id,
type: resiType,
pageNo,
pageSize,
},
},
{
// mockId: 63070408,
}
);
if (code === 0) {
this.total = parseInt(data[0].count);
} else {
this.$message.error(msg);
}
},
},
destroyed() {
console.log("我已经离开了!");
},
name: "resi-list",
components: {
cptTb,
cptBread,
resiDetails,
},
data() {
return {
breadList: [
{
type: "back",
meta: {
title: "人房总览",
},
},
{
meta: {
title: "居民列表",
},
},
],
tableTitle: "居民列表",
searchName: "",
orgLevel: "",
org_id: "",
resiType: "", //
loading: true,
pageSize: parseInt(localStorage.getItem("dataBoard_PageSize")) || 20,
pageNo: 1,
total: 0,
srcTableData: [],
list: [],
colList: [
{
align: "left",
width: "5%",
},
{
align: "left",
width: "10%",
},
{
align: "left",
width: "20%",
},
{
align: "left",
width: "20%",
},
{
align: "left",
width: "15%",
},
{
align: "left",
width: "10%",
},
{
align: "left",
width: "5%",
},
{
align: "left",
width: "10%",
},
{
align: "left",
width: "10%",
},
],
header: [
"序号",
"姓名",
"所属网格",
"所属房屋",
"联系电话",
"证件号",
"性别",
"出生日期",
"操作",
],
displayedResiId: "",
};
},
activated() {
this.org_id = getQueryPara("org_id");
this.resiType = getQueryPara("type");
const type_name = getQueryPara("type_name");
this.breadList[1].meta.title = type_name + "居民列表";
this.tableTitle = type_name + "居民列表";
this.pageNo = 1;
this.getList();
this.getCount();
},
methods: {
handleClickBreadItem({ item }) {
if (item.type == "back") {
this.$router.back();
}
},
handleSearch() {},
showInfo(index) {
let item = this.srcTableData[index];
this.displayedResiId = item.user_id;
},
handlePageNoChange(pageNo) {
this.pageNo = pageNo;
this.getList();
},
handleSizeChange(pageSize) {
localStorage.setItem("dataBoard_PageSize", pageSize);
this.pageSize = pageSize;
this.getList();
},
async getList() {
const { org_id, resiType, pageNo, pageSize } = this;
this.loading = true;
const url = "resident_analyze_list";
const { data, code, msg } = await requestPostBi(
url,
{
queryParam: {
org_id,
type: resiType,
pageNo,
pageSize,
},
},
{
// mockId: 60069169,
}
);
this.loading = false;
if (code === 0) {
this.srcTableData = data;
// this.total = data.total;
this.list = data.map((item, index) => {
return [
index + 1,
item.user_name ? item.user_name : "--",
item.grid ? item.grid : "--",
item.house ? item.house : "--",
item.telephone ? item.telephone : "--",
item.idcard ? item.idcard : "--",
item.gender ? item.gender : "--",
item.birthday ? item.birthday : "--",
{ type: "operate", list: ["查看"] },
];
});
} else {
this.$message.error(msg);
}
},
async getCount() {
const { org_id, resiType, pageNo, pageSize } = this;
const url = "resident_analyze_list_total";
const { data, code, msg } = await requestPostBi(
url,
{
queryParam: {
org_id,
type: resiType,
pageNo,
pageSize,
},
},
{
// mockId: 63070408,
}
);
if (code === 0) {
this.total = parseInt(data[0].count);
} else {
this.$message.error(msg);
}
},
},
destroyed() {
console.log("我已经离开了!");
},
};
</script>

38
src/views/dataBoard/renfang/resi/class.vue

@ -223,6 +223,12 @@ export default {
title: "人房总览",
},
},
{
path: "/dataBoard/renfang/visualizing",
meta: {
title: "",
},
},
{
meta: {
title: "居民列表",
@ -418,13 +424,22 @@ export default {
},
activated() {
this.org_id = getQueryPara("org_id");
this.type = getQueryPara("type");
this.type_id = getQueryPara("type_id");
this.pageType = getQueryPara("pageType");
this.type_name = getQueryPara("type_name");
const type_name = getQueryPara("type_name");
this.breadList[1].meta.title = type_name + "居民列表";
const query = this.$route.query;
this.org_id = query.org_id;
this.type = query.type;
this.type_id = query.type_id;
this.pageType = query.pageType;
this.type_name = query.type_name;
const type_name = query.type_name;
let title = type_name;
if (this.type == "jineng" || this.type == "gangwei") {
title = "失业人员";
}
if (this.type == "wennuan" || this.type == "fuwu") {
title = "低保人员";
}
this.type_name1 = title;
this.breadList[1].meta.title = title;
this.tableTitle = type_name + "居民列表";
this.pageNo = 1;
const type = this.type;
@ -467,7 +482,6 @@ export default {
};
}
this.getList();
// this.getCount();
if (this.pageType != "normal") {
this.colList = [
{
@ -555,6 +569,8 @@ export default {
type_id: this.type_id,
type_name: item.meta.title,
pageType: this.pageType,
type: this.type,
pageType: this.pageType,
},
});
},
@ -569,13 +585,15 @@ export default {
},
jumpPage(index) {
let item = this.listData[index];
console.log("item::", item);
this.$router.push({
path: "/organizational/orgPersonnel",
path: "/dataBoard/renfang/resident",
query: {
org_id: this.org_id,
type_id: this.type_id,
user_id: item.id,
type: this.type,
pageType: this.pageType,
type_name: this.type_name,
},
});
},

93
src/views/dataBoard/renfang/resident/index.vue

@ -0,0 +1,93 @@
<template>
<div>
<cpt-bread
@tap="clickBreadItem"
v-if="breadList.length > 1"
:bread-list="breadList"
/>
<personnel />
</div>
</template>
<script>
import cptBread from "@/views/dataBoard/renfang/cpts/bread";
import personnel from "@/views/dataBoard/cpts/personnel"
export default {
name: "renfang",
components: {
cptBread,
personnel,
},
data() {
return {
breadList: [
{
path: "/dataBoard/renfang/index",
meta: {
title: "人房总览",
},
},
{
path: "/dataBoard/renfang/visualizing",
meta: {
title: "",
},
},
{
path: "/dataBoard/renfang/resi-class",
meta: {
title: "居民列表",
},
},
{
path: "/dataBoard/renfang/resident",
meta: {
title: "居民画像",
},
},
],
};
},
mounted() {
const query = this.$route.query;
this.org_id = query.org_id;
this.type = query.type;
this.type_id = query.type_id;
this.pageType = query.pageType;
this.type_name = query.type_name;
let title = query.type_name;
if (this.type == "jineng" || this.type == "gangwei") {
title = "失业人员";
}
if (this.type == "wennuan" || this.type == "fuwu") {
title = "低保人员";
}
this.breadList[1].meta.title = title;
},
watch: {},
methods: {
clickBreadItem({ item }) {
this.$router.push({
path: item.path,
query: {
org_id: this.org_id,
type_id: this.type_id,
type: this.type,
type_name: this.type_name,
pageType: this.pageType,
},
});
}
},
};
</script>
<style
lang="scss"
src="@/assets/scss/dataBoard/renfang/index.scss"
scoped
></style>

1
src/views/dataBoard/renfang/visualizing/components/dataTitle.vue

@ -3,6 +3,7 @@
<img class="title_img" src="@/assets/images/index/list-logo.png" alt />
<div class="tip_title">{{ title }}</div>
<div class="title_line"></div>
<slot></slot>
</div>
</template>
<script>

5
src/views/dataBoard/renfang/visualizing/index.vue

@ -65,11 +65,6 @@ export default {
];
this.pageName = query.type_name;
this.breadList[1].meta.title = query.type_name;
// this.toBread({
// orgId: query.org_id,
// orgLevel: query.type_id,
// meta: { title: query.type_name },
// });
},
mounted() {},
methods: {

51
src/views/dataBoard/satisfactionEval/modules/EventSituation/index.vue

@ -4,29 +4,29 @@
<div class="current">
<div class="cur-month">
<span>{{ curMonth }}</span>
<span>{{ $moment(curMonth.monthTime).format('M') }}</span>
</div>
<div class="cur-month-list">
<div class="cur-month-item">
<div class="txt">事件总数</div>
<div class="num blue">52</div>
<div class="num blue">{{curMonth.sumNum}}</div>
</div>
<div class="cur-month-item">
<div class="txt">处理中</div>
<div class="num orange">13</div>
<div class="num orange">{{curMonth.processNum}}</div>
</div>
<div class="cur-month-item">
<div class="txt">已办结</div>
<div class="num green">28</div>
<div class="num green">{{curMonth.closedNum}}</div>
</div>
</div>
</div>
<div class="his-month">
<div class="his-month-item" v-for="(item,index) in eventList" :key="index">
<div class="month">{{ item.month }}</div>
<div class="num">{{ item.num }}</div>
<div class="event">{{ item.env }}事件数</div>
<div class="month">{{ $moment(item.monthTime).format('M') }}</div>
<div class="num">{{ item.sumNum?item.sumNum:'--' }}</div>
<div class="event">{{ item.type?item.type+'事件数':'--' }}</div>
</div>
</div>
</div>
@ -41,18 +41,30 @@ export default {
curMonth: ''
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData();
}
}
},
mounted() {
this.curMonth = new Date().getMonth() - 0 + 1
let eventList = []
for (let i = 4; i >= 0; i--) {
eventList.push({
month: this.curMonth - 1 - i,
num: 10,
env: 11,
})
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getData();
}
this.eventList = eventList
},
methods: {
getData() {
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId
}
this.$http.get('/governance/satisfactionOverview/do12345MonthGroup?'+this.$paramsFormat(params)).then(({data: {data}}) => {
this.curMonth = data.filter(item => item.monthTime === this.$moment().format('YYYY-MM'))[0]
this.eventList = data.filter(item => item.monthTime !== this.$moment().format('YYYY-MM'))
})
}
}
}
</script>
@ -70,12 +82,14 @@ export default {
text-align: center;
letter-spacing: 5px;
}
.current {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 60px 15px 50px;
}
.cur-month {
font-size: 18px;
font-weight: 400;
@ -96,8 +110,10 @@ export default {
.cur-month-list {
display: flex;
.cur-month-item {
margin-left: 71px;
.txt {
font-size: 16px;
font-weight: 400;
@ -130,6 +146,7 @@ export default {
background: linear-gradient(-90deg, rgba(14, 121, 213, 0.10) 0%, rgba(17, 124, 213, 0) 100%);
padding: 20px;
margin-bottom: 28px;
.his-month-item {
flex: 1;
position: relative;
@ -147,9 +164,11 @@ export default {
}
&:last-child:after {
display: none;
}
.month {
font-size: 14px;
font-weight: 400;

170
src/views/dataBoard/satisfactionEval/modules/EventStatistics/index.vue

@ -14,19 +14,88 @@ export default {
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData();
}
}
},
mounted() {
this.initCharts()
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getData();
}
},
methods: {
initCharts() {
getData() {
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId,
}
params = this.$paramsFormat(params)
this.$http.get('/governance/satisfactionOverview/childSatisfactionGroup?' + params).then(({data: {data}}) => {
this.initCharts(data)
})
},
initCharts({orgList,series}) {
let div = document.getElementById('eventStatisticsChart');
this.myChart = echarts.init(div);
let xData = ['XX社区第一网格','XX社区第二网格','XX社区第三网格','XX社区第四网格',];
let tq1 = [12, 20, 30, 60];
let tq2 = [10, 50, 50, 27];
let tq3 = [300, 90, 48, 39];
const max = Math.max(...tq1, ...tq2, ...tq3)
let xData = orgList;
let color = [[
{
offset: 0,
color: 'rgba(152, 72, 255, 0)'
},
{
offset: 1,
color: '#A962FF'
}
], [
{
offset: 0,
color: 'rgba(255, 228, 102, 0)' // 0%
},
{
offset: 1,
color: 'rgba(255, 228, 102, 1)' // 100%
}
], [
{
offset: 0,
color: 'rgba(0, 84, 255, 0)' // 0%
},
{
offset: 1,
color: 'rgba(38, 244, 248, 1)' // 100%
}
]]
let seriesArray = series.map((item, index) => {
return {
name: item.name,
type: 'bar',
barWidth: 14,
itemStyle: {
opacity: 1,
color: new echarts.graphic.LinearGradient(
0,
1,
0,
0,
color[index],
false
)
},
data: item.data,
}
})
console.log(seriesArray)
let num = []
series.forEach(item => {
num.push(...item.data)
})
const max = Math.max(...num)
let barArray = new Array(xData.length).fill((parseInt(max / 100) + 1) * 100)
var option = {
@ -43,8 +112,8 @@ export default {
},
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(13, 64, 71, 0.50)',
borderColor: 'rgba(143, 225, 252, 0.60)',
backgroundColor: 'rgba(13,33,71,0.5)',
borderColor: 'rgba(143,174,252,0.6)',
padding: 8,
textStyle: {
color: '#fff',
@ -62,7 +131,7 @@ export default {
},
legend: {
// icon: 'circle',
data: ['12345投诉', '省满意度调查', '社区满意度自查'],
data: series.map(item => item.name),
itemGap: 20,
itemWidth: 6,
itemHeight: 6,
@ -148,86 +217,7 @@ export default {
}
],
series: [
{
name: '12345投诉',
type: 'bar',
barWidth: 14,
itemStyle: {
opacity: 1,
color: new echarts.graphic.LinearGradient(
0,
1,
0,
0,
[
{
offset: 0,
color: 'rgba(152, 72, 255, 0)' // 0%
},
{
offset: 1,
color: '#A962FF' // 100%
}
],
false
)
},
data: tq1,
},
{
name: '省满意度调查',
type: 'bar',
barWidth: 14,
itemStyle: {
// lenged
opacity: 1, //
color: new echarts.graphic.LinearGradient(
0,
1,
0,
0,
[
{
offset: 0,
color: 'rgba(255, 228, 102, 0)' // 0%
},
{
offset: 1,
color: 'rgba(255, 228, 102, 1)' // 100%
}
],
false
)
},
data: tq2, //data.values
},
{
name: '社区满意度自查',
type: 'bar',
barWidth: 14,
itemStyle: {
// lenged
opacity: 1, //
color: new echarts.graphic.LinearGradient(
0,
1,
0,
0,
[
{
offset: 0,
color: 'rgba(0, 84, 255, 0)' // 0%
},
{
offset: 1,
color: 'rgba(38, 244, 248, 1)' // 100%
}
],
false
)
},
data: tq3, //data.values
},
...seriesArray,
{
name: '',
type: 'bar',

151
src/views/dataBoard/satisfactionEval/modules/PersonnelPortrait/index.vue

@ -3,7 +3,7 @@
<Tabs v-model="resultType" :list="resultTypeList" @changeVal="resultTypeChange"/>
<div class="screen">
<div class="txt">不满意人员画像</div>
<el-select v-model="typeCondition" placeholder="请选择" class="select" popper-class="selectPopClass">
<el-select v-model="typeCondition" @change="getData" placeholder="请选择" class="select" popper-class="selectPopClass">
<el-option
v-for="item in typeConditionList"
:key="item.value"
@ -14,17 +14,31 @@
</div>
<div class="portrait">
<div class="tag yellow"><div class="text">第一网格</div></div>
<div class="tag blue"><div class="text">30-40</div></div>
<div class="tag red"><div class="text">流动人员</div></div>
<div class="tag light"><div class="text">月收入5000以下</div></div>
<div class="tag green"><div class="text">专科</div></div>
<div class="tag orange"><div class="text">已婚</div></div>
<div class="tag purple"><div class="text"></div></div>
<div class="tag yellow">
<div class="text">{{ gridName }}</div>
</div>
<div class="tag blue">
<div class="text">{{ ageClassification }}</div>
</div>
<div class="tag red">
<div class="text">{{ residentTagName }}</div>
</div>
<div class="tag light">
<div class="text">{{ monthIncomeLevel }}</div>
</div>
<div class="tag green">
<div class="text">{{ cultureLevel }}</div>
</div>
<div class="tag orange">
<div class="text">{{ marriageName }}</div>
</div>
<div class="tag purple">
<div class="text">{{ gender==='1'?'男':gender==='2'?'女':gender==='0'?'未知':'' }}</div>
</div>
</div>
<div class="btn" @click="$router.push('/dataBoard/satisfactionEval/dissatisfiedPersonnel')">
<div>按画像匹配到同类<span> <b>372</b></span></div>
<div>按画像匹配到同类<span> <b>{{matchPeopleNum?matchPeopleNum:0}}</b></span></div>
<i class="el-icon-arrow-right"></i>
</div>
</div>
@ -38,47 +52,68 @@ export default {
components: {Tabs},
data() {
return {
resultType: 1,
resultType: 'provinceAndSelf',
resultTypeList: [{
label: ' 按省调查/社区自查结果',
value: 1
value: 'provinceAndSelf'
}, {
label: '按12345热线投诉结果',
value: 2
value: '12345'
}],
typeCondition: 1,
typeConditionList: [
{
label: '基础教育',
value: 1
}, {
label: '病有所医',
value: 2
}, {
label: '老有所养',
value: 3
}, {
label: '文化设施',
value: 4
}, {
label: '生态环境',
value: 5
}, {
label: '体育设施',
value: 6
}, {
label: '社会救助',
value: 7
},
],
typeConditionList: [],
gender: "",
marriageName: "",
ageClassification: "",
cultureLevel: "",
gridName: "",
monthIncomeLevel: "",
residentTagName: "",
matchPeopleNum: 0
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getDisKey()
}
}
},
mounted() {
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getDisKey()
}
},
methods: {
resultTypeChange() {
resultTypeChange(val) {
this.resultType = val
this.getData()
},
getDisKey() {
this.$http.post('/sys/dict/data/dictlist', {'dictType': 'satisfaction_category'}).then(({data: {data}}) => {
this.typeCondition = data[0].value
this.typeConditionList = data
this.getData();
})
},
getData() {
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId,
queryType: this.resultType,
category: this.typeCondition,
}
this.$http.get('/governance/satisfactionOverview/satisfactionCrowdPortrait?' + this.$paramsFormat(params)).then(({data: {data}}) => {
this.gender = data.gender;
this.marriageName = data.marriageName;
this.ageClassification = data.ageClassification;
this.cultureLevel = data.cultureLevel;
this.gridName = data.gridName;
this.monthIncomeLevel = data.monthIncomeLevel;
this.residentTagName = data.residentTagName;
this.matchPeopleNum = data.matchPeopleNum;
})
}
}
}
@ -131,6 +166,7 @@ $purple: #6642fd;
background: url("@/assets/images/manyidu/hx_bg.png") no-repeat center;
margin: 0 auto;
cursor: pointer;
.tag {
position: absolute;
width: 76px;
@ -138,6 +174,7 @@ $purple: #6642fd;
display: flex;
align-items: center;
justify-content: center;
.text {
width: 60px;
height: 60px;
@ -149,6 +186,7 @@ $purple: #6642fd;
justify-content: center;
border-radius: 50%;
}
&:after {
content: "";
opacity: .3;
@ -159,92 +197,114 @@ $purple: #6642fd;
border-radius: 50%;
}
&:nth-of-type(1) {
left: 162px;
top: 0;
}
&:nth-of-type(2) {
left: 297px;
top: 73px;
}
&:nth-of-type(3) {
left: 316px;
top: 203px;
}
&:nth-of-type(4) {
left: 228px;
top: 269px;
}
&:nth-of-type(5) {
left: 77px;
top: 257px;
}
&:nth-of-type(6) {
left: 0px;
top: 158px;
}
&:nth-of-type(7) {
left: 48px;
top: 57px;
}
}
.yellow {
.text {
background: $yellow;
background: $yellow;
}
&:after {
background: $yellow;
}
}
.blue {
.text {
background: $blue;
background: $blue;
}
&:after {
background: $blue;
}
}
.red {
.text {
background: $red;
background: $red;
}
&:after {
background: $red;
}
}
.light {
.text {
background: $light;
background: $light;
}
&:after {
background: $light;
}
}
.green {
.text {
background: $green;
background: $green;
}
&:after {
background: $green;
}
}
.orange {
.text {
background: $orange;
background: $orange;
}
&:after {
background: $orange;
}
}
.purple {
.text {
background: $purple;
background: $purple;
}
&:after {
background: $purple;
}
}
}
.btn {
width: 240px;
height: 46px;
@ -260,6 +320,7 @@ $purple: #6642fd;
padding: 0 20px;
margin: 33px auto 0;
cursor: pointer;
span {
font-size: 18px;
}

44
src/views/dataBoard/satisfactionEval/modules/PotentialPeople/index.vue

@ -8,7 +8,7 @@
事件未解决 <br>
上报人数
</div>
<div class="num"><span class="orange">78</span></div>
<div class="num"><span class="orange">{{ unSolvedNum ? unSolvedNum : 0 }}</span></div>
</div>
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/xqwmz')">
<div class="icon">
@ -18,7 +18,7 @@
需求未满足 <br>
人数
</div>
<div class="num"><span class="green">128</span></div>
<div class="num"><span class="green">{{ unFinishNum ? unFinishNum : 0 }}</span></div>
</div>
<div class="potential-people-item" @click="$router.push('/dataBoard/satisfactionEval/potentialPeople/yxwxfw')">
<div class="icon">
@ -28,14 +28,47 @@
应享未享 <br>
服务人数
</div>
<div class="num"><span class="light">527</span></div>
<div class="num"><span class="light">{{ noServiceNum ? noServiceNum : 0 }}</span></div>
</div>
</div>
</template>
<script>
export default {
name: "PotentialPeople"
name: "PotentialPeople",
data() {
return {
noServiceNum: 0,
unFinishNum: 0,
unSolvedNum: 0,
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData();
}
}
},
mounted() {
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getData();
}
},
methods: {
getData() {
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId
}
this.$http.get('/governance/satisfactionOverview/potentialSatisfactionGroup?' + this.$paramsFormat(params)).then(({data: {data}}) => {
this.noServiceNum = data.noServiceNum
this.unFinishNum = data.unFinishNum
this.unSolvedNum = data.unSolvedNum
})
}
}
}
</script>
@ -51,8 +84,9 @@ export default {
text-align: center;
flex: 1;
border: 1px solid rgba(28, 67, 111, 0.22);
background: linear-gradient(0deg, rgba(31, 121, 255, 0.22) 0%, rgba(31,121,255,0) 100%);
background: linear-gradient(0deg, rgba(31, 121, 255, 0.22) 0%, rgba(31, 121, 255, 0) 100%);
padding: 26px 0 31px;
.icon {
width: 86px;
height: 86px;

57
src/views/dataBoard/satisfactionEval/modules/RiskStatistics/index.vue

@ -10,7 +10,7 @@
12345热线 <br>
投诉人数
</div>
<div class="num"><span>7</span> </div>
<div class="num"><span>{{event12345Num?event12345Num:0}}</span> </div>
</div>
</div>
@ -23,7 +23,7 @@
省满意度调查 <br>
不满意人数
</div>
<div class="num"><span>7</span> </div>
<div class="num"><span>{{provinceSatisfactionNum?provinceSatisfactionNum:0}}</span> </div>
</div>
</div>
@ -36,7 +36,7 @@
社区满意度自评 <br>
不满意人数
</div>
<div class="num"><span>7</span> </div>
<div class="num"><span>{{selfInspectNum?selfInspectNum:0}}</span> </div>
</div>
</div>
</div>
@ -46,28 +46,28 @@
本月回访 <br>
次数
</div>
<div class="num"><span class="grey">112</span> </div>
<div class="num"><span class="grey">{{followMonthNum?followMonthNum:0}}</span> </div>
</div>
<div class="number-item">
<div class="txt">
本月回访消除 <br>
风险人员数
</div>
<div class="num"><span class="green">112</span> </div>
<div class="num"><span class="green">{{followMonthNotRiskyNum?followMonthNotRiskyNum:0}}</span> </div>
</div>
<div class="number-item">
<div class="txt">
累计回访 <br>
次数
</div>
<div class="num"><span class="purple">112</span> </div>
<div class="num"><span class="purple">{{followSumNum?followSumNum:0}}</span> </div>
</div>
<div class="number-item">
<div class="txt">
累计回访消除 <br>
风险人员数
</div>
<div class="num"><span class="blue">112</span> </div>
<div class="num"><span class="blue">{{followNotRiskyNum?followNotRiskyNum:0}}</span> </div>
</div>
</div>
@ -76,7 +76,48 @@
<script>
export default {
name: "RiskStatistics"
name: "RiskStatistics",
data() {
return {
event12345Num: 0,
followMonthNotRiskyNum: 0,
followMonthNum: 0,
followNotRiskyNum: 0,
followSumNum: 0,
provinceSatisfactionNum: 0,
selfInspectNum: 0,
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData();
}
}
},
mounted() {
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getData();
}
},
methods: {
getData() {
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId
}
this.$http.get('/governance/satisfactionOverview/satisfactionFollowGroup?'+this.$paramsFormat(params)).then(({data:{data}}) => {
this.event12345Num = data.event12345Num;
this.followMonthNotRiskyNum = data.followMonthNotRiskyNum;
this.followMonthNum = data.followMonthNum;
this.followNotRiskyNum = data.followNotRiskyNum;
this.followSumNum = data.followSumNum;
this.provinceSatisfactionNum = data.provinceSatisfactionNum;
this.selfInspectNum = data.selfInspectNum;
})
}
}
}
</script>

178
src/views/dataBoard/satisfactionEval/modules/SelfTrend/index.vue

@ -28,25 +28,82 @@ export default {
}],
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData();
}
}
},
mounted() {
this.initCharts()
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getData();
}
},
methods: {
trendTypeChange(data) {
trendTypeChange(val) {
if (val !== this.trendType) {
this.trendType = val
this.getData()
}
},
initCharts() {
getData() {
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId,
}
let url = '/governance/satisfactionOverview/notSatisfactionTrend'
if (this.trendType === 2) {
url = '/governance/satisfactionOverview/selfInspectMonthTrend'
}
params = this.$paramsFormat(params)
this.$http.get(url + '?' + params).then(({data: {data}}) => {
this.initCharts(data)
})
},
initCharts({monthTimes, series}) {
let div = document.getElementById('selfTrendChart');
this.myChart = echarts.init(div);
let xData = ['2022-10', '2022-11', '2022-12', '2023-01', '2023-02', '2023-03', '2023-04', '2023-05', '2023-06', '2023-07', '2023-08', '2023-09'];
let tq1 = [12, 20, 30, 60, 49, 18, 90, 48, 39, 30, 27, 40, 48, 39, 27, 49];
let tq2 = [10, 50, 50, 27, 49, 58, 80, 80, 19, 60, 30, 30, 49, 18, 90, 20];
let tq3 = [300, 90, 48, 39, 30, 27, 49, 18, 90, 39, 27, 49, 30, 100, 49, 100];
const max = Math.max(...tq1, ...tq2, ...tq3)
let xData = monthTimes;
let color = ['#F95619', '#F9E066', '#25F0F6']
let seriesArray = series.map((item, index) => {
return {
name: item.name,
type: 'line',
showAllSymbol: true,
symbol: 'circle',
symbolSize: 6,
lineStyle: {
normal: {
color: color[index],
},
},
label: {
show: false,
position: 'top',
textStyle: {
color: color[index],
},
},
itemStyle: {
color: color[index],
borderColor: color[index],
borderWidth: 2,
},
data: item.data,
}
})
console.log(seriesArray)
let num = []
series.forEach(item => {
num.push(...item.data)
})
const max = Math.max(...num)
let barArray = new Array(xData.length).fill((parseInt(max / 100) + 1) * 100)
var option = {
title: {
show: false,
text: '',
@ -58,10 +115,28 @@ export default {
fontSize: 18,
},
},
tooltip: {
trigger: 'axis',
backgroundColor: 'rgba(13,33,71,0.5)',
borderColor: 'rgba(143,174,252,0.6)',
padding: 8,
textStyle: {
color: '#fff',
},
formatter: function (params) {
console.log(params)
var res = '<div"><p>' + params[0].name + '</p></div>'
for (var i = 0; i < params.length; i++) {
if (params[i].seriesName != "") {
res += '<p>' + params[i].seriesName + ':' + params[i].data + '</p>'
}
}
return res;
},
},
legend: {
// icon: 'circle',
data: ['12345投诉事件数', '省调查不满意数', '社区自查不满意数'],
data: series.map(item => item.name),
itemGap: 20,
itemWidth: 16,
itemHeight: 6,
@ -142,84 +217,9 @@ export default {
],
series: [
...seriesArray,
{
name: '12345投诉事件数',
type: 'line',
showAllSymbol: true,
symbol: 'circle',
symbolSize: 6,
lineStyle: {
normal: {
color: '#F95619',
},
},
label: {
show: false,
position: 'top',
textStyle: {
color: '#F95619',
},
},
itemStyle: {
color: '#F95619',
borderColor: '#F95619',
borderWidth: 2,
},
data: tq1,
},
{
name: '省调查不满意数',
type: 'line',
showAllSymbol: true,
symbol: 'circle',
symbolSize: 6,
lineStyle: {
normal: {
color: '#F9E066',
},
},
label: {
show: false,
position: 'top',
textStyle: {
color: '#F9E066',
},
},
itemStyle: {
color: '#F9E066',
borderColor: '#F9E066',
borderWidth: 2,
},
data: tq2, //data.values
},
{
name: '社区自查不满意数',
type: 'line',
yIndex: 0,
showAllSymbol: true,
symbol: 'circle',
symbolSize: 6,
lineStyle: {
normal: {
color: '#25F0F6',
},
},
label: {
show: false,
position: 'top',
textStyle: {
color: '#25F0F6',
},
},
itemStyle: {
color: '#25F0F6',
borderColor: '#25F0F6',
borderWidth: 2,
},
data: tq3, //data.values
},
{
// name: '',
name: '',
type: 'bar',
itemStyle: {
normal: {
@ -235,7 +235,7 @@ export default {
},
],
};
this.myChart.setOption(option);
this.myChart.setOption(option, true);
window.addEventListener("resize", () => this.myChart.resize());
},
}

218
src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue

@ -1,15 +1,19 @@
<template>
<div class="types-dissatisfaction">
<div class="screen">
<Tabs v-model="resultType" :list="resultTypeList" @changeVal="resultTypeChange"/>
<el-select v-model="typeCondition" popper-class="selectPopClass" placeholder="请选择" class="select">
<el-option
v-for="item in typeConditionList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<Tabs v-model="resultType" :list="resultTypeList" @changeVal="resultTypeChange"/>
<el-select v-model="typeCondition"
popper-class="selectPopClass"
placeholder="请选择"
class="select"
@change="getData">
<el-option
v-for="item in typeConditionList"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
<div id="typeConditionChart" style="height: 542px;"></div>
</div>
@ -56,27 +60,134 @@ export default {
}
},
watch: {
"$store.state.chooseArea.chooseName"(val) {
if (val.orgId) {
this.getData();
}
}
},
mounted() {
this.initCharts()
if (this.$store.state.chooseArea.chooseName.orgId) {
this.getData();
}
},
methods: {
resultTypeChange(data) {
resultTypeChange(val) {
if (val !== this.resultType) {
this.resultType = val
this.getData()
}
},
getData() {
let params = {
level: this.$store.state.chooseArea.chooseName.level,
orgId: this.$store.state.chooseArea.chooseName.orgId,
startTime: '',
endTime: ''
}
if (this.typeCondition === 1) {
params.startTime = this.$moment().startOf('month').format('YYYY-MM-DD')
}
if (this.typeCondition === 2) {
params.startTime = this.$moment().subtract(1, 'months').startOf('month').format('YYYY-MM-DD')
}
if (this.typeCondition === 3) {
params.startTime = this.$moment().subtract(2, 'months').startOf('month').format('YYYY-MM-DD')
}
if (this.typeCondition === 4) {
params.startTime = this.$moment().subtract(5, 'months').startOf('month').format('YYYY-MM-DD')
}
if (this.typeCondition === 5) {
params.startTime = this.$moment().subtract(11, 'months').startOf('month').format('YYYY-MM-DD')
}
if (this.typeCondition === 2) {
params.endTime = this.$moment().subtract(1, 'months').endOf('month').format('YYYY-MM-DD')
} else {
params.endTime = this.$moment().endOf('month').format('YYYY-MM-DD')
}
params = this.$paramsFormat(params)
let url = '/governance/satisfactionOverview/satisfactionGroup'
if (this.resultType === 2) {
url = '/governance/satisfactionOverview/event12345Group'
}
this.$http.get(url + '?' + params).then(({data: {data}}) => {
this.initCharts(data)
})
},
initCharts() {
initCharts(data) {
let div = document.getElementById('typeConditionChart');
this.myChart = echarts.init(div);
var dataname = ['老有所养', '社会治安', '生态环境', '体育设施', '社会救助', '文化设施', '基础教育', '病有所医']
var datamax = [20, 20, 20, 20, 20, 20, 20, 20]
var datavaule = [10, 16, 18, 15, 12, 18, 18, 18]
var datavaule2 = [12, 17, 20, 16, 13, 19, 19, 19]
var dataname = data.map(item => item.name)
var datavaule = data.map(item => item.blueNum ? item.blueNum : 0)
var datavaule2 = data.map(item => item.yellowNum ? item.yellowNum : 0)
var indicator = []
let max = Math.max(...datavaule, ...datavaule2)
console.log(max)
var datamax = new Array(datavaule.length).fill(max)
for (var i = 0; i < dataname.length; i++) {
indicator.push({
name: dataname[i],
max: datamax[i],
})
}
let legendName = ['省满意度调查\n各项不满意人数', '社区满意度自查\n各项不满意人数']
let series = [{
name: "省满意度调查\n各项不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 7,
areaStyle: {
normal: {
color: 'rgba(58,128,231,0.36)',
}
},
itemStyle: {
color: '#3A80E7',
borderColor: '#3AB7FF',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#3AB7FF",
width: 2
}
},
data: [datavaule]
}]
if (this.resultType === 2) {
legendName = ['省满意度调查\n各项不满意人数']
} else {
series.push({
name: "社区满意度自查\n各项不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 7,
areaStyle: {
normal: {
color: 'rgba(170, 216, 255, 0)',
}
},
itemStyle: {
color: '#EB8E16',
borderColor: '#EF9700',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#EF9700",
width: 2
}
},
data: [datavaule2]
})
}
console.log(this.resultType, series)
var option = {
tooltip: {
show: false,
@ -101,22 +212,13 @@ export default {
formatter: name => {
return `{name|${name}}`
},
data: ['省满意度调查\n各项不满意人数', '社区满意度自查\n各项不满意人数'],
data: legendName,
},
radar: {
center: ["50%", "60%"],
radius: "50%",
startAngle: 90,
splitNumber: 5,
/* splitArea: {
areaStyle: {
color: [
'rgba(0,96,208, 0.1)', 'rgba(0,96,208, 0.2)',
'rgba(0,96,208, 0.4)', 'rgba(0,96,208, 0.6)',
'rgba(0,96,208, 0.8)', 'rgba(0,96,208, 1)'
].reverse()
}
},*/
splitArea: {
areaStyle: {
color: 'transparent'
@ -147,54 +249,9 @@ export default {
},
indicator: indicator
},
series: [{
name: "省满意度调查\n各项不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 7,
areaStyle: {
normal: {
color: 'rgba(58,128,231,0.36)',
}
},
itemStyle: {
color: '#3A80E7',
borderColor: '#3AB7FF',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#3AB7FF",
width: 2
}
},
data: [datavaule]
}, {
name: "社区满意度自查\n各项不满意人数",
type: "radar",
symbol: "circle",
symbolSize: 7,
areaStyle: {
normal: {
color: 'rgba(170, 216, 255, 0)',
}
},
itemStyle: {
color: '#EB8E16',
borderColor: '#EF9700',
borderWidth: 1,
},
lineStyle: {
normal: {
color: "#EF9700",
width: 2
}
},
data: [datavaule2]
}]
series
};
this.myChart.setOption(option);
this.myChart.setOption(option, true);
window.addEventListener("resize", () => this.myChart.resize());
},
}
@ -205,19 +262,22 @@ export default {
.types-dissatisfaction {
padding: 16px 32px;
}
.screen {
display: flex;
justify-content: space-between;
/deep/ .el-input__inner {
width: 90px!important;
height: 24px!important;
background: #021C49!important;
border: 1px solid #125AAA!important;
border-radius: 12px!important;
width: 90px !important;
height: 24px !important;
background: #021C49 !important;
border: 1px solid #125AAA !important;
border-radius: 12px !important;
color: #A0CDFF;
}
/deep/ .el-input__icon {
line-height: 24px!important;
line-height: 24px !important;
color: #A0CDFF;
}
}

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

@ -1131,7 +1131,7 @@ export default {
contacts: "",
mobile: "",
agencyId: "",
departmentDuty: "123",
departmentDuty: "",
},
//
GridForm: {

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

@ -1,4 +1,3 @@
<template>
<div>
<div class="g-row">
@ -27,12 +26,12 @@
:placeholder="typePlaceholder[searchData.type]
"
v-model="searchData.searchKey"
@keyup.enter="handleClickSearchBtn" />
@keyup.enter="handleClickSearchBtn"/>
<div class="close-btn"
v-if="searchData.searchKey != ''"
@click="searchData.searchKey = ''">
<img src="@/assets/img/shequ/close.png" />
<img src="@/assets/img/shequ/close.png"/>
</div>
</div>
<div class="btn"
@ -46,31 +45,36 @@
</div>
<div class=" m-pan m-box">
<div class="header">
<img src="@/assets/images/index/title-icon-sqzl.png" />
<img src="@/assets/images/index/title-icon-sqzl.png"/>
<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" />
<img src="@/assets/images/index/i-sqjj.png"/>
<span>组织简介</span>
</div>
<p>
{{ pandectData.deptName }}<span v-if="pandectData.gridCount">划分为{{
pandectData.underCount }}{{
pandectData.underName
}}</span> 现有房屋{{ pandectData.homeCount }}自住房屋{{
pandectData.selfStay
}}出租房屋{{
pandectData.rentOut
}}闲置房屋{{
pandectData.vacantHouse
}}现有居民{{pandectData.resiCount}}{{pandectData.totalResidents}}其中常住人口{{pandectData.permanentResiCount}}流动人口{{pandectData.floatingResiCount}}各类群体分布如下
pandectData.underCount
}}{{
pandectData.underName
}}</span> 现有房屋{{ pandectData.homeCount }}自住房屋{{
pandectData.selfStay
}}出租房屋{{
pandectData.rentOut
}}闲置房屋{{
pandectData.vacantHouse
}}现有居民{{ pandectData.resiCount }}{{
pandectData.totalResidents
}}其中常住人口{{ pandectData.permanentResiCount }}流动人口{{
pandectData.floatingResiCount
}}各类群体分布如下
</p>
<div class="subtitle">
<img src="@/assets/images/index/i-fxjg.png" />
<img src="@/assets/images/index/i-fxjg.png"/>
<span>分析结果</span>
</div>
@ -78,8 +82,8 @@
v-if="resiCategory.list.length > 0">
根据数据分析结果建议重点关注
<b>{{ resiCategory.list[0].name }}{{
resiCategory.list[1].name
}}{{ resiCategory.list[2].name }}</b>
resiCategory.list[1].name
}}{{ resiCategory.list[2].name }}</b>
三类群体开展相关的社区服务和活动
</p>
</div>
@ -97,8 +101,8 @@
) in resiCategory.list">
<div>
{{
("0" + (index + 1)).substr(-2)
}}.
("0" + (index + 1)).substr(-2)
}}.
</div>
<div class="item-name">
{{ item.name }}
@ -130,8 +134,8 @@
) in znycCategory.list">
<div>
{{
("0" + (index + 1)).substr(-2)
}}.
("0" + (index + 1)).substr(-2)
}}.
</div>
<div class="item-name">
{{ item.name }}
@ -160,11 +164,12 @@
<div class="g-row-right">
<div class="m-box m-tx">
<div class="header">
<img src="@/assets/images/index/title-icon-zntx.png" />
<img src="@/assets/images/index/title-icon-zntx.png"/>
<span>智能提醒</span>
</div>
<div class="more"
@click="toNoticePage">更多></div>
@click="toNoticePage">更多>
</div>
<div class="cnt"
v-if="noticeData.length > 0">
<div @click="handleClickNotice(item)"
@ -191,7 +196,7 @@
<div class="cnt"
v-else>
<div class="empty">
<img src="~@/assets/images/shuju/renfang/index/empty.png" />
<img src="~@/assets/images/shuju/renfang/index/empty.png"/>
<span>暂无提醒</span>
</div>
</div>
@ -199,7 +204,7 @@
<div class="m-box m-tb">
<div class="wrap">
<div class="header">
<img src="@/assets/images/index/title-icon-zntb.png" />
<img src="@/assets/images/index/title-icon-zntb.png"/>
<span>不满意事项月度趋势分析</span>
</div>
</div>
@ -211,21 +216,21 @@
</div>
</div>
</div>
<fastcall ref="fastcall" />
<fastcall ref="fastcall"/>
</div>
</template>
<script>
import { requestPost, requestGet } from "@/js/dai/request";
import {requestPost, requestGet} from "@/js/dai/request";
import resiCategoryMap from "@/views/business/resi-category-map.js";
import { mapGetters } from "vuex";
import {mapGetters} from "vuex";
import nextTick from "dai-js/tools/nextTick";
import fastcall from "@/views/modules/cpts/fastcall";
import * as echarts from 'echarts';
export default {
components: { fastcall },
components: {fastcall},
data () {
data() {
return {
searchStatus: "ini", //ing over
searchData: {
@ -269,58 +274,6 @@ export default {
activeName: 'resi',
option: {
tooltip: {
trigger: 'axis'
},
legend: {
data: ['12345不满意数', '省满意调查不满意数', '社区自评不满意数'],
bottom: '10%',
icon: 'rect',
itemWidth: 20,
itemHeight: 5,
itemGap: 20,
},
grid: {
left: '3%',
right: '4%',
bottom: '25%',
containLabel: true
},
toolbox: {
// feature: {
// saveAsImage: {}
// }
},
xAxis: {
type: 'category',
boundaryGap: false,
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月']
},
yAxis: {
type: 'value'
},
series: [
{
name: '12345不满意数',
type: 'line',
stack: 'Total',
data: [120, 132, 101, 134, 90, 230, 210]
},
{
name: '省满意调查不满意数',
type: 'line',
stack: 'Total',
data: [220, 182, 191, 234, 290, 330, 310]
},
{
name: '社区自评不满意数',
type: 'line',
stack: 'Total',
data: [150, 232, 201, 154, 190, 330, 410]
}
]
},
myChart: {}
}
},
@ -347,21 +300,66 @@ export default {
immediate: true,
},
},
mounted () {
mounted() {
this.getApiData();
this.$nextTick(() => {
this.initChart()
})
console.log(
"dynamicMenuRoutes----------------------------",
this.$store.state.sidebarMenuList
"dynamicMenuRoutes----------------------------",
this.$store.state.sidebarMenuList
);
},
methods: {
initChart () {
this.myChart = echarts.init(document.getElementById('my_chart'));
this.myChart.setOption(this.option)
window.addEventListener('resize', this.handleWindowResize);
initChart() {
this.$http.get('/governance/satisfactionOverview/notSatisfactionTrend').then(({data: {data}}) => {
this.myChart = echarts.init(document.getElementById('my_chart'));
let series = []
console.log(data,'datadatadata')
data.series.forEach(item => {
series.push({
...item,
type: 'line',
stack: 'Total',
})
})
let option = {
tooltip: {
trigger: 'axis'
},
legend: {
data: data.series.map(item => item.name),
bottom: '10%',
icon: 'rect',
itemWidth: 20,
itemHeight: 5,
itemGap: 20,
},
grid: {
left: '3%',
right: '4%',
bottom: '25%',
containLabel: true
},
toolbox: {
// feature: {
// saveAsImage: {}
// }
},
xAxis: {
type: 'category',
boundaryGap: false,
data: data.monthTimes.map(item => this.$moment(item).format('M') + '月')
},
yAxis: {
type: 'value'
},
series
}
this.myChart.setOption(option, true)
window.addEventListener('resize', this.handleWindowResize);
})
},
handleWindowResize () {
if (this.myChart) {

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

@ -1,5 +1,6 @@
<template>
<div class='g-main dialog-h-content'>
<h3>{{agencyName}}{{period.substr(5,2)}}月份满意度调查</h3>
<p>尊敬的居民朋友</p>
@ -20,15 +21,14 @@
</div>
<p>8姓名{{form.reporterName}}</p>
<p>9电话{{form.reporterMobile}}</p>
<p>10姓名{{form.reporterName}}</p>
<p>11您是否接受回访</p>
<p>10您是否接受回访</p>
<section class="f-hflex">
<el-radio class="f-bot16" v-model="form.followUpStatus" disabled :label="-2">未知</el-radio>
<el-radio class="f-bot16" v-model="form.followUpStatus" disabled :label="-1">不接受回访</el-radio>
<el-radio class="f-bot16" v-model="form.followUpStatus" disabled :label="0">接受回访/待回访</el-radio>
<el-radio class="f-bot16" v-model="form.followUpStatus" disabled :label="1">已回访</el-radio>
</section>
<p v-if="form.followUpStatus === 0">12请选择合适您的回访方式</p>
<p v-if="form.followUpStatus === 0">11请选择合适您的回访方式</p>
<section class="f-hflex" v-if="form.followUpStatus === 0">
<el-radio class="f-bot16" v-model="form.expectFollowUpWay" disabled label="0">未知</el-radio>
<el-radio class="f-bot16" v-model="form.expectFollowUpWay" disabled label="1">电话回访</el-radio>

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

@ -5,7 +5,7 @@
<div class="m-search">
<el-form :inline="true" :model="formData" ref="ref_searchform" :label-width="'100px'">
<el-form-item label="自评周期">
<el-date-picker v-model="formData.period" type="date" value-format="yyyy-MM" placeholder="选择日期"
<el-date-picker v-model="formData.period" type="month" value-format="yyyy-MM" placeholder="选择日期"
style="width: 202px" clearable>
</el-date-picker>
</el-form-item>
@ -230,9 +230,7 @@ export default {
this.agencyId = this.user.agencyId;
await this.getDicts();
await this.getTableData();
this.$nextTick(() => {
this.initEcharts();
})
await this.initEcharts();
},
created() {
let date = new Date()
@ -318,14 +316,19 @@ export default {
//
async getTableData() {
try{
const url = "/governance/satisfaction/communitySelfInsp/stats/synthesis";
const { formData } = this;
const { data, code, msg } = await requestGet(url, { ...formData });
this.tableLoading = false;
if (code === 0) {
const { data, msg } = await requestGet(url, { ...formData });
this.total = data.total || 0;
this.score = []
this.tableData = data.categoryDatas;
this.option.series[0].data = []
this.option.series[1].data = []
this.option.series[2].data = []
this.option.xAxis.data = []
this.tableData = data.categoryDatas || [];
this.satisfactionCategory = []
this.formData.inspRecordId = data.inspRecordId;
this.synthesisScore = data.synthesisScore;
this.personQty = data.personQty
@ -340,8 +343,9 @@ export default {
this.score.push({ score: item.score, satisfactionCategoryName: item.satisfactionCategoryName, imgUrl: require(`../../../../assets/img/satisfaction/${item.satisfactionCategory}.png`) });
}
});
} else {
this.$message.error(msg);
this.myChart.setOption(this.option);
}catch(error){
console.log(error);
}
},

2
src/views/modules/satisfaction/satisfactionProvince/formList.vue

@ -62,7 +62,7 @@ export default {
periodStart: '',
scopeId: '',
},
pageNo: 1,
pageNo: 0,
pageSize: 20,
total: 0,
tableData: [],

8
src/views/modules/satisfaction/satisfactionProvince/index.vue

@ -5,7 +5,7 @@
<div class="m-search">
<el-form :inline="true" :model="formData" ref="ref_searchform" :label-width="'100px'">
<el-form-item label="自评周期">
<el-date-picker v-model="formData.periodStart" type="date" value-format="yyyy-MM" placeholder="选择日期"
<el-date-picker v-model="formData.periodStart" type="month" value-format="yyyy-MM" placeholder="选择日期"
style="width: 202px" clearable>
</el-date-picker>
</el-form-item>
@ -256,6 +256,8 @@ export default {
`/governance/provinceEvaluationRecord/staticPeopleNum`,
{ ...this.formData }
);
this.option.series[0].data = []
this.option.xAxis.data = []
this.tableData = data
this.tableData.forEach(item => {
if (allowedCategories.includes(item.scopeId)) {
@ -263,10 +265,10 @@ export default {
this.option.xAxis.data.push(item.scopeName)
}
});
this.myChart.setOption(this.option)
} catch (error) {
console.log(error);
}
},
async handleExportModule() {
let url = "/governance/provinceEvaluationRecord/provinceStatis/downloadImportTemplate";
@ -336,7 +338,7 @@ export default {
const formData = new FormData(); //FormDataappend('key', value)
formData.append("file", file.file); //
await this.$http
.post("/governance/satisfaction/provinceEvaluationRecord/StaticPeopleNum/2023-09", formData)
.post(`/governance/provinceEvaluationRecord/importDataByExcel`, formData)
.then((res) => {
console.log("res-up", res);
if (res.data.code == 0 && res.data.msg == "success") {

8
src/views/modules/shequ/chaxun.vue

@ -539,9 +539,9 @@ export default {
this.searchFangwu.total = 0;
this.getSearchFangwu();
}
if (this.smatrFlag && this.childrenRulesData.length === 0) {
this.getRulesList();
}
// if (this.smatrFlag && this.childrenRulesData.length === 0) {
// this.getRulesList();
// }
this.searchStatus = "ing";
},
async getRulesList() {
@ -629,6 +629,7 @@ export default {
} else {
this.$message.error(msg);
}
this.getRulesList();
},
async getSearchFangwu() {
@ -676,6 +677,7 @@ export default {
: [];
} else {
}
this.getRulesList();
},
handelClickTab(type) {
console.log(type);

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

@ -99,6 +99,31 @@
<div class="detail-field">办结时限</div>
<div class="detail-value">{{ formTimeLimit(item.timeLimit) }}</div>
</div>
<template v-if="item.internalFile && item.internalFile.length > 0"
v-for="i in item.internalFile">
<template v-if="i.type === 'image'">
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">图片</span>
<img :src="i.url" :key="i.url"
style="width: 150px; height: 150px; padding-right: 10px"
@click="watchImg(i.url)" />
</div>
</template>
<template v-if="i.type === 'voice'">
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">语音</span>
<audio controls>
<source :src="i.url" type="" :key="i.url" />
</audio>
</div>
</template>
<template v-if="i.type === 'doc'">
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">附件</span>
<a :href="i.url">{{ i.name }}</a>
</div>
</template>
</template>
</template>
<template v-else>
<div class="detail">
@ -113,6 +138,33 @@
<div class="detail-field">办结时限</div>
<div class="detail-value">{{ formTimeLimit(item.timeLimit) }}</div>
</div>
<template v-if="item.internalFile && item.internalFile.length > 0"
v-for="i in item.internalFile">
<template v-if="i.type === 'image'">
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">图片</span>
<img :src="i.url" :key="i.url"
style="width: 150px; height: 150px; padding-right: 10px"
@click="watchImg(i.url)" />
</div>
</template>
<template v-if="i.type === 'voice'">
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">语音</span>
<audio controls>
<source :src="i.url" type="" :key="i.url" />
</audio>
</div>
</template>
<template v-if="i.type === 'doc'">
<div :class="['m-info-prop', { 'm-info-prop-vis': source === 'visiual' },]">
<span class="u-info-title-2">语音</span>
<audio controls>
<source :src="i.url" type="" :key="i.url" />
</audio>
</div>
</template>
</template>
</template>
</div>
</div>
@ -259,6 +311,9 @@ export default {
changeGridId(val) {
this.gridId = val;
},
watchImg(src) {
window.open(src);
},
//
async getProjectProcess() {
@ -305,6 +360,7 @@ export default {
},
async handelAdd() {
debugger
this.$refs.ref_add.getEventInfo();
if (this.$refs.ref_add.okflag) {
this.eventInfoData = this.$refs.ref_add.formData;
@ -318,6 +374,7 @@ export default {
this.project = {};
this.demand = {};
this.replayInfo = this.$refs.ref_processinfo_add.replayInfo;
console.log(this.replayInfo);
//
this.eventInfoData.content = this.replayInfo.content;
this.eventInfoData.status = this.replayInfo.status;
@ -330,6 +387,7 @@ export default {
this.demand = {};
console.log(this.$refs.ref_process_form_designate.replayInfo);
this.replayInfo = this.$refs.ref_process_form_designate.replayInfo;
console.log(this.replayInfo);
//
this.eventInfoData.content = this.replayInfo.content;
this.eventInfoData.status = this.replayInfo.status;

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

@ -1,8 +1,8 @@
<!--
* @Author: yanLu xgktv007@163.com
* @Date: 2023-09-05 10:21:34
* @LastEditors: yanLu xgktv007@163.com
* @LastEditTime: 2023-09-05 10:21:34
* @LastEditors: mk 2403457699@qq.com
* @LastEditTime: 2023-09-18 17:16:40
* @Description: 事件转办表单
*
-->
@ -28,6 +28,15 @@
placeholder="请输入转办意见,不超过500字" v-model="formData.content"></el-input>
</div>
</el-form-item>
<el-form-item style="display: block" label="附件" label-width="150px" prop="attach">
<el-upload :headers="$getElUploadHeaders()" class="upload-demo" :action="uploadUlr"
accept=".doc,.pdf,.xls,.docx,.xlsx,.jpg,.png,.jpeg,.bmp,.mp4,.wma,.m4a,.mp3"
:on-success="handleFileSuccess" :on-remove="handleFileRemove" :on-preview="handleFileDownload"
:limit="3" :before-upload="beforeUpload" :file-list="fileList">
<el-button size="small" :disabled="fileList.length === 3" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">支持图片wordpdf</div>
</el-upload>
</el-form-item>
<el-form-item label="办结时限" prop="timeLimit" label-width="150px" :class="{ 'form-item': source === 'visiual' }"
style="display: block">
<div :class="{ 'visiual-form': source === 'visiual' }">
@ -55,7 +64,8 @@ export default {
categoryId: "",//
deptId: "", //
deptName: "",
categoryList: []
categoryList: [],
files: [] //
},
orgOptions: [],
orgOptionProps: {
@ -71,6 +81,8 @@ export default {
eventDetailCopy: {},
selCategoryArray: [],
casOptions: [],
fileList: [],
uploadUlr: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadvariedfile",
iscascaderShow: 0,
optionProps: {
multiple: false,
@ -91,7 +103,10 @@ export default {
timeLimit: [
{ required: true, message: "办结时限不能为空", trigger: "blur" },
]
}
},
selCateObj: {
id: ""
},
};
},
components: {},
@ -125,7 +140,7 @@ export default {
this.eventDetailCopy = JSON.parse(JSON.stringify(this.eventDetailData));
// eventDetailCopy
if (this.eventDetailCopy.parentCategoryId && this.eventDetailCopy.categoryId) {
this.selCateObj = this.eventDetailCopy.selCateObj
this.selCateObj.id = this.eventDetailCopy.categoryId
this.formData.categoryId = this.eventDetailCopy.categoryId
this.selCategoryArray.push(this.eventDetailCopy.parentCategoryId, this.eventDetailCopy.categoryId)
}
@ -177,6 +192,7 @@ export default {
if (this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0]) {
this.selCateObj = this.$refs["myCascader"].getCheckedNodes()[0].data
this.formData.categoryId = this.selCateObj.id
console.log(this.formData.categoryId, 'this.formData.categoryId');
} else {
this.selCateObj = {}
}
@ -205,6 +221,9 @@ export default {
this.$message.error("请选择事件分类");
return false;
}
if(this.fileList){
this.formData.files = this.fileList
}
this.formData.status = "processing";
this.formData.categoryId = this.selCateObj.id;
this.formData.categoryList = [];
@ -216,6 +235,74 @@ export default {
resetData() {
this.agencyIdArray = []
},
beforeUpload(file) {
const array = file.name.split(".");
const extension = array[array.length - 1];
const formatarray = [
"jpg",
"png",
"jpeg",
"bmp",
"mp4",
"wma",
"m4a",
"mp3",
"doc",
"docx",
"xls",
"xlsx",
"pdf",
];
if (formatarray.indexOf(extension) === -1) {
this.$message.error("只支持图片、word、pdf");
return false;
}
},
handleFileRemove(file) {
if (file && file.status === "success") {
this.fileList.splice(
this.fileList.findIndex((item) => item.uid === file.uid),
1
);
}
},
handleFileSuccess(res, file) {
if (res.code === 0 && res.msg === "success") {
const array = file.name.split(".");
const fileType = array[array.length - 1];
const picArray = ["jpg", "png", "jpeg", "bmp"];
const videoarray = ["mp4", "wma", "m4a"];
const docArray = ["doc", "docx", "xls", "xlsx", "pdf"];
const mp3Array = ["mp3"];
if (picArray.indexOf(fileType) > -1) {
file.attachmentFormat = "image";
} else if (videoarray.indexOf(fileType) > -1) {
file.attachmentFormat = "video";
} else if (docArray.indexOf(fileType) > -1) {
file.attachmentFormat = "doc";
} else if (mp3Array.indexOf(fileType) > -1) {
file.attachmentFormat = "voice";
}
file.url = res.data.url;
file.type = fileType;
file.attachmentName = file.name;
file.attachmentType = file.type;
file.attachmentUrl = file.url;
this.fileList.push(file);
} else this.$message.error(res.msg);
},
//
handleFileDownload(file) {
var a = document.createElement("a");
var event = new MouseEvent("click");
a.download = file.name;
a.href = file.url;
a.dispatchEvent(event);
},
//
startLoading() {
loading = Loading.service({

85
src/views/modules/shequzhili/event/cpts/process-form-replay-end.vue

@ -25,6 +25,15 @@
placeholder="请输入回复内容,不超过500字" v-model="formData.content"></el-input>
</div>
</el-form-item>
<el-form-item style="display: block" label="附件" label-width="150px" prop="attach">
<el-upload :headers="$getElUploadHeaders()" class="upload-demo" :action="uploadUlr"
accept=".doc,.pdf,.xls,.docx,.xlsx,.jpg,.png,.jpeg,.bmp,.mp4,.wma,.m4a,.mp3"
:on-success="handleFileSuccess" :on-remove="handleFileRemove" :on-preview="handleFileDownload"
:limit="3" :before-upload="beforeUpload" :file-list="fileList">
<el-button size="small" :disabled="fileList.length === 3" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">支持图片wordpdf</div>
</el-upload>
</el-form-item>
</el-form>
</div>
</template>
@ -43,12 +52,15 @@ export default {
content: '',
status: 'closed_case',
categoryList: [],
files: []
},
status: false,
okflag: false,
eventDetailCopy: {},
selCategoryArray: [],
casOptions: [],
fileList: [],
uploadUlr: window.SITE_CONFIG["apiURL"] + "/oss/file/uploadvariedfile",
iscascaderShow: 0,
optionProps: {
multiple: false,
@ -87,7 +99,7 @@ export default {
},
watch: {},
created() {},
created() { },
async mounted() {
this.getCategoryList();
@ -152,6 +164,9 @@ export default {
if (!this.formData.categoryId) {
this.formData.categoryId = this.selCateObj.id;
}
if(this.fileList){
this.formData.files = this.fileList
}
this.formData.categoryList = [];
this.formData.categoryList.push(this.selCateObj);
this.okflag = true;
@ -159,6 +174,74 @@ export default {
});
},
resetData() { },
beforeUpload(file) {
const array = file.name.split(".");
const extension = array[array.length - 1];
const formatarray = [
"jpg",
"png",
"jpeg",
"bmp",
"mp4",
"wma",
"m4a",
"mp3",
"doc",
"docx",
"xls",
"xlsx",
"pdf",
];
if (formatarray.indexOf(extension) === -1) {
this.$message.error("只支持图片、word、pdf");
return false;
}
},
handleFileRemove(file) {
if (file && file.status === "success") {
this.fileList.splice(
this.fileList.findIndex((item) => item.uid === file.uid),
1
);
}
},
handleFileSuccess(res, file) {
if (res.code === 0 && res.msg === "success") {
const array = file.name.split(".");
const fileType = array[array.length - 1];
const picArray = ["jpg", "png", "jpeg", "bmp"];
const videoarray = ["mp4", "wma", "m4a"];
const docArray = ["doc", "docx", "xls", "xlsx", "pdf"];
const mp3Array = ["mp3"];
if (picArray.indexOf(fileType) > -1) {
file.attachmentFormat = "image";
} else if (videoarray.indexOf(fileType) > -1) {
file.attachmentFormat = "video";
} else if (docArray.indexOf(fileType) > -1) {
file.attachmentFormat = "doc";
} else if (mp3Array.indexOf(fileType) > -1) {
file.attachmentFormat = "voice";
}
file.url = res.data.url;
file.type = fileType;
file.attachmentName = file.name;
file.attachmentType = file.type;
file.attachmentUrl = file.url;
this.fileList.push(file);
} else this.$message.error(res.msg);
},
//
handleFileDownload(file) {
var a = document.createElement("a");
var event = new MouseEvent("click");
a.download = file.name;
a.href = file.url;
a.dispatchEvent(event);
},
//
startLoading() {
loading = Loading.service({

Loading…
Cancel
Save