Browse Source

项目异常预警

ZaiZai 1 year ago
parent
commit
0c030aab36

+ 1 - 1
public/version.json

@@ -1,3 +1,3 @@
 {
-  "value": "20240407145423"
+  "value": "20240411105919"
 }

+ 18 - 0
src/api/modules/other.js

@@ -25,3 +25,21 @@ export const getBizDictionary = (form, msg = true) => HcApi({
     method: 'get',
     params: form,
 }, msg)
+
+//项目设置保存预警
+export const projectSaveWarning = (form) => HcApi({
+    url: '/api/blade-attach/project/save-warning',
+    method: 'POST',
+    data: {
+        list: form,
+    },
+}, false)
+
+
+//项目预警详情
+export const projectDetailWarning = () => HcApi({
+    url: '/api/blade-attach/project/detail-warning',
+    method: 'POST',
+    params: {},
+}, false)
+

+ 114 - 0
src/styles/view/set.scss

@@ -0,0 +1,114 @@
+.hc-system-set-box {
+    .hc-system-set-title {
+        margin-bottom: 10px;
+        padding-bottom: 10px;
+        border-bottom: 1px solid #dbdbdb;
+        .hc-icon-i {
+            font-size: 20px;
+        }
+    }
+    .warn-box-items {
+        display: flex;
+        justify-content: space-between;
+        overflow: hidden;
+        .warn-item {
+            border: 1px solid rgb(187, 187, 187);
+            .warn-item-tilte {
+                height: 45px;
+                line-height: 45px;
+                background-color: #015EA7;
+                color: white;
+                font-size: 18px;
+                font-weight: 800;
+                text-align: center;
+            }
+            .warn-item-inner {
+                padding: 10px;
+                .warn-item-inner-box {
+                    padding: 10px 20px;
+                    .warn-item-inner-box-detail {
+                        margin-top: 10px;
+                        width: 100%;
+                        display: flex;
+                        justify-content: space-between;
+                        align-items: center;
+                        .el-input-number.is-without-controls.warn-innput {
+                             .el-input__wrapper {
+                                padding-left: 5px;
+                                 padding-right: 5px;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    .arrow {
+        color: white;
+        position: relative;
+        height: 30px; /* 矩形的高度 */
+        line-height: 30px;
+        background-color: #06B2F6; /* 矩形的背景颜色 */
+        text-align: center;
+        width: auto;
+        min-width: 60px
+    }
+
+    .arrow::after {
+        content: '';
+        position: absolute;
+        top: 50%;
+        right: -15px; /* 三角形相对于右边缘的偏移量 */
+        width: 0;
+        height: 0;
+        border-top: 15px solid transparent; /* 上三角形的大小 */
+        border-bottom: 15px solid transparent; /* 下三角形的大小 */
+        border-left: 15px solid #06B2F6; /* 三角形的颜色 */
+        transform: translateY(-50%);
+    }
+    .arrow-oringe {
+        background-color: #FF9102;
+    }
+    .arrow-red {
+        background-color: #FF0001;
+    }
+    .arrow-oringe::after {
+        border-left: 15px solid #FF9102; /* 三角形的颜色 */
+    }
+    .arrow-red::after {
+        border-left: 15px solid #FF0001; /* 三角形的颜色 */
+    }
+    .warn-item-inner-box-detail-right {
+        margin-top: 10px;
+        width: 100%;
+        display: flex;
+        justify-content: space-around;
+        align-items: center;
+    }
+    .warn-item-inner-box-title {
+        display: flex;
+        text-align: right;
+    }
+
+
+    .hc-system-set-project {
+        position: relative;
+        .set-project-row {
+            position: relative;
+            overflow: hidden;
+            .set-project-row-col {
+                position: relative;
+                border: 1px solid rgb(187, 187, 187);
+                .set-project-row-col-title {
+                    padding: 6px 14px;
+                    background: #f1f1f1;
+                    border-bottom: 1px solid rgb(187, 187, 187);
+                }
+                .set-project-row-col-content {
+                    padding: 14px;
+                    overflow-y: auto;
+                }
+            }
+        }
+    }
+}

+ 29 - 0
src/views/system/modules/input-number.vue

@@ -0,0 +1,29 @@
+<template>
+    <el-input-number v-model="warningValue" :min="0" :max="100" class="warn-innput w-46px" :controls="false" @blur="inputBlur" />
+</template>
+
+<script setup>
+import { ref, watch } from 'vue'
+import { isNullES } from 'js-fast-way'
+
+defineOptions({
+    name: 'HcInputNumber',
+})
+
+//双向绑定
+const modelValue = defineModel('modelValue', {
+    type: [String, Number],
+    default: '',
+})
+
+//监听数据改变
+const warningValue = ref('')
+watch(() => modelValue.value, (val) => {
+    warningValue.value = isNullES(val) ? null : Number(val)
+}, { deep: true, immediate:true })
+
+//输入内容改变
+const inputBlur = () => {
+    modelValue.value = warningValue.value
+}
+</script>

File diff suppressed because it is too large
+ 519 - 906
src/views/system/set.vue


+ 1245 - 0
src/views/system/set_bak.vue

@@ -0,0 +1,1245 @@
+<!--  -->
+<template>
+    <div class="hc-layout-box">
+        <hc-card :scrollbar="true" action-size="lg">
+            <div class="warning-box">
+                <div class="demo-collapse">
+                    <el-collapse v-model="activeNames" accordion @change="handleChange">
+                        <el-collapse-item class="p-3" name="1">
+                            <template #title>
+                                <hc-icon class="font-bold" name="alarm-warning" style="font-size: 20px;" />
+                                <span class="font-bold" style="font-size: 18px;">异常设置</span>
+                            </template>
+
+                            <el-collapse
+                                v-model="activeNames1" accordion class="demo-collapse1"
+                                @change="handleChange1"
+                            >
+                                <el-collapse-item class="p-10" name="1" style="padding-bottom: 100px;">
+                                    <template #title>
+                                        <span style="font-size: 16px;">项目异常设置</span>
+                                    </template>
+                                    <div class="warn-box-items h-100 flex">
+                                        <div class="warn-item">
+                                            <div class="warn-item-tilte">投资进展缓慢</div>
+                                            <div class="warn-item-inner">
+                                                <el-row style="height: 100%;">
+                                                    <el-col :span="8">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="ml-[50px] text-center" style="font-size: 16px;">
+                                                                第一季度
+                                                            </div>
+                                                            <div class="warn-item-inner-title ml-[50px] text-right">
+                                                                该季度投资计划完成比例
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <!-- <div class="arrow">   |||</div> -->
+                                                                <div class="arrow" style="width: auto;min-width:60px">
+                                                                    三级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: center; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div
+                                                                    class="arrow arrow-oringe"
+                                                                    style="width: auto;min-width:60px"
+                                                                >
+                                                                    二级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div class="arrow arrow-red"> 一级</div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                    <el-col :offset="6" :span="10">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="text-center" style="font-size: 16px;">
+                                                                第二季度
+                                                            </div>
+                                                            <div class="warn-item-inner-box-title">
+                                                                <div class="flex-1" />
+                                                                <div class="warn-item-inner-title flex-1">
+                                                                    该季度投资计划完成比例
+                                                                </div>
+                                                                <div class="warn-item-inner-title ml-2 flex-1">
+                                                                    前两季度累计投资计化完成比例
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow"> 三级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow arrow-oringe"> 二级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow arrow-red"> 一级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                    <el-col :span="10">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="text-center" style="font-size: 16px;">
+                                                                第三季度
+                                                            </div>
+                                                            <div class="warn-item-inner-box-title">
+                                                                <div class="flex-1" />
+                                                                <div class="warn-item-inner-title flex-1">
+                                                                    该季度投资计划完成比例
+                                                                </div>
+                                                                <div class="warn-item-inner-title ml-2 flex-1">
+                                                                    前三季度累计投资计化完成比例
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow"> 三级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow arrow-oringe"> 二级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow arrow-red"> 一级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                    <el-col :offset="4" :span="10">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="text-center" style="font-size: 16px;">
+                                                                第四季度
+                                                            </div>
+                                                            <div class="warn-item-inner-box-title">
+                                                                <div class="flex-1" />
+                                                                <div class="warn-item-inner-title flex-1">
+                                                                    该季度投资计划完成比例
+                                                                </div>
+                                                                <div class="warn-item-inner-title ml-2 flex-1">
+                                                                    当年度累计投资计化完成比例
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow"> 三级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow arrow-oringe"> 二级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div>
+                                                                    <div class="arrow arrow-red"> 一级</div>
+
+                                                                    <div class="container">
+                                                                        <div class="triangle" />
+                                                                    </div>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                </el-row>
+                                            </div>
+                                        </div>
+                                        <div class="warn-item">
+                                            <div class="warn-item-tilte">建设进展缓慢</div>
+                                            <div class="warn-item-inner">
+                                                <el-row :gutter="4" style="height: 100%;">
+                                                    <el-col :span="8">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="text-center" style="font-size: 16px;">
+                                                                第一季度
+                                                            </div>
+                                                            <div class="warn-item-inner-title text-right">
+                                                                该季度工作计划完成比例
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <!-- <div class="arrow">   |||级预警</div> -->
+                                                                <div class="arrow" style="width: auto;min-width:60px">
+                                                                    三级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: center; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div
+                                                                    class="arrow arrow-oringe"
+                                                                    style="width: auto;min-width:60px"
+                                                                >
+                                                                    二级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div class="arrow arrow-red"> 一级</div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                    <el-col :offset="6" :span="8">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="text-center" style="font-size: 16px;">
+                                                                第二季度
+                                                            </div>
+                                                            <div class="warn-item-inner-title text-right">
+                                                                该季度工作计划完成比例
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <!-- <div class="arrow">   |||级预警</div> -->
+                                                                <div class="arrow" style="width: auto;min-width:60px">
+                                                                    三级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: center; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div
+                                                                    class="arrow arrow-oringe"
+                                                                    style="width: auto;min-width:60px"
+                                                                >
+                                                                    二级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div class="arrow arrow-red"> 一级</div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                    <el-col :span="8">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="text-center" style="font-size: 16px;">
+                                                                第三季度
+                                                            </div>
+                                                            <div class="warn-item-inner-title text-right">
+                                                                该季度工作计划完成比例
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <!-- <div class="arrow">   |||级预警</div> -->
+                                                                <div class="arrow" style="width: auto;min-width:60px">
+                                                                    三级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: center; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div
+                                                                    class="arrow arrow-oringe"
+                                                                    style="width: auto;min-width:60px"
+                                                                >
+                                                                    二级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div class="arrow arrow-red"> 一级</div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                    <el-col :offset="6" :span="8">
+                                                        <div class="warn-item-inner-box">
+                                                            <div class="text-center" style="font-size: 16px;">
+                                                                第四季度
+                                                            </div>
+                                                            <div class="warn-item-inner-title text-right">
+                                                                该季度工作计划完成比例
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <!-- <div class="arrow">   |||级预警</div> -->
+                                                                <div class="arrow" style="width: auto;min-width:60px">
+                                                                    三级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: center; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div
+                                                                    class="arrow arrow-oringe"
+                                                                    style="width: auto;min-width:60px"
+                                                                >
+                                                                    二级
+                                                                </div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                            <div class="warn-item-inner-box-detail">
+                                                                <div class="arrow arrow-red"> 一级</div>
+
+                                                                <div class="container">
+                                                                    <div class="triangle" />
+                                                                </div>
+                                                                <div
+                                                                    class="flex"
+                                                                    style="text-align: right; align-items: center;"
+                                                                >
+                                                                    <span class="mr-1"><</span>
+                                                                    <el-input
+                                                                        v-model="inputVal" class="warn-innput"
+                                                                        style="width: 50px;"
+                                                                    />
+                                                                    <span>%</span>
+                                                                </div>
+                                                            </div>
+                                                        </div>
+                                                    </el-col>
+                                                </el-row>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="save-btn-left">
+                                        <el-button color="#20C98B" type="primary" @click="addClick">
+                                            <hc-icon class="text-white" name="save" />
+                                            <span class="text-white">保存</span>
+                                        </el-button>
+                                    </div>
+                                </el-collapse-item>
+                            </el-collapse>
+                        </el-collapse-item>
+                    </el-collapse>
+                </div>
+            </div>
+            <div class="other-box">
+                <div class="demo-collapse">
+                    <el-collapse v-model="activeNames3" accordion @change="handleChange3">
+                        <el-collapse-item class="p-3" name="1">
+                            <template #title>
+                                <hc-icon class="font-bold" name="microsoft" style="font-size: 20px;" />
+                                <span class="font-bold" style="font-size: 18px;">其他设置</span>
+                            </template>
+
+                            <el-collapse
+                                v-model="activeNames4" accordion class="demo-collapse1"
+                                @change="handleChange4"
+                            >
+                                <el-collapse-item class="p-4" name="1">
+                                    <template #title>
+                                        <hc-icon name="projector" style="font-size: 18px;" />
+                                        <span style="font-size: 16px;">项目相关</span>
+                                    </template>
+                                    <div class="ml-4 font-bold">
+                                        重点项目推进计划
+                                    </div>
+                                    <div class="main-project">
+                                        <div>
+                                            <div class="main-project-item">
+                                                <div>
+                                                    <span>项目阶段</span>
+                                                    <hc-icon
+                                                        class="ml-2 mr-2 font-bold" name="arrow-right-s"
+                                                        style="font-size: 16px;"
+                                                    />
+                                                </div>
+                                                <div style="max-height:300px;overflow-y: auto;">
+                                                    <div v-for="(item, index) in proStation" :key="index" class="mt-1">
+                                                        <el-input
+                                                            v-model="item.dictValue" placeholder="阶段名称"
+                                                            style="width: 340px"
+                                                        />
+                                                        <el-link :underline="false" type="primary">
+                                                            <hc-icon
+                                                                class="font-bold" name="add"
+                                                                style="font-size: 20px;" @click="addClick(item, index)"
+                                                            />
+                                                        </el-link>
+                                                        <el-link :underline="false" type="primary">
+                                                            <hc-icon
+                                                                class="font-bold" name="close"
+                                                                style="font-size: 20px;" @click="delClick(item, index)"
+                                                            />
+                                                        </el-link>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="ml-38 mt-3">
+                                                <el-button
+                                                    :loading="saveProStationLoad" class="ml-8" color="#20C98B"
+                                                    type="primary" @click="saveProStation"
+                                                >
+                                                    <hc-icon class="text-white" name="save" />
+                                                    <span class="text-white">保存</span>
+                                                </el-button>
+                                            </div>
+                                        </div>
+
+                                        <div>
+                                            <div class="main-project-item">
+                                                <div>
+                                                    <span>项目类型</span>
+                                                    <hc-icon
+                                                        class="ml-2 mr-2 font-bold" name="arrow-right-s"
+                                                        style="font-size: 16px;"
+                                                    />
+                                                </div>
+                                                <div style="max-height:300px;overflow-y: auto;">
+                                                    <div v-for="(item, index) in proType" :key="index" class="mt-1">
+                                                        <el-input
+                                                            v-model="item.dictValue" placeholder="类型名称"
+                                                            style="width: 340px"
+                                                        />
+                                                        <el-link :underline="false" type="primary">
+                                                            <hc-icon
+                                                                class="font-bold" name="add"
+                                                                style="font-size: 20px;"
+                                                                @click="addClickType(item, index)"
+                                                            />
+                                                        </el-link>
+                                                        <el-link :underline="false" type="primary">
+                                                            <hc-icon
+                                                                class="font-bold" name="close"
+                                                                style="font-size: 20px;"
+                                                                @click="delClickType(item, index)"
+                                                            />
+                                                        </el-link>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="ml-38 mt-3">
+                                                <el-button
+                                                    :loading="saveProTypenLoad" class="ml-8" color="#20C98B"
+                                                    type="primary" @click="saveProType"
+                                                >
+                                                    <hc-icon class="text-white" name="save" />
+                                                    <span class="text-white">保存</span>
+                                                </el-button>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <el-divider class="mt-10" />
+                                    <div class="ml-4 font-bold">
+                                        工作要点任务分工
+                                    </div>
+                                    <div class="main-project">
+                                        <div>
+                                            <div class="main-project-item">
+                                                <div>
+                                                    <span>项目阶段</span>
+                                                    <hc-icon
+                                                        class="ml-2 mr-2 font-bold" name="arrow-right-s"
+                                                        style="font-size: 16px;"
+                                                    />
+                                                </div>
+                                                <div style="max-height:300px;overflow-y: auto;">
+                                                    <div
+                                                        v-for="(item, index) in proStationTip" :key="index"
+                                                        class="mt-1"
+                                                    >
+                                                        <el-input
+                                                            v-model="item.dictValue" placeholder="阶段名称"
+                                                            style="width: 340px"
+                                                        />
+                                                        <el-link :underline="false" type="primary">
+                                                            <hc-icon
+                                                                class="font-bold" name="add"
+                                                                style="font-size: 20px;"
+                                                                @click="addClickTip(item, index)"
+                                                            />
+                                                        </el-link>
+                                                        <el-link :underline="false" type="primary">
+                                                            <hc-icon
+                                                                class="font-bold" name="close"
+                                                                style="font-size: 20px;"
+                                                                @click="delClickTip(item, index)"
+                                                            />
+                                                        </el-link>
+                                                    </div>
+                                                </div>
+                                                <!-- <div>
+                                                <el-button color="#20C98B" type="primary" class="ml-8" :loading="savProStationTipLoad" @click="saveProStationTip">
+                                                    <hc-icon name="save" class="text-white" />
+                                                    <span class="text-white">保存</span>
+                                                </el-button>
+                                            </div> -->
+                                            </div>
+                                            <div class="ml-38 mt-3">
+                                                <el-button
+                                                    :loading="savProStationTipLoad" class="ml-8" color="#20C98B"
+                                                    type="primary" @click="saveProStationTip"
+                                                >
+                                                    <hc-icon class="text-white" name="save" />
+                                                    <span class="text-white">保存</span>
+                                                </el-button>
+                                            </div>
+                                        </div>
+                                    </div>
+                                </el-collapse-item>
+                            </el-collapse>
+                        </el-collapse-item>
+                    </el-collapse>
+                </div>
+            </div>
+        </hc-card>
+    </div>
+</template>
+
+<script setup>
+import { onMounted, ref } from 'vue'
+import { getDictionary, saveDict } from '~api/dictbiz'
+import { arrToKey, getArrValue, isArrItem } from 'js-fast-way'
+
+onMounted(() => {
+    getProStation()
+    getProType()
+    getProStationTip()
+})
+
+const inputVal = ref(75)
+const inputVal2 = ref('')
+const activeNames = ref(['1'])
+const activeNames1 = ref(['1'])
+const handleChange1 = (val) => {
+    if (!val) {
+        activeNames.value = ''
+    }
+}
+const handleChange = (val) => {
+    if (val) {
+        activeNames1.value = '1'
+    }
+}
+const activeNames3 = ref(['1'])
+const activeNames4 = ref(['1'])
+const handleChange4 = (val) => {
+    if (!val) {
+        activeNames3.value = ''
+    }
+}
+const handleChange3 = (val) => {
+    if (val) {
+        activeNames4.value = '1'
+    }
+}
+const proStation = ref([{ dictValue: '' }])
+
+const getProStation = async () => {
+    const { error, code, data } = await getDictionary({ code: 'projectStage' })
+    if (!error && code === 200) {
+        proStation.value = getArrValue(data)
+        if (proStation.value.length === 0) {
+            proStation.value = [
+                { dictValue: '' },
+            ]
+        }
+    } else {
+        proStation.value = []
+    }
+
+}
+const addClick = (item, index) => {
+    proStation.value.splice(index + 1, 0, { dictValue: '' })
+}
+const delClick = (item, index) => {
+    if (proStation.value.length === 1) {
+        window.$message.warning('请至少保留一条数据')
+        return
+    }
+    proStation.value.splice(index, 1)
+}
+const saveProStationLoad = ref(false)
+const saveProStation = async () => {
+    const list = arrToKey(proStation.value, 'dictValue', ',').split(',')
+    const isIn = isArrItem(list, '') // true
+    if (isIn) {
+        window.$message.warning('请输入阶段名称')
+        return
+    }
+    saveProStationLoad.value = true
+    const { error, code, msg } = await saveDict({ type: 'projectStage', list })
+    saveProStationLoad.value = false
+    if (!error && code === 200) {
+        window?.$message?.success(msg)
+        getProStation()
+    } else {
+        window.$message.error(msg ?? '操作失败')
+    }
+}
+const proType = ref([
+    { name: '铁路' },
+    { name: '建成项目' },
+
+])
+const getProType = async () => {
+    const { error, code, data } = await getDictionary({ code: 'projectType' })
+    if (!error && code === 200) {
+        proType.value = getArrValue(data)
+        if (proType.value.length === 0) {
+            proType.value = [
+                { dictValue: '' },
+            ]
+        }
+    } else {
+        proType.value = []
+    }
+
+}
+const addClickType = (item, index) => {
+
+    proType.value.splice(index + 1, 0, { dictValue: '' })
+}
+const delClickType = (item, index) => {
+    if (proType.value.length === 1) {
+        window.$message.warning('请至少保留一条数据')
+        return
+    }
+    proType.value.splice(index, 1)
+}
+const saveProTypenLoad = ref(false)
+const saveProType = async () => {
+    const list = arrToKey(proType.value, 'dictValue', ',').split(',')
+    const isIn = isArrItem(list, '') // true
+    if (isIn) {
+        window.$message.warning('请输入类型名称')
+        return
+    }
+    saveProTypenLoad.value = true
+    const { error, code, msg } = await saveDict({ type: 'projectType', list })
+    saveProTypenLoad.value = false
+    if (!error && code === 200) {
+        window?.$message?.success(msg)
+        getProType()
+    } else {
+        window.$message.error(msg ?? '操作失败')
+    }
+}
+const proStationTip = ref([])
+const getProStationTip = async () => {
+    const { error, code, data } = await getDictionary({ code: 'workFocusStage' })
+    if (!error && code === 200) {
+        proStationTip.value = getArrValue(data)
+        if (proStationTip.value.length === 0) {
+            proStationTip.value = [
+                { dictValue: '' },
+            ]
+        }
+    } else {
+        proStationTip.value = []
+    }
+
+}
+const addClickTip = (item, index) => {
+
+    proStationTip.value.splice(index + 1, 0, { dictValue: '' })
+}
+const delClickTip = (item, index) => {
+    if (proStationTip.value.length === 1) {
+        window.$message.warning('请至少保留一条数据')
+        return
+    }
+    proStationTip.value.splice(index, 1)
+}
+const savProStationTipLoad = ref(false)
+const saveProStationTip = async () => {
+    const list = arrToKey(proType.value, 'dictValue', ',').split(',')
+    const isIn = isArrItem(list, '') // true
+    if (isIn) {
+        window.$message.warning('请输入阶段名称')
+        return
+    }
+    savProStationTipLoad.value = true
+    const { error, code, msg } = await saveDict({ type: 'workFocusStage', list })
+    savProStationTipLoad.value = false
+    if (!error && code === 200) {
+        window?.$message?.success(msg)
+        getProStationTip()
+    } else {
+        window.$message.error(msg ?? '操作失败')
+    }
+}
+</script>
+
+<style lang='scss' scoped>
+.hc-layout-box {
+    position: relative;
+    height: 100%;
+    width: 100%;
+}
+.warning-box {
+    width: 100%;
+    height: auto;
+    position: relative;
+
+    // border:1px solid red;
+    .warn-box-items {
+
+        display: flex;
+        justify-content: space-between;
+
+        .warn-item {
+            border: 1px solid rgb(187, 187, 187);
+            height: 550px;
+
+            width: 48%;
+
+            .warn-item-tilte {
+                height: 45px;
+                line-height: 45px;
+                background-color: #015EA7;
+                color: white;
+                font-size: 18px;
+                font-weight: 800;
+                text-align: center;
+            }
+            .warn-item-inner {
+                padding: 10px;
+
+                .warn-item-inner-box {
+                    padding: 15px;
+
+                    //    border:1px solid rgb(187, 187, 187);
+                    .warn-item-inner-box-detail {
+                        margin-top: 10px;
+                        width: 100%;
+                        display: flex;
+                        justify-content: space-between;
+                        align-items: center;
+                    }
+
+                }
+            }
+        }
+    }
+    .save-btn-left {
+        position: absolute;
+        right: 50px;
+        bottom: -25px
+    }
+
+}
+.other-box {
+    width: 100%;
+    margin-top: 30px;
+    //    border:1px solid black;
+}
+
+.arrow {
+    color: white;
+    position: relative;
+    //    width: 80px; /* 矩形的宽度 */
+    height: 30px; /* 矩形的高度 */
+    line-height: 30px;
+    background-color: #06B2F6; /* 矩形的背景颜色 */
+    //padding-left: 5px;
+    text-align: center;
+    width: auto;
+    min-width: 60px
+}
+
+.arrow::after {
+    content: '';
+    position: absolute;
+    top: 50%;
+    right: -15px; /* 三角形相对于右边缘的偏移量 */
+    width: 0;
+    height: 0;
+    border-top: 15px solid transparent; /* 上三角形的大小 */
+    border-bottom: 15px solid transparent; /* 下三角形的大小 */
+    border-left: 15px solid #06B2F6; /* 三角形的颜色 */
+    transform: translateY(-50%);
+}
+.arrow-oringe::after {
+    border-left: 15px solid #FF9102; /* 三角形的颜色 */
+}
+.arrow-red::after {
+    border-left: 15px solid #FF0001; /* 三角形的颜色 */
+}
+.warn-item-inner-box-detail-right {
+    margin-top: 10px;
+    width: 100%;
+    display: flex;
+    justify-content: space-around;
+    align-items: center;
+}
+
+.warn-item-inner-box-title {
+    display: flex;
+    text-align: right;
+
+}
+.demo-collapse {
+    height: auto;
+}
+.warn-item-inner-title {
+    height: 55px;
+    text-align: center;
+    //    margin-top: 10px;
+
+}
+.main-project {
+    display: flex;
+    justify-content: space-between;
+    padding-left: 40px;
+    padding-right: 40px;
+    width: 100%;
+    padding-top: 20px;
+    .main-project-item {
+        flex: 1;
+        display: flex;
+        align-items: center;
+    }
+}
+.arrow-oringe {
+    background-color: #FF9102;
+}
+.arrow-red {
+    background-color: #FF0001;
+}
+</style>
+
+<style>
+.demo-collapse .el-collapse-item__wrap {
+    border-bottom: none;
+}
+
+.demo-collapse .el-collapse {
+    border-bottom: none;
+}
+
+.demo-collapse1 .el-collapse-item__header.is-active {
+    border-bottom: 1px solid var(--el-collapse-border-color);
+    margin-bottom: 10px;
+}
+
+.demo-collapse .el-collapse-item__wrap {
+    overflow: initial;
+
+}
+
+.warn-innput .el-input__inner {
+    font-weight: 900;
+}
+</style>

Some files were not shown because too many files changed in this diff