diff --git a/src/assets/images/home/homeTop2.png b/src/assets/images/home/homeTop2.png new file mode 100644 index 000000000..4e07421f3 Binary files /dev/null and b/src/assets/images/home/homeTop2.png differ diff --git a/src/assets/images/renfang/map-right-cur.png b/src/assets/images/renfang/map-right-cur.png new file mode 100644 index 000000000..e42cb473c Binary files /dev/null and b/src/assets/images/renfang/map-right-cur.png differ diff --git a/src/assets/images/renfang/map-right-open.png b/src/assets/images/renfang/map-right-open.png new file mode 100644 index 000000000..1f150dc74 Binary files /dev/null and b/src/assets/images/renfang/map-right-open.png differ diff --git a/src/assets/images/renfang/map-right-title.png b/src/assets/images/renfang/map-right-title.png new file mode 100644 index 000000000..f5b3cac59 Binary files /dev/null and b/src/assets/images/renfang/map-right-title.png differ diff --git a/src/assets/scss/dataBoard/table-border.scss b/src/assets/scss/dataBoard/table-border.scss new file mode 100644 index 000000000..5daedbab0 --- /dev/null +++ b/src/assets/scss/dataBoard/table-border.scss @@ -0,0 +1,66 @@ +.table { + + /deep/ .el-table { + border: 1px solid #225087 !important; + } + /deep/ .el-table td, + /deep/ .el-table tr { + padding: 10px 0px !important; + border: 1px solid #225087 !important; + + } + + /deep/ .el-table th>.cell { + padding: 0!important; + } + /deep/ .el-table th { + padding: 6px 14px !important; + border: 1px solid #225087 !important; + background: #0E3873; + } + + /deep/ .el-table td, + /deep/ .el-table th { + background: none !important; + } + + /deep/ .el-table td { + font-size: 14px; + font-weight: 400; + color: #FFFFFF; + text-shadow: 1px 2px 4px rgba(10, 32, 60, 0.51); + } + + /deep/ .el-table tr { + background: none !important; + background-size: 100% !important; + + + &:hover { + background-color: rgba(26, 149, 255, 0.3) !important; + } + } + + /deep/ .el-table { + background: none !important; + + &:before { + background: none !important; + } + } + + /deep/ .el-table__header-wrapper tr { + color: #A3B9DA !important; + font-size: 14px; + font-weight: 400; + opacity: 0.76; + + &:hover { + background: none !important; + } + } + + /deep/ .el-table__header-wrapper { + background: none; + } +} \ No newline at end of file diff --git a/src/views/dataBoard/cpts/homeDetails/index.vue b/src/views/dataBoard/cpts/homeDetails/index.vue index d4d93f9ef..4abb65376 100644 --- a/src/views/dataBoard/cpts/homeDetails/index.vue +++ b/src/views/dataBoard/cpts/homeDetails/index.vue @@ -52,9 +52,9 @@
- / + /
-
+
-
+
- / + /
-
+
-
+
+
+
+
+ +
+
+
+
@@ -48,6 +55,7 @@ export default { return { dyLeft: [], dyRight: [], + dyService: [], }; }, created() { @@ -77,6 +85,16 @@ export default { this.initRightCharts(); }) .catch(() => {}); + this.$http + .get("/actual/base/peopleRoomOverview/partyPie?type=2") + .then(({ data: res }) => { + if (res.code !== 0) { + return this.$message.error(res.msg); + } + this.dyService = dataFormatter(res.data); + this.initServiceCharts(); + }) + .catch(() => {}); }, initLeftCharts() { let div = document.getElementById("dyLeftChart"); @@ -275,7 +293,7 @@ export default { { type: "pie", radius: - this.dyRight && this.dyRight.length > 0 ? [30, 130] : [0, 0], + this.dyRight && this.dyRight.length > 0 ? [30, 130] : [0, 0], center: ["50%", "50%"], roseType: "area", itemStyle: { @@ -311,6 +329,124 @@ export default { this.myChart2.setOption(option); window.addEventListener("resize", () => this.myChart2.resize()); }, + + initServiceCharts() { + let div = document.getElementById("dyServiceChart"); + this.myChart3 = echarts.init(div); + const option = { + color: [ + "#15a7ed", + "#22b998", + "#5f6ff4", + "#a66eeb", + "#faa834", + "#fd6200", + "#fb3905", + ], + legend: { + orient: "vertical", + top: 20, + left: 10, + icon: "rect", + itemHeight: 14, + itemWidth: 14, + textStyle: { + color: "#ffffff", + rich: { + name: { + width: 80, + fontSize: 12, + color: "#dddee7", + }, + value: { + width: 30, + align: "right", + fontSize: 18, + }, + }, + }, + data: this.dyService, + formatter: (name) => { + if (this.dyService.length) { + const item = this.dyService.filter((item) => item.name === name)[0]; + return `{name|${name}}{value| ${item.value}}`; + } + }, + }, + toolbox: { + show: false, + feature: { + mark: { show: true }, + dataView: { show: true, readOnly: false }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + title: { + show: !this.dyService || this.dyService.length == 0, // 是否要展示“暂无数据”矢量图 + text: " {a|}", // 写入占位符a,以便后续填充内容 + x: "center", + y: "center", + subtext: "暂无数据", // 子标题 + itemGap: -10, // 设置主副标题间隔 + textStyle: { + rich: { + a: { + height: 128, // 设置图片高度 + width: 268, // 设置图片宽度 + backgroundColor: { + // 引入图片,作为背景图,填写相对路径 + image: require("@/assets/images/overview/zanwu.png"), + }, + }, + }, + }, + subtextStyle: { + // 配置副标题的文字样式 + fontSize: 12, + color: "#ffffff", + }, + }, + series: [ + { + type: "pie", + radius: + this.dyService && this.dyService.length > 0 ? [30, 130] : [0, 0], + center: ["50%", "50%"], + roseType: "area", + itemStyle: { + borderRadius: 0, + }, + top: 20, + left: -40, + label: { + position: "inside", + formatter: "{d}%", + textStyle: { + color: "#ffffff", + fontSize: 12, + }, + }, + data: this.dyService, + }, + ], + }; + this.myChart3.on("click", (e) => { + this.$router.push({ + path: "/dataBoard/renfang/resi-class-new", + query: { + org_id: this.org_id, + type_id: "aged", + type_name: "党员", + pageType: "normal", + type: "dangyuan", + cultureLevel: e.data.name, + }, + }); + }); + this.myChart3.setOption(option); + window.addEventListener("resize", () => this.myChart3.resize()); + }, }, }; diff --git a/src/views/dataBoard/renfang/visualizing/components/dibaorenyuan.vue b/src/views/dataBoard/renfang/visualizing/components/dibaorenyuan.vue index 8e14787db..c07a42898 100644 --- a/src/views/dataBoard/renfang/visualizing/components/dibaorenyuan.vue +++ b/src/views/dataBoard/renfang/visualizing/components/dibaorenyuan.vue @@ -27,6 +27,12 @@
+
+
+ +
+
+
@@ -64,6 +70,7 @@ export default { dbryData2: [], dbryData3: [], dbryData4: [], + dbryData5: [], }; }, created() { @@ -111,6 +118,16 @@ export default { this.dbryDataCharts4(); }) .catch(() => {}); + this.$http + .get("/actual/base/peopleRoomOverview/lowIncomePie?type=4") + .then(({ data: res }) => { + if (res.code !== 0) { + return this.$message.error(res.msg); + } + this.dbryData5 = dataFormatter(res.data); + this.dbryDataCharts5(); + }) + .catch(() => {}); }, dbryDataCharts1() { let div = document.getElementById("dbryChart1"); @@ -629,6 +646,135 @@ export default { }); window.addEventListener("resize", () => this.myChart4.resize()); }, + dbryDataCharts5() { + let div = document.getElementById("dbryChart5"); + this.myChart5 = echarts.init(div); + const option = { + color: [ + "#15a7ed", + "#22b998", + "#5f6ff4", + "#a66eeb", + "#faa834", + "#fd6200", + "#fb3905", + ], + tooltip: { + show: true, + }, + legend: { + type: "scroll", + orient: "vertical", + top: 20, + left: 10, + icon: "rect", + itemHeight: 14, + itemWidth: 14, + textStyle: { + color: "#ffffff", + rich: { + name: { + width: 90, + fontSize: 12, + color: "#dddee7", + }, + value: { + width: 30, + align: "right", + fontSize: 18, + }, + }, + }, + data: this.dbryData5, + tooltip: { + show: true, + }, + formatter: (name) => { + if (this.dbryData5.length) { + const item = this.dbryData5.filter( + (item) => item.name === name + )[0]; + return `{name|${echarts.format.truncateText( + name, + 100, + "14px Microsoft Yahei", + "…" + )}}{value| ${item.value}}`; + } + }, + }, + toolbox: { + show: false, + feature: { + mark: { show: true }, + dataView: { show: true, readOnly: false }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + title: { + show: !this.dbryData5 || this.dbryData5.length == 0, // 是否要展示“暂无数据”矢量图 + text: " {a|}", // 写入占位符a,以便后续填充内容 + x: "center", + y: "center", + subtext: "暂无数据", // 子标题 + itemGap: -10, // 设置主副标题间隔 + textStyle: { + rich: { + a: { + height: 126, // 设置图片高度 + width: 268, // 设置图片宽度 + backgroundColor: { + // 引入图片,作为背景图,填写相对路径 + image: require("@/assets/images/overview/zanwu.png"), + }, + }, + }, + }, + subtextStyle: { + // 配置副标题的文字样式 + fontSize: 12, + color: "#ffffff", + }, + }, + series: [ + { + type: "pie", + radius: this.dbryData5 && this.dbryData5.length > 0?[30, 130]:[0,0], + center: ["50%", "50%"], + roseType: "area", + itemStyle: { + borderRadius: 0, + }, + top: 20, + left: -40, + label: { + position: "inside", + formatter: "{d}%", + textStyle: { + color: "#ffffff", + fontSize: 12, + }, + }, + data: this.dbryData5, + }, + ], + }; + this.myChart5.setOption(option); + this.myChart5.on("click", (a, b) => { + this.$router.push({ + path: "/dataBoard/renfang/resi-class-new", + query: { + org_id: this.org_id, + type_id: "mlsp", + type_name: "服务找人", + pageType: "normal1", + type: "fuwu", + }, + }); + }); + window.addEventListener("resize", () => this.myChart5.resize()); + }, }, }; diff --git a/src/views/dataBoard/renfang/visualizing/components/laonianren.vue b/src/views/dataBoard/renfang/visualizing/components/laonianren.vue index 98902ac35..2139a48f5 100644 --- a/src/views/dataBoard/renfang/visualizing/components/laonianren.vue +++ b/src/views/dataBoard/renfang/visualizing/components/laonianren.vue @@ -13,6 +13,12 @@
+
+
+ +
+
+
@@ -48,6 +54,7 @@ export default { return { lnrLeft: [], lnrRight: [], + lnrService: [], }; }, created() { @@ -77,6 +84,16 @@ export default { this.initRightCharts(); }) .catch(() => {}); + this.$http + .get("") + .then(({ data: res }) => { + if (res.code !== 0) { + return this.$message.error(res.msg); + } + this.lnrService = dataFormatter(res.data); + this.initServiceCharts(); + }) + .catch(() => {}); }, initLeftCharts() { let div = document.getElementById("lnrLeftChart"); @@ -315,6 +332,126 @@ export default { this.myChart2.setOption(option); window.addEventListener("resize", () => this.myChart2.resize()); }, + initServiceCharts() { + let div = document.getElementById("lnrServiceChart"); + this.myChart3 = echarts.init(div); + const option = { + color: [ + "#15a7ed", + "#22b998", + "#5f6ff4", + "#a66eeb", + "#faa834", + "#fd6200", + "#fb3905", + ], + legend: { + orient: "vertical", + top: 20, + left: 10, + icon: "rect", + itemHeight: 14, + itemWidth: 14, + textStyle: { + color: "#ffffff", + rich: { + name: { + width: 80, + fontSize: 12, + color: "#dddee7", + }, + value: { + width: 30, + align: "right", + fontSize: 18, + }, + }, + }, + data: this.lnrService, + formatter: (name) => { + if (this.lnrService.length) { + const item = this.lnrService.filter( + (item) => item.name === name + )[0]; + return `{name|${name}}{value| ${item.value}}`; + } + }, + }, + title: { + show: !this.lnrService || this.lnrService.length == 0, // 是否要展示“暂无数据”矢量图 + text: " {a|}", // 写入占位符a,以便后续填充内容 + x: "center", + y: "center", + subtext: "暂无数据", // 子标题 + itemGap: -10, // 设置主副标题间隔 + textStyle: { + rich: { + a: { + height: 128, // 设置图片高度 + width: 268, // 设置图片宽度 + backgroundColor: { + // 引入图片,作为背景图,填写相对路径 + image: require("@/assets/images/overview/zanwu.png"), + }, + }, + }, + }, + subtextStyle: { + // 配置副标题的文字样式 + fontSize: 12, + color: "#ffffff", + }, + }, + toolbox: { + show: false, + feature: { + mark: { show: true }, + dataView: { show: true, readOnly: false }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + series: [ + { + type: "pie", + radius: + this.lnrService && this.lnrService.length > 0 ? [30, 130] : [0, 0], + center: ["50%", "50%"], + roseType: "area", + itemStyle: { + borderRadius: 0, + }, + top: 20, + left: -40, + label: { + position: "inside", + formatter: "{d}%", + textStyle: { + color: "#ffffff", + fontSize: 12, + }, + }, + data: this.lnrService, + }, + ], + }; + this.myChart3.on("click", (e) => { + console.log('a, b::', e); + this.$router.push({ + path: "/dataBoard/renfang/resi-class-new", + query: { + org_id: this.org_id, + type_id: "aged", + type_name: "老年人", + pageType: "normal", + type: "old", + qingk: e.data.name, + }, + }); + }); + this.myChart3.setOption(option); + window.addEventListener("resize", () => this.myChart3.resize()); + }, }, }; diff --git a/src/views/dataBoard/renfang/visualizing/components/shiyerenyuan.vue b/src/views/dataBoard/renfang/visualizing/components/shiyerenyuan.vue index d6633a692..433055d44 100644 --- a/src/views/dataBoard/renfang/visualizing/components/shiyerenyuan.vue +++ b/src/views/dataBoard/renfang/visualizing/components/shiyerenyuan.vue @@ -20,19 +20,26 @@
-
-
+
+
-
+
+ +
+
+ +
+
+
@@ -71,6 +78,7 @@ export default { syryData3: [], syryData4: [], syryData5: [], + syryData6: [], }; }, created() { @@ -129,6 +137,16 @@ export default { this.syryDataCharts5(); }) .catch(() => {}); + this.$http + .get("/actual/base/peopleRoomOverview/unemployedPie?type=5") + .then(({ data: res }) => { + if (res.code !== 0) { + return this.$message.error(res.msg); + } + this.syryData6 = dataFormatter(res.data); + this.syryDataCharts6(); + }) + .catch(() => {}); }, syryDataCharts1() { let div = document.getElementById("syryChart1"); @@ -782,6 +800,138 @@ export default { }); window.addEventListener("resize", () => this.myChart5.resize()); }, + + syryDataCharts6() { + let div = document.getElementById("syryChart6"); + this.myChart6 = echarts.init(div); + const option = { + color: [ + "#15a7ed", + "#22b998", + "#5f6ff4", + "#a66eeb", + "#faa834", + "#fd6200", + "#fb3905", + ], + tooltip: { + show: true, + }, + legend: { + orient: "vertical", + top: 20, + left: 10, + icon: "rect", + itemHeight: 14, + itemWidth: 14, + tooltip: { + show: true, + }, + formatter: (name) => { + if (this.syryData6.length) { + const item = this.syryData6.filter( + (item) => item.name === name + )[0]; + return `{name|${echarts.format.truncateText( + name, + 100, + "14px Microsoft Yahei", + "…" + )}}{value| ${item.value}}`; + } + }, + textStyle: { + color: "#ffffff", + rich: { + name: { + width: 90, + fontSize: 12, + color: "#dddee7", + }, + value: { + width: 60, + align: "right", + fontSize: 18, + }, + }, + }, + data: this.syryData6, + }, + toolbox: { + show: false, + feature: { + mark: { show: true }, + dataView: { show: true, readOnly: false }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + title: { + show: !this.syryData6 || this.syryData6.length == 0, // 是否要展示“暂无数据”矢量图 + text: " {a|}", // 写入占位符a,以便后续填充内容 + x: "center", + y: "center", + subtext: "暂无数据", // 子标题 + itemGap: -10, // 设置主副标题间隔 + textStyle: { + rich: { + a: { + height: 128, // 设置图片高度 + width: 268, // 设置图片宽度 + backgroundColor: { + // 引入图片,作为背景图,填写相对路径 + image: require("@/assets/images/overview/zanwu.png"), + }, + }, + }, + }, + subtextStyle: { + // 配置副标题的文字样式 + fontSize: 12, + color: "#ffffff", + }, + }, + series: [ + { + type: "pie", + radius: + this.syryData6 && this.syryData6.length > 0 ? [30, 130] : [0, 0], + center: ["50%", "50%"], + roseType: "area", + itemStyle: { + borderRadius: 0, + }, + top: -20, + left: 10, + label: { + position: "inside", + formatter: "{d}%", + textStyle: { + color: "#ffffff", + fontSize: 12, + }, + }, + data: this.syryData6, + }, + ], + }; + this.myChart6.setOption(option); + this.myChart6.on("click", (e) => { + this.$router.push({ + path: "/dataBoard/renfang/resi-class-new", + query: { + org_id: this.org_id, + type_id: "aged", + type_name: "失业人员", + pageType: "normal", + type: "shiye", + unemploymentReason: e.name, + }, + }); + }); + window.addEventListener("resize", () => this.myChart6.resize()); + }, + }, }; diff --git a/src/views/dataBoard/renfang/visualizing/components/teshurenqun.vue b/src/views/dataBoard/renfang/visualizing/components/teshurenqun.vue new file mode 100644 index 000000000..83492978c --- /dev/null +++ b/src/views/dataBoard/renfang/visualizing/components/teshurenqun.vue @@ -0,0 +1,331 @@ + + + + + + diff --git a/src/views/dataBoard/renfang/visualizing/components/zhiyuanzhe.vue b/src/views/dataBoard/renfang/visualizing/components/zhiyuanzhe.vue index 57b8de1fb..9b495b9e7 100644 --- a/src/views/dataBoard/renfang/visualizing/components/zhiyuanzhe.vue +++ b/src/views/dataBoard/renfang/visualizing/components/zhiyuanzhe.vue @@ -13,6 +13,12 @@
+
+
+ +
+
+
@@ -48,6 +54,7 @@ export default { return { zyzLeft: [], zyzRight: [], + zyzService: [], }; }, created() { @@ -77,6 +84,16 @@ export default { this.initRightCharts(); }) .catch(() => {}); + this.$http + .get("/actual/base/peopleRoomOverview/volunteerPie?type=3") + .then(({ data: res }) => { + if (res.code !== 0) { + return this.$message.error(res.msg); + } + this.zyzRight = dataFormatter(res.data); + this.initServiceCharts(); + }) + .catch(() => {}); }, initLeftCharts() { let div = document.getElementById("zyzLeftChart"); @@ -314,6 +331,125 @@ export default { this.myChart2.setOption(option); window.addEventListener("resize", () => this.myChart2.resize()); }, + initServiceCharts() { + let div = document.getElementById("zyzServiceChart"); + this.myChart2 = echarts.init(div); + const option = { + color: [ + "#15a7ed", + "#22b998", + "#5f6ff4", + "#a66eeb", + "#faa834", + "#fd6200", + "#fb3905", + ], + legend: { + orient: "vertical", + top: 20, + left: 10, + icon: "rect", + itemHeight: 14, + itemWidth: 14, + textStyle: { + color: "#ffffff", + rich: { + name: { + width: 80, + fontSize: 12, + color: "#dddee7", + }, + value: { + width: 30, + align: "right", + fontSize: 18, + }, + }, + }, + data: this.zyzService, + formatter: (name) => { + if (this.zyzService.length) { + const item = this.zyzService.filter( + (item) => item.name === name + )[0]; + return `{name|${name}}{value| ${item.value}}`; + } + }, + }, + toolbox: { + show: false, + feature: { + mark: { show: true }, + dataView: { show: true, readOnly: false }, + restore: { show: true }, + saveAsImage: { show: true }, + }, + }, + title: { + show: !this.zyzService || this.zyzService.length == 0, // 是否要展示“暂无数据”矢量图 + text: " {a|}", // 写入占位符a,以便后续填充内容 + x: "center", + y: "center", + subtext: "暂无数据", // 子标题 + itemGap: -10, // 设置主副标题间隔 + textStyle: { + rich: { + a: { + height: 128, // 设置图片高度 + width: 268, // 设置图片宽度 + backgroundColor: { + // 引入图片,作为背景图,填写相对路径 + image: require("@/assets/images/overview/zanwu.png"), + }, + }, + }, + }, + subtextStyle: { + // 配置副标题的文字样式 + fontSize: 12, + color: "#ffffff", + }, + }, + series: [ + { + type: "pie", + radius: + this.zyzService && this.zyzService.length > 0 ? [30, 130] : [0, 0], + center: ["50%", "50%"], + roseType: "area", + itemStyle: { + borderRadius: 0, + }, + top: 20, + left: -40, + label: { + position: "inside", + formatter: "{d}%", + textStyle: { + color: "#ffffff", + fontSize: 12, + }, + }, + data: this.zyzService, + }, + ], + }; + this.myChart2.on("click", (e) => { + this.$router.push({ + path: "/dataBoard/renfang/resi-class-new", + query: { + org_id: this.org_id, + type_id: "aged", + type_name: "志愿者", + pageType: "normal", + type: "zhiyuanzhe", + gategoryCode: e.data.name, + }, + }); + }); + this.myChart2.setOption(option); + window.addEventListener("resize", () => this.myChart2.resize()); + }, }, }; diff --git a/src/views/dataBoard/renfang/visualizing/index.vue b/src/views/dataBoard/renfang/visualizing/index.vue index c38753359..e1f335de7 100644 --- a/src/views/dataBoard/renfang/visualizing/index.vue +++ b/src/views/dataBoard/renfang/visualizing/index.vue @@ -10,6 +10,7 @@ + @@ -20,6 +21,7 @@ import dibaorenyuan from "./components/dibaorenyuan.vue"; import zhiyuanzhe from "./components/zhiyuanzhe.vue"; import dangyuan from "./components/dangyuan.vue"; import shiyerenyuan from "./components/shiyerenyuan.vue"; +import teshurenqun from "./components/teshurenqun.vue"; export default { name: "visualizing", props: { @@ -35,6 +37,7 @@ export default { zhiyuanzhe, dangyuan, shiyerenyuan, + teshurenqun }, data() { return { diff --git a/src/views/dataBoard/satisfactionEval/components/Title/titleSmall.vue b/src/views/dataBoard/satisfactionEval/components/Title/titleSmall.vue index a99a4c106..aceea3d7b 100644 --- a/src/views/dataBoard/satisfactionEval/components/Title/titleSmall.vue +++ b/src/views/dataBoard/satisfactionEval/components/Title/titleSmall.vue @@ -32,7 +32,7 @@ height: 40px; background: url(../../../../../assets/images/shuju/overview/title-small-bg.png) no-repeat; background-size: 100% 100%; - padding: 8px 16px 8px 29px; + padding: 8px 16px 8px 36px; display: flex; align-items: center; justify-content: space-between; diff --git a/src/views/dataBoard/satisfactionEval/index.vue b/src/views/dataBoard/satisfactionEval/index.vue index 5c879fbf6..ce59ad997 100644 --- a/src/views/dataBoard/satisfactionEval/index.vue +++ b/src/views/dataBoard/satisfactionEval/index.vue @@ -18,9 +18,11 @@
- + <Title text="不满意人数统计及自查得分" /> + <SelfInspectionScore/> +<!-- <Title text="下级组织不满意事项统计" /> <EventStatistics :date="typeDate" /> - </div> + --></div> </el-col> <el-col :span="8"> <div class="bgImg"> @@ -47,6 +49,7 @@ import EventStatistics from "@/views/dataBoard/satisfactionEval/modules/EventSta import PersonnelPortrait from "@/views/dataBoard/satisfactionEval/modules/PersonnelPortrait"; import PotentialPeople from "@/views/dataBoard/satisfactionEval/modules/PotentialPeople"; import eventAnalysis from "@/views/dataBoard/satisfactionEval/modules/eventAnalysis"; +import SelfInspectionScore from "@/views/dataBoard/satisfactionEval/modules/SelfInspectionScore"; export default { @@ -60,7 +63,8 @@ export default { Title, PersonnelPortrait, PotentialPeople, - eventAnalysis + eventAnalysis, + SelfInspectionScore }, data() { return { diff --git a/src/views/dataBoard/satisfactionEval/modules/SelfInspectionScore/index.vue b/src/views/dataBoard/satisfactionEval/modules/SelfInspectionScore/index.vue new file mode 100644 index 000000000..17d71d7dc --- /dev/null +++ b/src/views/dataBoard/satisfactionEval/modules/SelfInspectionScore/index.vue @@ -0,0 +1,26 @@ +<template> + <div class="table"> + <el-table :data="data" height="400px"> + <el-table-column align="center" label="序号" prop="number" width="80"></el-table-column> + <el-table-column label="12345热线投诉\n人数" prop="column1"></el-table-column> + <el-table-column label="上级满意度调查\n不满意人数" prop="column2"></el-table-column> + <el-table-column label="社区自查不满意\n人数" prop="column3" width="120"></el-table-column> + <el-table-column label="社区自查得分" prop="column3" width="120"></el-table-column> + </el-table> + </div> +</template> + +<script> +export default { + name: "index", + data() { + return { + data: [] + } + } +} +</script> + +<style scoped lang="scss"> +@import "@/assets/scss/dataBoard/table-border.scss"; +</style> \ No newline at end of file diff --git a/src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue b/src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue index 8a3efa0f5..68c805df3 100644 --- a/src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue +++ b/src/views/dataBoard/satisfactionEval/modules/TypesOfDissatisfaction/index.vue @@ -6,7 +6,7 @@ <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: 193px"></div> + <div id="typeConditionChart" style="height: 210px"></div> </div> </template> @@ -22,7 +22,7 @@ export default { resultType: 1, resultTypeList: [ { - label: " 按省调查/社区自查结果", + label: " 按满意度调查/社区自查结果", value: 1, }, { @@ -152,10 +152,10 @@ export default { }, }); } - let legendName = ["省满意度调查各项不满意人数", "社区满意度自查各项不满意人数"]; + let legendName = ["省满意度调查", "社区满意度自查"]; let series = [ { - name: this.resultType === 2 ? "12345热线事件上报人数" : "省满意度调查各项不满意人数", + name: this.resultType === 2 ? "12345热线事件上报人数" : "省满意度调查", type: "radar", symbol: "circle", symbolSize: 7, @@ -182,7 +182,7 @@ export default { legendName = ["12345热线事件上报人数"]; } else { series.push({ - name: "社区满意度自查各项不满意人数", + name: "社区满意度自查", type: "radar", symbol: "circle", symbolSize: 7, diff --git a/src/views/dataBoard/satisfactionEval/modules/eventAnalysis/index.vue b/src/views/dataBoard/satisfactionEval/modules/eventAnalysis/index.vue index 24b971539..6fc3b81db 100644 --- a/src/views/dataBoard/satisfactionEval/modules/eventAnalysis/index.vue +++ b/src/views/dataBoard/satisfactionEval/modules/eventAnalysis/index.vue @@ -1,30 +1,128 @@ - <template> - <div class='' style="padding: 0 10px;"> + <div style="padding: 20px 10px;"> <title-small text="同地点同类型事件重复投诉问题"> - <template v-slot:time> - <el-select v-model="typeCondition" popper-class="selectPopClass" placeholder="请选择" class="select" @change="timeChange"> - <el-option v-for="item in typeConditionList" :key="item.value" :label="item.label" :value="item.value"> </el-option> - </el-select> - </template> - <template v-slot:info> + <template v-slot:time> + <el-select v-model="typeCondition" class="select" placeholder="请选择" popper-class="selectPopClass" + @change="timeChange"> + <el-option v-for="item in typeConditionList" :key="item.value" :label="item.label" + :value="item.value"></el-option> + </el-select> + </template> + <template v-slot:info> + <span class="infoColor">更多></span> + </template> + </title-small> + <div class="t-list f-hflex"> + <div class="item f-flex header"> + <div>序号</div> + <div>地点</div> + <div>类型</div> + <div>投诉次数</div> + </div> + <div + v-for="(item, index) in list" + :key="index" + :class="['item', 'f-flex']" + > + <div>{{ index - 0 + 1 }}</div> + <div>{{ item.location }}</div> + <div>{{ item.type }}</div> + <div>{{ item.count }}</div> + </div> + </div> + + <title-small text="同一人员重复投诉问题"> + <template v-slot:time> + <el-select v-model="typeCondition" class="select" placeholder="请选择" popper-class="selectPopClass" + @change="timeChange"> + <el-option v-for="item in typeConditionList" :key="item.value" :label="item.label" + :value="item.value"></el-option> + </el-select> + </template> + <template v-slot:info> <span class="infoColor">更多></span> - </template> + </template> </title-small> + <div class="t-list f-hflex"> + <div class="item f-flex header"> + <div>序号</div> + <div>联系方式</div> + <div>投诉次数</div> + </div> + <div + v-for="(item, index) in list" + :key="index" + class="item f-flex bto-border" + > + <div>{{ index - 0 + 1 }}</div> + <div>{{ item.tel }}</div> + <div>{{ item.count }}</div> + </div> + </div> - </div> + <title-small text="同一区域不同类型投诉问题"> + <template v-slot:time> + <el-select v-model="typeCondition" class="select" placeholder="请选择" popper-class="selectPopClass" + @change="timeChange"> + <el-option v-for="item in typeConditionList" :key="item.value" :label="item.label" + :value="item.value"></el-option> + </el-select> + </template> + <template v-slot:info> + <span class="infoColor">更多></span> + </template> + </title-small> + <div class="table"> + <el-table :data="data" :span-method="objectSpanMethod"> + <el-table-column align="center" label="序号" prop="number" width="80"></el-table-column> + <el-table-column label="地点" prop="column1"></el-table-column> + <el-table-column label="类型" prop="column2"></el-table-column> + <el-table-column label="投诉次数" prop="column3" width="120"></el-table-column> + </el-table> + </div> + </div> </template> <script> import titleSmall from "@/views/dataBoard/satisfactionEval/components/Title/titleSmall.vue"; export default { - data() { - return { - typeCondition:'', - startTime:'', - endTime:'', - typeConditionList: [ + components: { + titleSmall + }, + data() { + return { + typeCondition: '', + startTime: '', + endTime: '', + list: [ + { + location: '市北区清江路139号门口道路···', + type: '城市综合-交通运输', + count: 5, + tel: '173*****327' + }, { + location: '市北区清江路139号门口道路···', + type: '城市综合-交通运输', + count: 5, + tel: '173*****327' + }, { + location: '市北区清江路139号门口道路···', + type: '城市综合-交通运输', + count: 5, + tel: '173*****327' + }, { + location: '市北区清江路139号门口道路···', + type: '城市综合-交通运输', + count: 5, + tel: '173*****327' + }, { + location: '市北区清江路139号门口道路···', + type: '城市综合-交通运输', + count: 5, + tel: '173*****327' + },], + typeConditionList: [ { label: "本月", value: 1, @@ -46,13 +144,72 @@ export default { value: 5, }, ], - }; - }, - created() {}, - methods: { + data: [ + {number: 1, column1: '市北区清江路100号', column2: '10', column3: '100'}, + {number: 2, column1: '市北区清江路100号', column2: '10', column3: '100'}, + {number: 3, column1: '市北区清江路100号', column2: '10', column3: '100'}, + {number: 4, column1: '市北区清江路**号', column2: '10', column3: '100'}, + {number: 5, column1: '市北区清江路**号', column2: '10', column3: '100'}, + {number: 6, column1: '市北区清江路**号', column2: '10', column3: '100'}, + {number: 7, column1: '市北区清江路**号', column2: '10', column3: '100'}, + ], + data1: [ + "number", + "column1", + "column2", + "column3" + ], + spanArr: [], + }; + }, + watch: {}, + created() { + }, + mounted() { + this.getSpanArr() + }, + computed: {}, + methods: { + objectSpanMethod({ row, column, rowIndex, columnIndex }) { + if (columnIndex === 1) { + // 这个条件检查当前行是否不是第一行, + //并且当前行的 "Name" 值与前一行的 "Name" 值是否相同。如果条件成立, + //说明当前行与前一行的 "Name" 值相同,因此返回 { rowspan: 0, colspan: 0 }, + //这将使当前单元格不显示,从而实现了合并。 + if (rowIndex > 0 && row.column1 === this.data[rowIndex - 1].column1) { + return { + rowspan: 0, + colspan: 0, + }; + } else { + // 如果条件不成立,说明当前行的 "Name" 值与前一行不同, + //那么我们需要计算需要合并的行数。我们使用 let rowspan = 1; 来初始化 rowspan, + //然后使用一个循环遍历接下来的行,查找具有相同 "Name" 值的行,直到遇到不同的行为止。 + let rowspan = 1; + for (let i = rowIndex + 1; i < this.data.length; i++) { + //在循环中,我们检查当前行和正在遍历的行的 "Name" 值是否相同。 + //如果相同,说明我们找到了一个与当前行具有相同 "Name" 值的行,所以我们将 rowspan 递增。 + if (row.column1 === this.data[i].column1) { + rowspan++; + } else { + //else:当遇到与当前行 "Name" 值不同的行时,我们退出循环。 + break; + } + } + //最后,我们返回 { rowspan, colspan: 1 },其中 rowspan 表示需要合并的行数,而 colspan: 1 表示不合并列 + return { + rowspan, + colspan: 1, + }; + } + } + }, + /*objectSpanMethod({row, column, rowIndex, columnIndex}) { + return this.spanArr[rowIndex * this.colFields.length + columnIndex]; + },*/ timeChange() { let startTime = "", - endTime = ""; + endTime = ""; if (this.typeCondition === 1) { startTime = this.$moment().startOf("month").format("YYYY-MM-DD"); } @@ -76,19 +233,150 @@ export default { } this.startTime = startTime; this.endTime = endTime; - // this.getData(); + // this.getData(); }, - }, - components:{ - titleSmall - }, - computed:{}, - watch: {}, + // 这里只放了部分代码,除了加了个if,其他代码和上面的一样 + getSpanArr() { + console.log(this.tableData, 'this.tableData') + for (let i = 0; i < this.tableData.length; i++) { + let row = i; + // let col = i % this.colCount; + if (row === 0) { + // i 表示行 j表示列 + for (let j = 0; j < this.colFields.length; j++) { + this.spanArr[i * this.colFields.length + j] = { + rowspan: 1, + colspan: 1, + }; + } + } else { + for (let j = 0; j < this.colFields.length; j++) { + // 当前和上一次的一样 + // 合并所有列的相同数据单元格 + if ( + this.colFields[j] == "column1" + ) { // 指定合并哪些列 + if ( + this.tableData[row][this.colFields[j]] === + this.tableData[row - 1][this.colFields[j]] + ) { + let beforeItem = + this.spanArr[(row - 1) * this.colFields.length + j]; + this.spanArr[row * this.colFields.length + j] = { + rowspan: 1 + beforeItem.rowspan, + colspan: 1, + }; + beforeItem.rowspan = 0; + beforeItem.colspan = 0; + } else { + // rowspan 和 colspan 都为1表格此单元格不合并 + this.spanArr[row * this.colFields.length + j] = { + rowspan: 1, + colspan: 1, + }; + } + } + } + } + } + } + }, } </script> <style lang='scss' scoped> - .infoColor{ - color: #A3B9DA ; +@import "@/assets/scss/dataBoard/table-border.scss"; + +.infoColor { + color: #A3B9DA; +} + +.h150 { + height: 150px; +} + +.h200 { + height: 200px; +} + +.f-hflex { + width: 83px; +} + +.f-flex { + margin-top: 4px; +} + +.f-darkGray { + margin-top: 15px; +} + +.no-data { + display: flex; + align-items: center; + justify-content: center; + opacity: .6; + color: #fff; +} + +.t-list { + position: relative; + flex: 1; + width: 100%; + + margin-bottom: 20px; + + .item { + display: flex; + align-items: center; + justify-content: space-around; + height: 40px; + cursor: pointer; + color: #fff; + background: #0a2a5c; + + div { + overflow: hidden; + flex: 1; + white-space: nowrap; + text-overflow: ellipsis; + + &:last-child { + flex: 0 0 80px; + } + + &:first-child { + flex: 0 0 50px; + } + } + + + &:hover { + color: #02fcff; + box-shadow: 0 0 10px #38b2ff, 0 0 5px #38b2ff; } + } +} + +.bto-border { + height: 1px; + color: #FFFFFF !important; + border-bottom: 1px solid; + border-image: linear-gradient(to right, #1c3e69 0%, #4eafd5 50%, #1c3e69 100%); + border-image-slice: 1; + background: none !important; + + &:hover { + box-sizing: unset !important; + } +} + +.header { + color: #A3B9DA !important; + background: none !important; + + &:hover { + box-sizing: unset !important; + } +} </style>