Commit f3b2627f authored by 张牧越's avatar 张牧越

接口联调 实名制联调完成

parent 36bd9a8d
import request from "@/utils/request" import request from "@/utils/request"
export function postAction() { export function getBaseData() {
return request({ return request({
url: '', url: '/api/project/basedata',
method: 'get', method: 'get',
}) })
} }
\ No newline at end of file // real-name
export function getRealNameStatus() {
return request({
url: '/api/personel/basedata',
method: 'get',
})
}
export function getInOutData() {
return request({
url: '/api/personel/latestweek/workinout',
method: 'get',
})
}
export function getCurrentAttendance() {
return request({
url: '/api/personel/attendance',
method: 'get',
})
}
export function getPersonAreaStatus() {
return request({
url: '/api/personel/area',
method: 'get',
})
}
export function getLastWeekAttendance() {
return request({
url: '/api/personel/latestweek/attendance',
method: 'get',
})
}
export function getLastWeekWorkType() {
return request({
url: '/api/personel/latestweek/worktype/attendance',
method: 'get',
})
}
export function getWorkTypeList() {
return request({
url: '/api/personel/worktype/statis',
method: 'get',
})
}
// early-warning
export function getAIdata() {
return request({
url: '/api/aiwarning/basedata',
method: 'get',
})
}
export function getWarningList() {
return request({
url: '/api/aiwarning/list',
method: 'get',
})
}
export function getMonthWarningStatis() {
return request({
url: '/api/aiwarning/month/statis',
method: 'get',
})
}
...@@ -8,21 +8,29 @@ ...@@ -8,21 +8,29 @@
<div class="divider-text">·工程名称·</div> <div class="divider-text">·工程名称·</div>
<div class="divider-line"></div> <div class="divider-line"></div>
</div> </div>
<div class="construction-name">绍兴二院兰亭院区(康复医院)工程</div> <div class="construction-name">{{ screenDetail.project_name }}</div>
<div class="construction-details"> <div class="construction-details">
<div class="construction-detail"> <div class="construction-detail">
<div class="data">288520.69</div> <div class="data">{{ screenDetail.project_cost }}</div>
<div class="text">工程造价(万元)</div> <div class="text">工程造价(万元)</div>
</div> </div>
<div class="construction-detail"> <div class="construction-detail">
<div class="data unrecord">未录入</div> <div class="data">{{ screenDetail.build_area }}</div>
<div class="text">建筑面积(㎡)</div> <div class="text">建筑面积(㎡)</div>
</div> </div>
<div class="construction-detail"> <div class="construction-detail">
<div class="data small"> <div class="data small">
金吉祥 {{
screenDetail.manageList &&
screenDetail.manageList[0] &&
screenDetail.manageList[0].person_name
}}
<br /> <br />
15567789235 {{
screenDetail.manageList &&
screenDetail.manageList[0] &&
screenDetail.manageList[0].person_mobile
}}
</div> </div>
<div class="text">项目经理</div> <div class="text">项目经理</div>
</div> </div>
...@@ -32,18 +40,78 @@ ...@@ -32,18 +40,78 @@
<div class="divider-text">·建造单位·</div> <div class="divider-text">·建造单位·</div>
<div class="divider-line"></div> <div class="divider-line"></div>
</div> </div>
<div <div class="unit-scroll">
v-for="(unit, index) in constructionUnits" <div class="unit">
:key="index" <div>
class="unit" <div class="dot"></div>
> <span class="unit-text">建设单位:</span>
<div> </div>
<div class="dot"></div> <div>
<span class="unit-text">{{ unit.unitText }}</span> <div
v-for="(unit, index) in screenDetail.unitList.jsList"
:key="index"
style="margin-bottom: 12px"
>
<div class="unit-name">{{ unit.company_name }}</div>
<div class="unit-contact">
{{ unit.contact_person }}({{ unit.contact_mobile }})
</div>
</div>
</div>
</div>
<div class="unit">
<div>
<div class="dot"></div>
<span class="unit-text">施工单位:</span>
</div>
<div>
<div
v-for="(unit, index) in screenDetail.unitList.sgList"
:key="index"
style="margin-bottom: 12px"
>
<div class="unit-name">{{ unit.company_name }}</div>
<div class="unit-contact">
{{ unit.contact_person }}({{ unit.contact_mobile }})
</div>
</div>
</div>
</div> </div>
<div> <div class="unit">
<div class="unit-name">{{ unit.unitName }}</div> <div>
<div class="unit-contact">{{ unit.contact }}</div> <div class="dot"></div>
<span class="unit-text">监理单位:</span>
</div>
<div>
<div
v-for="(unit, index) in screenDetail.unitList.jlList"
:key="index"
style="margin-bottom: 12px"
>
<div class="unit-name">{{ unit.company_name }}</div>
<div class="unit-contact">
{{ unit.contact_person }}({{ unit.contact_mobile }})
</div>
</div>
</div>
</div>
<div class="unit">
<div>
<div class="dot"></div>
<span class="unit-text">设计单位:</span>
</div>
<div>
<div
v-for="(unit, index) in screenDetail.unitList.sjList"
:key="index"
style="margin-bottom: 12px"
>
<div class="unit-name">{{ unit.company_name }}</div>
<div class="unit-contact">
{{ unit.contact_person }}({{ unit.contact_mobile }})
</div>
</div>
</div>
</div> </div>
</div> </div>
</ShadowContainer> </ShadowContainer>
...@@ -63,7 +131,14 @@ ...@@ -63,7 +131,14 @@
<img class="rt" src="@/assets/rt.png" alt="" /> <img class="rt" src="@/assets/rt.png" alt="" />
<img class="rb" src="@/assets/rb.png" alt="" /> <img class="rb" src="@/assets/rb.png" alt="" />
<img class="lb" src="@/assets/lb.png" alt="" /> <img class="lb" src="@/assets/lb.png" alt="" />
<img class="container-img" src="@/assets/swiper-pic.png" alt="" /> <img
class="container-img"
:src="
screenDetail.plane_image_arr[0] &&
screenDetail.plane_image_arr[0].url
"
alt=""
/>
</div> </div>
</ShadowContainer> </ShadowContainer>
<Title text="工程进度" type="long"></Title> <Title text="工程进度" type="long"></Title>
...@@ -177,6 +252,7 @@ ...@@ -177,6 +252,7 @@
</div> </div>
</template> </template>
<script> <script>
import { getBaseData } from "@/api/index";
export default { export default {
name: "Construction", name: "Construction",
data() { data() {
...@@ -188,17 +264,17 @@ export default { ...@@ -188,17 +264,17 @@ export default {
contact: "金吉祥(1556783245)", contact: "金吉祥(1556783245)",
}, },
{ {
unitText: "建设单位:", unitText: "施工单位:",
unitName: "绍兴第二医院", unitName: "绍兴第二医院",
contact: "金吉祥(1556783245)", contact: "金吉祥(1556783245)",
}, },
{ {
unitText: "建设单位:", unitText: "监理单位:",
unitName: "绍兴第二医院", unitName: "绍兴第二医院",
contact: "金吉祥(1556783245)", contact: "金吉祥(1556783245)",
}, },
{ {
unitText: "建设单位:", unitText: "设计单位:",
unitName: "绍兴第二医院", unitName: "绍兴第二医院",
contact: "金吉祥(1556783245)", contact: "金吉祥(1556783245)",
}, },
...@@ -256,6 +332,16 @@ export default { ...@@ -256,6 +332,16 @@ export default {
counts: 1, counts: 1,
}, },
], ],
screenDetail: {
unitList: {
sgList: [],
jsList: [],
jlList: [],
sjList: [],
},
manageList: [],
plane_image_arr: [],
},
}; };
}, },
methods: { methods: {
...@@ -423,11 +509,19 @@ export default { ...@@ -423,11 +509,19 @@ export default {
}; };
chart.setOption(option); chart.setOption(option);
}, },
getBaseData() {
getBaseData().then((res) => {
console.log(res);
if (res.status == 200) {
this.screenDetail = res.data;
}
});
},
}, },
mounted() { mounted() {
this.renderSecurityChart(); this.renderSecurityChart();
this.renderQualityChart(); this.renderQualityChart();
this.getBaseData();
this.$nextTick(() => { this.$nextTick(() => {
// 解决echarts图表放大溢出父容器 // 解决echarts图表放大溢出父容器
const resizeOb = new ResizeObserver((entries) => { const resizeOb = new ResizeObserver((entries) => {
...@@ -517,7 +611,6 @@ export default { ...@@ -517,7 +611,6 @@ export default {
line-height: 15px; line-height: 15px;
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
margin-bottom: 16px;
&:last-child { &:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
...@@ -706,4 +799,8 @@ export default { ...@@ -706,4 +799,8 @@ export default {
} }
} }
} }
.unit-scroll {
max-height: 200px;
overflow: scroll;
}
</style> </style>
\ No newline at end of file
...@@ -5,18 +5,36 @@ ...@@ -5,18 +5,36 @@
<img src="@/assets/AIwarning/icon_d_qi@2x.png" alt="" /> <img src="@/assets/AIwarning/icon_d_qi@2x.png" alt="" />
</div> </div>
<div class="status-container"> <div class="status-container">
<div <div class="status-count">
class="status-count" <img class="status-img" src="@/assets/AIwarning/icon_d_jiu@2x.png" />
v-for="(status, index) in countStatus"
:key="index"
>
<img class="status-img" :src="status.img" />
<div class="status-detail"> <div class="status-detail">
<div class="status-text"> <div class="status-text">AI设备总数</div>
{{ status.text }} <div class="status-number">
{{ screenDetail.aiDeviceCount }}
</div> </div>
</div>
</div>
<div class="status-count">
<img
class="status-img"
src="@/assets/AIwarning/icon_d_si@2x(1).png"
/>
<div class="status-detail">
<div class="status-text">总人数</div>
<div class="status-number">
{{ screenDetail.personCount }}
</div>
</div>
</div>
<div class="status-count">
<img
class="status-img"
src="@/assets/AIwarning/icon_d_shiyi@2x.png"
/>
<div class="status-detail">
<div class="status-text">今日报警</div>
<div class="status-number"> <div class="status-number">
{{ status.counts }} {{ screenDetail.todayDeviceWarningCount }}
</div> </div>
</div> </div>
</div> </div>
...@@ -46,25 +64,23 @@ ...@@ -46,25 +64,23 @@
src="@/assets/AIwarning/icon_d_san@2x.png" src="@/assets/AIwarning/icon_d_san@2x.png"
alt="" alt=""
/> />
<img <img class="person-head" :src="warns.alarm_big_img_url" />
class="person-head"
src="@/assets/AIwarning/icon_d_si@2x.png"
/>
</div> </div>
<div class="person-detail"> <div class="person-detail">
<div class="name"> <div class="name">
<div class="name-text">{{ warns.title }}</div> <div class="name-text">{{ warns.alarm_type_text }}</div>
<div class="work-no"> <div class="work-no">
<img <img
class="warn-icon" class="warn-icon"
src="@/assets/AIwarning/icon_d_er@2x.png" src="@/assets/AIwarning/icon_d_er@2x.png"
alt="" alt=""
/> />
{{ warns.warnno }} {{ warns.area_name }}
({{ warns.serial_no }})
</div> </div>
</div> </div>
<div class="status">状态:{{ warns.status }}</div> <div class="status">状态:{{ warns.status_text }}</div>
<div class="time">时间:{{ warns.time }}</div> <div class="time">时间:{{ warns.log_time }}</div>
</div> </div>
</div> </div>
</vue-seamless-scroll> </vue-seamless-scroll>
...@@ -93,83 +109,12 @@ ...@@ -93,83 +109,12 @@
</div> </div>
</template> </template>
<script> <script>
import { getAIdata, getWarningList, getMonthWarningStatis } from "@/api/index";
export default { export default {
name: "EarlyWarning", name: "EarlyWarning",
data() { data() {
return { return {
countStatus: [ warningList: [],
{
img: require("@/assets/AIwarning/icon_d_jiu@2x.png"),
text: "AI设备总数",
counts: 4,
},
{
img: require("@/assets/AIwarning/icon_d_si@2x(1).png"),
text: "总人数",
counts: 1611,
},
{
img: require("@/assets/AIwarning/icon_d_shiyi@2x.png"),
text: "今日报警",
counts: 102,
},
],
warningList: [
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
{
title: "未佩戴安全帽报警",
warnno: "江南钢筋场(21024829562495032058)",
status: "已进场",
time: "2023年03月19日 12:23:25",
},
],
classOption: { classOption: {
singleHeight: 152, singleHeight: 152,
}, },
...@@ -177,31 +122,56 @@ export default { ...@@ -177,31 +122,56 @@ export default {
{ value: 30, name: "已处理" }, { value: 30, name: "已处理" },
{ value: 10, name: "未处理" }, { value: 10, name: "未处理" },
], ],
screenDetail: {},
}; };
}, },
methods: { methods: {
renderWarningChart() { renderWarningChart() {
const xAxisData = this.warningChartData.map((item) => {
return item.date;
});
const chart = this.$echarts.init(this.$refs.warningChart); const chart = this.$echarts.init(this.$refs.warningChart);
const warnTypes = this.warningChartData[0].data.map((warnType) => {
return warnType.name;
});
const seriesData = warnTypes.map((warnType) => {
const dayDataArray = [];
this.warningChartData.map((item) => {
item.data.map((dayData) => {
if (dayData.name == warnType) {
dayDataArray.push(dayData.total);
}
});
});
return {
name: warnType,
data: dayDataArray,
type: "line",
smooth: true,
};
});
const option = { const option = {
color: ["#17FDB7", "#1abcec", "#ffaf51"],
grid: { grid: {
top: 30, top: 100,
bottom: 30, bottom: 30,
left: 30, left: 30,
right: 30, right: 30,
}, },
legend: { legend: {
orient: "horizontal", orient: "horizontal",
x: "center", left: "0px",
y: "top", right: "100px",
textStyle: { textStyle: {
fontSize: 12, fontSize: 12,
color: "rgba(225, 239, 255, 0.7)", color: "rgba(225, 239, 255, 0.7)",
}, },
itemGap: 12,
}, },
xAxis: { xAxis: {
type: "category", type: "category",
data: ["03.23", "03.24", "03.25", "03.26", "03.27", "03.28", "03.29"], data: xAxisData,
axisTick: { show: false }, axisTick: { show: false },
axisLabel: { axisLabel: {
fontSize: "12", fontSize: "12",
...@@ -220,41 +190,22 @@ export default { ...@@ -220,41 +190,22 @@ export default {
color: "rgba(95, 120, 144, 0.4)", color: "rgba(95, 120, 144, 0.4)",
}, },
}, },
minInterval: 1,
}, },
series: [ series: seriesData,
{
name: "未佩戴安全帽",
data: [2, 5, 4, 4, 7, 5, 6],
type: "line",
smooth: true,
},
{
name: "未穿反光衣",
type: "line",
data: [5, 2, 3, 4, 2, 2, 4],
smooth: true,
},
{
name: "重点区域滞留",
type: "line",
data: [0, 0, 0, 0, 0, 0, 0],
smooth: true,
},
{
name: "明火",
type: "line",
data: [0, 0, 0, 0, 0, 0, 0],
smooth: true,
},
{
name: "浓烟",
type: "line",
data: [0, 0, 0, 0, 0, 0, 0],
smooth: true,
},
],
}; };
chart.setOption(option); chart.setOption(option);
this.$nextTick(() => {
// 解决echarts图表放大溢出父容器
const resizeOb = new ResizeObserver((entries) => {
for (const entry of entries) {
this.$echarts.getInstanceByDom(entry.target).resize();
}
});
resizeOb.observe(document.getElementById("today-chart"));
resizeOb.observe(document.getElementById("history-chart"));
resizeOb.observe(document.getElementById("warning-chart"));
});
}, },
renderTodayChart() { renderTodayChart() {
const chart = this.$echarts.init(this.$refs.todayChart); const chart = this.$echarts.init(this.$refs.todayChart);
...@@ -416,23 +367,30 @@ export default { ...@@ -416,23 +367,30 @@ export default {
}; };
chart.setOption(option); chart.setOption(option);
}, },
getAIdata() {
getAIdata().then((res) => {
if (res.status == 200) {
this.screenDetail = res.data;
}
});
getWarningList().then((res) => {
if (res.status == 200) {
this.warningList = res.data;
}
});
getMonthWarningStatis().then((res) => {
if (res.status == 200) {
this.warningChartData = res.data;
this.renderWarningChart();
}
});
},
}, },
mounted() { mounted() {
this.renderWarningChart(); this.getAIdata();
this.renderTodayChart(); this.renderTodayChart();
this.renderHistoryChart(); this.renderHistoryChart();
this.$nextTick(() => {
// 解决echarts图表放大溢出父容器
const resizeOb = new ResizeObserver((entries) => {
for (const entry of entries) {
this.$echarts.getInstanceByDom(entry.target).resize();
}
});
resizeOb.observe(document.getElementById("today-chart"));
resizeOb.observe(document.getElementById("history-chart"));
resizeOb.observe(document.getElementById("warning-chart"));
});
}, },
}; };
</script> </script>
......
This diff is collapsed.
...@@ -23,7 +23,7 @@ module.exports = defineConfig({ ...@@ -23,7 +23,7 @@ module.exports = defineConfig({
port: 3000, port: 3000,
proxy: { proxy: {
'/api': { '/api': {
target: 'http://localhost:8080', target: 'http://zezcje.natappfree.cc/pweb/s',
ws: false, ws: false,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment