jiaosong
2023-08-24 fe0ef3441cd689e3679696d990b0ca1b5d7193ac
Merge remote-tracking branch 'origin/master'
已删除1个文件
已修改24个文件
1212 ■■■■ 文件已修改
h5_standard/.env.production 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/components/newCom/user.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/plannedProgress/details.vue 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/workOrder/reportingForWork.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/src/views/workOrder/workOrderReporting.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/App.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/components/myTabber.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/main.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/manifest.json 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages.json 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/index/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/mine/mine.vue 162 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/pages/workbench/workbench.vue 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
minipro_standard/util/request/responseInterceptors.js 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/.env.development 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/.env.production 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/.env.staging 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/assets/main.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/components/AppLayout.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/router/index.js 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/stores/counter.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/views/HomeView.vue 277 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/views/index.vue 308 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/src/views/process.vue 98 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
screen_standard/vite.config.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
h5_standard/.env.production
@@ -18,7 +18,7 @@
# VUE_APP_API = 'https://hsky.doumee.com/doumeeplant_api/'
# æµ‹è¯•
# VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/'
VUE_APP_API = 'https://dmtest.ahapp.net/doumeeplant_api/'
# æ¼”示
VUE_APP_API = 'https://www.mes.red/doumeeplant/'
# VUE_APP_API = 'https://www.mes.red/doumeeplant/'
h5_standard/src/components/newCom/user.vue
@@ -17,7 +17,7 @@
            <div class="content_total">共{{form.total}}条数据</div>
            <div class="content_list">
                <div class="content_list_item" v-for="(item, i) in list" :key="i" @click="jump(item)">
                    <div class="content_list_item_name">{{item.name}}&nbsp;|&nbsp;{{item.dmodel.name}}</div>
                    <div class="content_list_item_name" v-if="item.dmodel">{{item.name}}&nbsp;|&nbsp;{{item.dmodel.name}}</div>
                </div>
            </div>
        </div>
h5_standard/src/views/plannedProgress/details.vue
@@ -51,12 +51,33 @@
                        <div class="content_list_item_content_item_label">计划人员:</div>
                        <div class="content_list_item_content_item_nr">{{info.usermodel.realname}}</div>
                    </div>
                    <div class="content_list_item_content_item">
                        <div class="content_list_item_content_item_label">分配数量:</div>
                        <div class="content_list_item_content_item_nr">{{info.createTime}}</div>
                    </div>
                    <div class="content_list_item_content_item">
                        <div class="content_list_item_content_item_label">完工数量:</div>
                        <div class="content_list_item_content_item_nr" v-if="info.umodel">{{info.doneNum}}{{info.umodel.name}}</div>
                    </div>
                </div>
            </div>
        </div>
        <NotFound info="暂未分配工单" v-if="info.workorderList && info.workorderList.length === 0" />
        <template v-else>
            <div class="details_timeline" v-for="(item, i) in info.workorderList" :key="i">
            <div class="details_list">
                <div class="details_list_item" v-for="(item, i) in info.workorderList" :key="i" @click="jump(item.id)">
                    <div class="details_list_item_top">
                        <span>{{ item.createUserName }}</span><span>{{ item.code }}</span>
                    </div>
                    <div class="details_list_item_center">
                        <span>良品数:{{ item.qualifiedNum }}</span><span>不良数:<span class="red">{{ item.unqualifiedNum }}</span></span>
                    </div>
                    <div class="details_list_item_bottom">
                        <span>{{ item.createTime }}</span>
                    </div>
                </div>
            </div>
            <!-- <div class="details_timeline" v-for="(item, i) in info.workorderList" :key="i">
                <div class="details_timeline_header">
                    <div class="details_timeline_header_code">
                        <span>工单编号:{{item.code}}</span>
@@ -68,10 +89,10 @@
                    <span v-if="item.status === 3" class="purple">已检验</span>
                    <span v-if="item.status === 4">已报工</span>
                    <span v-if="item.status === 5">已入库</span>
                    <span v-if="item.status === 6">已取消</span>
                    <span v-if="item.status === 6">已取消</span> -->
                    <!--                <span v-if="item.status === 7">已取消</span>-->
                    <!--                <span v-if="item.status === 8">已关闭</span>-->
                </div>
                <!-- </div>
                <div class="details_timeline_item" v-if="item.produceDate">
                    <div class="activedian"></div>
                    <div class="dian active"></div>
@@ -132,21 +153,22 @@
                        </div>
                    </div>
                </div>
            </div>
            </div> -->
        </template>
    </div>
</template>
<script setup lang="ts">
    import { ref, onMounted, watch } from 'vue'
    import { useRoute } from "vue-router"
    import { useRoute, useRouter } from "vue-router"
    import { queryByID } from '@/apis/PlanningAPI'
    import NotFound from '@/components/common/NotFound.vue'
    const route = useRoute()
    const router = useRouter()
    // è¯¦æƒ…数据
    let info = ref({})
    let info:any = ref({})
    let loading = ref<boolean>(true)
@@ -158,6 +180,10 @@
                    info.value = res.data
                }
            })
    }
    const jump = (id: any) => {
        router.push({ name: 'workOrderReporting', query: { id } })
    }
    const proUserStr = (item: any) => {
@@ -296,6 +322,72 @@
            }
        }
    }
    .details_list {
        width: 100%;
        height: auto;
        background-color: #FFFFFF;
        margin-top: 20px;
        .details_list_item {
            width: 100%;
            padding: 24px 30px;
            box-sizing: border-box;
            background-color: #FFFFFF;
            border-bottom: 2px solid #F7F7F7;
            &:last-child {
                border: none !important;
            }
            .details_list_item_top {
                width: 100%;
                display: flex;
                align-items: center;
                span {
                    &:first-child {
                        font-size: 30px;
                        font-family: PingFangSC-Medium, PingFang SC;
                        font-weight: 500;
                        color: #222222;
                        margin-right: 16px;
                    }
                    &:last-child {
                        font-size: 24px;
                        font-family: PingFangSC-Regular, PingFang SC;
                        font-weight: 400;
                        color: #666666;
                    }
                }
            }
            .details_list_item_center {
                width: 100%;
                margin: 16px 0 20px 0;
                .red {
                    color: #DE5243;
                }
                span {
                    &:first-child {
                        font-size: 26px;
                        font-family: PingFangSC-Regular, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                        margin-right: 100px;
                    }
                    &:last-child {
                        font-size: 26px;
                        font-family: PingFangSC-Regular, PingFang SC;
                        font-weight: 400;
                        color: #333333;
                    }
                }
            }
            .details_list_item_bottom {
                span {
                    font-size: 24px;
                    font-family: PingFangSC-Regular, PingFang SC;
                    font-weight: 400;
                    color: #999999;
                }
            }
        }
    }
    .details_timeline {
        padding: 30px;
        background: #ffffff;
h5_standard/src/views/workOrder/reportingForWork.vue
@@ -697,6 +697,7 @@
            getDeviceByCondition({ procedureId: res.procedureId })
                .then(res1 => {
                    if (res1.code === 200) {
                        if (res1.data && res1.data.length > 0)
                        deviceId.value = res1.data[0].id
                        from.deviceId = res1.data[0].id
                        from.deviceName = res1.data[0].name
h5_standard/src/views/workOrder/workOrderReporting.vue
@@ -311,7 +311,8 @@
            <div class="bh_zw"></div>
            <div class="bg_footer">
                <div class="bg_footer_submit" v-if="typeView == 0" @click="submit">确认报工</div>
                <div class="bg_footer_submit1" @click="jumpdj" v-if="proxy.$auth('h5:workorder:processRecord') && typeView == 1">
                <!-- proxy.$auth('h5:workorder:processRecord') &&  -->
                <div class="bg_footer_submit1" @click="jumpdj" v-if="typeView == 1">
                    <img src="@/assets/icon/gongdan_ic_shoudong@2x.png" alt="" />
                    <span>新增点检</span>
                </div>
minipro_standard/App.vue
@@ -16,7 +16,7 @@
    /*每个页面公共css */
    @import "@/uni_modules/uview-ui/index.scss";
    @import "common/css/lib.css";
    page {
        background-color: #F3F6F9 !important;
    }
    // page {
    //     background-color: #F3F6F9 !important;
    // }
</style>
minipro_standard/components/myTabber.vue
@@ -6,7 +6,7 @@
            fixed
            activeColor="#222"
            inactiveColor="#666"
        >
            :safeAreaInsetBottom="true">
            <u-tabbar-item text="待办">
                <view class="" slot="active-icon"> 
                    <image src="@/static/nav_daiban_sel@2x.png" class="icon-style" mode=""></image>
minipro_standard/main.js
@@ -1,32 +1,23 @@
import Vue from 'vue'
import App from './App'
import mixin from './common/mixin'
// å¼•入全局uView
import uView from '@/uni_modules/uview-ui'
Vue.use(uView)
// vuex
import store from './store'
Vue.prototype.$store = store
store.dispatch('getHeight')
Vue.config.productionTip = false
App.mpType = 'app'
console.log(uni.$u);
// #ifdef MP
// å¼•å…¥uView对小程序分享的mixin封装
const mpShare = require('@/uni_modules/uview-ui/libs/mixin/mpShare.js')
Vue.mixin(mpShare)
// #endif
Vue.mixin(mixin)
// å¼•入请求封装
const app = new Vue({
    store,
  ...App
minipro_standard/manifest.json
@@ -50,14 +50,15 @@
    "quickapp" : {},
    /* å°ç¨‹åºç‰¹æœ‰ç›¸å…³ */
    "mp-weixin" : {
        "appid" : "wxf8f2d1ee4b273688",
        "appid" : "wxcd2b89fd2ff065f8",
        "setting" : {
            "urlCheck" : false
            "urlCheck" : false,
            "es6" : true,
            "postcss" : true,
            "minified" : true
        },
        "usingComponents" : true,
                "requiredPrivateInfos": [
                    "getLocation"
                ],
        "requiredPrivateInfos" : [ "getLocation" ],
        "permission" : {
            "scope.userLocation" : {
                "desc" : "实时上传图片"
minipro_standard/pages.json
@@ -1,12 +1,11 @@
{
    "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
    "pages": [
        {
            "path": "pages/workbench/workbench",
            "style": {
                "navigationBarTitleText": "工作台",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/index/index",
@@ -28,14 +27,13 @@
                "enablePullDownRefresh": false,
                                "navigationStyle": "custom"
            }
        }
    ],
    "globalStyle": {
        "navigationBarTextStyle": "black",
        "navigationBarTitleText": "uni-app",
        "navigationBarBackgroundColor": "#F3F6F9",
        "backgroundColor": "#F3F6F9"
        "navigationBarBackgroundColor": "#ffffff",
        "backgroundColor": "#ffffff"
    },
    "tabBar": {
        "color": "#666666",
minipro_standard/pages/index/index.vue
@@ -1,14 +1,10 @@
<template>
    <view>
        <myTabbar :index="0" />
    </view>
</template>
<script>
    // import { coustomLogin, wxEmpower } from '@/util/api/index'
    import myTabbar from "@/components/myTabber.vue"
    export default {
        components: {
minipro_standard/pages/mine/mine.vue
@@ -1,6 +1,29 @@
<template>
    <view>
    <div class="box">
        <div class="box_info" :style="{background: 'url(' + img + ')'}">
            <image src="@/static/2@2x.png" mode="widthFix" />
            <div class="box_info_box">
                <text>张三</text>
                <div class="box_info_box_x">
                    <text>豆米科技</text>
                    <image src="@/static/mine_ic_change@2x.png" alt="" />
                </div>
            </div>
        </div>
        <div class="box_function">
            <div class="box_function_item" v-for="(item, index) in MENU" :key="index">
                <div class="box_function_item_left">
                    <image :src="item.icon" alt="" />
                    <text>{{item.name}}</text>
                </div>
                <div class="box_function_item_right">
                    <van-icon name="arrow" size="20" color="#CCCCCC" />
                </div>
            </div>
        </div>
        <div class="box_out"><text>退出登录</text></div>
    </div>
        <myTabbar :index="2" />
    </view>
</template>
@@ -13,15 +36,19 @@
        },
        data() {
            return {
                form: {
                    account: '',
                    password: '',
                },
                logining: false,
                openId: ''
                MENU: [
                    { name: '个人信息', url: '/personal/personalInformation', icon: require('@/static/mine_ic_gerenxinxi@2x.png') },
                    // { name: '系统通知', url: '', icon: require('@/assets/icon/mine_ic_xitonggonggao@2x.png') },
                    { name: '更新手机号', url: '/personal/updatePhone', icon: require('@/static/mine_ic_shoujihao@2x.png') },
                    { name: '更新邮箱号', url: '/personal/updateMailbox', icon: require('@/static/mine_ic_youxianghao@2x.png') },
                    { name: '扫码绑定账号', url: '', icon: require('@/static/mine_ic_bangding@2x.png') },
                    { name: '修改密码', url: '/personal/changePassword', icon: require('@/static/mine_ic_xiugaimima@2x.png') },
                ],
                img: require('@/static/mine_bg@2x.png')
            }
        },
        onLoad() {
            uni.hideTabBar()
            // uni.login({
            //     success: data => {
            //         this.wxLogin(data.code)
@@ -32,43 +59,96 @@
            // })
        },
        methods: {
            // loginAction() {
            //     if (!this.form.account || !this.form.password) {
            //         uni.$u.toast('账号或者密码不能为空')
            //     }
            //     this.logining = true
            //     coustomLogin({...this.form, openid: this.openId})
            //         .then(res => {
            //             this.$store.commit('SETTOKEN', res.token)
            //             this.$store.commit('SETUSERINFO', res)
            //             uni.navigateTo({
            //                 url:'/pages/projectList/projectList'
            //             })
            //         })
            //         .finally(() => {
            //             this.logining = false
            //         })
            // },
            // wxLogin(code) {
            //     wxEmpower({code})
            //         .then(res => {
            //             this.openId = res.openid
            //             if (res.userInfo) {
            //                 this.$store.commit('SETTOKEN', res.userInfo.token)
            //                 this.$store.commit('SETUSERINFO', res.userInfo)
            //                 uni.navigateTo({
            //                     url:'/pages/projectList/projectList'
            //                 })
            //             }
            //         })
            //         .catch(err => {
            //             uni.$u.toast(err)
            //         })
            // }
        }
    }
</script>
<style lang="scss" scoped>
    .box {
        width: 100%;
        padding: 30rpx;
        box-sizing: border-box;
        .box_info {
            padding: 0 30rpx;
            height: 168rpx;
            border-radius: 16rpx;
            display: flex;
            align-items: center;
            background-repeat: no-repeat;
            background-size: cover;
            image {
                width: 88rpx;
                height: 88rpx;
            }
            .box_info_box {
                height: 88rpx;
                display: flex;
                margin-left: 30rpx;
                flex-direction: column;
                justify-content: space-between;
                .box_info_box_x {
                    display: flex;
                    align-items: center;
                    text {
                        font-size: 26rpx;
                        font-weight: 400;
                        color: rgba(255, 255, 255, 0.8);
                    }
                    image {
                        width: 26rpx;
                        height: 26rpx;
                        margin-left: 10rpx;
                    }
                }
                text {
                    font-size: 34rpx;
                    font-weight: 500;
                    color: #FFFFFF;
                }
            }
        }
        .box_function {
            margin-top: 30rpx;
            .box_function_item {
                display: flex;
                align-items: center;
                justify-content: space-between;
                height: 98rpx;
                border-bottom: 1rpx solid #E5E5E5;
                /*&:last-child {*/
                /*    border: none;*/
                /*}*/
                .box_function_item_left {
                    display: flex;
                    align-items: center;
                    image {
                        width: 36rpx;
                        height: 36rpx;
                        margin-right: 24rpx;
                    }
                    text {
                        font-size: 30rpx;
                        font-weight: 400;
                        color: #222222;
                    }
                }
            }
        }
        .box_out {
            position: fixed;
            bottom: 200rpx;
            left: 50%;
            transform: translate(-50%, 0);
            width: 350rpx;
            height: 88rpx;
            background: #F7F7F7;
            border-radius: 8rpx;
            display: flex;
            align-items: center;
            justify-content: center;
            font-size: 30rpx;
            font-weight: 400;
            color: #333333;
        }
    }
</style>
minipro_standard/pages/workbench/workbench.vue
@@ -1,6 +1,21 @@
<template>
    <view>
    <view class="index">
        <view class="menu">
            <view class="menu_list" v-for="(row, i) in 3" :key="i">
                <view class="menu_list_head">
                    <span>常用功能</span>
                </view>
                <div class="menu_list_list">
                    <view class="menu_list_item" v-for="item in list" :key="item.id" @click="jump(item)">
                        <image :src="item.icon" mode="widthFix" />
                        <span>{{item.label}}</span>
                    </view>
                    <view class="menu_list_zw"></view>
                    <view class="menu_list_zw"></view>
                    <view class="menu_list_zw"></view>
                </div>
            </view>
        </view>
        <myTabbar :index="1" />
    </view>
</template>
@@ -14,7 +29,32 @@
        },
        data() {
            return {
                list: [
                    {
                        icon: require('@/static/logo@2x.png'),
                        label: '测试'
                    },
                    {
                        icon: require('@/static/logo@2x.png'),
                        label: '测试'
                    },
                    {
                        icon: require('@/static/logo@2x.png'),
                        label: '测试'
                    },
                    {
                        icon: require('@/static/logo@2x.png'),
                        label: '测试'
                    },
                    {
                        icon: require('@/static/logo@2x.png'),
                        label: '测试'
                    },
                    {
                        icon: require('@/static/logo@2x.png'),
                        label: '测试'
                    }
                ]
            };
        },
        onLoad() {
@@ -49,7 +89,88 @@
        }
    }
</script>
<style lang="scss">
<style>
    page {
        background-color: #F7F7F7 !important;
    }
</style>
<style scoped lang="scss">
.index {
    width: 100%;
    .menu {
        width: 100%;
        display: flex;
        flex-direction: column;
        .menu_list {
            display: flex;
            flex-direction: column;
            padding: 30rpx;
            box-sizing: border-box;
            margin-bottom: 20rpx;
            background: white;
            &:last-child {
                margin-bottom: 0;
            }
            .menu_list_head {
                width: 100%;
                display: flex;
                align-items: center;
                justify-content: space-between;
                margin-bottom: 40rpx;
                span {
                    font-size: 32rpx;
                    font-family: PingFangSC-Medium, PingFang SC;
                    font-weight: 500;
                    color: #222222;
                }
            }
            .menu_list_list {
                width: 100%;
                display: flex;
                align-items: center;
                flex-wrap: wrap;
                justify-content: space-between;
                .menu_list_zw {
                    width: 20%;
                    height: 0;
                }
                .menu_list_item {
                    width: 20%;
                    display: flex;
                    flex-direction: column;
                    align-items: center;
                    justify-content: center;
                    margin-top: 40rpx;
                    &:nth-child(1) {
                        margin: 0;
                    }
                    &:nth-child(2) {
                        margin: 0;
                    }
                    &:nth-child(3) {
                        margin: 0;
                    }
                    &:nth-child(4) {
                        margin: 0;
                    }
                    &:nth-child(5) {
                        margin: 0;
                    }
                    image {
                        width: 88rpx;
                        height: 88rpx;
                        border-radius: 24rpx;
                        overflow: hidden;
                    }
                    span {
                        font-size: 24rpx;
                        font-weight: 400;
                        color: #333333;
                        margin-top: 16rpx;
                    }
                }
            }
        }
    }
}
</style>
minipro_standard/util/request/responseInterceptors.js
@@ -7,18 +7,18 @@
        /* å¯¹å“åº”成功做点什么 å¯ä½¿ç”¨async await åšå¼‚步操作*/
        const data = response.data
        // è‡ªå®šä¹‰å‚æ•°
        const custom = response.config?.custom
        if (data.code !== 200) { // æœåŠ¡ç«¯è¿”å›žçš„çŠ¶æ€ç ä¸ç­‰äºŽ200,则reject()
            uni.$u.toast(data.message)
            if (data.code === 401) {
                // console.log('未登录、登录失效');
                // æœªç™»å½•、登录失效
                uni.reLaunch({
                    url: '/pages/login/login'
                })
            }
            return Promise.reject(data)
        }
        // const custom = response.config?.custom
        // if (data.code !== 200) { // æœåŠ¡ç«¯è¿”å›žçš„çŠ¶æ€ç ä¸ç­‰äºŽ200,则reject()
        //     uni.$u.toast(data.message)
        //     if (data.code === 401) {
        //         // console.log('未登录、登录失效');
        //         // æœªç™»å½•、登录失效
        //         uni.reLaunch({
        //             url: '/pages/login/login'
        //         })
        //     }
        //     return Promise.reject(data)
        // }
        // console.log(data.data);
        return data.data || {}
    }, (response) => {
screen_standard/.env.development
@@ -6,4 +6,5 @@
VITE_BASE_URL='http://192.168.0.35:10021'
# VITE_BASE_PATH='/doumeeplant_api'
# VITE_BASE_URL='https://dmtest.ahapp.net/doumeeplant_api/'
VITE_BASE_URL='https://dmtest.ahapp.net/doumeeplant_api'
# VITE_BASE_URL = 'https://www.mes.red/doumeeplant'
screen_standard/.env.production
@@ -1,5 +1,5 @@
NODE_ENV = production
VITE_NAME = '生产环境'
VITE_BASE_CONTEXT = 'screen'
VITE_BASE_PATH = '/doumeeplant'
VITE_BASE_URL = 'https://www.mes.red/doumeeplant/'
VITE_BASE_PATH = '/api'
VITE_BASE_URL = 'https://www.mes.red/doumeeplant'
screen_standard/.env.staging
@@ -2,4 +2,4 @@
VITE_NAME='测试环境'
VITE_BASE_CONTEXT='doumeeplant_screen'
VITE_BASE_PATH='/doumeeplant_api'
VITE_BASE_URL='https://dmtest.ahapp.net/doumeeplant_api/'
VITE_BASE_URL='https://dmtest.ahapp.net/doumeeplant_api'
screen_standard/src/assets/main.css
@@ -10,7 +10,7 @@
  margin: 0;
  /* height: 100%; */
  height: 100vh;
  /* overflow-y: scroll; */
  overflow-y: hidden;
  font-weight: normal;
}
screen_standard/src/components/AppLayout.vue
@@ -115,9 +115,9 @@
}
const fullChange = () => {
  data.isFull = !data.isFull
  // data.isFull = !data.isFull
  let element = document.documentElement;
  if (data.isFull) {   // å…¨å±
  if (!data.isFull) {   // å…¨å±
    if (element.requestFullscreen) {
      element.requestFullscreen();
    } else if (element.webkitRequestFullScreen) {
@@ -139,10 +139,11 @@
      document.msExitFullscreen();
    }
  }
  // data.isFull = !data.isFull
  data.isFull = !data.isFull
}
onMounted(() => {
  enterprise.setDepartId()
  getDepartmentList(enterprise.companyId)
    .then(res => {
      data.comList = res
@@ -150,17 +151,21 @@
      enterprise.setDepartId(data.tempCom.id)
    })
    .catch(err => {})
  fullChange()
  const week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']
  setInterval(() => {
    let date = new Date()
    let tempDate = new Date()
    let month = tempDate.getMonth()+1
    let day = tempDate.getDate()
    let hours = tempDate.getHours()
    let minute = tempDate.getMinutes()
    let seconds = tempDate.getSeconds()
    data.tempDate = {
      time: `${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`,
      date: `${date.getFullYear()}/${date.getMonth()+1}/${date.getDate()}`,
      day: week[date.getDay()-1]
      time: `${hours<10?`0${hours}`:hours}:${minute<10?`0${minute}`:minute}:${seconds<10?`0${seconds}`:seconds}`,
      date: `${tempDate.getFullYear()}/${month<10?`0${month}`:month}/${day<10?`0${day}`:day}`,
      day: week[tempDate.getDay()-1]
    }
  }, 1000)
  // console.log(date.getDay());
})
const back = () => {
  enterprise.setProcedureName('')
@@ -181,6 +186,11 @@
  height: 100%;
  padding: 20px 30px;
  overflow-y: scroll;
  scrollbar-width:none;
  -ms-overflow-style:none;
  &::-webkit-scrollbar{
    width: 0;
  }
  display: flex;
  flex-direction: column;
screen_standard/src/router/index.js
@@ -1,5 +1,5 @@
import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'
// import HomeView from '../views/HomeView.vue'
import indexView from '../views/index.vue'
import processView from '../views/process.vue'
// console.log(import.meta.env.VITE_BASE_CONTEXT);
@@ -10,6 +10,11 @@
  routes: [
    {
      path: '/',
      redirect: '/home',
    },
    {
      path: '/home',
      name: 'home',
      component: indexView
    },
screen_standard/src/stores/counter.js
@@ -5,8 +5,8 @@
  state: () => {
    return {
      companyId: '8',
      departId: '',
      companyId: window.sessionStorage.getItem('companyId'),
      departId: window.sessionStorage.getItem('departId'),
      delayNum: 0, // å»¶æœŸè®¡åˆ’æ•°
      deviceNum: 0, // ä»Šæ—¥ç”Ÿäº§è®¾å¤‡æ•°
      ingNum: 0, // æ‰§è¡Œä¸­è®¡åˆ’æ•°
screen_standard/src/views/HomeView.vue
ÎļþÒÑɾ³ý
screen_standard/src/views/index.vue
@@ -54,14 +54,14 @@
                <div class="scroll_item_row">{{ item.materialName }}</div>
                <div class="scroll_item_row">{{ item.materialCode }}</div>
                <div class="scroll_item_row">{{ item.num }}</div>
                <div class="scroll_item_row">
                <div class="scroll_item_row" style="text-align: left;">
                  <el-tooltip v-for="(child, i) in item.procedureList" :key="i" effect="dark"
                    :content="'已报工良品数' + child.doneNum + ';工序计划数' + child.planNum" placement="top">
                    <div class="scroll_item_row_item" @click="jump(child.procedureId, child.procedureName)">
                      <div class="scroll_item_row_item_x"></div>
                      <span v-if="child.rate < 100">{{ child.rate.toFixed(0) }}%</span>
                      <span v-if="child.rate < 100">{{ Math.floor(child.rate) }}%</span>
                      <img v-else src="@/assets/img/ic_complete@2x.png" alt="" />
                      <span class="scroll_item_row_item_wz">{{ child.procedureName }}</span>
                      <span class="scroll_item_row_item_wz">{{ child.procedureName.substring(0, 3) }}</span>
                    </div>
                  </el-tooltip>
                </div>
@@ -103,7 +103,7 @@
            <div class="content_left_item1_head">
              <span>当日员工产量TOP10</span>
            </div>
            <div class="content_left_item1_content" ref="scrollContainer">
            <div class="content_left_item1_content" @mouseenter="handleMouseEnter" @mouseleave="handleMouseLeave" ref="scrollContainer">
              <div class="content_left_item1_content_row" v-for="(item, index) in data.production" :key="index">
                <div class="content_left_item1_content_row_name">
                  <div :class="index > 2 ? 'num bg1' : 'num bg2'">{{ index + 1 }}</div>
@@ -137,8 +137,8 @@
                <div v-for="(item, index) in data.log" :key="index"
                  :class="index % 2 == 0 ? 'scroll_item scroll_item_bg1' : 'scroll_item scroll_item_bg2'">
                  <div class="scroll_item_row">{{ item.userName }}</div>
                  <div class="scroll_item_row">{{ item.materialName }}</div>
                  <div class="scroll_item_row">{{ item.procedureName }}</div>
                  <div class="scroll_item_row">{{ item.materialCode }}</div>
                  <div class="scroll_item_row">{{ dateToSub(item.createTime) }}</div>
                  <div class="scroll_item_row">{{ item.qualifiedNum || 0 }}</div>
                  <div class="scroll_item_row">{{ item.unqualifiedNum || 0 }}</div>
@@ -170,7 +170,7 @@
        </div>
      </div>
      <!-- è®¾å¤‡å·¡æ£€è®°å½• -->
      <div class="content_right_bottom">
      <div class="content_right_bottom" ref="bottom1">
        <div class="content_right_bottom_head">
          <span>设备巡检记录</span>
        </div>
@@ -187,7 +187,10 @@
                :class="index % 2 == 0 ? 'scroll_item scroll_item_bg1' : 'scroll_item scroll_item_bg2'">
                <div class="scroll_item_row">{{ dateToSub(item.checkdate) }}</div>
                <div class="scroll_item_row">{{ item.deviceName }}</div>
                <div class="scroll_item_row">{{ item.status == 0 ? '合格' : '不合格' }}</div>
                <div class="scroll_item_row">
                  <span v-if="item.status == 0">正常</span>
                  <span v-else style="color: #F84F26">异常</span>
                </div>
                <div class="scroll_item_row">{{ item.userName }}</div>
              </div>
            </div>
@@ -200,8 +203,8 @@
<script setup>
import { dateToSub } from '@/utils'
import { reactive, ref, onMounted, nextTick, onUnmounted, computed, watch, toRefs } from 'vue'
import { getPlanData, getTop, getStockList, getWorkPlansList, getProcedureProcessList, getRecordLogPage, getDeviceCheckPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js'
import { reactive, ref, onMounted, onUnmounted, computed, watch, toRefs } from 'vue'
import { getPlanData, getTop, getWorkPlansList, getProcedureProcessList, getRecordLogPage, getDeviceCheckPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js'
import { useCounterStore } from '@/stores/counter.js'
import * as echarts from 'echarts'
import { useRouter } from 'vue-router'
@@ -218,22 +221,24 @@
  dayDistribution: [],
  typeDistribution: [],
  num: 0,
  baseNum: 0
  baseNum: 0,
  firstScroll: false,
  secondScroll: false,
  thirdScroll: false,
  fourthScroll: false,
  fifthScroll: false,
})
let { baseNum } = toRefs(data)
let timer = ref(null)
let timer1 = ref(null)
let timer2 = ref(null)
let timer3 = ref(null)
let timer4 = ref(null)
let timer5 = ref(null)
let scrollContainer = ref(null)
let scrollContainer1 = ref(null)
let scrollContainer2 = ref(null)
let scrollContainer3 = ref(null)
let scrollContainer4 = ref(null)
let bottom1 = ref(null)
let cate = ref([
  {
    name: '成品计划进度',
@@ -271,16 +276,16 @@
  }
})
start1()
const init = () => {
  console.log(timer.value);
  // å½“日员工产量TOP10
  getTop(companyId.value, departId.value)
    .then(res => {
      if (res.length > 0) {
        data.baseNum = res[0].doneNum
        data.production = res
        start()
        data.fifthScroll = true
      }
    })
  // ä»“库实时余量统计
@@ -297,18 +302,14 @@
        getProcedureProcessList(companyId.value, departId.value)
          .then(res => {
            data.processProgress = res
            nextTick(() => {
              start2()
            })
            data.thirdScroll = true
          })
      } else {
        // æˆå“è®¡åˆ’进度
        getWorkPlansList(companyId.value, departId.value)
          .then(res => {
            data.plannedProgress = res
            nextTick(() => {
              start1()
            })
            data.secondScroll = true
          })
      }
    }
@@ -322,9 +323,7 @@
    page: 1
  }).then(res => {
    data.log = res.records
    nextTick(() => {
      start3()
    })
    data.fourthScroll = true
  })
  // è®¾å¤‡å·¡æ£€è®°å½•
  getDeviceCheckPage(companyId.value, departId.value, {
@@ -333,9 +332,7 @@
    page: 1
  }).then(res => {
    data.patrolInspection = res.records
    nextTick(() => {
      start4()
    })
    data.fifthScroll = true
  })
  // è¿‘七天不良数
  getUnqualified7DayData(companyId.value, departId.value, '')
@@ -362,6 +359,7 @@
            num: item.unqualifiedNum
          }
        })
        console.log(data.num);
        setTypeChart()
      }
    })
@@ -380,20 +378,22 @@
  let myChart = echarts.init(dayChartDom);
  let dateList = []
  let numList = []
  let num = 0
  data.dayDistribution.forEach(item => {
    dateList.push(item.date)
    numList.push(item.num)
    num += item.num
  })
  let option;
  option = {
    title: {
      text: `近七日不良品总数:${num}`,
      text: `   è¿‘七日不良品总数:${data.num}`,
      textStyle: {
        color: '#fff',
        fontSize: 12
      }
    },
    grid: {
      top: 40,
      bottom: 30
    },
    xAxis: {
      type: 'category',
@@ -521,9 +521,6 @@
            }
          }
        },
        // labelLayout: {
        //   hideOverlap: true
        // },
        endLabel: {
          show: true,
          distance: 5,
@@ -543,24 +540,7 @@
  option && myChart.setOption(option);
}
// onBeforeUnmount(()=>{
//     clearTimeout(timer.value)
//     clearTimeout(timer1.value)
//     clearTimeout(timer2.value)
//     clearTimeout(timer3.value)
//     clearTimeout(timer4.value)
// })
onUnmounted(() => {
  clearTimeout(timer.value)
  clearTimeout(timer1.value)
  clearTimeout(timer2.value)
  clearTimeout(timer3.value)
  clearTimeout(timer4.value)
  clearTimeout(timer5.value)
})
const clickCate = (index) => {
  clearTimeout(timer1.value)
  clearTimeout(timer2.value)
  cate.value.forEach((item, i) => {
    if (i === index) {
      // æˆå“è®¡åˆ’进度
@@ -568,17 +548,13 @@
        getWorkPlansList(companyId.value, departId.value)
          .then(res => {
            data.plannedProgress = res
            nextTick(() => {
              start1()
            })
            data.secondScroll = true
          })
      } else {
        getProcedureProcessList(companyId.value, departId.value)
          .then(res => {
            data.processProgress = res
            nextTick(() => {
              start2()
            })
            data.thirdScroll = true
          })
      }
      item.active = true
@@ -588,86 +564,57 @@
  })
}
function handleMouseEnter() {
  clearTimeout(timer.value)
  data.firstScroll = false
}
function handleMouseEnter1() {
  clearTimeout(timer1.value)
  data.secondScroll = false
}
function handleMouseEnter2() {
  clearTimeout(timer2.value)
  data.thirdScroll = false
}
function handleMouseEnter3() {
  clearTimeout(timer3.value)
  data.fourthScroll = false
}
function handleMouseEnter4() {
  clearTimeout(timer4.value)
  data.fifthScroll = false
}
function handleMouseLeave() {
  start()
  data.firstScroll = true
}
function handleMouseLeave1() {
  start1()
  data.secondScroll = true
}
function handleMouseLeave2() {
  start2()
  data.thirdScroll = true
}
function handleMouseLeave3() {
  start3()
  data.fourthScroll = true
}
function handleMouseLeave4() {
  start4()
  data.fifthScroll = true
}
// å¼€å¯å®šæ—¶å™¨
function start() {
  clearTimeout(timer.value)
  // å®šæ—¶å™¨è§¦å‘周期
  let speed = ref(100)
  timer.value = setInterval(ListScroll, speed.value)
}
// å¼€å¯å®šæ—¶å™¨
function start1() {
  clearTimeout(timer1.value)
  // å®šæ—¶å™¨è§¦å‘周期
  let speed1 = ref(100)
  timer1.value = setInterval(ListScroll1, speed1.value)
}
// å¼€å¯å®šæ—¶å™¨
function start2() {
  clearTimeout(timer2.value)
  // å®šæ—¶å™¨è§¦å‘周期
  let speed2 = ref(100)
  timer2.value = setInterval(ListScroll2, speed2.value)
}
// å¼€å¯å®šæ—¶å™¨
function start3() {
  clearTimeout(timer3.value)
  // å®šæ—¶å™¨è§¦å‘周期
  let speed3 = ref(100)
  timer3.value = setInterval(ListScroll3, speed3.value)
}
// å¼€å¯å®šæ—¶å™¨
function start4() {
  clearTimeout(timer4.value)
  // å®šæ—¶å™¨è§¦å‘周期
  let speed4 = ref(100)
  timer4.value = setInterval(ListScroll4, speed4.value)
}
function ListScroll() {
  if (!data.firstScroll) return
  // console.log('ListScroll');
  let scrollDom = scrollContainer.value
  if (!scrollDom) return
  // åˆ¤è¯»ç»„件是否渲染完成
  if (scrollDom.offsetHeight == 0) {
    scrollDom = scrollContainer.value
  } else {
    let maxLength = scrollDom.clientHeight/34
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length < 6) {
      clearTimeout(timer.value)
    if (scrollDom.children.length <= maxLength) {
      data.firstScroll = false
      return
    }
    // ç»„件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // console.log(scrollDom.scrollHeight - scrollDom.clientHeight);
    // console.log(scrollDom.scrollTop);
    // åˆ¤æ–­æ˜¯å¦æ»šåŠ¨åˆ°åº•éƒ¨
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // èŽ·å–ç»„ä»¶ç¬¬ä¸€ä¸ªèŠ‚ç‚¹
      let first = scrollDom.children[0]
      // åˆ é™¤èŠ‚ç‚¹
@@ -678,6 +625,8 @@
  }
}
function ListScroll1() {
  if (!data.secondScroll) return
  // console.log('ListScroll1');
  let scrollDom = scrollContainer1.value
  // åˆ¤è¯»ç»„件是否渲染完成
  if (!scrollDom) return
@@ -686,13 +635,16 @@
  } else {
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length < 7) {
      clearTimeout(timer1.value)
      data.secondScroll = false
      return
    }
    // ç»„件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // åˆ¤æ–­æ˜¯å¦æ»šåŠ¨åˆ°åº•éƒ¨
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight-0.5)) {
      console.log(scrollDom.scrollTop);
      console.log(scrollDom.scrollHeight, scrollDom.clientHeight);
      // èŽ·å–ç»„ä»¶ç¬¬ä¸€ä¸ªèŠ‚ç‚¹
      let first = scrollDom.children[0]
      // åˆ é™¤èŠ‚ç‚¹
@@ -703,6 +655,8 @@
  }
}
function ListScroll2() {
  if (!data.thirdScroll) return
  // console.log('ListScroll2');
  let scrollDom = scrollContainer2.value
  if (!scrollDom) return
  // åˆ¤è¯»ç»„件是否渲染完成
@@ -711,15 +665,15 @@
  } else {
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length < 10) {
      clearTimeout(timer2.value)
      data.thirdScroll = false
      return
    }
    // ç»„件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // console.log('scrollDom.scrollTop', scrollDom.scrollTop);
    // console.log('scrollDom.scrollHeight - scrollDom.clientHeight', scrollDom.scrollHeight - scrollDom.clientHeight);
    // åˆ¤æ–­æ˜¯å¦æ»šåŠ¨åˆ°åº•éƒ¨
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // èŽ·å–ç»„ä»¶ç¬¬ä¸€ä¸ªèŠ‚ç‚¹
      let first = scrollDom.children[0]
      // åˆ é™¤èŠ‚ç‚¹
@@ -730,6 +684,9 @@
  }
}
function ListScroll3() {
  if (!data.fourthScroll) return
  // console.log('ListScroll3');
  let scrollDom = scrollContainer3.value
  if (!scrollDom) return
  // åˆ¤è¯»ç»„件是否渲染完成
@@ -737,14 +694,17 @@
    scrollDom = scrollContainer3.value
  } else {
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length <= 5) {
      clearTimeout(timer3.value)
    let num = scrollContainer3.value.offsetHeight / 35;
    // alert(scrollDom.children.length  +"---------------"+num)
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length <= num) {
      data.fourthScroll = false
      return
    }
    // ç»„件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop = scrollDom.scrollTop+2
    // åˆ¤æ–­æ˜¯å¦æ»šåŠ¨åˆ°åº•éƒ¨
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight -2)) {
      // èŽ·å–ç»„ä»¶ç¬¬ä¸€ä¸ªèŠ‚ç‚¹
      let first = scrollDom.children[0]
      // åˆ é™¤èŠ‚ç‚¹
@@ -755,21 +715,26 @@
  }
}
function ListScroll4() {
  if (!data.fifthScroll) return
  // console.log('ListScroll4');
  let scrollDom = scrollContainer4.value
  if (!scrollDom) return
  // åˆ¤è¯»ç»„件是否渲染完成
  if (scrollDom.offsetHeight == 0) {
    scrollDom = scrollContainer4.value
  } else {
    // console.log(bottom1.value.height);
    let num = scrollContainer4.value.offsetHeight / 35;
    // alert(scrollDom.children.length  +"---------------"+num)
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length < 5) {
      clearTimeout(timer4.value)
    if (scrollDom.children.length <= num) {
      data.fifthScroll = false
      return
    }
    // ç»„件进行滚动
    scrollDom.scrollTop += 1
    scrollDom.scrollTop += 2
    // åˆ¤æ–­æ˜¯å¦æ»šåŠ¨åˆ°åº•éƒ¨
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // èŽ·å–ç»„ä»¶ç¬¬ä¸€ä¸ªèŠ‚ç‚¹
      let first = scrollDom.children[0]
      // åˆ é™¤èŠ‚ç‚¹
@@ -779,19 +744,38 @@
    }
  }
}
// onUnmounted(() => {
// })
function scrillAction() {
  ListScroll()
  ListScroll1()
  ListScroll2()
  ListScroll3()
  ListScroll4()
}
onMounted(() => {
  window.addEventListener('resize', () => {
    setTypeChart()
    setDayChart()
  })
  if (!departId.value) return;
  timer5.value = setInterval(init(), 60000)
  init()
  timer5.value = setInterval(init, 60000)
  timer.value = setInterval(scrillAction, 100)
})
onUnmounted(() => {
  console.log('停止滴答');
  clearTimeout(timer.value)
  clearTimeout(timer5.value)
})
</script>
<style lang="scss" scoped>
$fixed-height: 690px;
.content1 {
  flex: 1;
  width: 100%;
  height: auto;
@@ -804,7 +788,8 @@
    margin-right: 20px;
    .content_left_item1 {
      width: 100%;
      height: 284px;
      height:  calc(100vh - 690px);
    //  height: 284px;
      margin-bottom: 20px;
      .content_left_item1_head {
        background: url('@/assets/img/home_title_short@2x.png');
@@ -828,7 +813,7 @@
      .content_left_item1_content {
        width: 100%;
        height: 246px;
        height: calc(100% - 36px);
        padding: 20px;
        overflow: hidden;
        box-sizing: border-box;
@@ -839,7 +824,8 @@
          display: flex;
          align-items: center;
          justify-content: space-between;
          margin-bottom: 13px;
          // margin-bottom: 13px;
          padding: 7px 0;
          &:last-child {
            margin: 0;
@@ -965,7 +951,7 @@
        .main_container {
          width: 100%;
          height: calc(100% - 35px);
          height: calc(100% - 38px);
          .scroll_container {
            width: 100%;
@@ -1079,8 +1065,13 @@
            color: #01D9FE;
            &:nth-child(5) {
              flex: 2.7;
              flex: 3;
            }
            &:nth-child(4) {
              flex: 0.7;
            }
            &:nth-child(6) {
              flex: 0.7;
            }
          }
        }
@@ -1117,10 +1108,15 @@
                justify-content: center;
                color: #FFFFFF;
                font-size: 13px;
                &:nth-child(4) {
                  flex: 0.7;
                }
                &:nth-child(5) {
                  flex: 3;
                  justify-content: start;
                }
                &:nth-child(6) {
                  flex: 0.7;
                }
                .scroll_item_row_item {
                  margin-top: -11px;
@@ -1276,7 +1272,8 @@
    .content_center_bottom {
      width: 100%;
      height: 284px;
     // height: 284px;
      height:  calc(100vh - 690px);
      flex: 2;
      .content_center_bottom_head {
        width: 100%;
@@ -1324,8 +1321,14 @@
            font-weight: 500;
            color: #01D9FE;
            &:nth-child(4) {
              flex: 2;
            &:nth-child(5) {
              flex: 0.5;
            }
            &:nth-child(6) {
              flex: 0.5;
            }
            &:nth-child(7) {
                  flex: 0.7;
            }
          }
        }
@@ -1365,9 +1368,16 @@
                justify-content: center;
                color: #FFFFFF;
                &:nth-child(4) {
                  flex: 2;
                &:nth-child(5) {
                  flex: 0.5;
                }
                &:nth-child(6) {
                  flex: 0.5;
                }
                &:nth-child(7) {
                  flex: 0.7;
                }
              }
            }
          }
@@ -1417,8 +1427,8 @@
          left: 50%;
          transform: translate(-50%, -50%);
          z-index: 999;
          width: 114px;
          height: 114px;
          width: 100px;
          height: 100px;
          border-radius: 50%;
          border: 2px dashed #01D9FE;
          display: flex;
@@ -1460,8 +1470,9 @@
    .content_right_bottom {
      width: 100%;
      height: 284px;
     // height: 284px;
      height:  calc(100vh - 690px);
      .content_right_bottom_head {
        width: 100%;
        height: 38px;
@@ -1506,8 +1517,11 @@
            font-weight: 500;
            color: #01D9FE;
            &:first-child {
              flex: 2;
            // &:first-child {
            //   flex: 2;
            // }
            &:nth-child(3) {
              flex: 0.7;
            }
          }
        }
@@ -1546,10 +1560,12 @@
                align-items: center;
                justify-content: center;
                color: #FFFFFF;
                &:first-child {
                  flex: 2;
                &:nth-child(3) {
                  flex: 0.7;
                }
                // &:first-child {
                //   flex: 2;
                // }
              }
            }
          }
screen_standard/src/views/process.vue
@@ -113,7 +113,7 @@
</template>
<script setup>
import { reactive, ref, toRefs, onMounted, onBeforeUnmount, onUnmounted } from 'vue'
import { reactive, ref, toRefs, onMounted, onUnmounted, nextTick } from 'vue'
import { getProcedurePlanData, getTop, getProcedurePlansList, getRecordLogPage, getUnqualified7DayData, getUnqualifiedCateData } from '@/utils/api.js'
import { useCounterStore } from '@/stores/counter.js'
import { useRoute } from 'vue-router'
@@ -122,8 +122,7 @@
const route = useRoute()
const enterprise = useCounterStore()
let mainTimer = ref(null)
let planTimer = ref(null)
let reportTimer = ref(null)
let scrollTimer = ref(null)
let planContainer = ref(null)
let reportLogContainer = ref(null)
const data = reactive({
@@ -140,19 +139,26 @@
    { categoryName: '尺寸不良', unqualifiedNum: 22 },
    { categoryName: '有划痕', unqualifiedNum: 5 },
    { categoryName: '其他', unqualifiedNum: 2 },
  ]
  ],
  planScroll: false,
  reportScroll: false,
})
let { listData, top1, top2, baseNum, allBad, reportListData } = toRefs(data)
// start()
onBeforeUnmount(() => {
  clearTimeout(planTimer.value)
  clearTimeout(reportTimer.value)
  clearTimeout(mainTimer.value)
})
onMounted(() => {
  window.addEventListener('resize', () => {
    console.log('resize');
    nextTick(() => {
      setDayChart()
      setTypeChart()
    })
  })
  initData()
  scrollTimer.value = setInterval(() => {
    ListScroll()
    reportScroll()
  }, 100)
  mainTimer.value = setInterval(() => {
    initData()
  }, 60000)
@@ -160,8 +166,7 @@
onUnmounted(() => {
  clearTimeout(planTimer.value)
  clearTimeout(reportTimer.value)
  clearTimeout(scrollTimer.value)
  clearTimeout(mainTimer.value)
})
@@ -175,7 +180,6 @@
  getTop(enterprise.companyId, enterprise.departId, { procedureId: route.query.procedureId })
    .then(res => {
      if (res.length) {
        data.baseNum = res[0].doneNum
        data.top1 = []
        data.top2 = []
@@ -196,52 +200,46 @@
  getProcedurePlansList(enterprise.companyId, enterprise.departId, { procedureId: route.query.procedureId })
    .then(res => {
      data.listData = res
      start()
      data.planScroll = true
    })
  // æŠ¥å·¥æ—¥å¿—分页查询 
  getRecordLogPage(enterprise.companyId, enterprise.departId, { capacity: 9999, page: 1, model: { procedureId: route.query.procedureId } })
  getRecordLogPage(enterprise.companyId, enterprise.departId, { capacity: 20, page: 1, model: { procedureId: route.query.procedureId } })
    .then(res => {
      data.reportListData = res.records
      reportStart()
      data.reportScroll = true
    })
  getUnqualified7DayData(enterprise.companyId, enterprise.departId, route.query.procedureId)
    .then(res => {
      data.dayDistribution = res
      data.allBad = res.reduce((accumulator, currentValue) => accumulator + currentValue.unqualifiedNum, 0)
      setDayChart()
    })
  getUnqualifiedCateData(enterprise.companyId, enterprise.departId, route.query.procedureId)
    .then(res => {
      data.typeDistribution = res
      data.allBad = res.reduce((accumulator, currentValue) => accumulator + currentValue.unqualifiedNum, 0)
      setTypeChart()
    })
}
// é¼ æ ‡ç§»å…¥
function handleMouseEnter() {
  clearTimeout(planTimer.value)
  data.planScroll = false
}
function handleMouseLeave() {
  start()
  data.planScroll = true
}
// é¼ æ ‡ç§»é™¤
function handleMouseEnterReport() {
  clearTimeout(reportTimer.value)
  data.reportScroll = false
}
function handleMouseLeaveReport() {
  reportStart()
  data.reportScroll = true
}
/**
 * å·¥åºè®¡åˆ’
 * å·¥åºè®¡åˆ’滚动方法
 */
// å¼€å¯å®šæ—¶å™¨
function start() {
  clearTimeout(planTimer.value)
  // å®šæ—¶å™¨è§¦å‘周期
  // let speed = ref(100)
  planTimer.value = setInterval(ListScroll, 100)
}
function ListScroll() {
  if (!data.planScroll) return
  let scrollDom = planContainer.value
  if (!scrollDom) return
  // åˆ¤è¯»ç»„件是否渲染完成
@@ -249,14 +247,14 @@
    scrollDom = planContainer.value
  } else {
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length < 10) {
      clearTimeout(planTimer.value)
    if (scrollDom.children.length < 11) {
      data.planScroll = false
      return
    }
    // ç»„件进行滚动
    scrollDom.scrollTop += 1.5
    scrollDom.scrollTop += 2
    // åˆ¤æ–­æ˜¯å¦æ»šåŠ¨åˆ°åº•éƒ¨
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // èŽ·å–ç»„ä»¶ç¬¬ä¸€ä¸ªèŠ‚ç‚¹
      let first = scrollDom.children[0]
      // åˆ é™¤èŠ‚ç‚¹
@@ -267,15 +265,10 @@
  }
}
/**
 * æŠ¥å·¥æ—¥å¿—
 * æŠ¥å·¥æ—¥å¿—滚动方法
 */
function reportStart() {
  clearTimeout(reportTimer.value)
  // å®šæ—¶å™¨è§¦å‘周期
  // let speed = ref(100)
  reportTimer.value = setInterval(reportScroll, 100)
}
function reportScroll() {
  if (!data.reportScroll) return
  let scrollDom = reportLogContainer.value
  if (!scrollDom) return
  // åˆ¤è¯»ç»„件是否渲染完成
@@ -284,13 +277,13 @@
  } else {
    // å¦‚果列表数量过少不进行滚动
    if (scrollDom.children.length < 10) {
      clearTimeout(reportTimer.value)
      data.reportScroll = false
      return
    }
    // ç»„件进行滚动
    scrollDom.scrollTop += 1.5
    scrollDom.scrollTop += 2
    // åˆ¤æ–­æ˜¯å¦æ»šåŠ¨åˆ°åº•éƒ¨
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight - 2)) {
      // èŽ·å–ç»„ä»¶ç¬¬ä¸€ä¸ªèŠ‚ç‚¹
      let first = scrollDom.children[0]
      // åˆ é™¤èŠ‚ç‚¹
@@ -321,6 +314,10 @@
        color: '#fff',
        fontSize: 12
      }
    },
    grid: {
      top: 40,
      bottom: 40
    },
    xAxis: {
      type: 'category',
@@ -397,6 +394,7 @@
 */
function setTypeChart() {
  let dayChartDom = document.getElementById('type-distribution');
  console.log(dayChartDom);
  let myChart = echarts.init(dayChartDom);
  let legendData = []
  let seriesData = []
@@ -495,13 +493,14 @@
    flex: 1;
    margin-right: 20px;
    .proccess-plan {
      height: 424px;
      height: 464px;
      background: linear-gradient(180deg, rgba(52, 88, 159, 0) 0%, rgba(0, 86, 255, 0.4) 100%);
      margin-bottom: 20px;
    }
    .today-yield {
      height: 222px;
      height: calc(100vh - 725px);
      min-height: 226px;
      background: linear-gradient(180deg, rgba(52, 88, 159, 0) 0%, rgba(0, 86, 255, 0.4) 100%);
      .yield-content {
@@ -601,13 +600,14 @@
    flex: 1;
    .report-log {
      height: 424px;
      height: 464px;
      background: linear-gradient(180deg, rgba(52, 88, 159, 0) 0%, rgba(0, 86, 255, 0.4) 100%);
      margin-bottom: 20px;
    }
    .bad-diagram {
      height: 222px;
      height:calc(100vh - 725px);;
      min-height: 226px;
      background: linear-gradient(180deg, rgba(52, 88, 159, 0) 0%, rgba(0, 86, 255, 0.4) 100%);
      .bad-content {
screen_standard/vite.config.js
@@ -13,7 +13,7 @@
  let env = loadEnv(mode, process.cwd(), '')
  console.log('-------');
  console.log(env.VITE_BASE_PATH);
  console.log(env.VITE_BASE_URL);
  console.log(env.VITE_BASE_PATH.replace(env.VITE_BASE_PATH, ''));
  console.log('-------');
  return {
    base:env.VITE_BASE_CONTEXT,
@@ -50,9 +50,9 @@
          target: env.VITE_BASE_URL, // é€šè¿‡ä»£ç†æŽ¥å£è®¿é—®å®žé™…地址。这里是实际访问的地址。vue会通过代理服务器来代理请求
          changeOrigin: true,
          ws: false,  // å…è®¸websocket代理
          // rewrite: (path) => path.replace(/^[env.VITE_BASE_PATH]/, ''), // å°†api替换为空
          secure: false,
          rewrite: (path) => path.replace(/^\/api/, '')
          rewrite: (path) => path.replace(env.VITE_BASE_PATH, '/'),
          // rewrite: (path) => path.replace(/^\api/, ''), // å°†api替换为空
        },
        /*'/api' : {
          target: env.VITE_BASE_URL, // é€šè¿‡ä»£ç†æŽ¥å£è®¿é—®å®žé™…地址。这里是实际访问的地址。vue会通过代理服务器来代理请求