chenhaozhe
2025-11-25 6f17e42e2463aee9804f50bfd0d5a8bcb1f7d7c2
pages/index/login.vue
@@ -1,330 +1,469 @@
<template>
   <view class="content">
      <image class="bg-img" src="../../static/login.jpg"></image>
      <view class="container">
         <view class="title">智云L-MES制造执行系统</view>
         <view class="box">
            <view class="logo">
               <image src="../../static/logo.png" mode=""></image>
            </view>
            <view class="login">
<!--                <view class="item">
                  <view class="left">当前帐套:</view>
                  <picker :range="arrayDataBases" :value="DataBases" @change="DataBasesChange">
                     <view class="right" style="display: flex;align-items: center;">
                        <input type="text" disabled v-model="DataBases" placeholder="请选择当前帐套">
                        <uni-icons type="forward" color="#808080" style="border-left: 1px solid #aaaaaa;padding: 0 8rpx;" size="18"></uni-icons>
                     </view>
                  </picker>
               </view> -->
               <view class="item">
                  <view class="left">当前组织:</view>
                  <picker :range="arrayOrganization" :value="Organization" @change="OrganizationChange">
                     <view class="right" style="display: flex;align-items: center;">
                        <input type="text" disabled v-model="Organization" placeholder="请选择当前组织">
                        <uni-icons type="forward" color="#808080" style="border-left: 1px solid #aaaaaa;padding: 0 8rpx;" size="18"></uni-icons>
                     </view>
                  </picker>
               </view>
               <view class="item">
                  <view class="left">用户名:</view>
                  <view class="right">
                     <input type="text" v-model="UserName">
                  </view>
               </view>
               <view class="item">
                  <view class="left">密  码:</view>
                  <view class="right">
                     <input type="password" v-model="PassWord">
                  </view>
               </view>
<!--                <view class="api">
                  当前服务器地址:{{serverUrl}}
               </view>
               <view class="apibtn" @tap="changeApi=true">修改服务器地址</view> -->
            </view>
         </view>
         <hFormAlert v-if="changeApi" placeholder="请输入服务器地址" @confirm="confirm" @cancel="cancel"></hFormAlert>
         <view class="btn" @tap="submit">登 录</view>
         <view class="btn apibtn" @tap="changeApi=true">服务器设置</view>
      </view>
   </view>
    <view class="content">
        <image class="bg-img" src="../../static/login.jpg"></image>
        <view class="container">
            <view class="title">智云L-MES制造执行系统</view>
            <view class="box">
                <view class="logo">
                    <image src="../../static/logo.png" mode=""></image>
                </view>
                <view class="login">
                    <!--                     <view class="item">
                        <view class="left">当前帐套:</view>
                        <picker :range="arrayDataBases" :value="DataBases" @change="DataBasesChange">
                            <view class="right" style="display: flex;align-items: center;">
                                <input type="text" disabled v-model="DataBases" placeholder="请选择当前帐套">
                                <uni-icons type="forward" color="#808080" style="border-left: 1px solid #aaaaaa;padding: 0 8rpx;" size="18"></uni-icons>
                            </view>
                        </picker>
                    </view> -->
                    <view class="item">
                        <view class="left">当前组织:</view>
                        <picker :range="arrayOrganization" :value="Organization" @change="OrganizationChange">
                            <view class="right" style="display: flex;align-items: center;">
                                <input type="text" disabled v-model="Organization" placeholder="请选择当前组织">
                                <uni-icons type="forward" color="#808080"
                                    style="border-left: 1px solid #aaaaaa;padding: 0 8rpx;" size="18"></uni-icons>
                            </view>
                        </picker>
                    </view>
                    <view class="item">
                        <view class="left">用户名:</view>
                        <view class="right">
                            <input type="text" v-model="UserName">
                        </view>
                    </view>
                    <view class="item">
                        <view class="left">密 码:</view>
                        <view class="right">
                            <input type="password" v-model="PassWord">
                        </view>
                    </view>
                    <!--                     <view class="api">
                        当前服务器地址:{{serverUrl}}
                    </view>
                    <view class="apibtn" @tap="changeApi=true">修改服务器地址</view> -->
                </view>
            </view>
            <uni-popup ref="popup" type="center">
                <uni-popup-dialog title="服务器设置" mode="input" @confirm="confirmHandler" :before-close="true"
                    @close="close">
                    <view class="popup-content">
                        <input type="text" v-model="serverUrlName" placeholder="请输入服务器名称">
                    </view>
                </uni-popup-dialog>
            </uni-popup>
            <view class="btn" @tap="submit">登 录</view>
            <view class="btn apibtn" @click="openServerSettingHandler">服务器设置</view>
        </view>
    </view>
</template>
<script>
   import { setLoginData,setUserInfo} from "@/utils/auth.js";
   import hFormAlert from '@/components/h-form-alert/h-form-alert.vue';
   export default {
      components: {
         hFormAlert
      },
       data() {
           return {
            arrayDataBases:[],
            DataBases:'',
            arrayOrganization:[],
            Organization:'',
            HOrgNameList:[],
            HOrgName:'',
            UserName:'',//admin    001
            PassWord:'',//123456
            changeApi:false,
            serverUrl: uni.getStorageSync('serverUrl')||'http://47.96.97.237/API',
           }
       },
      onLoad() {
         var logindata = uni.getStorageSync('loginData')||''
         // console.log(logindata)
         if(logindata){
            logindata = JSON.parse(logindata)
            this.HOrgName = logindata.HOrgName
            this.Organization = logindata.Organization
            this.UserName = logindata.UserName
            this.PassWord = logindata.PassWord
         }
         this.getOrganization()
         // this.getDataBases()
      },
       methods: {
         confirm(e){
            console.log(e)
            uni.setStorageSync('serverUrl',e)
            this.serverUrl = e
            this.changeApi = false
            this.getOrganization()
         },
         cancel(){
            this.changeApi = false
         },
         getDataBases(){
            uni.request({
                url: this.serverUrl + '/Web/GetDataBases',
                success: (result) => {
                  console.log(result);
                  if (result.count == 1) {
                     for(var i=0;i<res.data.data.length;i++){
                        this.arrayDataBases[i] = result.data.data[i].name;
                     }
                  }
                  console.log(this.arrayDataBases);
                  this.$forceUpdate();
                },
               fail: (res) => {
                   console.log(res);
               },
            });
         },
         DataBasesChange(e){
            console.log(e.detail.value)
            this.DataBases = this.arrayDataBases[e.detail.value]
            uni.setStorageSync('DataBases', this.DataBases);
         },
         getOrganization(){
            uni.request({
                url: this.serverUrl + '/Web/GetOrganizations',
                success: (res) => {
                    console.log(res.data.data);
                  for(var i=0;i<res.data.data.length;i++){
                     this.arrayOrganization[i] = res.data.data[i].Name
                     this.HOrgNameList[i] = res.data.data[i].ID
                  }
                  this.$forceUpdate();
                },
               fail: (res) => {
                   console.log(res);
                  uni.showToast({
                     title:'获取组织失败,请检查服务器地址',
                     icon:'none'
                  })
               },
            });
         },
         OrganizationChange(e){
            // console.log(e.detail.value)
            this.Organization = this.arrayOrganization[e.detail.value]
            this.HOrgName = this.HOrgNameList[e.detail.value]
         },
         submit(){
            if(!this.Organization){
               uni.showToast({
                  title:'请选择组织',
                  icon:'none'
               })
            }else if(!this.UserName){
               uni.showToast({
                  title:'请输入用户名',
                  icon:'none'
               })
            }else if(!this.PassWord){
               uni.showToast({
                  title:'请输入密码',
                  icon:'none'
               })
            }else{
               uni.showLoading({
                  title:'登录中...',
                  mask:true
               })
               var data = {
                  UserName: this.UserName,
                  PassWord: this.PassWord,
                  HOrgName: this.HOrgName,
                  Organization: this.Organization
               }
               uni.setStorageSync('loginData', JSON.stringify(data));
               uni.request({
                  url: this.serverUrl + '/Web/GetUser',
                  method:'GET',
                  data:data,
                  success: (res) => {
                     console.log(res)
                     uni.hideLoading()
                     uni.showToast({
                        title:res.data.Message,
                        icon:'none'
                     })
                     if(res.data.count == 1){
                        setLoginData(data)
                        setUserInfo(res.data.data[0])
                        uni.setStorageSync('HUserName', res.data.data[0].Czymc);
                        uni.setStorageSync('HBillerID', res.data.data[0].HK3UserID);
                        uni.setStorageSync('SourceFlag', false);
                        uni.setStorageSync('login', "login");
                        uni.setStorageSync('Organization', this.Organization);
                        uni.setStorageSync('OrganizationID', this.HOrgName);
                        uni.reLaunch({
                           url:'/pages/index/index'
                        })
                     }
                  },
                  fail: (res) => {
                     console.log(res);
                     uni.hideLoading()
                     uni.showToast({
                        title:'接口请求失败',
                        icon:'none'
                     })
                  },
               });
            }
         }
       }
   }
    import {
        setLoginData,
        setUserInfo
    } from "@/utils/auth.js";
    import hFormAlert from '@/components/h-form-alert/h-form-alert.vue';
    import {
        CommonUtils
    } from "../../utils/common";
    export default {
        components: {
            hFormAlert
        },
        data() {
            return {
                CommonUtils,
                arrayDataBases: [],
                DataBases: '',
                serverUrlandName: {
                    "浙江智云迈思": 'http://47.96.97.237/API/',
                    "温州海诚光学": 'http://122.228.39.234:7177/API/',
                    "宁波惠康工业": 'http://172.16.72.30:6699/API/',
                    "余姚兴达起动器": 'http://121.37.133.104/API/',
                "李林俊本地测试": 'http://localhost:8082/LuBaoAPI/',
               "苏州卫智科技": 'http://221.224.60.42:8082/API_WW/',
               "杭州凯贝奈特": 'http://192.168.50.253:8080/API/',
               "杭州凯贝奈特外网": 'http://erp.hzcabinet.cn:9090/API/',
               "翁涛涛本地测试": 'http://localhost:81/API/',
               "陈镐哲本地测试": 'http://localhost:81/API/',
               "张瑞广本地测试": 'http://localhost:8082/API/',
               "余思杰本地测试": 'http://localhost:8082/LuBaoAPI/',
                },
                serverUrlName: '浙江智云迈思',
                arrayOrganization: [],
                Organization: '',
                HOrgNameList: [],
                HOrgName: '',
                UserName: '', //admin    001
                PassWord: '', //123456
                serverUrl: uni.getStorageSync('serverUrl') || 'http://47.96.97.237/API/',
                serverUrlCache: '',
            }
        },
        onShow() {
            var logindata = uni.getStorageSync('loginData') || ''
            // console.log(logindata)
            if (logindata) {
                logindata = JSON.parse(logindata)
                this.HOrgName = logindata.HOrgName
                this.Organization = logindata.Organization
                this.UserName = logindata.HUserNumber
                this.PassWord = logindata.HPassWord
                // this.UserName = logindata.UserName
                // this.PassWord = logindata.PassWord
            }
            this.getOrganization()
            this.getDataBases()
        },
        methods: {
            async InitOrgination() {
                console.log("初始化组织")
                await this.$nextTick(() => {
                    this.Organization = this.arrayOrganization[0]
                    this.HOrgName = this.HOrgNameList[0]
                    let org = uni.getStorageSync('Organization')
                    let orgName = uni.getStorageSync('OrganizationID')
                    let orgHas = Array.from(this.arrayOrganization).findIndex((e) => e == org)
                    if (org && (orgHas != -1)) {
                        this.Organization = org
                        this.HOrgName = orgName
                    }
                })
            },
            confirmHandler() {
                console.log(this.serverUrlName)
                console.log(this.serverUrlandName[this.serverUrlName])
                let url = this.serverUrlandName[this.serverUrlName];
                if (url != undefined) {
                    uni.setStorageSync('serverUrl', url)
                    this.serverUrl = url
                    this.changeApi = false
                    this.getOrganization()
                    this.$refs.popup.close()
                } else {
                    uni.showToast({
                        title: '服务器名称错误请重新输入',
                        icon: 'none',
                    })
                }
            },
            close() {
                this.$refs.popup.close()
            },
            openServerSettingHandler() {
                this.$refs.popup.open()
            },
            getDataBases() {
                uni.request({
                    url: this.serverUrl + '/Web/GetDataBases',
                    success: (result) => {
                        console.log(result);
                        if (result.count == 1) {
                            for (var i = 0; i < res.data.data.length; i++) {
                                this.arrayDataBases[i] = result.data.data[i].name;
                            }
                        }
                        console.log(this.arrayDataBases);
                        this.$forceUpdate();
                    },
                    fail: (res) => {
                        console.log(res);
                    },
                });
            },
            DataBasesChange(e) {
                console.log(e.detail.value)
                this.DataBases = this.arrayDataBases[e.detail.value]
                uni.setStorageSync('DataBases', this.DataBases);
            },
            getOrganization() {
                this.arrayOrganization = []
                uni.request({
                    url: this.serverUrl + '/Web/GetOrganizations',
                    success: (res) => {
                        console.log(res.data.data);
                        for (var i = 0; i < res.data.data.length; i++) {
                            this.arrayOrganization[i] = res.data.data[i].Name
                            this.HOrgNameList[i] = res.data.data[i].ID
                        }
                        // this.Organization = res.data.data[0].Name
                        // this.HOrgName = res.data.data[0].ID
                        this.$forceUpdate();
                        this.InitOrgination()
                    },
                    fail: (res) => {
                        console.log(res);
                        uni.showToast({
                            title: '获取组织失败,请检查服务器地址',
                            icon: 'none'
                        })
                    },
                });
            },
            OrganizationChange(e) {
                // console.log(e.detail.value)
                this.Organization = this.arrayOrganization[e.detail.value]
                this.HOrgName = this.HOrgNameList[e.detail.value]
            },
            submit() {
                if (!this.Organization) {
                    uni.showToast({
                        title: '请选择组织',
                        icon: 'none'
                    })
                } else if (!this.UserName) {
                    uni.showToast({
                        title: '请输入用户名',
                        icon: 'none'
                    })
                } else if (!this.PassWord) {
                    uni.showToast({
                        title: '请输入密码',
                        icon: 'none'
                    })
                } else {
                    uni.showLoading({
                        title: '登录中...',
                        mask: true
                    })
                    var data =
                    {
                        HUserNumber: this.UserName,
                        HPassWord: this.PassWord,
                        HStockOrgID: this.HOrgName,
                        HStockOrgName: this.Organization
                    }
                    //     UserName: this.UserName,
                    //     PassWord: this.PassWord,
                    //     HOrgName: this.HOrgName,
                    //     Organization: this.Organization
                    // }
                    uni.setStorageSync('loginData', JSON.stringify(data));
                    uni.request({
                        url: this.serverUrl + 'WEBSController/GetUser_Json',
                        method: 'GET',
                        data: data,
                        success: (res) => {
                            console.log(res)
                            uni.hideLoading()
                            uni.showToast({
                                title: res.data.Message,
                                icon: 'none'
                            })
                            if (res.data.count == 1) {
                                setLoginData(data)
                                setUserInfo(res.data.data[0])
                                uni.setStorageSync('HUserName', res.data.data[0].Czymc);
                                uni.setStorageSync('HBillerID', res.data.data[0].HK3UserID);
                                uni.setStorageSync('SourceFlag', false);
                                uni.setStorageSync('login', "login");
                                uni.setStorageSync('Organization', this.Organization);
                                uni.setStorageSync('OrganizationID', this.HOrgName);
                                this.CommonUtils.setServerUrl(this.serverUrl)
                                uni.reLaunch({
                                    url: '/pages/index/index'
                                })
                            }
                        },
                        fail: (res) => {
                            console.log(res);
                            uni.hideLoading()
                            uni.showToast({
                                title: '接口请求失败',
                                icon: 'none'
                            })
                        },
                    });
                    // uni.request({
                    //     url: this.serverUrl + '/Web/GetUser',
                    //     method: 'GET',
                    //     data: data,
                    //     success: (res) => {
                    //         console.log(res)
                    //         uni.hideLoading()
                    //         uni.showToast({
                    //             title: res.data.Message,
                    //             icon: 'none'
                    //         })
                    //         if (res.data.count == 1) {
                    //             setLoginData(data)
                    //             setUserInfo(res.data.data[0])
                    //             uni.setStorageSync('HUserName', res.data.data[0].Czymc);
                    //             uni.setStorageSync('HBillerID', res.data.data[0].HK3UserID);
                    //             uni.setStorageSync('SourceFlag', false);
                    //             uni.setStorageSync('login', "login");
                    //             uni.setStorageSync('Organization', this.Organization);
                    //             uni.setStorageSync('OrganizationID', this.HOrgName);
                    //             this.CommonUtils.setServerUrl(this.serverUrl)
                    //             uni.reLaunch({
                    //                 url: '/pages/index/index'
                    //             })
                    //         }
                    //     },
                    //     fail: (res) => {
                    //         console.log(res);
                    //         uni.hideLoading()
                    //         uni.showToast({
                    //             title: '接口请求失败',
                    //             icon: 'none'
                    //         })
                    //     },
                    // });
                }
            }
        }
    }
</script>
<style lang="scss" scoped>
.bg-img{
    position: fixed;
    width: 100%;
    height: 100%;
    top: 0;
    left: 0;
    z-index: -1;
}
.container{
   width: 100%;
   height: 100%;
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
   .title{
      margin-top: 174rpx;
      font-size: 47rpx;
      font-weight: bold;
      color: #FFFFFF;
   }
   .box{
      width: 682rpx;
      position: relative;
      top: 120rpx;
      display: flex;
      justify-content: center;
      .logo{
         width: 155rpx;
         height: 155rpx;
         padding: 10rpx;
         position: absolute;
         z-index: 9;
         background-color: rgba(255, 255, 255, 0.5);
         border-radius: 100%;
         image{
            width: 100%;
            height: 100%;
            border-radius: 100%;
            background-color: #f0f3f7;
         }
      }
      .login{
         width: 100%;
         height: 480rpx;
         position: absolute;
         top: 90rpx;
         z-index: 0;
         background: #FFFFFF;
         border-radius: 25rpx 0 25rpx 0;
         box-shadow: 0 6rpx 24rpx 8rpx rgba(21, 99, 210, 0.14);
         padding-top: 160rpx;
         .item{
            display: flex;
            align-items: center;
            justify-content: flex-end;
            margin-right: 38rpx;
            margin-bottom: 70rpx;
            .left{
               font-size: 34rpx;
               font-weight: 400;
               color: #3C3C3C;
            }
            .right{
               width: 441rpx;
               height: 68rpx;
               background: #EBEBEB;
               border-radius: 10rpx;
               input{
                  height: 100%;
                  padding: 0 30rpx;
                  font-size: 30rpx;
               }
            }
         }
         // .api{
         //    margin-left: 30rpx;
         //    font-size: 27rpx;
         //    color: #888;
         // }
         // .apibtn{
         //    text-align: center;
         //    font-size: 27rpx;
         //    margin-top: 14rpx;
         //    color: #066fb8;
         //    text-decoration: underline; /* 添加下划线 */
         //    font-style: italic; /* 将字体变为斜体 */
         // }
      }
   }
   .btn{
      width: 540rpx;
      height: 92rpx;
      line-height: 92rpx;
      margin-top: 940rpx;
      background: #78CEFD;
      box-shadow: 0rpx 0rpx 44rpx 7rpx rgba(120,206,253,0.3);
      border-radius: 10rpx;
      font-weight: 400;
      color: #FEFEFE;
      text-align: center;
      font-size: 36rpx;
   }
   .apibtn{
      margin-top: 50rpx;
      background: #eec18e;
      box-shadow: 0rpx 0rpx 44rpx 7rpx rgba(253, 186, 118, 0.3);
   }
}
</style>
    .bg-img {
        position: fixed;
        width: 100%;
        height: 100%;
        top: 0;
        left: 0;
        z-index: -1;
    }
    .container {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        .title {
            margin-top: 174rpx;
            font-size: 47rpx;
            font-weight: bold;
            color: #FFFFFF;
        }
        .box {
            width: 682rpx;
            position: relative;
            top: 120rpx;
            display: flex;
            justify-content: center;
            .logo {
                width: 155rpx;
                height: 155rpx;
                padding: 10rpx;
                position: absolute;
                z-index: 9;
                background-color: rgba(255, 255, 255, 0.5);
                border-radius: 100%;
                image {
                    width: 100%;
                    height: 100%;
                    border-radius: 100%;
                    background-color: #f0f3f7;
                }
            }
            .login {
                width: 100%;
                height: 480rpx;
                position: absolute;
                top: 90rpx;
                z-index: 0;
                background: #FFFFFF;
                border-radius: 25rpx 0 25rpx 0;
                box-shadow: 0 6rpx 24rpx 8rpx rgba(21, 99, 210, 0.14);
                padding-top: 160rpx;
                .item {
                    display: flex;
                    align-items: center;
                    justify-content: flex-end;
                    margin-right: 38rpx;
                    margin-bottom: 70rpx;
                    .left {
                        font-size: 34rpx;
                        font-weight: 400;
                        color: #3C3C3C;
                    }
                    .right {
                        width: 441rpx;
                        height: 68rpx;
                        background: #EBEBEB;
                        border-radius: 10rpx;
                        input {
                            height: 100%;
                            padding: 0 30rpx;
                            font-size: 30rpx;
                        }
                    }
                }
                // .api{
                //     margin-left: 30rpx;
                //     font-size: 27rpx;
                //     color: #888;
                // }
                // .apibtn{
                //     text-align: center;
                //     font-size: 27rpx;
                //     margin-top: 14rpx;
                //     color: #066fb8;
                //     text-decoration: underline; /* 添加下划线 */
                //     font-style: italic; /* 将字体变为斜体 */
                // }
            }
        }
        .btn {
            width: 540rpx;
            height: 92rpx;
            line-height: 92rpx;
            margin-top: 940rpx;
            background: #78CEFD;
            box-shadow: 0rpx 0rpx 44rpx 7rpx rgba(120, 206, 253, 0.3);
            border-radius: 10rpx;
            font-weight: 400;
            color: #FEFEFE;
            text-align: center;
            font-size: 36rpx;
        }
        .apibtn {
            margin-top: 50rpx;
            background: #eec18e;
            box-shadow: 0rpx 0rpx 44rpx 7rpx rgba(253, 186, 118, 0.3);
        }
    }
    .popup-content {
        box-sizing: border-box;
        display: flex;
        flex-direction: column;
        gap: 30rpx;
        .pop-item {
            border: #EBEBEB 2rpx solid;
            border-radius: 10rpx;
            padding: 14rpx 8rpx;
        }
        >picker {
            background-color: #EBEBEB;
        }
    }
</style>