#
zjj
1 天以前 7e92ffb424c20b0726e7bec2b6ce06780e9127dd
#
5个文件已修改
11个文件已添加
423 ■■■■■ 已修改文件
App.vue 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
common/request.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/en.json 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
locale/zh-Hans.json 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manifest.json 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package-lock.json 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/index.vue 356 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
static/family/HarmonyOS_Sans_SC_Black.ttf 补丁 | 查看 | 原始文档 | blame | 历史
static/family/HarmonyOS_Sans_SC_Bold.ttf 补丁 | 查看 | 原始文档 | blame | 历史
static/family/HarmonyOS_Sans_SC_Light.ttf 补丁 | 查看 | 原始文档 | blame | 历史
static/img/login_backg.png 补丁 | 查看 | 原始文档 | blame | 历史
static/img/login_eye.png 补丁 | 查看 | 原始文档 | blame | 历史
static/img/login_noteye.png 补丁 | 查看 | 原始文档 | blame | 历史
static/img/login_text.png 补丁 | 查看 | 原始文档 | blame | 历史
static/img/login_top.png 补丁 | 查看 | 原始文档 | blame | 历史
App.vue
@@ -115,6 +115,9 @@
    @import "colorui/icon.css";
    @import "static/css/wms.css/wms.css";
    @import "static/css/common.scss";
    @import "static/family/HarmonyOS_Sans_SC_Bold.ttf"
    /*每个页面公共css */
    body {
@@ -122,7 +125,21 @@
        color: #606266;
        font-family: Helvetica Neue, Helvetica, sans-serif;
    }
    @font-face {
        font-family: a1;
        src: url('static/family/HarmonyOS_Sans_SC_Bold.ttf') format('truetype');
    }
    @font-face {
        font-family: a2;
        src: url('static/family/HarmonyOS_Sans_SC_Black.ttf') format('truetype');
    }
    @font-face {
        font-family: a3;
        src: url('static/family/HarmonyOS_Sans_SC_Light.ttf') format('truetype');
    }
    .nav-list {
        display: flex;
        flex-wrap: wrap;
common/request.js
@@ -15,8 +15,8 @@
    return new Promise((resolve, reject) => {
        const token = uni.getStorageSync('token');
        // const URL = 'http://47.76.147.249:8080/rsf-server/pda' + url;
        const URL = 'http://test.zoneyung.net:8080/rsf-server/pda' + url;
        // const URL = 'http://127.0.0.1:8080/rsf-server/pda' + url;
        // const URL = 'http://test.zoneyung.net:8080/rsf-server/pda' + url;
        const URL = 'http://127.0.0.1:8080/rsf-server/pda' + url;
        uni.request({
            url: URL,
            data: postData,
locale/en.json
@@ -11,8 +11,8 @@
  "login":{
      "login": "login",
      "loging": "loging",
      "user": "user",
      "pwd": "pwd",
      "user": "username",
      "pwd": "password",
      "inputUser": "Please enter your account",
      "inputPwd":"Please enter your password",
    "remPwd":"remember password"
@@ -30,7 +30,10 @@
    "stationUnbinding":"Station Unbinding",
    "bindAndInbound":"Binding And Inbound",
    "quickPicking":"Quick Picking",
    "outLogin":"Login Out"
    "outLogin":"Login Out",
    "language-change-confirm":"chenge",
    "hello":"Hello, welcome to log in to the WMS system!",
    "intro":"Make manufacturing and logistics more efficient"
      
      
  },
locale/zh-Hans.json
@@ -31,7 +31,10 @@
        "stationUnbinding":"站点解绑",
        "bindAndInbound":"绑定&入库",
        "quickPicking":"快速拣货",
        "outLogin":"退出登录"
        "outLogin":"退出登录",
        "language-change-confirm":"确定切换?",
        "hello":"您好,欢迎登录WMS系统!",
        "intro":"让制造与物流更高效"
        
        
    },
manifest.json
@@ -1,9 +1,9 @@
{
    "name" : "%app.name%",
    "name" : "中扬wms",
    "appid" : "__UNI__DA5854D",
    "description" : "",
    "versionName" : "20250225A",
    "versionCode" : 146,
    "versionName" : "20250613",
    "versionCode" : 100,
    "transformPx" : false,
    /* 5+App特有相关 */
    "app-plus" : {
package-lock.json
New file
@@ -0,0 +1,19 @@
{
  "name": "pda-master",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "dependencies": {
        "vue-i18n": "^8.2.1"
      }
    },
    "node_modules/vue-i18n": {
      "version": "8.28.2",
      "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.28.2.tgz",
      "integrity": "sha512-C5GZjs1tYlAqjwymaaCPDjCyGo10ajUphiwA922jKt9n7KPpqR7oM1PCwYzhB/E7+nT3wfdG3oRre5raIT1rKA==",
      "deprecated": "Vue I18n v8.x has reached EOL and is no longer actively maintained. About maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html",
      "license": "MIT"
    }
  }
}
package.json
New file
@@ -0,0 +1,5 @@
{
  "dependencies": {
    "vue-i18n": "^8.2.1"
  }
}
pages/login/index.vue
New file
@@ -0,0 +1,356 @@
<template>
    <view class="bodyView">
        <view class="topView">
            <cover-image src="/static/img/login_top.png">
            </cover-image>
        </view>
        <view class="logoView">
            <cover-image src="/static/img/newLogo.png">
            </cover-image>
        </view>
        <view class="bottomView">
            <view class="itemView" style="margin-bottom: 40px;">
                <view class="helloText">{{$t('index.hello')}}</view>
                <view class="introText">{{$t('index.intro')}}</view>
            </view>
            <view class="itemView">
                <view class="textType3">{{$t('login.user')}}:</view>
                <view class="input-wrapper">
                    <input class="uni-input" v-model="user.userName" focus :placeholder="$t('login.inputUser')" />
                </view>
            </view>
            <view class="itemView">
                <view class="textType3">{{$t('login.pwd')}}:</view>
                <view class="input-wrapper">
                    <input class="uni-input" v-model="user.password" :placeholder="$t('login.inputPwd')" :password="!showPassword" />
                    <image src="/static/img/login_noteye.png" class="eye-icon" v-if="showPassword"
                        @click="changePassword"></image>
                    <image src="/static/img/login_eye.png" class="eye-icon" v-if="!showPassword"
                        @click="changePassword"></image>
                </view>
            </view>
            <view class="langAndRemView">
                <view class="check">
                    <view >
                        <view>{{$t('login.remPwd')}}</view>
                    </view>
                    <view>
                        <switch :checked='remberPassword' color="#FFCC33" style="transform:scale(0.7)" @change="remberChange" />
                    </view>
                </view>
                <view class="langView">
                    <!-- 语言选择下拉菜单 -->
                    <view class="language-dropdown">
                        <view class="selected-language" @click="toggleLanguageDropdown">
                            <text>{{getCurrentLanguageText()}}</text>
                            <uni-icons type="bottom" size="14" color="#707070"></uni-icons>
                        </view>
                        <view class="language-options" v-if="showLanguageDropdown">
                            <view class="language-option" v-for="(item, index) in locales" :key="index" @click="onLocaleChange(item)">
                                <text>{{item.text}}</text>
                                <uni-icons type="checkmarkempty" size="14" color="#007AFF" v-if="item.code == applicationLocale"></uni-icons>
                            </view>
                        </view>
                    </view>
                </view>
            </view>
            <view class="itemView">
                <button class="loadingButton"  :loading="loading">{{btnText}}</button>
            </view>
        </view>
    </view>
</template>
<script>
    import md5 from '../../static/js/md5.js'
    import {
        request
    } from '../../common/request.js'
export default{
    data(){
        return{
            showPassword: false,
            loading: false,
            showLanguageDropdown: false,
            loginButton: 'login.login',
            systemLocale: '',
            applicationLocale: '',
            remberPassword: true,
            user: {
                userName: '',
                password: '',
            },
        }
    },
    computed:{
      locales() {
        return [{
            text: this.$t('locale.auto'),
            code: 'auto'
          }, {
            text: this.$t('locale.en'),
            code: 'en'
          },
          {
            text: this.$t('locale.zh-hans'),
            code: 'zh-Hans'
          },
          {
            text: this.$t('locale.zh-hant'),
            code: 'zh-Hant'
          },
          {
            text: this.$t('locale.ja'),
            code: 'ja'
          }
        ]
      },
      btnText() {
              return this.$t(this.loginButton);
        }
    },
    onLoad(){
        let systemInfo = uni.getSystemInfoSync();
        this.systemLocale = systemInfo.language;
        this.applicationLocale = uni.getLocale();
        this.isAndroid = systemInfo.platform.toLowerCase() === 'android';
        uni.onLocaleChange((e) => {
          this.applicationLocale = e.locale;
        })
    },
    methods:{
        remberChange(e) {
            this.remberPassword = !this.remberPassword
        },
        // 显示/隐藏密码
        changePassword() {
            this.showPassword = !this.showPassword;
        },
        localChange() {
            console.log(this.local)
          if (this.isAndroid) {
            uni.showModal({
              content: this.$t('index.language-change-confirm'),
              success: (res) => {
                if (res.confirm) {
                  uni.setLocale(this.local.value);
                }
              }
            })
          } else {
            uni.setLocale(this.local.value);
            this.$i18n.locale = this.local.value;
          }
        },
        // 切换语言下拉菜单显示状态
        toggleLanguageDropdown() {
            this.showLanguageDropdown = !this.showLanguageDropdown;
        },
        // 获取当前选择的语言文本
        getCurrentLanguageText() {
            const currentLocale = this.locales.find(item => item.code === this.applicationLocale);
            return currentLocale ? currentLocale.text : this.$t('locale.auto');
        },
        // 语言选择改变
        onLocaleChange(e) {
            if (this.isAndroid) {
                uni.showModal({
                    content: this.$t('index.language-change-confirm'),
                    success: (res) => {
                        if (res.confirm) {
                            uni.setLocale(e.code);
                            this.showLanguageDropdown = false;
                        }
                    }
                })
            } else {
                uni.setLocale(e.code);
                this.$i18n.locale = e.code;
                this.showLanguageDropdown = false;
            }
        },
    }
}
</script>
<style>
    .helloText{
        font-family: a2;
        font-size: 20px;
        margin-top: 10px;
        margin-bottom: 5px;
    }
    .introText{
        font-family: a3;
        font-size: 15px;
        color: #ababab;
    }
    .textType3{
        font-family: a3;
    }
    .bodyView{
        display: flex;
        flex-direction: column;
        background-image: url("/static/img/login_backg.png");
        background-repeat: no-repeat;
        background-size: cover;
        background-position: center;
        height: 100vh;
        width: 100%;
    }
    .topView{
        flex: 7;
    }
    .topView cover-image{
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    .logoView{
        flex: 1;
        display: flex;
        justify-content: flex-end;
        align-items: center;
    }
    .logoView cover-image{
        width: 33%;
        height: 35px;
        object-fit: cover;
        margin-right: 20px;
    }
    .bottomView{
        flex: 15;
        display: flex;
        flex-direction: column;
        justify-content: flex-start;
        align-items: center;
    }
    .itemView{
        width: 90%;
        height: 50px;
        margin-bottom: 30px;
    }
    .langAndRemView{
        width: 90%;
        display: flex;
        justify-content: space-between;
        align-items: center;
    }
    .langView{
        width: 30%;
    }
    .textImage{
        width: 60%;
        height: 42px;
        object-fit: cover;
        margin-top: 20px;
        margin-bottom: 30px;
    }
    .input-wrapper {
        /* #ifndef APP-NVUE */
        display: flex;
        /* #endif */
        padding: 8px 13px;
        flex-direction: row;
        flex-wrap: nowrap;
        background-color: #FFFFFF;
        border-radius: 10px;
        height: 45px;
        align-items: center;
        margin-top: 5px;
    }
    .uni-input {
        height: 28px;
        line-height: 28px;
        font-size: 15px;
        padding: 0px;
        flex: 1;
        background-color: #FFFFFF;
    }
    .uni-icon {
        font-family: uniicons;
        font-size: 24px;
        font-weight: normal;
        font-style: normal;
        width: 24px;
        height: 24px;
        line-height: 24px;
        color: #999999;
    }
    .uni-eye-active {
        color: #007AFF;
    }
    .eye-icon {
        width: 20px;
        height: 13px;
        margin-left: 5px;
    }
    .loadingButton{
        background-color: #ffda1e;
    }
    .check {
        height: 100%;
        display: flex;
        font-size: 18px;
        color: #606266;
        justify-content: flex-start;
        align-items: center;
    }
    /* 语言选择下拉菜单 */
    .language-dropdown {
        position: relative;
        margin-bottom: 20rpx;
        z-index: 10;
    }
    .selected-language {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 15rpx 20rpx;
        background-color: #f8f8f8;
        border-radius: 8rpx;
        border: 1px solid #e0e0e0;
    }
    .language-options {
        position: absolute;
        bottom: 100%;
        left: 0;
        right: 0;
        background-color: #ffffff;
        border-radius: 8rpx;
        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
        border: 1px solid #e0e0e0;
        margin-bottom: 5rpx;
    }
    .language-option {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 15rpx 20rpx;
        border-bottom: 1px solid #f0f0f0;
    }
    .language-option:last-child {
        border-bottom: none;
    }
    .language-option:active {
        background-color: #f5f5f5;
    }
</style>
static/family/HarmonyOS_Sans_SC_Black.ttf
Binary files differ
static/family/HarmonyOS_Sans_SC_Bold.ttf
Binary files differ
static/family/HarmonyOS_Sans_SC_Light.ttf
Binary files differ
static/img/login_backg.png
static/img/login_eye.png
static/img/login_noteye.png
static/img/login_text.png
static/img/login_top.png