Compare commits

...

2 Commits

Author SHA1 Message Date
junhong cefc6083f4 修改大屏样式 1 week ago
junhong 0f08e70255 修改大屏样式 1 week ago
  1. 6
      folder-alias.json
  2. 4
      src/App.vue
  3. 2
      src/components/ParentView/index.vue
  4. 2
      src/components/prompt/api.js
  5. 32
      src/components/prompt/index.vue
  6. 1
      src/layout/components/AppMain.vue
  7. 4
      src/layout/index.vue
  8. 6
      src/store/modules/settings.js
  9. 49
      src/utils/vctgo.js
  10. 8
      src/views/constructionScheduling/progress-alert/api.js
  11. 13
      src/views/constructionScheduling/progress-alert/index.vue
  12. 10
      src/views/large-screen/api.js
  13. 78
      src/views/large-screen/index.vue

@ -34,5 +34,11 @@
},
"src/views/sitePersonnel/work-attendance": {
"description": "考勤记录"
},
"src/views/constructionScheduling/progress-alert": {
"description": "进度预警"
},
"src/views/constructionScheduling/progress-monitoring": {
"description": "进度监控"
}
}

@ -1,12 +1,12 @@
<template>
<router-view />
<promptfrom></promptfrom>
</template>
<script setup>
import useSettingsStore from '@/store/modules/settings'
import { handleThemeStyle } from '@/utils/theme'
import promptfrom from "@/components/prompt/index";
onMounted(() => {
nextTick(() => {
//

@ -1,3 +1,5 @@
<template >
<router-view />
</template>
<script setup>
</script>

@ -2,7 +2,7 @@ import axios from '@/utils/request'
// 查询分页数据:
export const iengineerlogList = (arg) => {
return axios.request({
url: '/iproductionplan/querywarn',
url: '/iwarn/list',
method: 'get',
params: arg,
dataType: 'json',

@ -8,6 +8,7 @@ import {
} from "./api";
import { ElNotification } from "element-plus";
const { proxy } = getCurrentInstance();
import useUserStore from "@/store/modules/settings";
const notify = ref({});
const router = useRouter();
const state = reactive({
@ -15,11 +16,11 @@ const state = reactive({
arr: [],
});
onMounted(() => {
proxy.$getsystemdict('purpose_expenses').then((res) => {
if (res.length > 0) {
iengineerlogList({ day: res[0].value }).then((res) => {
if(!useUserStore().promptShow) return
iengineerlogList().then((res) => {
if (res.code == 200) {
res.data.slice(0, 3).map((item) => {
useUserStore().setpromptShow(false)
res.data.list.map((item) => {
setTimeout(() => {
notify.value[item.id] = ElNotification({
title: "进度预警提示",
@ -34,6 +35,11 @@ onMounted(() => {
item.planName +
"的计划已滞后" + "需要您查看。"
),
h(
"p",
{},
"预警时间为"+item.createTime
),
h(
"p",
{
@ -64,24 +70,16 @@ onMounted(() => {
}
})
}
})
// proxy.$getsystemdict('purpose_expenses').then((res) => {
// if (res.length > 0) {
// }
// })
});
const change = (item) => {
let formData = new FormData();
formData.append("id", item.id);
formData.append("status", 0);
let filenull = new File([""], "", { type: "" });
formData.append("file", filenull);
edit(formData).then((res) => {
if (res.code == 200) {
notify.value[item.id].close();
}
});
};
</script>

@ -22,7 +22,6 @@ const routeName = ref(route.meta.title);
watch(() => route.meta.title, (newTitle) => {
routeName.value = newTitle;
});
defineProps({
height: {
type: String,

@ -6,12 +6,12 @@
<template v-else>
<LeftRight></LeftRight>
</template>
<promptfrom></promptfrom>
</div>
</template>
<script setup>
import promptfrom from "../components/prompt/index";
import useSettingsStore from '@/store/modules/settings'
import LeftRight from './components/LeftRight.vue'
import UpDown from './components/UpDown.vue'

@ -18,9 +18,13 @@ const useSettingsStore = defineStore(
tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView,
fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader,
sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo,
dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle
dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle,
promptShow:true,
}),
actions: {
setpromptShow(promptShow) {
this.promptShow = promptShow
},
// 修改布局设置
changeSetting(data) {
const { key, value } = data

@ -0,0 +1,49 @@
export function retryAndRepeatRequest(requestFn, maxRetries = 3, retryDelay = 1000, interval = 300000) {
let retries = 0; // 当前重试次数
let isRunning = true; // 控制是否继续执行
// 内部重试逻辑
async function attemptRequest() {
try {
const res = await requestFn(); // 调用请求函数
// 检查请求是否成功
if (res.code == 200) {
// console.log("Request succeeded:", res);
// 如果请求成功,处理数据并设置定时器每隔指定时间重新发起请求
setTimeout(() => {
if (isRunning) {
attemptRequest();
}
}, interval);
} else {
throw new Error(`Request failed with code ${res.code}`);
}
} catch (error) {
console.error(`Attempt failed: ${error.message}`);
retries++;
if (retries <= maxRetries) {
console.log(`Retrying in ${retryDelay / 1000} seconds...`);
setTimeout(attemptRequest, retryDelay);
} else {
console.error(`Request failed after ${maxRetries} attempts: ${error.message}`);
isRunning = false; // 停止后续执行
}
}
}
// 启动第一次请求
attemptRequest();
// 提供一个停止函数
return {
stop: () => {
isRunning = false;
console.log("Request loop stopped.");
}
};
}

@ -8,15 +8,7 @@ export const iwarnlist = (arg) => {
dataType: 'json',
})
}
export const iengineerlogList = (arg) => {
return axios.request({
url: '/iproductionplan/querywarn',
method: 'get',
params: arg,
dataType: 'json',
})
}
// 查询详情数据:
export const iengineerlogGetById = (arg) => {
return axios.request({

@ -1,6 +1,6 @@
<script setup>
import { reactive } from 'vue'
import { iengineerlogList, iengineerlogAdd, iengineerlogUpdate, iengineerlogDelete, iengineerlogGetById, iproductionplanList, iwarnlist } from './api'
import { iengineerlogAdd, iengineerlogUpdate, iengineerlogDelete, iengineerlogGetById, iproductionplanList, iwarnlist } from './api'
import { baseModelOptions, baseFilterOptions } from './options'
const { proxy } = getCurrentInstance();
@ -36,19 +36,10 @@ const state = reactive({
// baseQuery: { day: "" },
hideselection: true,
pageInfo: { total: 0, base: { limit: 8, current: 1 } },
autoQuery: false,
})
const table = ref()
onMounted(async () => {
proxy.$getsystemdict('purpose_expenses').then(async (res) => {
if (res.length > 0) {
await iengineerlogList({ day: res[0].value })
const {
getTableData, //
} = table.value;
await getTableData();
}
})
})
</script>

@ -24,15 +24,7 @@ export const iengineerlogList = (arg) => {
dataType: 'json'
})
}
// 进度预警
export const querywarn = (arg) => {
return axios.request({
url: '/iproductionplan/querywarn',
method: 'get',
params: arg,
dataType: 'json'
})
}
// 工种统计
export const iuserworkerType = (arg) => {
return axios.request({

@ -165,16 +165,19 @@
<div v-else class="boxcontent"
style="display: grid;grid-template-columns: 1fr 1fr ;grid-gap: .75rem;padding: 1.5625rem 1.3125rem;">
<div class="yj-box" v-for="item, index in state.warnList.slice(0, 2)" :key="index">
<img class="jgbj" src="../../assets/images/jglv.png" alt="">
<img v-if="index == 0" class="jgbj" src="../../assets/images/jglv.png" alt="">
<img v-else class="jgbj" src="../../assets/images/jgred.png" alt="">
<div style="text-align: center;font-size: .875rem;">{{ item.planName }}</div>
<div>开始时间{{ item.startTime }}</div>
<div>计划结束时间{{ item.endTime }}</div>
<div style="display: flex;align-items: center;">当前进度<div style="flex: 1;"> <el-progress
color="#0AA0FE" :stroke-width="8" :percentage="Number(item.accumulativeProgress?item.accumulativeProgress:0)" class="jd">
color="#0AA0FE" :stroke-width="8"
:percentage="Number(item.currentProgress ? item.currentProgress : 0)"
class="jd">
</el-progress>
</div>
</div>
<div>预警信息{{ item.warnInfo ? item.warnInfo : '-' }}</div>
<div>备注{{ item.warnInfo ? item.warnInfo : '-' }}</div>
</div>
</div>
</div>
@ -248,10 +251,11 @@
{{ item.startSwingTime }}
</div>
<div>{{ item.imageType == 1 ? '内部人员' : item.imageType == 2 ? '访客' : '-' }}</div>
<div>
<div
:style="{ color: item.maskState == 2 ? '#FF0A0A' : item.maskState == 3 ? '#00E287' : '#fff' }">
{{ item.maskState == 3 ? '带口罩' : item.maskState == 2 ? '没带口罩' : '未识别' }}
</div>
<div :style="{ color: item.overTemp ? 'red' : 'green' }">
<div :style="{ color: item.overTemp ? '#FF0A0A' : '#00E287' }">
{{ item.overTemp ? '是' : '否' }}
</div>
</div>
@ -282,14 +286,17 @@
</div>
</div>
</div>
<promptfrom></promptfrom>
</div>
</template>
<script setup>
import promptfrom from "../../components/prompt/index";
import { ref, onMounted, reactive, nextTick } from 'vue'
import { echartsZhu, echartsBing } from "./echartsOptions";
import { echart } from "../../echarts";
import { stausList } from './options'
import { getRecordPage, iengineerlogList, querywarn, iuserworkerType, iresourcescheduleList, vehiclestat, statistics, dataOverview, iwarnlist } from './api'
import { retryAndRepeatRequest } from "@/utils/vctgo";
import { getRecordPage, iengineerlogList, iuserworkerType, iresourcescheduleList, vehiclestat, statistics, dataOverview, iwarnlist } from './api'
const { proxy } = getCurrentInstance();
const tableTrue = ref(false);
const router = useRouter();
@ -317,6 +324,7 @@ const state = reactive({
imageType: 1,
openType: 43,
startSwingTime: "2025-05-13 02:17:55",
maskState: 3,
}, {
"id": 17,
"personId": 21059,
@ -336,6 +344,7 @@ const state = reactive({
imageType: 2,
openType: 42,
startSwingTime: "2025-05-13 02:17:55",
maskState: 2
}, {
"id": 17,
"personId": 21059,
@ -442,17 +451,44 @@ const state = reactive({
"list": 0,
"ysg": 0,
gcjd: ""
}
},
requestController: null
})
onUnmounted(() => {
if (state.requestController) state.requestController.stop();
});
onMounted(async () => {
if (state.requestController) {
state.requestController.stop();
state.requestController = null
}
async function requestFn() {
await getDataOverview()
await getIresourceschedule()
await getIuserworkerType()
await engineeringLog()
await getQuerywarn()
await getStatistics()
await getVehiclestat()
// await accessControl()
const res = await getVehiclestat();
if (res.code == 200) {
nextTick(() => {
let car = state.echart({
id: 'car',
grid: state.echartsBing({
total: res.data.personal + res.data.aotomobile,
data: [
{ value: res.data.personal, name: '施工机械数' },
{ value: res.data.aotomobile, name: '运输车辆数' }
]
}),
});
})
}
return res;
}
state.requestController = retryAndRepeatRequest(requestFn, 3, 30000, 300000);
state.loading = false
})
function Jump() {
@ -476,23 +512,15 @@ function getStatistics() {
})
}
function getVehiclestat() {
return new Promise((resolve) => {
vehiclestat().then((res) => {
if (res.code == 200) {
nextTick(() => {
let car = state.echart({
id: 'car',
grid: state.echartsBing({
total: res.data.personal + res.data.aotomobile,
data: [
{ value: res.data.personal, name: '施工机械数' },
{ value: res.data.aotomobile, name: '运输车辆数' }
]
}),
});
})
resolve(res)
}
})
})
}
function getIresourceschedule() {
iresourcescheduleList().then((res) => {
@ -519,16 +547,12 @@ function getIuserworkerType() {
}
//
function getQuerywarn(params) {
proxy.$getsystemdict('purpose_expenses').then(async (res) => {
if (res.length > 0) {
// await querywarn({ day: res[0].value })
await iwarnlist().then((res) => {
iwarnlist().then((res) => {
if (res.code == 200) {
state.warnList = res.data.list
}
})
}
})
}
//

Loading…
Cancel
Save