From 282e032b5771da13d224214d3b0b71f3efde9a42 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 25 八月 2023 18:45:42 +0800
Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/dmMes

---
 h5_standard/src/views/workOrder/reportingForWork.vue                    |    6 
 minipro_standard/manifest.json                                          |    2 
 web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue |    4 
 web_standard/src/components/common/Menu.vue                             |    6 
 h5_standard/src/views/plannedProgress/details.vue                       |   57 +
 web_standard/src/views/ext/deviceExt.vue                                |   19 
 web_standard/coderd.json                                                |    2 
 screen_standard/src/views/index.vue                                     |   71 ++
 screen_standard/vite.config.js                                          |   10 
 web_standard/package.json                                               |    4 
 h5_standard/.env.production                                             |    4 
 h5_standard/src/views/tabPage/my.vue                                    |   16 
 h5_standard/public/redirect.html                                        |    2 
 h5_standard/src/views/workOrder/workOrderReporting.vue                  |    4 
 web_standard/src/components/ext/OperaWInboundExtWindow.vue              |  161 ++---
 h5_standard/src/views/LogInAgain.vue                                    |    2 
 h5_standard/src/views/children.vue                                      |    2 
 platform_web/src/components/business/OperaClientMangerWindow.vue        |    6 
 platform_web/src/views/business/clientManger.vue                        |   11 
 web_standard/src/components/ext/OperaUnitExtWindow.vue                  |   11 
 minipro_standard/main.js                                                |    4 
 minipro_standard/pages/updatePhone/updatePhone.vue                      |  127 ++++
 platform_web/src/views/system/loginLog.vue                              |   55 +
 screen_standard/src/views/process.vue                                   |   18 
 web_standard/src/components/ext/OperaPlansDetailExtWindow.vue           |    2 
 web_standard/src/components/system/role/PermissionConfigWindow.vue      |    2 
 h5_standard/src/utils/request.ts                                        |    5 
 platform_web/package.json                                               |    2 
 minipro_standard/pages/personal/personal.vue                            |   89 +++
 web_standard/.env.development                                           |    4 
 web_standard/src/components/common/Header.vue                           |    4 
 web_standard/src/views/ext/salaryStatistic.vue                          |    1 
 h5_standard/src/views/index.vue                                         |    2 
 h5_standard/src/router/module/index.ts                                  |    9 
 minipro_standard/pages/index/index.vue                                  |   79 -
 web_standard/src/layouts/TableLayout.vue                                |    5 
 h5_standard/src/apis/index.ts                                           |   20 
 minipro_standard/pages.json                                             |  139 +++-
 minipro_standard/pages/updateMailbox/updateMailbox.vue                  |  130 ++++
 web_standard/src/api/business/unqualifiedRecord.js                      |   16 
 web_standard/src/api/ext/workorderRecordPutExt.js                       |   16 
 web_standard/src/api/ext/categoryUnionExt.js                            |    2 
 web_standard/public/template/device_import_template.xlsx                |    0 
 h5_standard/.env                                                        |    2 
 web_standard/src/components/system/user/OperaSystemRoleNone.vue         |    2 
 minipro_standard/App.vue                                                |    1 
 minipro_standard/pages/mine/mine.vue                                    |   35 
 web_standard/src/views/ext/appliancesExt.vue                            |    4 
 web_standard/src/views/business/unqualifiedRecord.vue                   |   98 +++
 h5_standard/src/store/index.ts                                          |    2 
 h5_standard/src/views/appletLogin.vue                                   |  191 ++++++
 h5_standard/src/utils/utils.ts                                          |    2 
 minipro_standard/pages/changePassword/changePassword.vue                |  128 ++++
 web_standard/src/views/ext/workorderPutRecordExt.vue                    |    6 
 platform_web/src/components/business/OperaClientDetailWindow.vue        |   27 
 55 files changed, 1,302 insertions(+), 327 deletions(-)

diff --git a/h5_standard/.env b/h5_standard/.env
index 4e27e94..3a04738 100644
--- a/h5_standard/.env
+++ b/h5_standard/.env
@@ -1,5 +1,5 @@
 # 鎺ュ彛鍓嶇紑  _api
-VUE_APP_API_PREFIX = '/doumeeplant_api'
+VUE_APP_API_PREFIX = '/doumeeplant'
 
 # 涓婁笅鏂囪矾寰� --> 榛樿./锛堝彲浠ラ儴缃插湪鏈嶅姟鍣ㄤ换鎰忚矾寰勶級
 VUE_APP_CONTEXT = './'
diff --git a/h5_standard/.env.production b/h5_standard/.env.production
index af03e19..c874a31 100644
--- a/h5_standard/.env.production
+++ b/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/'
diff --git a/h5_standard/public/redirect.html b/h5_standard/public/redirect.html
index 4da729b..d5db9b2 100644
--- a/h5_standard/public/redirect.html
+++ b/h5_standard/public/redirect.html
@@ -10,10 +10,12 @@
   if (url.indexOf('?code') === -1) {
     let query = url.split('?')[1]
     let tempUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6ea339a336f26380&redirect_url=https://www.mes.red/h5/redirect.html&response_type=code&scope=snsapi_base&state=#wechat_redirect`
+    // let tempUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6ea339a336f26380&redirect_url=https://dmtest.ahapp.net/doumeeplant_h5/redirect.html&response_type=code&scope=snsapi_base&state=#wechat_redirect`
     window.location.replace(tempUrl)
   } else {
     var code = url.substring(url.indexOf('?') + 6, url.indexOf('&'))
     let href1 = `https://www.mes.red/h5/#/wxLogin?code=${code}`
+    // let href1 = `https://dmtest.ahapp.net/doumeeplant_h5/#/wxLogin?code=${code}`
     window.location.replace(href1)
   }
 </script>
diff --git a/h5_standard/src/apis/index.ts b/h5_standard/src/apis/index.ts
index 9a34f2b..90d69b7 100644
--- a/h5_standard/src/apis/index.ts
+++ b/h5_standard/src/apis/index.ts
@@ -20,7 +20,16 @@
     })
 }
 
-// 寰俊绔櫥褰�
+// 寰俊灏忕▼搴忕櫥褰�
+export function wxProgramLogin(params: any): Promise<any> {
+    return httpRequest({
+        url: '/system/wxProgramLogin',
+        method: 'get',
+        params
+    })
+}
+
+// 寰俊鍏紬鍙风櫥褰�
 export function wxAccountLogin(data: any): Promise<any> {
     return httpRequest({
         url: '/system/wxAccountLogin',
@@ -29,6 +38,15 @@
     })
 }
 
+// 寰俊閫�鍑虹櫥褰�
+export function wxLoginOut(data: any): Promise<any> {
+    return httpRequest({
+        url: '/system/wxLoginOut',
+        method: 'post',
+        data
+    })
+}
+
 // 鑾峰彇浼佷笟id
 export function getDingdingCorpId(companyId: any): Promise<any> {
     return httpRequest({
diff --git a/h5_standard/src/router/module/index.ts b/h5_standard/src/router/module/index.ts
index 9c09218..af41af7 100644
--- a/h5_standard/src/router/module/index.ts
+++ b/h5_standard/src/router/module/index.ts
@@ -104,6 +104,15 @@
             keepAlive: false
         },
         component: () => import('@/views/wxLogin.vue')
+    },
+    {
+        path: '/appletLogin',
+        name: 'appletLogin',
+        meta: {
+            title: 'DM浜戝伐鍘�',
+            keepAlive: false
+        },
+        component: () => import('@/views/appletLogin.vue')
     }
 ]
 
diff --git a/h5_standard/src/store/index.ts b/h5_standard/src/store/index.ts
index 8842991..eac1058 100644
--- a/h5_standard/src/store/index.ts
+++ b/h5_standard/src/store/index.ts
@@ -10,7 +10,7 @@
 
 export default createStore({
   state: {
-    // 椤圭洰鍏ュ彛鐜 DD / H5
+    // 椤圭洰鍏ュ彛鐜 DD / H5 / WX / XCX
     env: env ? env : null,
 
     // 鏄惁闇�瑕侀�傞厤鑻规灉搴曢儴瀹夊叏璺濈
diff --git a/h5_standard/src/utils/request.ts b/h5_standard/src/utils/request.ts
index 733c77b..06d7b67 100644
--- a/h5_standard/src/utils/request.ts
+++ b/h5_standard/src/utils/request.ts
@@ -29,10 +29,9 @@
 // 娣诲姞鍝嶅簲鎷︽埅鍣�
 service.interceptors.response.use(
     (response) => {
-
-        if (response.config.url?.indexOf('/lingyang/login') == -1 && response.config.url?.indexOf('/edgp/loginDemo') == -1 && response.config.url?.indexOf('/lingyang/loginDemo') == -1 && response.config.url?.indexOf('/edgp/login') == -1) {
+        // if (response.config.url?.indexOf('/lingyang/login') == -1 && response.config.url?.indexOf('/edgp/loginDemo') == -1 && response.config.url?.indexOf('/lingyang/loginDemo') == -1 && response.config.url?.indexOf('/edgp/login') == -1) {
             loading.clear();
-        }
+        // }
         if (response.data.code === 401) {     // 澶勭悊鐧诲綍杩囨湡
             Toast.fail({ message: '鐧诲綍杩囨湡锛屽噯澶囪嚜鍔ㄩ噸鏂扮櫥褰�', duration: 2000, forbidClick: true })
             setTimeout(() => {
diff --git a/h5_standard/src/utils/utils.ts b/h5_standard/src/utils/utils.ts
index d04a906..aebc40d 100644
--- a/h5_standard/src/utils/utils.ts
+++ b/h5_standard/src/utils/utils.ts
@@ -199,7 +199,7 @@
 function judgmentPlatform (): boolean {
     // alert(store.state.env)
     // alert(store.state.env !== 'DD')
-    return store.state.env === 'DD'
+    return store.state.env === 'DD' || store.state.env === 'WX';
     // return dd.env.platform !== 'notInDingTalk';
 }
 
diff --git a/h5_standard/src/views/LogInAgain.vue b/h5_standard/src/views/LogInAgain.vue
index 8ccb876..b7856d0 100644
--- a/h5_standard/src/views/LogInAgain.vue
+++ b/h5_standard/src/views/LogInAgain.vue
@@ -94,7 +94,7 @@
       let res = await testLogin({ // 鏂囨
         username: '18656077929',
         password: '123456',
-        companyId: '8',
+        companyId: '111',
         uuid: '0000',
         code: '0000'
       })
diff --git a/h5_standard/src/views/appletLogin.vue b/h5_standard/src/views/appletLogin.vue
new file mode 100644
index 0000000..e77dd96
--- /dev/null
+++ b/h5_standard/src/views/appletLogin.vue
@@ -0,0 +1,191 @@
+<template>
+    <div class="wx">
+        <img class="wx_bg" src="@/assets/background/login_bg@2x.png" alt="" />
+        <div class="wx_login">
+            <img class="wx_login_icon" src="@/assets/icon/logo@2x.png" alt="" />
+            <span>DM浜戝伐鍘�</span>
+            <div class="wx_login_list">
+                <div class="wx_login_list_item">
+                    <img src="@/assets/icon/login_ic_code@2x.png" alt="" />
+                    <input type="text" v-model="from.companyId" placeholder="浼佷笟浠g爜" />
+                </div>
+                <div class="wx_login_list_item">
+                    <img src="@/assets/icon/login_ic_phone@2x.png" alt="" />
+                    <input type="text" maxlength="11" v-model="from.username" placeholder="鎵嬫満鍙�" />
+                </div>
+                <div class="wx_login_list_item">
+                    <img src="@/assets/icon/login_ic_password@2x.png" alt="" />
+                    <input type="password" v-model="from.password" placeholder="瀵嗙爜" />
+                </div>
+            </div>
+            <div class="wx_login_footer">
+                <div class="wx_login_footer_btn" @click="login">绔嬪嵆鐧诲綍</div>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script setup lang="ts">
+import { onMounted, reactive } from 'vue';
+import { useRoute, useRouter } from 'vue-router';
+import { useStore } from 'vuex';
+import { wxAccountLogin, getUserInfo, wxProgramLogin } from '@/apis/index';
+import { Toast } from 'vant';
+
+const route = useRoute()
+const router = useRouter()
+const store = useStore()
+
+let from: any = reactive({
+    openid: '',
+    unionid: '',
+    companyId: '',
+    username: '',
+    password: ''
+})
+
+const login = async () => {
+    // if (!from.openid) return Toast('openid涓嶈兘涓虹┖')
+    // if (!from.unionid) return Toast('unionid涓嶈兘涓虹┖')
+    if (!from.companyId) return Toast('浼佷笟浠g爜涓嶈兘涓虹┖')
+    if (!from.username) return Toast('鎵嬫満鍙蜂笉鑳戒负绌�')
+    if (!from.password) return Toast('瀵嗙爜涓嶈兘涓虹┖')
+    Toast.loading({
+        message: '鐧诲綍涓�...',
+        forbidClick: true
+    });
+    let res = await wxAccountLogin(from)
+    if (res.code === 200) {
+        let info = await getUserInfo()
+        if (info.code === 200) {
+            await store.commit('setEntrance', 'XCX')
+            await store.commit('setUserInfo', info.data)
+            await store.dispatch('getMenuList', 2)
+            await router.replace('/workbench')
+        }
+    }
+    Toast.clear();
+}
+
+onMounted(() => {
+    wxProgramLogin({ code: route.query.code })
+        .then(async (res) => {
+            if (res.code === 200) {
+                // 鍏嶇櫥褰曪紝鐩存帴璺抽椤�
+                if (res.data.loginStatus == 0) {
+                    let info = await getUserInfo()
+                    if (info.code === 200) {
+                        await store.commit('setEntrance', 'XCX')
+                        await store.commit('setUserInfo', info.data)
+                        await store.dispatch('getMenuList', 2)
+                        await router.replace('/workbench')
+                    }
+                } else {
+                    from.openid = res.data.openid
+                    from.unionid = res.data.unionid
+                }
+            }
+        })
+})
+</script>
+
+<style lang="scss" scoped>
+    .wx {
+        width: 100vw;
+        height: 100vh;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        background: #FFFFFF linear-gradient(180deg, rgba(66,117,252,0.2) 0%, rgba(66,117,252,0) 100%);
+        .wx_bg {
+            width: 100vw;
+            height: 812px;
+            position: fixed;
+            top: 0;
+            left: 0;
+        }
+        .wx_login {
+            width: 100vw;
+            height: auto;
+            display: flex;
+            align-items: center;
+            justify-content: center;
+            flex-direction: column;
+            .wx_login_icon {
+                width: 180px;
+                height: 180px;
+            }
+            span {
+                font-size: 44px;
+                font-family: PingFangSC-Semibold, PingFang SC;
+                font-weight: 600;
+                color: #333333;
+                margin-top: 40px;
+            }
+            .wx_login_list {
+                width: 100vw;
+                padding: 0 60px;
+                box-sizing: border-box;
+                margin-top: 80px;
+                position: relative;
+                z-index: 9;
+                .wx_login_list_item {
+                    width: 100%;
+                    height: 98px;
+                    background: #FFFFFF;
+                    border-radius: 8px;
+                    padding: 0 40px;
+                    box-sizing: border-box;
+                    display: flex;
+                    align-items: center;
+                    margin-bottom: 40px;
+                    &:last-child {
+                        margin-bottom: 0 !important;
+                    }
+                    img {
+                        width: 40px;
+                        height: 40px;
+                        flex-shrink: 0;
+                        margin-right: 24px;
+                    }
+                    input::-webkit-input-placeholder {
+                        font-size: 30px;
+                        font-family: PingFangSC-Regular, PingFang SC;
+                        font-weight: 400;
+                        color: #B7BBC5;
+                    }
+                    input {
+                        flex: 1;
+                        height: 100%;
+                        padding: 0 !important;
+                        font-size: 30px;
+                        font-family: PingFangSC-Regular, PingFang SC;
+                        font-weight: 400;
+                        color: #222222;
+                        border: none;
+                        outline: none;
+                    }
+                }
+            }
+            .wx_login_footer {
+                width: 100vw;
+                padding: 0 60px;
+                box-sizing: border-box;
+                margin-top: 80px;
+                .wx_login_footer_btn {
+                    width: 100%;
+                    height: 98px;
+                    line-height: 98px;
+                    text-align: center;
+                    background: #4275FC;
+                    box-shadow: 0px 12px 24px 0px rgba(66,117,252,0.2);
+                    border-radius: 8px;
+                    font-size: 32px;
+                    font-family: PingFangSC-Medium, PingFang SC;
+                    font-weight: 500;
+                    color: #FFFFFF;
+                }
+            }
+        }
+    }
+</style>
\ No newline at end of file
diff --git a/h5_standard/src/views/children.vue b/h5_standard/src/views/children.vue
index adfe02d..bd66219 100644
--- a/h5_standard/src/views/children.vue
+++ b/h5_standard/src/views/children.vue
@@ -1,7 +1,7 @@
 <template>
     <div class="box">
         <!--    澶撮儴瀵艰埅    -->
-        <template v-if="env == 'H5'">
+        <template v-if="env == 'H5' || env == 'XCX'">
             <v-Header :pathList="pathLists">
                 <template v-slot:title>{{title}}</template>
             </v-Header>
diff --git a/h5_standard/src/views/index.vue b/h5_standard/src/views/index.vue
index 55141cd..1a9e4f8 100644
--- a/h5_standard/src/views/index.vue
+++ b/h5_standard/src/views/index.vue
@@ -1,7 +1,7 @@
 <template>
     <div class="index">
         <!--    澶撮儴瀵艰埅    -->
-        <template v-if="env == 'H5'">
+        <template v-if="env == 'H5' || env == 'XCX'">
             <v-Header :pathList="pathLists">
                 <template v-slot:title>{{ title }}</template>
             </v-Header>
diff --git a/h5_standard/src/views/plannedProgress/details.vue b/h5_standard/src/views/plannedProgress/details.vue
index 29d7c25..e4d9b0a 100644
--- a/h5_standard/src/views/plannedProgress/details.vue
+++ b/h5_standard/src/views/plannedProgress/details.vue
@@ -53,7 +53,7 @@
                     </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 class="content_list_item_content_item_nr" v-if="info.umodel">{{info.distributNum}}{{info.umodel.name}}</div>
                     </div>
                     <div class="content_list_item_content_item">
                         <div class="content_list_item_content_item_label">瀹屽伐鏁伴噺锛�</div>
@@ -64,20 +64,22 @@
         </div>
         <NotFound info="鏆傛湭鍒嗛厤宸ュ崟" v-if="info.workorderList && info.workorderList.length === 0" />
         <template v-else>
-            <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">
+                <div class="details_list_item" v-for="(item, i) in info.workorderList" :key="i" @click="jump(item)">
                     <div class="details_list_item_top">
-                        <span>{{ item.createUserName }}</span><span>{{ item.code }}</span>
+                        <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>
+                        <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> -->
+            <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>
@@ -89,10 +91,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>
@@ -153,8 +155,10 @@
                         </div>
                     </div>
                 </div>
-            </div> -->
+            </div>
         </template>
+        <!-- <div class="details_zw"></div> -->
+        <!-- <div class="details_btn" @click="toJump">鍘绘姤宸�</div> -->
     </div>
 </template>
 
@@ -182,8 +186,17 @@
             })
     }
 
-    const jump = (id: any) => {
-        router.push({ name: 'workOrderReporting', query: { id } })
+    const toJump = () => {
+        router.push({ name: 'reportingForWork' })
+    }
+
+    const jump = (item: any) => {
+        if (item.status === 4 || item.status === 6 || item.paused === 1) {
+            router.push({ name: 'afterWorkReport', query: { id: item.id } })
+        } else {
+            router.push({ name: 'workOrderReporting', query: { id: item.id } })
+        }
+        // router.push({ name: 'workOrderReporting', query: { id } })
     }
 
     const proUserStr = (item: any) => {
@@ -210,6 +223,26 @@
     height: 100%;
     position: absolute;
     background: #F7F7F7;
+    .details_zw {
+        width: 100%;
+        height: 148px;
+    }
+    .details_btn {
+        position: fixed;
+        bottom: 60px;
+        left: 30px;
+        width: calc(100% - 60px);
+        height: 88px;
+        line-height: 88px;
+        text-align: center;
+        background: #305ED5;
+        box-shadow: 0px 0px 12px 0px rgba(0,0,0,0.08);
+        border-radius: 8px;
+        font-size: 30px;
+        font-family: PingFangSC-Medium, PingFang SC;
+        font-weight: 500;
+        color: #FFFFFF;
+    }
     .van-skeleton {
         padding: 0 !important;
     }
diff --git a/h5_standard/src/views/tabPage/my.vue b/h5_standard/src/views/tabPage/my.vue
index 1bd4eb8..5df450e 100644
--- a/h5_standard/src/views/tabPage/my.vue
+++ b/h5_standard/src/views/tabPage/my.vue
@@ -21,7 +21,7 @@
                 </div>
             </div>
         </div>
-<!--        <div class="box_out"><span>閫�鍑虹櫥褰�</span></div>-->
+        <div class="box_out" v-if="store.state.env && (store.state.env == 'WX' || store.state.env == 'XCX')" @click="loginOut"><span>閫�鍑虹櫥褰�</span></div>
     </div>
     <van-popup v-model:show="show" position="bottom" round :style="{ height: '50%' }">
         <van-picker
@@ -40,6 +40,7 @@
     import { Dialog, Toast } from 'vant'
     const VanDialog = Dialog.Component;
     import { changeCom, getDepartmentListByConditon } from '@/apis/PersonalAPI'
+    import { wxLoginOut } from '@/apis'
 
     const router = useRouter()
 
@@ -69,6 +70,19 @@
         })
     };
 
+    // 閫�鍑虹櫥褰�
+    const loginOut = () => {
+        wxLoginOut({
+            companyUserId: store.state.userInfo.companyUser.id
+        }).then(res => {
+            if (res.code === 200) {
+                // window.parent.postMessage('闃垮悍', '*')
+                let href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx6ea339a336f26380&redirect_url=https://www.mes.red/h5/redirect.html&response_type=code&scope=snsapi_base&state=#wechat_redirect'
+                window.open(href)
+            }
+        })
+    }
+
     // 鍏抽棴缁勭粐寮规
     const onCancel = (): void => {
         show.value = false
diff --git a/h5_standard/src/views/workOrder/reportingForWork.vue b/h5_standard/src/views/workOrder/reportingForWork.vue
index 241b071..ccaceec 100644
--- a/h5_standard/src/views/workOrder/reportingForWork.vue
+++ b/h5_standard/src/views/workOrder/reportingForWork.vue
@@ -392,6 +392,12 @@
         if (!from.qualified && !from.undesirable) {
             return Toast('鑹搧鏁颁笌涓嶈壇鏁颁笉鑳藉悓鏃朵负绌�')
         }
+        if (from.qualified && from.qualified <= 0) {
+            return Toast('鑹搧鏁板繀椤诲ぇ浜�0')
+        }
+        if (from.undesirable && from.undesirable <= 0) {
+            return Toast('涓嶈壇鍝佹暟蹇呴』澶т簬0')
+        }
         // if (!from.qualified) return Toast('鑹搧鏁颁笉鑳戒负绌�')
         // 鏈変笉鑹暟
         if (from.undesirable > 0) {
diff --git a/h5_standard/src/views/workOrder/workOrderReporting.vue b/h5_standard/src/views/workOrder/workOrderReporting.vue
index b24be91..689f086 100644
--- a/h5_standard/src/views/workOrder/workOrderReporting.vue
+++ b/h5_standard/src/views/workOrder/workOrderReporting.vue
@@ -962,7 +962,7 @@
         if (info.value.bomType === 1) {  // 鎷夊紡
             console.log('鎷夊紡')
             statisticsData.value = []
-            if (produceFrom.qualified <= 0) {
+            if (produceFrom.qualified <= 0 && produceFrom.undesirable <= 0) {
                 Toast.fail({ message: '浜у嚭鏄庣粏涓嶈兘涓虹┖' })
                 return
             }
@@ -1121,7 +1121,7 @@
                 Toast.fail({ message: '鎶曟枡鏄庣粏涓嶈兘涓虹┖' })
                 return
             }
-            if (produceFrom.qualified <= 0) {
+            if (produceFrom.qualified <= 0 && produceFrom.undesirable <= 0) {
                 Toast.fail({ message: '浜у嚭鏄庣粏涓嶈兘涓虹┖' })
                 return
             }
diff --git a/minipro_standard/App.vue b/minipro_standard/App.vue
index d1aed6d..d52fd35 100644
--- a/minipro_standard/App.vue
+++ b/minipro_standard/App.vue
@@ -1,5 +1,4 @@
 <script>
-	console.log('app------');
 	// import { pageCount } from '@/util/api/index.js'
 	export default {
 		onLaunch: function() {
diff --git a/minipro_standard/main.js b/minipro_standard/main.js
index a8ee7ad..4686581 100644
--- a/minipro_standard/main.js
+++ b/minipro_standard/main.js
@@ -10,7 +10,7 @@
 store.dispatch('getHeight')
 Vue.config.productionTip = false
 App.mpType = 'app'
-console.log(uni.$u);
+// console.log(uni.$u);
 // #ifdef MP
 // 寮曞叆uView瀵瑰皬绋嬪簭鍒嗕韩鐨刴ixin灏佽
 const mpShare = require('@/uni_modules/uview-ui/libs/mixin/mpShare.js')
@@ -24,6 +24,6 @@
 })
 require('./util/request/index')(app)
 // 鑾峰彇寰呭姙鏁伴噺
-store.dispatch('getUpcomingNum')
+// store.dispatch('getUpcomingNum')
 
 app.$mount()
\ No newline at end of file
diff --git a/minipro_standard/manifest.json b/minipro_standard/manifest.json
index a25c0b8..0bc644d 100644
--- a/minipro_standard/manifest.json
+++ b/minipro_standard/manifest.json
@@ -50,7 +50,7 @@
     "quickapp" : {},
     /* 灏忕▼搴忕壒鏈夌浉鍏� */
     "mp-weixin" : {
-        "appid" : "wxcd2b89fd2ff065f8",
+        "appid" : "wx1605a61f7a48cea6",
         "setting" : {
             "urlCheck" : false,
             "es6" : true,
diff --git a/minipro_standard/pages.json b/minipro_standard/pages.json
index cb37cc6..b77d9e9 100644
--- a/minipro_standard/pages.json
+++ b/minipro_standard/pages.json
@@ -1,65 +1,104 @@
 {
 	"pages": [
-		{
-			"path": "pages/workbench/workbench",
-			"style": {
-				"navigationBarTitleText": "宸ヤ綔鍙�",
-				"enablePullDownRefresh": false
-			}
-		},
+		// {
+		// 	"path": "pages/workbench/workbench",
+		// 	"style": {
+		// 		"navigationBarTitleText": "宸ヤ綔鍙�",
+		// 		"enablePullDownRefresh": false
+		// 	}
+		// },
 		{
 			"path": "pages/index/index",
 			"style": {
-				"navigationBarTitleText": "寰呭姙"
-			}
-		},  {
-			"path": "pages/mine/mine",
-			"style": {
-				"navigationBarTitleText": "鎴戠殑",
-				"enablePullDownRefresh": false
+				"navigationBarTitleText": "",
+				"navigationStyle": "custom"
 			}
 		}
-	    ,{
-            "path" : "pages/login/login",
-            "style" :                                                                                    
-            {
-                "navigationBarTitleText": "鐧诲綍",
-                "enablePullDownRefresh": false,
-				"navigationStyle": "custom"
-            }
-        }
+		// ,  {
+		// 	"path": "pages/mine/mine",
+		// 	"style": {
+		// 		"navigationBarTitleText": "鎴戠殑",
+		// 		"enablePullDownRefresh": false
+		// 	}
+		// }
+	 //    ,{
+  //           "path" : "pages/login/login",
+  //           "style" :                                                                                    
+  //           {
+  //               "navigationBarTitleText": "鐧诲綍",
+  //               "enablePullDownRefresh": false,
+		// 		"navigationStyle": "custom"
+  //           }
+  //       }
+  //       ,{
+  //           "path" : "pages/personal/personal",
+  //           "style" :                                                                                    
+  //           {
+  //               "navigationBarTitleText": "涓汉淇℃伅",
+  //               "enablePullDownRefresh": false
+  //           }
+            
+  //       }
+  //       ,{
+  //           "path" : "pages/changePassword/changePassword",
+  //           "style" :                                                                                    
+  //           {
+  //               "navigationBarTitleText": "淇敼瀵嗙爜",
+  //               "enablePullDownRefresh": false
+  //           }
+            
+  //       }
+  //       ,{
+  //           "path" : "pages/updatePhone/updatePhone",
+  //           "style" :                                                                                    
+  //           {
+  //               "navigationBarTitleText": "鏇存柊鎵嬫満鍙�",
+  //               "enablePullDownRefresh": false
+  //           }
+            
+  //       }
+  //       ,{
+  //           "path" : "pages/updateMailbox/updateMailbox",
+  //           "style" :                                                                                    
+  //           {
+  //               "navigationBarTitleText": "鏇存柊閭鍙�",
+  //               "enablePullDownRefresh": false
+  //           }
+            
+  //       }
     ],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
 		"navigationBarTitleText": "uni-app",
 		"navigationBarBackgroundColor": "#ffffff",
-		"backgroundColor": "#ffffff"
+		"backgroundColor": "#ffffff",
+		"navigationStyle": "custom"
 	},
-	"tabBar": {
-		"color": "#666666",
-		"selectedColor": "#222222",
-		"borderStyle": "black",
-		"backgroundColor": "#fff",
-		"list": [
-			{
-				"pagePath": "pages/index/index",
-				"iconPath": "static/nav_daiban@2x.png",
-				"selectedIconPath": "static/nav_daiban_sel@2x.png",
-				"text": "寰呭姙"
-			},
-			{
-				"pagePath": "pages/workbench/workbench",
-				"iconPath": "static/nav_gongzuotai@2x.png",
-				"selectedIconPath": "static/nav_gongzuotai_sel@2x.png",
-				"text": "宸ヤ綔鍙�"
-			},
-			{
-				"pagePath": "pages/mine/mine",
-				"iconPath": "static/nav_wode@2x.png",
-				"selectedIconPath": "static/nav_wode_sel@2x.png",
-				"text": "鎴戠殑"
-			}
-		]
-	},
+	// "tabBar": {
+	// 	"color": "#666666",
+	// 	"selectedColor": "#222222",
+	// 	"borderStyle": "black",
+	// 	"backgroundColor": "#fff",
+	// 	"list": [
+	// 		{
+	// 			"pagePath": "pages/index/index",
+	// 			"iconPath": "static/nav_daiban@2x.png",
+	// 			"selectedIconPath": "static/nav_daiban_sel@2x.png",
+	// 			"text": "寰呭姙"
+	// 		},
+	// 		{
+	// 			"pagePath": "pages/workbench/workbench",
+	// 			"iconPath": "static/nav_gongzuotai@2x.png",
+	// 			"selectedIconPath": "static/nav_gongzuotai_sel@2x.png",
+	// 			"text": "宸ヤ綔鍙�"
+	// 		},
+	// 		{
+	// 			"pagePath": "pages/mine/mine",
+	// 			"iconPath": "static/nav_wode@2x.png",
+	// 			"selectedIconPath": "static/nav_wode_sel@2x.png",
+	// 			"text": "鎴戠殑"
+	// 		}
+	// 	]
+	// },
 	"uniIdRouter": {}
 }
diff --git a/minipro_standard/pages/changePassword/changePassword.vue b/minipro_standard/pages/changePassword/changePassword.vue
new file mode 100644
index 0000000..a975dd8
--- /dev/null
+++ b/minipro_standard/pages/changePassword/changePassword.vue
@@ -0,0 +1,128 @@
+<template>
+	<view class="password">
+		<view class="password_tip">
+			<image src="@/static/password_ic_tip@2x.png" alt="" />
+			<text>瀵嗙爜鐢�6-20涓嫳鏂囧瓧姣嶃�佹暟瀛楁垨绗﹀彿缁勬垚</text>
+		</view>
+		<view class="password_list">
+			<view class="password_list_item">
+				<text>鍘熷瘑鐮�</text>
+				<view class="password_list_item_box">
+					<input type="password" v-model="form.originalPassword" maxlength="20" placeholder="璇疯緭鍏ュ師瀵嗙爜">
+				</view>
+			</view>
+			<view class="password_list_item">
+				<text>鏂板瘑鐮�</text>
+				<view class="password_list_item_box">
+					<input type="password" v-model="form.newPassword" maxlength="20" placeholder="璇疯緭鍏ユ柊瀵嗙爜">
+				</view>
+			</view>
+			<view class="password_list_item">
+				<text>纭瀵嗙爜</text>
+				<view class="password_list_item_box">
+					<input type="password" v-model="form.confirmPassword" maxlength="20" placeholder="鍐嶆杈撳叆鏂板瘑鐮�">
+				</view>
+			</view>
+		</view>
+		<view class="password_footer">
+			<button v-preventReClick class="password_footer_submit">
+				<text>瀹屾垚</text>
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				form: {
+					originalPassword: '',
+					newPassword: '',
+					confirmPassword: ''
+				}
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.password {
+	    position: absolute;
+	    width: 100%;
+	    height: 100%;
+	    background: white;
+	    .password_tip {
+	        height: 72rpx;
+	        display: flex;
+	        align-items: center;
+	        background: #F7F7F7;
+	        padding: 0 30rpx;
+	        image {
+	            width: 24rpx;
+	            height: 24rpx;
+	            margin-right: 10rpx;
+	        }
+	        text {
+	            font-size: 24rpx;
+	            font-weight: 400;
+	            color: #666666;
+	        }
+	    }
+	    .password_list {
+	        padding: 0 30rpx;
+	        .password_list_item {
+	            display: flex;
+	            align-items: center;
+	            height: 90rpx;
+	            border-bottom: 1rpx solid #E5E5E5;
+	            text {
+	                width: 150rpx;
+	                flex-shrink: 0;
+	                font-size: 30rpx;
+	                font-weight: 400;
+	                color: #222222;
+	            }
+	            .password_list_item_box {
+	                display: flex;
+	                justify-content: space-between;
+	                flex: 1;
+	                input {
+	                    border: none;
+	                    font-size: 30rpx;
+	                }
+	                input::-webkit-input-placeholder {
+	                    font-size: 28rpx;
+	                    font-weight: 400;
+	                    color: #B2B2B2;
+	                }
+	                p {
+	                    font-size: 26rpx;
+	                    font-weight: 400;
+	                    color: #4275FC;
+	                }
+	            }
+	        }
+	    }
+	    .password_footer {
+	        margin-top: 80rpx;
+	        padding: 0 30rpx;
+	        .password_footer_submit {
+	            width: 100%;
+	            height: 88rpx;
+	            border: none;
+	            background: #4275FC;
+	            box-shadow: 0 0 12rpx 0 rgba(0, 0, 0, 0.08);
+	            border-radius: 8rpx;
+	            display: flex;
+	            align-items: center;
+	            justify-content: center;
+	            text {
+	                font-size: 30rpx;
+	                font-weight: 500;
+	                color: #FFFFFF;
+	            }
+	        }
+	    }
+	}
+</style>
diff --git a/minipro_standard/pages/index/index.vue b/minipro_standard/pages/index/index.vue
index c6d7304..74356de 100644
--- a/minipro_standard/pages/index/index.vue
+++ b/minipro_standard/pages/index/index.vue
@@ -1,73 +1,44 @@
 <template>
-	<view>
-		<myTabbar :index="0" />
+	<view class="index">
+		<web-view v-if="show" @onPostMessage="onMessage" :src="'https://dmtest.ahapp.net/doumeeplant_h5/#/appletLogin?code=' + code"></web-view>
+		<!-- <myTabbar :index="0" /> -->
 	</view>
 </template>
 
 <script>
-	import myTabbar from "@/components/myTabber.vue"
+	// import myTabbar from "@/components/myTabber.vue"	
 	export default {
-		components: {
-			myTabbar
-		},
+		// components: {
+		// 	myTabbar
+		// },
 		data() {
 			return {
-				form: {
-					account: '',
-					password: '',
-				},
-				logining: false,
-				openId: ''
+				code: '',
+				show: false
 			}
 		},
 		onLoad() {
-			// uni.login({
-			// 	success: data => {
-			// 		this.wxLogin(data.code)
-			// 	},
-			// 	fail: err => {
-			// 		uni.$u.toast(err)
-			// 	}
-			// })
+			var that = this
+			uni.login({
+				provider: 'weixin',
+				success: function (loginRes) {
+					// console.log(loginRes);
+					that.code = loginRes.code
+					that.show = true
+				}
+			});
 		},
 		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)
-			// 		})
-			// }
+			onMessage(e) {
+				console.log('12345654321')
+			}
 		}
 	}
 </script>
 
 <style lang="scss" scoped>
-	
+	.index {
+		width: 100vw;
+		height: 100vh;
+	}
 </style>
diff --git a/minipro_standard/pages/mine/mine.vue b/minipro_standard/pages/mine/mine.vue
index 081c8eb..18f9c4f 100644
--- a/minipro_standard/pages/mine/mine.vue
+++ b/minipro_standard/pages/mine/mine.vue
@@ -5,14 +5,14 @@
 			<image src="@/static/2@2x.png" mode="widthFix" />
 			<div class="box_info_box">
 				<text>寮犱笁</text>
-				<div class="box_info_box_x">
+				<div class="box_info_box_x" @click="show = true">
 					<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" v-for="(item, index) in MENU" :key="index" @click="jump(item.url)">
 				<div class="box_function_item_left">
 					<image :src="item.icon" alt="" />
 					<text>{{item.name}}</text>
@@ -24,6 +24,8 @@
 		</div>
 		<div class="box_out"><text>閫�鍑虹櫥褰�</text></div>
 	</div>
+	<!-- 閮ㄩ棬閫夋嫨鍣� -->
+	<u-picker :show="show" :columns="columns" @confirm="confirm"></u-picker>
 	<myTabbar :index="2" />
 </view>
 </template>
@@ -37,28 +39,31 @@
 		data() {
 			return {
 				MENU: [
-					{ name: '涓汉淇℃伅', url: '/personal/personalInformation', icon: require('@/static/mine_ic_gerenxinxi@2x.png') },
+					{ name: '涓汉淇℃伅', url: '/pages/personal/personal', 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: '/pages/updatePhone/updatePhone', icon: require('@/static/mine_ic_shoujihao@2x.png') },
+					{ name: '鏇存柊閭鍙�', url: '/pages/updateMailbox/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') },
+					{ name: '淇敼瀵嗙爜', url: '/pages/changePassword/changePassword', icon: require('@/static/mine_ic_xiugaimima@2x.png') },
 				],
-				img: require('@/static/mine_bg@2x.png')
+				img: require('@/static/mine_bg@2x.png'),
+				show: false,
+				columns: [
+					['涓浗', '缇庡浗', '鏃ユ湰']
+				]
 			}
 		},
 		onLoad() {
 			uni.hideTabBar()
-			// uni.login({
-			// 	success: data => {
-			// 		this.wxLogin(data.code)
-			// 	},
-			// 	fail: err => {
-			// 		uni.$u.toast(err)
-			// 	}
-			// })
 		},
 		methods: {
+			jump(url) {
+				uni.navigateTo({ url })
+			},
+			confirm(val) {
+				console.log(val)
+				this.show = false
+			}
 		}
 	}
 </script>
diff --git a/minipro_standard/pages/personal/personal.vue b/minipro_standard/pages/personal/personal.vue
new file mode 100644
index 0000000..22f5c25
--- /dev/null
+++ b/minipro_standard/pages/personal/personal.vue
@@ -0,0 +1,89 @@
+<template>
+	<view class="info">
+		<view class="info_portrait">
+			<image src="@/static/2@2x.png" mode="widthFix" />
+			<text>鐢ㄦ埛鍚�</text>
+		</view>
+		<view class="info_list">
+			<view class="info_list_item">
+				<text>鏄电О</text>
+				<text>鏆傛棤鏄电О</text>
+			</view>
+			<view class="info_list_item">
+				<text>鎵嬫満鍙�</text>
+				<text>鏆傛棤鎵嬫満鍙�</text>
+			</view>
+			<view class="info_list_item">
+				<text>鎵�灞為儴闂�</text>
+				<text>鏆傛棤鎵�灞為儴闂�</text>
+			</view>
+			<view class="info_list_item">
+				<text>宀椾綅</text>
+				<text>鏆傛棤宀椾綅</text>
+			</view>
+			<view class="info_list_item">
+				<text>褰撳墠缁勭粐</text>
+				<text>鏆傛棤缁勭粐</text>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.info {
+    padding: 30rpx;
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    box-sizing: border-box;
+    background: white;
+    .info_portrait {
+        display: flex;
+        align-items: center;
+        flex-direction: column;
+        margin-top: 60rpx;
+        image {
+            width: 140rpx;
+            height: 140rpx;
+            margin-bottom: 30rpx;
+        }
+        text {
+            font-size: 30rpx;
+            font-weight: 400;
+            color: #222222;
+        }
+    }
+    .info_list {
+        margin-top: 30rpx;
+        .info_list_item {
+            height: 98rpx;
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            border-bottom: 1rpx solid #E5E5E5;
+            text {
+                &:first-child {
+                    font-size: 30rpx;
+                    font-weight: 400;
+                    color: #777777;
+                }
+                &:last-child {
+                    font-size: 28rpx;
+                    font-weight: 400;
+                    color: #222222;
+                }
+            }
+        }
+    }
+}
+</style>
diff --git a/minipro_standard/pages/updateMailbox/updateMailbox.vue b/minipro_standard/pages/updateMailbox/updateMailbox.vue
new file mode 100644
index 0000000..5af8c3f
--- /dev/null
+++ b/minipro_standard/pages/updateMailbox/updateMailbox.vue
@@ -0,0 +1,130 @@
+<template>
+	<view class="password">
+		<view class="password_tip">
+			<image src="@/static/password_ic_tip@2x.png" mode="widthFix" />
+			<text>缁戝畾閭鍙峰彲浠ユ洿濂藉湴淇濇姢鎮ㄧ殑璐︽埛瀹夊叏锛屼繚鎶や釜浜轰俊鎭笉琚镜瀹炽��</text>
+		</view>
+		<view class="password_list">
+			<view class="password_list_item">
+				<text>褰撳墠缁戝畾</text>
+				<view class="password_list_item_box">
+					<input type="text" disabled v-model="form.currentMailbox" />
+				</view>
+			</view>
+			<view class="password_list_item">
+				<text>鏂伴偖绠卞彿</text>
+				<view class="password_list_item_box">
+					<input type="text" v-model="form.newMailbox" placeholder="璇疯緭鍏ユ柊鐨勯偖绠�" />
+				</view>
+			</view>
+			<view class="password_list_item">
+				<text>楠岃瘉鐮�</text>
+				<view class="password_list_item_box">
+					<input type="text" v-model="form.verificationCode" maxlength="4" placeholder="璇疯緭鍏ラ獙璇佺爜">
+					<p @click="getVerificationCode" v-if="!code.isOpen">鑾峰彇楠岃瘉鐮�</p>
+					<p @click="getVerificationCode" v-else>{{code.num}}</p>
+				</view>
+			</view>
+		</view>
+		<view class="password_footer">
+			<button v-preventReClick class="password_footer_submit">
+				<text>瀹屾垚</text>
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				form: {
+					currentMailbox: '',
+					newMailbox: '',
+					verificationCode: ''
+				}
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.password {
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        background: white;
+        .password_tip {
+            padding: 20rpx 30rpx;
+            display: flex;
+            background: #F7F7F7;
+            box-sizing: border-box;
+            image {
+                width: 24rpx;
+                height: 24rpx;
+                margin-right: 10rpx;
+                margin-top: 8rpx;
+            }
+            text {
+                font-size: 24rpx;
+                font-weight: 400;
+                color: #666666;
+            }
+        }
+        .password_list {
+            padding: 0 30rpx;
+            .password_list_item {
+                display: flex;
+                align-items: center;
+                height: 90rpx;
+                border-bottom: 1rpx solid #E5E5E5;
+                text {
+                    width: 150rpx;
+                    flex-shrink: 0;
+                    font-size: 30rpx;
+                    font-weight: 400;
+                    color: #222222;
+                }
+                .password_list_item_box {
+                    display: flex;
+                    justify-content: space-between;
+                    flex: 1;
+                    input {
+                        border: none;
+                        font-size: 30rpx;
+                    }
+                    input::-webkit-input-placeholder {
+                        font-size: 28rpx;
+                        font-weight: 400;
+                        color: #B2B2B2;
+                    }
+                    p {
+                        font-size: 26rpx;
+                        font-weight: 400;
+                        color: #4275FC;
+                    }
+                }
+            }
+        }
+        .password_footer {
+            margin-top: 80rpx;
+            padding: 0 30rpx;
+            .password_footer_submit {
+                width: 100%;
+                height: 88rpx;
+                border: none;
+                background: #4275FC;
+                box-shadow: 0 0 12rpx 0 rgba(0, 0, 0, 0.08);
+                border-radius: 8rpx;
+                display: flex;
+                align-items: center;
+                justify-content: center;
+                text {
+                    font-size: 30rpx;
+                    font-weight: 500;
+                    color: #FFFFFF;
+                }
+            }
+        }
+    }
+</style>
diff --git a/minipro_standard/pages/updatePhone/updatePhone.vue b/minipro_standard/pages/updatePhone/updatePhone.vue
new file mode 100644
index 0000000..b70fb79
--- /dev/null
+++ b/minipro_standard/pages/updatePhone/updatePhone.vue
@@ -0,0 +1,127 @@
+<template>
+	<view class="password">
+		<view class="password_tip">
+			<image src="@/static/password_ic_tip@2x.png" alt="" />
+			<text>缁戝畾鎵嬫満鍙峰彲浠ユ洿濂藉湴淇濇姢鎮ㄧ殑璐︽埛瀹夊叏锛屼繚鎶や釜浜轰俊鎭笉琚镜瀹炽��</text>
+		</view>
+		<view class="password_list">
+			<view class="password_list_item">
+				<text>褰撳墠缁戝畾</text>
+				<view class="password_list_item_box">
+					<input type="number" disabled v-model="form.currentPhone" maxlength="11">
+				</view>
+			</view>
+			<view class="password_list_item">
+				<text>鏂版墜鏈哄彿</text>
+				<view class="password_list_item_box">
+					<input type="text" v-model="form.newPhone" maxlength="11" placeholder="璇疯緭鍏ユ柊鎵嬫満鍙�">
+				</view>
+			</view>
+			<view class="password_list_item">
+				<text>楠岃瘉鐮�</text>
+				<view class="password_list_item_box">
+					<input type="text" v-model="form.verificationCode" maxlength="4" placeholder="璇疯緭鍏ユ墜鏈洪獙璇佺爜">
+					<p @click="getVerificationCode" v-if="!code.isOpen">鑾峰彇楠岃瘉鐮�</p>
+					<p @click="getVerificationCode" v-else>{{code.num}}</p>
+				</view>
+			</view>
+		</view>
+		<view class="password_footer">
+			<button v-preventReClick class="password_footer_submit" @click="submit">
+				<text>瀹屾垚</text>
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				form: {
+					currentPhone: '',
+					newPhone: '',
+					verificationCode: ''
+				}
+			};
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.password {
+		width: 100%;
+		.password_tip {
+			padding: 20rpx 30rpx;
+			display: flex;
+			background: #F7F7F7;
+			box-sizing: border-box;
+			image {
+				width: 24rpx;
+				height: 24rpx;
+				margin-right: 10rpx;
+				margin-top: 8rpx;
+			}
+			text {
+				font-size: 24rpx;
+				font-weight: 400;
+				color: #666666;
+			}
+		}
+		.password_list {
+			padding: 0 30rpx;
+			.password_list_item {
+				display: flex;
+				align-items: center;
+				height: 90rpx;
+				border-bottom: 1rpx solid #E5E5E5;
+				text {
+					width: 150rpx;
+					flex-shrink: 0;
+					font-size: 30rpx;
+					font-weight: 400;
+					color: #222222;
+				}
+				.password_list_item_box {
+					display: flex;
+					justify-content: space-between;
+					flex: 1;
+					input {
+						border: none;
+						font-size: 30rpx;
+					}
+					input::-webkit-input-placeholder {
+						font-size: 28rpx;
+						font-weight: 400;
+						color: #B2B2B2;
+					}
+					p {
+						font-size: 26rpx;
+						font-weight: 400;
+						color: #4275FC;
+					}
+				}
+			}
+		}
+		.password_footer {
+			margin-top: 80rpx;
+			padding: 0 30rpx;
+			.password_footer_submit {
+				width: 100%;
+				height: 88rpx;
+				border: none;
+				background: #4275FC;
+				box-shadow: 0 0 12rpx 0 rgba(0, 0, 0, 0.08);
+				border-radius: 8rpx;
+				display: flex;
+				align-items: center;
+				justify-content: center;
+				text {
+					font-size: 30rpx;
+					font-weight: 500;
+					color: #FFFFFF;
+				}
+			}
+		}
+	}
+</style>
diff --git a/platform_web/package.json b/platform_web/package.json
index 44c7272..c288459 100644
--- a/platform_web/package.json
+++ b/platform_web/package.json
@@ -5,7 +5,7 @@
   "scripts": {
     "serve": "vue-cli-service serve",
     "build:pro": "vue-cli-service build",
-    "build:staging": "vue-cli-service build --mode staging",
+    "build:dev": "vue-cli-service build --mode staging",
     "lint": "vue-cli-service lint",
     "fix": "eslint --ext .js,.vue src --fix"
   },
diff --git a/platform_web/src/components/business/OperaClientDetailWindow.vue b/platform_web/src/components/business/OperaClientDetailWindow.vue
index 24ed75a..e64ba84 100644
--- a/platform_web/src/components/business/OperaClientDetailWindow.vue
+++ b/platform_web/src/components/business/OperaClientDetailWindow.vue
@@ -6,15 +6,15 @@
     @confirm="confirm"
   >
     <div class="title-style">瀹㈡埛淇℃伅 <div class="tips">{{form.oepnType ? '姝e紡' : '浣撻獙' }}</div><div class="tips">鏈夋晥鏈燂細{{ form.oepnValidDate.substring(0, form.oepnValidDate.length-9) }}</div></div>
-    <el-descriptions direction="horizontal" :column="1">
-      <el-descriptions-item label="瀹㈡埛鍚嶇О">{{ form.orgName }}</el-descriptions-item>
-      <el-descriptions-item label="瀹㈡埛绠�绉�">{{ form.remark }}</el-descriptions-item>
-      <el-descriptions-item label="涓荤櫥褰曡处鍙�">{{ form.phone }}</el-descriptions-item>
-      <el-descriptions-item label="鎵�鍦ㄥ湴鍧�">{{ form.addr }}</el-descriptions-item>
-      <el-descriptions-item label="浼佷笟淇$敤浠g爜">{{ form.creditCode }}</el-descriptions-item>
-      <el-descriptions-item label="鑱旂郴浜�">{{ form.linkName }} {{ form.linkPhone }}</el-descriptions-item>
-      <el-descriptions-item label="閿�鍞汉鍛�">{{ form.salespersonName }} {{ form.salespersonmobile }}</el-descriptions-item>
-      <el-descriptions-item label="钀ヤ笟鎵х収">
+    <el-descriptions direction="horizontal" :column="1" :colon="false">
+      <el-descriptions-item label="瀹㈡埛鍚嶇О锛�">{{ form.orgName }}</el-descriptions-item>
+      <el-descriptions-item label="瀹㈡埛绠�绉帮細">{{ form.remark }}</el-descriptions-item>
+      <el-descriptions-item label="涓荤櫥褰曡处鍙凤細">{{ form.phone }}</el-descriptions-item>
+      <el-descriptions-item label="鎵�鍦ㄥ湴鍧�锛�">{{ form.addr }}</el-descriptions-item>
+      <el-descriptions-item label="浼佷笟淇$敤浠g爜锛�">{{ form.creditCode }}</el-descriptions-item>
+      <el-descriptions-item label="鑱旂郴浜猴細">{{ form.linkName }} {{ form.linkPhone }}</el-descriptions-item>
+      <el-descriptions-item label="閿�鍞汉鍛橈細">{{ form.salespersonName }} {{ form.salespersonmobile }}</el-descriptions-item>
+      <el-descriptions-item label="钀ヤ笟鎵х収锛�">
         <!-- {{ form.fileurlfull }} -->
         <el-image
           v-if="form.fileStoreAddr"
@@ -24,7 +24,7 @@
           :preview-src-list="[form.fileurlfull]"
         ></el-image>
       </el-descriptions-item>
-      <el-descriptions-item label="绯荤粺璁块棶鍦板潃">
+      <el-descriptions-item label="绯荤粺璁块棶鍦板潃锛�">
         <a :href="form.systemUrl" target="_blank" rel="noopener noreferrer">{{ form.systemUrl }}</a>
         <span style="cursor: pointer; margin-left: 10px;" @click="copy">澶嶅埗</span>
       </el-descriptions-item>
@@ -78,7 +78,7 @@
     open (target) {
       this.title = '瀹㈡埛璧勬枡'
       this.visible = true
-      // debugger
+      debugger
       // 缂栬緫
       this.$nextTick(() => {
         for (const key in this.form) {
@@ -102,7 +102,10 @@
 
 <style lang="scss" scoped>
 ::v-deep .el-descriptions-item__label {
-  width: 90px;
+  width: 85px;
+  text-align: right;
+  display: flex;
+  flex-direction: row-reverse;
 }
 .title-style {
   font-weight: 500;
diff --git a/platform_web/src/components/business/OperaClientMangerWindow.vue b/platform_web/src/components/business/OperaClientMangerWindow.vue
index 9d37323..9a42755 100644
--- a/platform_web/src/components/business/OperaClientMangerWindow.vue
+++ b/platform_web/src/components/business/OperaClientMangerWindow.vue
@@ -54,8 +54,8 @@
         </el-form-item>
       </div>
        <div class="tip-line">
-          <el-form-item label="寮�閫氱敤鎴锋暟" prop="openUserNum">
-            <el-input v-model="form.openUserNum" placeholder="璇疯緭鍏ュ紑閫氱敤鎴锋暟"   v-trim/>
+          <el-form-item label="浜烘暟闄愬埗" prop="openUserNum">
+            <el-input v-model="form.openUserNum" placeholder="璇疯緭鍏ヤ汉鏁伴檺鍒�"   v-trim/>
              娉細涓�0涓嶉檺鍒朵汉鏁�
           </el-form-item>
         </div>
@@ -150,7 +150,7 @@
         linkPhone: '',
         fileStoreAddr: '',
         fileurlfull: '',
-        openUserNum:0
+        openUserNum: 10
         // fileList: [],
       },
       isEdit: false,
diff --git a/platform_web/src/views/business/clientManger.vue b/platform_web/src/views/business/clientManger.vue
index 6b36e93..4c2d44c 100644
--- a/platform_web/src/views/business/clientManger.vue
+++ b/platform_web/src/views/business/clientManger.vue
@@ -51,11 +51,11 @@
             <span>{{ row.oepnType == 1 ? '姝e紡' : '璇曠敤' }}</span>
           </template>
         </el-table-column>
+        <el-table-column prop="openUserNum" label="浜烘暟闄愬埗" align="center" min-width="140px"></el-table-column>
         <el-table-column prop="phone" label="涓昏处鍙�" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="linkName" label="鑱旂郴浜�" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="linkPhone" label="鑱旂郴鐢佃瘽" align="center" min-width="120px"></el-table-column>
         <el-table-column prop="oepnValidDate" label="鏈夋晥鏈�" align="center" min-width="140px"></el-table-column>
-        <el-table-column prop="openUserNum" label="寮�閫氱敤鎴锋暟" align="center" min-width="140px"></el-table-column>
         <el-table-column prop="salespersonName" label="閿�鍞汉鍛�" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" align="center" min-width="140px"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" align="center" min-width="100px">
@@ -142,8 +142,13 @@
       // this.$refs.operaApplianceChangeDetailWindow.open('鏇存崲鍗曡鎯�', row)
       findCompanyInfo({ CompanyId: row.id })
         .then(res => {
-          const element = isEdit ? this.$refs.operaClientMangerWindow : this.$refs.operaClientDetailWindow
-          element.open(res)
+          if (isEdit) {
+            this.$refs.operaClientMangerWindow.open({...res, openUserNum: row.openUserNum})
+          } else {
+            this.$refs.operaClientDetailWindow.open(res)
+          }
+          // const element = isEdit ? this.$refs.operaClientMangerWindow : this.$refs.operaClientDetailWindow
+          // element.open({...res, ...row})
         })
         .catch(err => {
           this.$tip.error(err)
diff --git a/platform_web/src/views/system/loginLog.vue b/platform_web/src/views/system/loginLog.vue
index 60d10ae..aff49db 100644
--- a/platform_web/src/views/system/loginLog.vue
+++ b/platform_web/src/views/system/loginLog.vue
@@ -5,7 +5,7 @@
       <el-form-item label="鐧诲綍鐢ㄦ埛鍚�" prop="loginUsername">
         <el-input v-model="searchForm.loginUsername" placeholder="璇疯緭鍏ョ櫥褰曠敤鎴峰悕" @keypress.enter.native="search"></el-input>
       </el-form-item>
-      <el-form-item label="鐧诲綍IP" prop="ip">
+      <!-- <el-form-item label="鐧诲綍IP" prop="ip">
         <el-input v-model="searchForm.ip" placeholder="璇疯緭鍏ョ櫥褰旾P" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鏈嶅姟鍣↖P" prop="serverIp">
@@ -16,8 +16,8 @@
           <el-option value="true" label="鐧诲綍鎴愬姛"/>
           <el-option value="false" label="鐧诲綍澶辫触"/>
         </el-select>
-      </el-form-item>
-      <el-form-item label="鏉ユ簮" prop="success">
+      </el-form-item> -->
+      <el-form-item label="鏉ユ簮" prop="orgin">
         <el-select v-model="searchForm.orgin" placeholder="璇烽�夋嫨鐧诲綍鏉ユ簮" clearable @change="search">
           <el-option value="0" label="PC鐧婚檰"/>
           <el-option value="1" label="閽夐拤骞冲彴"/>
@@ -26,7 +26,7 @@
           <el-option value="4" label="寰俊灏忕▼搴�"/>
         </el-select>
       </el-form-item>
-      <el-form-item label="鐧诲綍鏃堕棿" prop="loginTime">
+      <!-- <el-form-item label="鐧诲綍鏃堕棿" prop="loginTime">
         <el-date-picker
           v-model="searchDateRange"
           type="datetimerange"
@@ -36,10 +36,10 @@
           end-placeholder="缁撴潫鏃堕棿"
           @change="handleSearchTimeChange"
         ></el-date-picker>
-      </el-form-item>
+      </el-form-item> -->
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
-        <el-button :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button>
+        <!-- <el-button :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button> -->
         <el-button @click="reset">閲嶇疆</el-button>
       </section>
     </el-form>
@@ -50,16 +50,23 @@
         :data="tableData.list"
         stripe
         border
-        :default-sort="{prop: 'loginTime', order: 'descending'}"
         @sort-change="handleSortChange"
       >
+      <!-- :default-sort="{prop: 'loginTime', order: 'descending'}" -->
+
         <el-table-column prop="orgin" label="鏉ユ簮" align="center" min-width="100px">
            <template slot-scope="{row}">
             {{row.orgin | orginText}}
           </template>
         </el-table-column>
+        <el-table-column prop="companyUserId" label="鐢ㄦ埛id" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="companyName" label="浼佷笟鍚嶇О" align="center" min-width="100px"></el-table-column>
         <el-table-column prop="loginUsername" label="鐧诲綍鐢ㄦ埛鍚�" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="companyUserName" label="鐧诲綍鐢ㄦ埛鍚�" align="center" min-width="100px">
+          <template slot-scope="{row}">
+            {{ row.companyUserName || row.loginUsername }}
+          </template>
+        </el-table-column>
         <el-table-column prop="ip" label="鐧诲綍IP" align="center" min-width="120px"></el-table-column>
         <el-table-column prop="location" label="鐧诲綍鍦板潃" align="center" min-width="160px"></el-table-column>
         <el-table-column prop="clientInfo" label="瀹㈡埛绔�" align="center" min-width="160px"></el-table-column>
@@ -73,7 +80,11 @@
             {{row.success | statusText}}
           </template>
         </el-table-column>
-        <el-table-column prop="reason" label="澶辫触鍘熷洜" min-width="160px"></el-table-column>
+        <el-table-column prop="reason" label="澶辫触鍘熷洜" min-width="160px" show-overflow-tooltip>
+          <template slot-scope="{row}">
+            <span class="lang-title-style">{{ row.reason }}</span>
+          </template>
+        </el-table-column>
       </el-table>
       <pagination
           @size-change="handleSizeChange"
@@ -133,15 +144,7 @@
   },
   methods: {
     // 鏃堕棿鎼滅储鑼冨洿鍙樺寲
-    handleSearchTimeChange (value) {
-      this.searchForm.startTime = null
-      this.searchForm.endTime = null
-      if (value != null) {
-        this.searchForm.startTime = value[0]
-        this.searchForm.endTime = value[1]
-      }
-      this.search()
-    }
+    
   },
   created () {
     this.config({
@@ -155,6 +158,24 @@
       }]
     })
     this.search()
+  },
+  methods: {
+    handleSearchTimeChange (value) {
+      this.searchForm.startTime = null
+      this.searchForm.endTime = null
+      if (value != null) {
+        this.searchForm.startTime = value[0]
+        this.searchForm.endTime = value[1]
+      }
+      this.search()
+    },
+    reset() {
+      this.$refs.searchForm.resetFields()
+      this.searchDateRange = []
+      this.searchForm.startTime = ''
+      this.searchForm.endTime = ''
+      this.search()
+    }
   }
 }
 </script>
diff --git a/screen_standard/src/views/index.vue b/screen_standard/src/views/index.vue
index 16b27c6..025a41b 100644
--- a/screen_standard/src/views/index.vue
+++ b/screen_standard/src/views/index.vue
@@ -285,9 +285,11 @@
     .then(res => {
       if (res.length > 0) {
         data.baseNum = res[0].doneNum
-        data.production = res
-        start()
+      } else {
+        data.baseNum = 0
       }
+      data.production = res
+      data.fifthScroll = true
     })
   // 浠撳簱瀹炴椂浣欓噺缁熻
   // getStockList(companyId.value, departId.value)
@@ -405,6 +407,11 @@
         fontSize: 12
       }
     },
+    grid: {
+      top: 40,
+      bottom: 30,
+      left: 60
+    },
     xAxis: {
       type: 'category',
       boundaryGap: false,
@@ -412,6 +419,15 @@
         lineStyle: {
           width: 0.5,
           color: ['#fff']
+        }
+      },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 0.5,
+          color: '#fff',
+          opacity: .5
         }
       },
       axisLabel: {
@@ -428,6 +444,15 @@
         lineStyle: {
           width: 0.5,
           color: ['#fff']
+        }
+      },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 1,
+          color: '#fff',
+          opacity: .5
         }
       },
       axisLabel: {
@@ -767,18 +792,29 @@
   if (scrollDom.offsetHeight == 0) {
     scrollDom = scrollContainer4.value
   } else {
-    // console.log(bottom1.value.height);
-    let num = scrollContainer4.value.offsetHeight / 35;
-    // alert(scrollDom.children.length  +"---------------"+num)
-    // 濡傛灉鍒楄〃鏁伴噺杩囧皯涓嶈繘琛屾粴鍔�
+    // console.log(scrollDom.offsetHeight);
+    let num = scrollDom.offsetHeight / 35;
+    num = num + (scrollDom.offsetHeight % 35  > 0 ? 1 : 0)
+    // console.log('----------');
+    // console.log('scrollDom.children.length', scrollDom.children.length)
+    // console.log('scrollDom.offsetHeight % 35', scrollDom.offsetHeight % 35)
+    // console.log('num', num)
+    // console.log('----------');
+    // // 濡傛灉鍒楄〃鏁伴噺杩囧皯涓嶈繘琛屾粴鍔�
     if (scrollDom.children.length <= num) {
       clearTimeout(timer4.value)
       return
     }
     // 缁勪欢杩涜婊氬姩
-    scrollDom.scrollTop += 2
+    scrollDom.scrollTop += 1
+    
     // 鍒ゆ柇鏄惁婊氬姩鍒板簳閮�
-    if (scrollDom.scrollTop+1 >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
+    if (scrollDom.scrollTop >= (scrollDom.scrollHeight - scrollDom.clientHeight)) {
+      console.log('scrollDom.scrollTop', scrollDom.scrollTop);
+      console.log('scrollDom.scrollHeight', scrollDom.scrollHeight);
+      console.log('scrollDom.clientHeight', scrollDom.clientHeight );
+    // if (scrollDom.scrollTop >= 35) {
+      
       // 鑾峰彇缁勪欢绗竴涓妭鐐�
       let first = scrollDom.children[0]
       // 鍒犻櫎鑺傜偣
@@ -794,8 +830,23 @@
 // })
 
 onMounted(() => {
-  if (!departId.value) return;
-  timer5.value = setInterval(init(), 60000)
+  if (departId.value) {
+    console.log('onMounted');
+    init()
+    timer5.value = setInterval(init, 60000)
+    timer.value = setInterval(scrillAction, 100)
+  }
+  window.addEventListener('resize', () => {
+    setTypeChart()
+    setDayChart()
+  })
+  
+})
+
+onUnmounted(() => {
+  clearTimeout(timer.value)
+  clearTimeout(timer5.value)
+  
 })
 </script>
 
diff --git a/screen_standard/src/views/process.vue b/screen_standard/src/views/process.vue
index 5ddfde1..d81206d 100644
--- a/screen_standard/src/views/process.vue
+++ b/screen_standard/src/views/process.vue
@@ -328,6 +328,15 @@
           color: ['#fff']
         }
       },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 1,
+          color: '#fff',
+          opacity: .5
+        }
+      },
       axisLabel: {
         textStyle: {
           color: '#fff'
@@ -344,6 +353,15 @@
           color: ['#fff']
         }
       },
+      axisLine: {
+        show: true,
+        onZero: true,
+        lineStyle: {
+          width: 1,
+          color: '#fff',
+          opacity: .5
+        }
+      },
       axisLabel: {
         textStyle: {
           color: '#fff'
diff --git a/screen_standard/vite.config.js b/screen_standard/vite.config.js
index 966fbbe..722a9a4 100644
--- a/screen_standard/vite.config.js
+++ b/screen_standard/vite.config.js
@@ -11,10 +11,10 @@
 // https://vitejs.dev/config/
 export default defineConfig(({mode, command}) => {
   let env = loadEnv(mode, process.cwd(), '')
-  console.log('-------');
-  console.log(env.VITE_BASE_PATH);
-  console.log(env.VITE_BASE_PATH.replace(env.VITE_BASE_PATH, ''));
-  console.log('-------');
+  // console.log('-------');
+  // console.log(env.VITE_BASE_PATH);
+  // console.log(env.VITE_BASE_PATH.replace(env.VITE_BASE_PATH, ''));
+  // console.log('-------');
   return {
     base:env.VITE_BASE_CONTEXT,
     plugins: [
@@ -42,6 +42,8 @@
   
     // 鏈湴杩愯閰嶇疆锛屽強鍙嶅悜浠g悊閰嶇疆
     server: {
+      host: '192.168.0.3',
+      port: '8080',
       cors: true, // 榛樿鍚敤骞跺厑璁镐换浣曟簮
       open: true, // 鍦ㄦ湇鍔″櫒鍚姩鏃惰嚜鍔ㄥ湪娴忚鍣ㄤ腑鎵撳紑搴旂敤绋嬪簭
       //鍙嶅悜浠g悊閰嶇疆锛屾敞鎰弐ewrite鍐欐硶锛屽紑濮嬫病鐪嬫枃妗e湪杩欓噷韪╀簡鍧�
diff --git a/web_standard/.env.development b/web_standard/.env.development
index 475d3bc..1d53d1c 100644
--- a/web_standard/.env.development
+++ b/web_standard/.env.development
@@ -14,14 +14,14 @@
 VUE_APP_API_PREFIX = ''
 
 # 鐒︽澗
-# VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
+VUE_APP_BASE_URL = 'http://192.168.0.36:10021/'
 # VUE_APP_BASE_URL = 'http://192.168.0.134:10021/'
 
 # 浠诲悍鏈湴
 # VUE_APP_BASE_URL = 'http://192.168.0.15:10021/'
 
 # 姹熻悕
-VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
+# VUE_APP_BASE_URL = 'http://192.168.0.35:10021/'
 
 # 娴嬭瘯鏈嶅姟鍣�
 # VUE_APP_BASE_URL = 'https://dmtest.ahapp.net/doumeeplant_api/'
diff --git a/web_standard/coderd.json b/web_standard/coderd.json
index 36dcaf5..d5d499c 100644
--- a/web_standard/coderd.json
+++ b/web_standard/coderd.json
@@ -4,7 +4,7 @@
     "alias": "eva",
     "command": "page",
     "option": {
-      "resources": "salary_param"
+      "resources": "unqualified_record"
     }
   }
 }
\ No newline at end of file
diff --git a/web_standard/package.json b/web_standard/package.json
index 51ae3a5..1703628 100644
--- a/web_standard/package.json
+++ b/web_standard/package.json
@@ -4,8 +4,8 @@
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
-    "build:staging": "vue-cli-service build --mode staging",
+    "build:pro": "vue-cli-service build",
+    "build:dev": "vue-cli-service build --mode staging",
     "lint": "vue-cli-service lint",
     "fix": "eslint --ext .js,.vue src --fix"
   },
diff --git a/web_standard/public/template/device_import_template.xlsx b/web_standard/public/template/device_import_template.xlsx
new file mode 100644
index 0000000..5eedf8a
--- /dev/null
+++ b/web_standard/public/template/device_import_template.xlsx
Binary files differ
diff --git a/web_standard/src/api/business/unqualifiedRecord.js b/web_standard/src/api/business/unqualifiedRecord.js
new file mode 100644
index 0000000..b063192
--- /dev/null
+++ b/web_standard/src/api/business/unqualifiedRecord.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/unqualifiedRecord/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/unqualifiedRecord/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/web_standard/src/api/ext/categoryUnionExt.js b/web_standard/src/api/ext/categoryUnionExt.js
index 8305850..c3a74f9 100644
--- a/web_standard/src/api/ext/categoryUnionExt.js
+++ b/web_standard/src/api/ext/categoryUnionExt.js
@@ -26,7 +26,7 @@
 }
 // 鏌ヨ鎵�鏈�
 export function checkAllList (data) {
-  return request.post('/ext/categoryUnionExt/checkAllList', data)
+  return request.post('/ext/categoryExt/list', data)
 }
 
 // 鍒犻櫎
diff --git a/web_standard/src/api/ext/workorderRecordPutExt.js b/web_standard/src/api/ext/workorderRecordPutExt.js
new file mode 100644
index 0000000..e66cac1
--- /dev/null
+++ b/web_standard/src/api/ext/workorderRecordPutExt.js
@@ -0,0 +1,16 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/ext/workorderRecordExt/page', data, {
+    trim: true
+  })
+}
+
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/ext/workorderRecordExt/exportExcelFeeding', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/web_standard/src/components/common/Header.vue b/web_standard/src/components/common/Header.vue
index 82597f4..674ffae 100644
--- a/web_standard/src/components/common/Header.vue
+++ b/web_standard/src/components/common/Header.vue
@@ -200,8 +200,8 @@
      * 閫�鍑虹櫥褰�
      */
     logout () {
-      console.log(this.$store.state.companyId);
-      debugger
+      // console.log(this.$store.state.companyId);
+      // debugger
       logout()
         .then(() => {
           let companyId = this.$store.state.userInfo.company.id
diff --git a/web_standard/src/components/common/Menu.vue b/web_standard/src/components/common/Menu.vue
index 34cb1e8..3b9319f 100644
--- a/web_standard/src/components/common/Menu.vue
+++ b/web_standard/src/components/common/Menu.vue
@@ -30,7 +30,7 @@
   name: 'Menu',
   components: { Scrollbar, MenuItems },
   computed: {
-    ...mapState(['menuData']),
+    ...mapState(['menuData', 'userInfo']),
     // 閫変腑鐨勮彍鍗昳ndex
     activeIndex () {
       let path = this.$route.path
@@ -59,6 +59,10 @@
      */
     handleSelect (menuIndex) {
       const menuConfig = this.__getMenuConfig(menuIndex, 'index', this.menuData.list)
+      if (menuConfig.url.includes('http')) {
+        window.open(`${menuConfig.url}?companyId=${this.userInfo.company.id}`, '_black')
+        return
+      }
       // 鎵句笉鍒伴〉闈�
       try {
         require('@/views' + menuConfig.url)
diff --git a/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue b/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
index d5299f7..ad4674c 100644
--- a/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
+++ b/web_standard/src/components/ext/OperaPlansDetailExtWindow.vue
@@ -31,7 +31,7 @@
           </el-form-item>
           <el-form-item label="鍙戝竷鏃ユ湡">{{ form.publishDate }}</el-form-item>
           <el-form-item label="璁″垝浜哄憳">{{ form.usermodel.realname }}</el-form-item>
-          <el-form-item label="鍒嗛厤鏁伴噺">{{ form.workorderDistributNum }}</el-form-item>
+          <el-form-item label="鍒嗛厤鏁伴噺">{{ form.distributNum }}</el-form-item>
           <el-form-item label="瀹屽伐鏁伴噺">{{ form.doneNum }}</el-form-item>
         </el-form>
       </div>
diff --git a/web_standard/src/components/ext/OperaUnitExtWindow.vue b/web_standard/src/components/ext/OperaUnitExtWindow.vue
index 1396cbf..546279f 100644
--- a/web_standard/src/components/ext/OperaUnitExtWindow.vue
+++ b/web_standard/src/components/ext/OperaUnitExtWindow.vue
@@ -29,7 +29,7 @@
           </el-option>
         </el-select>
       </el-form-item>-->
-      <el-form-item v-else label="鍗曚綅绫诲瀷" prop="types">
+      <!-- <el-form-item label="鍗曚綅绫诲瀷" prop="types">
         <el-select v-model="form.types" multiple filterable clearable placeholder="璇烽�夋嫨">
           <el-option
             v-for="(item, index) in unitTypes"
@@ -38,7 +38,7 @@
             :value="item.id">
           </el-option>
         </el-select>
-      </el-form-item>
+      </el-form-item> -->
     </el-form>
   </GlobalWindow>
 </template>
@@ -58,7 +58,7 @@
         name: '',
         attributeData: 0,
         //types: [],
-     //   type: null
+        type: 1
       },
       // 楠岃瘉瑙勫垯
       rules: {
@@ -97,7 +97,7 @@
         }
         // 璋冪敤鏂板缓鎺ュ彛
         const newForm = JSON.parse(JSON.stringify(this.form))
-        newForm.types = newForm.types.join(',')
+        // newForm.types = newForm.types.join(',')
         this.isWorking = true
         this.api.create(newForm)
           .then(() => {
@@ -115,4 +115,7 @@
     }
   }
 }
+/**
+ *  
+ */
 </script>
diff --git a/web_standard/src/components/ext/OperaWInboundExtWindow.vue b/web_standard/src/components/ext/OperaWInboundExtWindow.vue
index 8c51fc6..cd18790 100644
--- a/web_standard/src/components/ext/OperaWInboundExtWindow.vue
+++ b/web_standard/src/components/ext/OperaWInboundExtWindow.vue
@@ -1,11 +1,5 @@
 <template>
-  <GlobalWindow
-    :title="title"
-    width="80%"
-    :visible.sync="visible"
-    :confirm-working="isWorking"
-    @confirm="confirm"
-  >
+  <GlobalWindow :title="title" width="80%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm">
     <div style="margin-bottom: 10px">
       <span class="title-add-style" style="vertical-align:middle">鍏ュ簱淇℃伅</span>
       <!-- <el-button type="primary" style="margin-left: 10px;vertical-align:middle">閫夋嫨鏉ユ簮鍗曟嵁</el-button> -->
@@ -19,36 +13,24 @@
           <el-input v-model="form.originCode" disabled placeholder="閫夋嫨鏉ユ簮鍗曟嵁鍚庨粯璁ゅ甫鍑�" v-trim/>
         </el-form-item> -->
         <el-form-item label="璁″垝鍏ュ簱鏃ユ湡" prop="planDate">
-          <el-date-picker
-            v-model="form.planDate"
-            value-format="yyyy-MM-dd"
-            placeholder="閫夋嫨鏃ユ湡"
-            :picker-options="pickerOptions"
-          ></el-date-picker>
+          <el-date-picker v-model="form.planDate" value-format="yyyy-MM-dd" placeholder="閫夋嫨鏃ユ湡"
+            :picker-options="pickerOptions"></el-date-picker>
         </el-form-item>
         <el-form-item label="鍏ュ簱绫诲瀷" prop="type">
           <el-select v-model="form.type" :disabled="disabled" placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷">
-            <el-option
-              v-for="(item, index) in type"
-              :key="index"
-              :label="item.name"
-              :value="item.id">
+            <el-option v-for="(item, index) in type" :key="index" :label="item.name" :value="item.id">
             </el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="鍏ュ簱浠撳簱" prop="warehouseId">
           <el-select v-model="form.warehouseId" filterable clearable placeholder="璇烽�夋嫨鍏ュ簱浠撳簱" @change="selectWare">
-            <el-option
-              v-for="(item, index) in tempWarehouses"
-              :key="index"
-              :label="item.name"
-              :value="item.id">
+            <el-option v-for="(item, index) in tempWarehouses" :key="index" :label="item.name" :value="item.id">
             </el-option>
           </el-select>
         </el-form-item>
         <div class="mark">
           <el-form-item label="鍗曟嵁鎽樿" prop="abstracts">
-            <el-input v-model="form.abstracts" placeholder="璇疯緭鍏ュ崟鎹憳瑕�" v-trim/>
+            <el-input v-model="form.abstracts" placeholder="璇疯緭鍏ュ崟鎹憳瑕�" v-trim />
           </el-form-item>
         </div>
       </el-form>
@@ -61,11 +43,7 @@
       <li><el-button type="primary" @click="addMaterial">閫夋嫨鐗╂枡</el-button></li>
     </ul>
 
-    <el-table
-      :data="form.woutboundInBodyBeanList"
-      border
-      stripe
-    >
+    <el-table :data="form.woutboundInBodyBeanList" border stripe>
       <el-table-column align="center" label="搴忓彿" type="index" />
       <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="160px">
         <template slot-scope="{row}">
@@ -80,65 +58,46 @@
       <el-table-column v-if="whLocation.length" label="璐т綅" min-width="100px">
         <template slot-scope="{row}">
           <el-select v-model="row.locationId" filterable placeholder="璇烽�夋嫨" @select="selectLocation">
-            <el-option
-              v-for="(item, index) in whLocation"
-              :key="index"
-              :label="item.unionName"
-              :value="item.id">
+            <el-option v-for="(item, index) in whLocation" :key="index" :label="item.unionName" :value="item.id">
             </el-option>
           </el-select>
         </template>
       </el-table-column>
       <el-table-column label="璐ㄩ噺灞炴��" min-width="100px">
         <template slot-scope="scope">
-          <el-select v-model="scope.row.qualityType" :disabled='canSelect(scope.$index)' filterable clearable placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="(item, index) in properties"
-              :key="index"
-              :label="item.name"
-              :value="item.id">
+          <el-select v-model="scope.row.qualityType" :disabled='canSelect(scope.$index)' filterable clearable
+            placeholder="璇烽�夋嫨">
+            <el-option v-for="(item, index) in properties" :key="index" :label="item.name" :value="item.id">
             </el-option>
           </el-select>
         </template>
       </el-table-column>
-       <el-table-column  v-if="winType==2" label="宸ュ簭" min-width="100px">
-              <template slot-scope="{row}">
-                <el-select v-model="row.procedureId" filterable placeholder="璇烽�夋嫨" @select="selectProcedure">
-                  <el-option
-                    v-for="(item, index) in row.procedureList"
-                    :key="index"
-                    :label="item.name"
-                    :value="item.id">
-                  </el-option>
-                </el-select>
-              </template>
-            </el-table-column>
+      <el-table-column v-if="winType == 2" label="宸ュ簭" min-width="100px">
+        <template slot-scope="{row}">
+          <el-select v-model="row.procedureId" :disabled="!row.procedureList" filterable placeholder="璇烽�夋嫨">
+            <el-option v-for="(item, index) in row.procedureList" :key="index" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>
+        </template>
+      </el-table-column>
       <el-table-column label="鎵规鍙�" min-width="100px">
         <template slot-scope="{row}">
-          <el-input v-model="row.batch" placeholder="璇疯緭鍏ユ壒娆″彿" v-trim/>
+          <el-input v-model="row.batch" placeholder="璇疯緭鍏ユ壒娆″彿" v-trim />
         </template>
       </el-table-column>
       <el-table-column prop="umodelName" label="鍗曚綅" min-width="60px"></el-table-column>
       <el-table-column label="鍏ュ簱鏁伴噺" min-width="100px">
         <template slot-scope="{row}">
-          <el-input v-model="row.num" type="number" placeholder="鍏ュ簱鏁伴噺" v-trim/>
+          <el-input v-model="row.num" type="number" placeholder="鍏ュ簱鏁伴噺" v-trim />
         </template>
       </el-table-column>
-      <el-table-column
-        label="鎿嶄綔"
-        min-width="60px"
-        align="center"
-        fixed="right"
-      >
+      <el-table-column label="鎿嶄綔" min-width="60px" align="center" fixed="right">
         <template slot-scope="{row}">
           <span class="delete-button-style" @click="deleteMaterail(row)">鍒犻櫎</span>
         </template>
       </el-table-column>
     </el-table>
-    <SelectMaterail
-      ref="selectMaterail"
-      @selectData="selectData"
-    ></SelectMaterail>
+    <SelectMaterail ref="selectMaterail" @selectData="selectData"></SelectMaterail>
   </GlobalWindow>
 </template>
 
@@ -155,7 +114,7 @@
     GlobalWindow,
     SelectMaterail: () => import('@/components/ext/SelectMaterail')
   },
-  data () {
+  data() {
     return {
       // 琛ㄥ崟鏁版嵁
       form: {
@@ -166,7 +125,7 @@
         origin: 0,
         woutboundInBodyBeanList: []
       },
-      winType:0,
+      winType: 0,
       disabled: false,
       pickerOptions: {},
       tempWarehouses: [],
@@ -179,29 +138,29 @@
       activeName: 'first',
       whLocation: [],
       type: [
-        {name:'閲囪喘鍏ュ簱', id: 25}
+        { name: '閲囪喘鍏ュ簱', id: 25 }
       ],
       tempMaterials: [
       ],
       selectedMaterails: [],
       properties: [
         // 0 1涓嶈壇 2鎶ュ簾
-        {name:'鍚堟牸', id: 0},
-        {name:'涓嶈壇', id: 1},
-        {name:'鎶ュ簾', id: 2},
+        { name: '鍚堟牸', id: 0 },
+        { name: '涓嶈壇', id: 1 },
+        { name: '鎶ュ簾', id: 2 },
       ]
     }
   },
   inject: ['warehouses'],
-  created () {
+  created() {
     this.config({
       api: '/ext/wOutboundExt',
       'field.id': 'id'
     })
     this.pickerOptions.disabledDate = (time) => {
-	    // 涓�澶�
-      let tempTime = 3600 * 1000 * 24 
-      return time.getTime() < new Date()-tempTime
+      // 涓�澶�
+      let tempTime = 3600 * 1000 * 24
+      return time.getTime() < new Date() - tempTime
     }
     // queryListByCode('?dicCode=SYSTEM_APPLIANCE_TYPE')
     //   .then(res => {
@@ -230,10 +189,10 @@
       }
       this.__confirmEdit()
     },
-    open (title, type = 0) {
+    open(title, type = 0) {
       this.title = title
       this.visible = true
-      this.winType=type
+      this.winType = type
       // 鏂板缓
       this.$nextTick(() => {
         this.$refs.form.resetFields()
@@ -242,16 +201,17 @@
         if (title === '鍏跺畠鍏ュ簱') {
           this.form.planDate = new Date()
           this.form.type = null
+          // this.form.woutboundInBodyBeanList = []
           this.disabled = false
           this.type = [
-            { name:'瀹㈤��妫�楠屽叆搴�', id: 26 },
-            { name:'瀹㈣繑妫�楠屽叆搴�', id: 27 },
-            { name:'搴撳瓨璋冩暣', id: 28 }
+            { name: '瀹㈤��妫�楠屽叆搴�', id: 26 },
+            { name: '瀹㈣繑妫�楠屽叆搴�', id: 27 },
+            { name: '搴撳瓨璋冩暣', id: 28 }
           ]
         } else {
           this.disabled = true
           this.type = [
-            { name:'閲囪喘鍏ュ簱', id: 25 }
+            { name: '閲囪喘鍏ュ簱', id: 25 }
           ]
         }
 
@@ -271,15 +231,15 @@
           this.tempWarehouses = this.warehouses()
         }
       })
-     
+
     },
-    selectWare (v) {
+    selectWare(v) {
       // console.log(v)
       getListByWarehouseId(v)
         .then(res => {
           console.log(res)
           this.whLocation = res
-          if (this.whLocation.length === 0 ) {
+          if (this.whLocation.length === 0) {
             let temQualityType = 0
             for (const item of this.tempWarehouses) {
               if (item.id === v) {
@@ -313,9 +273,9 @@
         .catch(err => {
           console.log(err)
         })
-      
+
     },
-    setQuality (type) {
+    setQuality(type) {
       for (const item of this.form.woutboundInBodyBeanList) {
         item.qualityType = type
       }
@@ -351,7 +311,7 @@
       }
       return !cans
     },
-    selectLocation (v) {
+    selectLocation(v) {
       // console.log(index, row);
       // for (const item of this.whLocation) {
       //   if (item.id === v) {
@@ -380,16 +340,16 @@
       //   }
       // }
     },
-    addMaterial () {
+    addMaterial() {
       // console.log('澧炲姞鐗╂枡')
       // const ids = this.form.woutboundInBodyBeanList.map(e => { return e.materialId }).join(',')
-      this.$refs.selectMaterail.open('閫夋嫨鐗╂枡', { ids: '', multiple: true, isPurchase:false,queryType:1 })
+      this.$refs.selectMaterail.open('閫夋嫨鐗╂枡', { ids: '', multiple: true, isPurchase: false, queryType: 1 })
     },
-    deleteMaterail (row) {
+    deleteMaterail(row) {
       // console.log('鍒犻櫎鐗╂枡')
       this.form.woutboundInBodyBeanList.splice(this.form.woutboundInBodyBeanList.indexOf(row), 1)
     },
-    selectData (data) {
+    selectData(data) {
       // 閫夋嫨鐗╂枡鍥炶皟
       console.log(data)
       for (const item of data.selectedMaterails) {
@@ -397,8 +357,8 @@
           code: item.mmodelCode,
           name: item.mmodelUnionName,
           umodelName: item.umodelName,
-          procedureList:item.procedureList,
-          procedureId:null,
+          procedureList: item.procedureList,
+          procedureId: item.procedureList ? item.procedureList[0].id : null,
           locationId: this.whLocation.length ? this.whLocation[0].id : null,
           qualityType: this.whLocation.length ? 0 : this.houseProperty,
           materialId: item.id,
@@ -408,14 +368,14 @@
         })
       }
     },
-    __confirmCreate () {
+    __confirmCreate() {
       this.$refs.form.validate((valid) => {
         if (!this.form.woutboundInBodyBeanList.length) {
           this.$tip.error('鑷冲皯閫夋嫨涓�鏉$墿鏂�')
           return
         }
         for (const item of this.form.woutboundInBodyBeanList) {
-          if (item.num<=0) {
+          if (item.num <= 0) {
             this.$tip.error('鍏ュ簱鐗╂枡鏁伴噺蹇呴』澶т簬0锛�')
             return
           }
@@ -449,28 +409,33 @@
 .toolbar {
   border-bottom: 1px solid #eee;
   padding-bottom: 10px;
+
   li {
     display: inline-block;
     margin-right: 6px;
   }
 }
+
 .form-data {
-  ::v-deep .el-form-item{
+  ::v-deep .el-form-item {
     width: 40%;
     margin-right: 1%;
   }
+
   .mark {
     .el-form-item {
       width: 81%;
       // margin-right: 1%;
     }
   }
+
   ::v-deep .el-form-item__content {
     width: calc(100% - 134px);
   }
 }
+
 .delete-button-style {
-    color: red;
-    cursor: pointer;
-  }
+  color: red;
+  cursor: pointer;
+}
 </style>
diff --git a/web_standard/src/components/system/role/PermissionConfigWindow.vue b/web_standard/src/components/system/role/PermissionConfigWindow.vue
index 1b8a8e2..b848cd6 100644
--- a/web_standard/src/components/system/role/PermissionConfigWindow.vue
+++ b/web_standard/src/components/system/role/PermissionConfigWindow.vue
@@ -69,8 +69,6 @@
      */
     confirm () {
       const selectedPermissions = this.$refs.tree.getCheckedNodes(false, true).filter(item => item.type !== 'module').map(item => item.id)
-      console.log(selectedPermissions);
-      debugger
       this.isWorking = true
       createRolePermission({
         roleId: this.role.id,
diff --git a/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue b/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue
index 8b9efa0..3e92857 100644
--- a/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue
+++ b/web_standard/src/components/system/user/OperaSystemRoleApplysWindow.vue
@@ -76,8 +76,8 @@
     // 纭閫夋嫨鏉冮檺
     confirm () {
       this.isWorking = true
-      console.log(this.selectedIds);
-      debugger
+      // console.log(this.selectedIds);
+      // debugger
       createRolePermission({
         roleId: this.role.id,
         permissionIds: this.selectedIds
diff --git a/web_standard/src/components/system/user/OperaSystemRoleNone.vue b/web_standard/src/components/system/user/OperaSystemRoleNone.vue
index fe51722..ea58b3d 100644
--- a/web_standard/src/components/system/user/OperaSystemRoleNone.vue
+++ b/web_standard/src/components/system/user/OperaSystemRoleNone.vue
@@ -75,8 +75,6 @@
     // 纭閫夋嫨鏉冮檺
     confirm () {
       this.isWorking = true
-      console.log(this.selectedIds);
-      debugger
       createRolePermission({
         roleId: this.role.id,
         permissionIds: this.selectedIds,
diff --git a/web_standard/src/layouts/TableLayout.vue b/web_standard/src/layouts/TableLayout.vue
index 898f162..125231c 100644
--- a/web_standard/src/layouts/TableLayout.vue
+++ b/web_standard/src/layouts/TableLayout.vue
@@ -133,8 +133,13 @@
           line-height: 20px;
           display: flex;
           align-items: center;
+          width: 100%;
+          // justify-content: center;
         }
       }
+      ::v-deep .el-table--small td {
+        padding: 0 !important;
+      }
       // 澶嶉�夋鍒�
       .el-table-column--selection {
         .cell {
diff --git a/web_standard/src/views/business/unqualifiedRecord.vue b/web_standard/src/views/business/unqualifiedRecord.vue
new file mode 100644
index 0000000..d27e83d
--- /dev/null
+++ b/web_standard/src/views/business/unqualifiedRecord.vue
@@ -0,0 +1,98 @@
+<template>
+  <TableLayout :permissions="['business:unqualifiedrecord:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="宸ュ崟缂栫爜" prop="code">
+        <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ伐鍗曠紪鐮�" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="涓嶈壇椤�" prop="categoryId">
+        <el-select v-model="searchForm.categoryId" filterable clearable placeholder="璇烽�夋嫨">
+          <el-option
+            v-for="(item, index) in category"
+            :key="index"
+            :label="item.name"
+            :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:unqualifiedrecord:exportExcel']">
+        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:unqualifiedrecord:exportExcel']" @click="exportExcel">瀵煎嚭</el-button>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        border
+        stripe
+      >
+        <el-table-column type="index" :index="customIndex" label="搴忓彿" align="center" fixed="left" min-width="80px"></el-table-column>
+        <el-table-column prop="workOrderCode" label="宸ュ崟缂栫爜" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="proceduresName" label="宸ュ簭" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="categoryName" label="涓嶈壇椤�" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="unqualifiedNum" label="鏁伴噺" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" align="center" min-width="100px"></el-table-column>
+        <el-table-column prop="createUserName" label="鍒涘缓浜�" align="center" min-width="100px"></el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import { checkAllList } from '@/api/ext/categoryUnionExt'
+export default { 
+  name: 'UnqualifiedRecord',
+  extends: BaseTable,
+  components: { TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        code: '',
+        categoryId: ''
+      },
+      category: []
+    }
+  },
+  created () {
+    this.config({
+      module: '宸ュ崟绫�-鎶ュ伐涓嶈壇璁板綍绫诲瀷琛�',
+      api: '/business/unqualifiedRecord',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+    checkAllList({ cateType: 3 })
+      .then(res => {
+        this.category = res
+      })
+      .catch(err => {
+        console.log(err)
+      })
+  },
+  methods: {
+    customIndex(index) {
+      return (this.tableData.pagination.pageIndex-1) * this.tableData.pagination.pageSize + index + 1
+    }
+  },
+}
+
+</script>
diff --git a/web_standard/src/views/ext/appliancesExt.vue b/web_standard/src/views/ext/appliancesExt.vue
index 194cd73..bb77f3d 100644
--- a/web_standard/src/views/ext/appliancesExt.vue
+++ b/web_standard/src/views/ext/appliancesExt.vue
@@ -15,7 +15,7 @@
           <el-option
             v-for="item in appTypes"
             :key="item.id"
-            :label="item.combinationName"
+            :label="item.name"
             :value="item.id"
           >
           </el-option>
@@ -393,7 +393,7 @@
       'field.main': 'name'
     })
     this.search()
-    checkAllList({ bmodelCateType: 2 })
+    checkAllList({ cateType: 2 })
       .then(res => {
         this.appTypes = res
       })
diff --git a/web_standard/src/views/ext/deviceExt.vue b/web_standard/src/views/ext/deviceExt.vue
index e609b81..aa0b933 100644
--- a/web_standard/src/views/ext/deviceExt.vue
+++ b/web_standard/src/views/ext/deviceExt.vue
@@ -55,6 +55,15 @@
     <template v-slot:table-wrap>
       <ul class="toolbar">
         <li><el-button type="primary" @click="$refs.operaDeviceExtWindow.open('鏂板缓璁惧')" v-permissions="['ext:deviceext:create']">鏂板</el-button></li>
+        <li v-permissions="['ext:deviceExt:importExcel']">
+          <ImportButton
+            text="瀵煎叆"
+            template-name="device_import_template.xlsx"
+            template-path="/template/device_import_template.xlsx"
+            action="/ext/deviceExt/importBatch"
+            @success="search"
+          />
+        </li>
         <li>
           <el-button
             type="primary"
@@ -86,12 +95,12 @@
         </el-table-column>
         <el-table-column prop="wpmodel.unionName" label="寰呯敓浜ц揣浣�" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
-            <span class="long-title-style">{{ row.wpmodel.unionName }}</span>
+            <span class="long-title-style">{{ row.wpmodel ? row.wpmodel.unionName : '-' }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="wfmodel.unionName" label="宸插畬宸ヨ揣浣�" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
-            <span class="long-title-style">{{ row.wfmodel.unionName }}</span>
+            <span class="long-title-style">{{ row.wfmodel ? row.wfmodel.unionName : '-' }}</span>
           </template>
         </el-table-column>
         <el-table-column prop="stationCode" label="宸ヤ綅缂栧彿" min-width="100px"></el-table-column>
@@ -143,6 +152,7 @@
 <script>
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
+import ImportButton from '@/components/common/ImportButton'
 // import SearchFormCollapse from '@/components/common/SearchFormCollapse'
 import Pagination from '@/components/common/Pagination'
 import OperaDeviceExtWindow from '@/components/ext/OperaDeviceExtWindow'
@@ -153,7 +163,7 @@
 export default {
   name: 'DeviceExt',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaDeviceExtWindow, QrCodeLabel },
+  components: { TableLayout, Pagination, OperaDeviceExtWindow, ImportButton, QrCodeLabel },
   data () {
     return {
       // 鎼滅储
@@ -256,4 +266,7 @@
     }
   }
 }
+/**
+ *  
+ */
 </script>
diff --git a/web_standard/src/views/ext/salaryStatistic.vue b/web_standard/src/views/ext/salaryStatistic.vue
index 396fb7b..8383e36 100644
--- a/web_standard/src/views/ext/salaryStatistic.vue
+++ b/web_standard/src/views/ext/salaryStatistic.vue
@@ -182,7 +182,6 @@
       return '-'
     },
     customIndex(index) {
-      console.log();
       return (this.tableData.pagination.pageIndex-1) * this.tableData.pagination.pageSize + index + 1
     }
   }
diff --git a/web_standard/src/views/ext/workorderPutRecordExt.vue b/web_standard/src/views/ext/workorderPutRecordExt.vue
index cbd9424..58a2f0e 100644
--- a/web_standard/src/views/ext/workorderPutRecordExt.vue
+++ b/web_standard/src/views/ext/workorderPutRecordExt.vue
@@ -111,9 +111,9 @@
         <el-table-column prop="batch" label="鐢熶骇鎵规鍙�" min-width="100px"></el-table-column>
         <el-table-column prop="promodel.name" label="宸ュ簭" min-width="100px"></el-table-column>
         <el-table-column prop="omodel.planNum" label="璁″垝鏁伴噺" min-width="100px">
-          <template slot-scope="{row}">
+          <!-- <template slot-scope="{row}">
             <span>{{ row.omodel.planNum + row.umodel.name }}</span>
-          </template>
+          </template> -->
         </el-table-column>
         <el-table-column prop="procedureName" label="鐢熶骇鍛樺伐" show-overflow-tooltip min-width="100px">
           <template slot-scope="{row}">
@@ -218,7 +218,7 @@
   created () {
     this.config({
       module: '鎶曟枡璁板綍',
-      api: '/ext/workorderRecordExt',
+      api: '/ext/workorderRecordPutExt',
       'field.id': 'id',
       'field.main': 'name',
       sorts: [{ direction: 'DESC', property: 'CREATE_TIME' }]

--
Gitblit v1.9.3