From 50b0f1787720062df58bf9be64b0aa8403955765 Mon Sep 17 00:00:00 2001
From: Mr.Shi <1878285526@qq.com>
Date: 星期五, 25 八月 2023 18:27:13 +0800
Subject: [PATCH] h5

---
 h5_standard/src/views/workOrder/reportingForWork.vue     |    6 
 minipro_standard/manifest.json                           |    2 
 h5_standard/src/views/index.vue                          |    2 
 h5_standard/src/router/module/index.ts                   |    9 
 h5_standard/src/views/plannedProgress/details.vue        |   57 ++
 minipro_standard/pages/index/index.vue                   |   79 +---
 h5_standard/src/apis/index.ts                            |   20 +
 minipro_standard/pages.json                              |  139 ++++--
 minipro_standard/pages/updateMailbox/updateMailbox.vue   |  130 +++++++
 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 
 h5_standard/src/views/LogInAgain.vue                     |    2 
 h5_standard/src/views/children.vue                       |    2 
 minipro_standard/main.js                                 |    4 
 minipro_standard/pages/updatePhone/updatePhone.vue       |  127 +++++++
 h5_standard/.env                                         |    2 
 minipro_standard/App.vue                                 |    1 
 minipro_standard/pages/mine/mine.vue                     |   35 +
 h5_standard/src/utils/request.ts                         |    5 
 h5_standard/src/store/index.ts                           |    2 
 h5_standard/src/views/appletLogin.vue                    |  191 ++++++++++
 minipro_standard/pages/personal/personal.vue             |   89 ++++
 h5_standard/src/utils/utils.ts                           |    2 
 minipro_standard/pages/changePassword/changePassword.vue |  128 +++++++
 26 files changed, 910 insertions(+), 150 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>

--
Gitblit v1.9.3