Browse Source

订单模板导出,订单导入

yejian 3 years ago
parent
commit
3d9ae26712

+ 843 - 842
imcs-ui/src/views/login/index.vue

@@ -1,842 +1,843 @@
-<template>
-  <div class="login-container">
-    <div class="login-info">
-    	<img :src="require(`@/assets/logo/logo1.png`)"/>
-    	<div>
-	    	<div class="title">{{$t('login.shuoming.title')}}</div>
-	      <div class="title">{{$t('login.shuoming.tips')}}</div>
-      </div>
-    </div>
-    <el-form
-      :model="loginForm"
-      :rules="rules"
-      autocomplete="off"
-      class="login-form"
-      label-position="left"
-      ref="loginForm"
-    >
-	    <el-tabs v-model="activeName" @tab-click="handleClick">
-		    <el-tab-pane label="扫码登录" name="first">
-		    	<div class="saomaDom">
-		    		<img :src="require(`@/assets/logo/saoma.png`)"/>
-            <el-select
-              v-model="opValue"
-              :span="2"
-              @change="selectChange"
-              :placeholder="$t('common.pleaseSelect')"
-            >
-              <el-option
-                v-for="item in options"
-                :key="item.value"
-                :label="item.name"
-                :value="item.value"
-              >
-              </el-option>
-            </el-select>
-		    		<div>请选择上下料站并扫码登录<el-input id="qcodeUserInput" name="qcodeUserInput"  type="password" style="z-index: -100" v-model="loginForm.qcodeUser" onfocus="this.style.imeMode = 'disabled'"  @input="showQcodeUser()"/></div>
-		    	</div>
-		    </el-tab-pane>
-		    <el-tab-pane label="密码登录" name="second">
-		      <div class="title-container">
-		        <h3 class="title">{{$t('login.title')}}</h3>
-		        <lang-select class="set-language"/>
-		      </div>
-		      <span v-if="login.type === 'up'">
-		        <el-form-item prop="tenant" v-show="isMultiTenant">
-		          <el-input
-		            :placeholder="$t('login.tenant')"
-		            @keyup.enter.native="handleLogin"
-		            autocomplete="off"
-		            name="tenantView"
-		            prefix-icon="el-icon-user"
-		            ref="tenant"
-		            type="text"
-		            v-model="loginForm.tenantView"
-		          />
-		        </el-form-item>
-		        <el-form-item prop="account">
-		          <el-input
-		            :placeholder="$t('login.username')"
-		            @keyup.enter.native="handleLogin"
-		            autocomplete="off"
-		            name="account"
-		            prefix-icon="el-icon-user"
-		            ref="account"
-		            type="text"
-		            v-model="loginForm.account"
-		          />
-		        </el-form-item>
-		        <el-form-item prop="password">
-		          <el-input
-		            :placeholder="$t('login.password')"
-		            :show-password="true"
-		            @keyup.enter.native="handleLogin"
-		            autocomplete="off"
-		            name="password"
-		            prefix-icon="el-icon-key"
-		            ref="password"
-		            type="password"
-		            v-model="loginForm.password"
-		          />
-		        </el-form-item>
-		        <el-form-item class="code-input" prop="code" v-show="isCaptcha">
-		          <el-input
-		            :placeholder="$t('login.code')"
-		            @keyup.enter.native="handleLogin"
-		            autocomplete="off"
-		            name="code"
-		            prefix-icon="el-icon-lock"
-		            ref="code"
-		            style="width: 70%"
-		            type="text"
-		            v-model="loginForm.code"
-		          />
-		        </el-form-item>
-		        <img
-		          v-show="isCaptcha"
-		          :src="imageCode"
-		          @click="getCodeImage"
-		          alt="codeImage"
-		          class="code-image"
-		        />
-		        <el-button
-		          :loading="loading"
-		          @click.native.prevent="handleLogin"
-		          style="width:100%;margin-bottom:14px;"
-		          type="primary"
-		        >{{ $t("login.logIn") }}</el-button
-		        >
-		      </span>
-		      <span v-if="login.type === 'social'">
-		        {{ $t("login.chooseToSignIn") }}
-		        <div>
-		          <template v-for="(l, index) in logo">
-		            <div :key="index" class="logo-wrapper">
-		              <img
-		                :class="{ radius: l.radius }"
-		                :src="resolveLogo(l.img)"
-		                @click="socialLogin(l.name)"
-		                alt
-		              />
-		            </div>
-		          </template>
-		        </div>
-		      </span>
-		      <span style="margin-top: -1rem" v-if="login.type === 'bind'">
-		        <el-tabs @tab-click="handleTabClick" v-model="tabActiveName">
-		          <el-tab-pane :label="$t('common.bindLogin')" name="bindLogin">
-		            <el-form-item prop="bindAccount">
-		              <el-input
-		                :placeholder="$t('login.account')"
-		                autocomplete="off"
-		                name="bindAccount"
-		                prefix-icon="el-icon-user"
-		                ref="bindAccount"
-		                type="text"
-		                v-model="loginForm.bindAccount"
-		              />
-		            </el-form-item>
-		            <el-form-item prop="bindPassword">
-		              <el-input
-		                :placeholder="$t('login.password')"
-		                :show-password="true"
-		                autocomplete="off"
-		                name="bindPassword"
-		                prefix-icon="el-icon-key"
-		                ref="bindPassword"
-		                type="password"
-		                v-model="loginForm.bindPassword"
-		              />
-		            </el-form-item>
-		            <el-button
-		              :loading="loading"
-		              @click.native.prevent="bindLogin"
-		              style="width:100%;margin-bottom:14px;"
-		              type="primary"
-		            >{{ $t("common.bindLogin") }}</el-button
-		            >
-		          </el-tab-pane>
-		          <el-tab-pane :label="$t('common.signLogin')" name="signLogin">
-		            <el-form-item prop="signAccount">
-		              <el-input
-		                :placeholder="$t('login.account')"
-		                autocomplete="off"
-		                name="signAccount"
-		                prefix-icon="el-icon-user"
-		                ref="signAccount"
-		                type="text"
-		                v-model="loginForm.signAccount"
-		              />
-		            </el-form-item>
-		            <el-form-item prop="signPassword">
-		              <el-input
-		                :placeholder="$t('login.password')"
-		                :show-password="true"
-		                autocomplete="off"
-		                name="signPassword"
-		                prefix-icon="el-icon-key"
-		                ref="signPassword"
-		                type="password"
-		                v-model="loginForm.signPassword"
-		              />
-		            </el-form-item>
-		            <el-button
-		              :loading="loading"
-		              @click.native.prevent="signLogin"
-		              style="width:100%;margin-bottom:14px;"
-		              type="primary"
-		            >{{ $t("common.signLogin") }}</el-button
-		            >
-		          </el-tab-pane>
-		        </el-tabs>
-		      </span>
-		      <!--<el-dropdown class="login-type" placement="top-end">
-		        <span class="el-dropdown-link">
-		          <el-link type="primary">{{ $t("login.ortherLoginType") }}</el-link>
-		        </span>
-		        <el-dropdown-menu slot="dropdown">
-		          <el-dropdown-item
-		            :disabled="login.type === 'up'"
-		            @click.native="login.type = 'up'"
-		          >{{ $t("login.type.up") }}
-		          </el-dropdown-item
-		          >
-		          <el-dropdown-item
-		            :disabled="login.type === 'social'"
-		            @click.native="login.type = 'social'"
-		          >{{ $t("login.type.social") }}
-		          </el-dropdown-item
-		          >
-		        </el-dropdown-menu>
-		      </el-dropdown>-->
-		    </el-tab-pane>
-		  </el-tabs>
-    </el-form>
-    <span class="login-footer">
-      © 2019 - 2022
-      <span>{{$t('login.shuoming.tips')}}</span>
-    </span>
-  </div>
-</template>
-
-<script>
-  import LangSelect from "@/components/LangSelect";
-  import db from "@/utils/localstorage";
-  import {randomNum} from "@/utils";
-  import {socialLoginUrl} from "@/settings";
-  import loginApi from "@/api/Login.js";
-  import oauthApi from '@/api/Oauth'
-  import {Base64} from 'js-base64';
-  import productionResourcesMgrApi from "@/api/resourceProductMgr/productionResourcesMgr";
-
-  export default {
-    name: "Login",
-    components: {LangSelect},
-    data() {
-      return {
-        options: [],
-        opValue:'',
-      	activeName: 'first',
-        //是否启用多租户
-        isMultiTenant:
-         false,
-        isCaptcha:
-          process.env.VUE_APP_IS_CAPTCHA === "true" ? true : false,
-        tabActiveName: "bindLogin",
-        login: {
-          type: "up"
-        },
-        logo: [
-          {img: "gitee.png", name: "gitee", radius: true},
-          {img: "github.png", name: "github", radius: true},
-          {img: "tencent_cloud.png", name: "tencent_cloud", radius: true},
-          {img: "qq.png", name: "qq", radius: false},
-          {img: "dingtalk.png", name: "dingtalk", radius: true},
-          {img: "microsoft.png", name: "microsoft", radius: false}
-        ],
-        loginForm: {
-          account: "zuihou",
-          password: "",   // zuihou
-          tenantView: "0000", //显示用的
-          tenant: "", //传递给后端的
-          key: randomNum(24, 16),
-          code: "",
-          grantType: process.env.VUE_APP_IS_CAPTCHA === "true" ? "captcha" : "password",
-          bindAccount: "",
-          bindPassword: "",
-          signAccount: "",
-          signPassword: "",
-          qcodeUser: "",
-          stationResourceId: "",
-        },
-        rules: {
-          account: {
-            required: true,
-            message: this.$t("rules.require"),
-            trigger: "blur"
-          },
-          tenantView: {
-            required: true,
-            message: this.$t("rules.require"),
-            trigger: "blur"
-          },
-          password: {
-            required: true,
-            message: this.$t("rules.require"),
-            trigger: "blur"
-          },
-          code: {
-            validator: (rule, value, callback) => {
-              if (this.isCaptcha && value === '') {
-                callback(this.$t("rules.require"))
-              } else {
-                callback()
-              }
-              callback()
-            }, trigger: 'blur'
-          },
-          bindAccount: {
-            required: true,
-            message: this.$t("rules.require"),
-            trigger: "blur"
-          },
-          bindPassword: {
-            required: true,
-            message: this.$t("rules.require"),
-            trigger: "blur"
-          },
-          signAccount: [
-            {
-              required: true,
-              message: this.$t("rules.require"),
-              trigger: "blur"
-            },
-            {
-              min: 4,
-              max: 10,
-              message: this.$t("rules.range4to10"),
-              trigger: "blur"
-            }
-          ],
-          signPassword: [
-            {
-              required: true,
-              message: this.$t("rules.require"),
-              trigger: "blur"
-            },
-            {
-              min: 6,
-              max: 20,
-              message: this.$t("rules.range6to20"),
-              trigger: "blur"
-            }
-          ]
-        },
-        authUser: null,
-        loading: false,
-        showDialog: false,
-        redirect: undefined,
-        otherQuery: {},
-        imageCode: "",
-        page: {
-          width: window.screen.width * 0.5,
-          height: window.screen.height * 0.5
-        }
-      };
-    },
-    created() {
-      this.getStations()
-    },
-    mounted() {
-      db.clear();
-      this.getCodeImage();
-      this.$nextTick(
-        window.onload = function () { // 光标默认位置
-          var oInput = document.getElementById('qcodeUserInput');
-          oInput.focus();
-        }
-      )
-    },
-    destroyed() {
-      window.removeEventListener("message", this.resolveSocialLogin);
-    },
-    methods: {
-    	// Tabs切换-事件
-    	handleClick(tab, event) {
-    	    // tab切换初始化focus及内容
-    	    if(tab.name === 'first'){
-              this.$nextTick(
-                  window.onload = function () { // 光标默认位置
-                      document.getElementById('qcodeUserInput').value = "";
-                      var oInput = document.getElementById('qcodeUserInput');
-                      oInput.focus();
-                  }
-              )
-          }
-        console.log(tab, event);
-      },
-
-      getCodeImage() {
-        loginApi
-          .getCaptcha(this.loginForm.key)
-          .then(response => {
-            const res = response.data;
-            if (res.byteLength <= 100) {
-              this.$message({
-                message: this.$t("tips.systemError"),
-                type: "error"
-              });
-            }
-            return (
-              "data:image/png;base64," +
-              btoa(
-                new Uint8Array(res).reduce(
-                  (data, byte) => data + String.fromCharCode(byte),
-                  ""
-                )
-              )
-            );
-          })
-          .then(res => {
-            this.imageCode = res;
-          })
-          .catch(e => {
-            if (e.toString().indexOf("429") !== -1) {
-              this.$message({
-                message: this.$t("tips.tooManyRequest"),
-                type: "error"
-              });
-            } else {
-              this.$message({
-                message: this.$t("tips.getCodeImageFailed"),
-                type: "error"
-              });
-            }
-          });
-      },
-      handleTabClick(tab) {
-        this.tabActiveName = tab.name;
-      },
-      resolveLogo(logo) {
-        return require(`@/assets/logo/${logo}`);
-      },
-      socialLogin(oauthType) {
-        const url = `${socialLoginUrl}/${oauthType}/login`;
-        window.open(
-          url,
-          "newWindow",
-          `resizable=yes, height=${this.page.height}, width=${this.page.width}, top=10%, left=10%, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no`
-        );
-        window.addEventListener("message", this.resolveSocialLogin, false);
-      },
-      resolveSocialLogin(e) {
-        const data = e.data;
-        const that = this;
-        if (data.message === "not_bind") {
-          that.login.type = "bind";
-          const authUser = data.data;
-          that.authUser = authUser;
-          that
-            .$confirm(
-              that.$t("common.current") +
-              authUser.source +
-              that.$t("common.socialAccount") +
-              authUser.nickname +
-              that.$t("common.socialTips"),
-              that.$t("common.tips"),
-              {
-                confirmButtonText: that.$t("common.signLogin"),
-                cancelButtonText: that.$t("common.bindLogin"),
-                type: "warning"
-              }
-            )
-            .then(() => {
-              that.tabActiveName = "signLogin";
-            })
-            .catch(() => {
-              that.tabActiveName = "bindLogin";
-            });
-        } else if (data.message === "social_login_success") {
-          that.saveLoginData(data.data);
-          that.getUserDetailInfo();
-          that.loginSuccessCallback(data.account);
-        } else {
-          // do nothing
-        }
-      },
-      bindLogin() {
-        let account_c = false;
-        let password_c = false;
-        this.$refs.loginForm.validateField("bindAccount", e => {
-          if (!e) {
-            account_c = true;
-          }
-        });
-        this.$refs.loginForm.validateField("bindPassword", e => {
-          if (!e) {
-            password_c = true;
-          }
-        });
-        if (account_c && password_c) {
-          this.loading = true;
-          const that = this;
-          const params = {
-            bindAccount: that.loginForm.bindAccount,
-            bindPassword: that.loginForm.bindPassword,
-            ...that.authUser
-          };
-          params.token = null;
-          that
-            .$post("auth/social/bind/login", params)
-            .then(r => {
-              const data = r.data.data;
-              this.saveLoginData(data);
-              this.getUserDetailInfo();
-              this.loginSuccessCallback(that.loginForm.bindAccount);
-            })
-            .catch(error => {
-              console.error(error);
-              that.loading = false;
-            });
-        }
-      },
-      signLogin() {
-        let account_c = false;
-        let password_c = false;
-        this.$refs.loginForm.validateField("signAccount", e => {
-          if (!e) {
-            account_c = true;
-          }
-        });
-        this.$refs.loginForm.validateField("signPassword", e => {
-          if (!e) {
-            password_c = true;
-          }
-        });
-        if (account_c && password_c) {
-          this.loading = true;
-          const that = this;
-          const params = {
-            bindAccount: that.loginForm.signAccount,
-            bindPassword: that.loginForm.signPassword,
-            ...that.authUser
-          };
-          params.token = null;
-          that
-            .$post("auth/social/sign/login", params)
-            .then(r => {
-              const data = r.data.data;
-              this.saveLoginData(data);
-              this.getUserDetailInfo();
-              this.loginSuccessCallback(that.loginForm.signAccount);
-            })
-            .catch(error => {
-              console.error(error);
-              that.loading = false;
-            });
-        }
-      },
-      handleLogin() {
-        this.loginForm.tenant = `${Base64.encode(this.loginForm.tenantView)}`;
-        this.$refs.loginForm.validate((valid) => {
-          if (valid) {
-            this.loginSubmit();
-          } else {
-            return false
-          }
-        })
-      },
-      loginSubmit() {
-        this.loading = true;
-        const that = this;
-        this.$store.commit("account/setTenant", this.loginForm.tenant);
-        loginApi.login(this.loginForm).then(response => {
-          const res = response.data;
-          if (res.isSuccess) {
-            that.saveLoginData(res.data['token'], res.data['refreshToken'], res.data['expiration']);
-            that.saveUserInfo(res.data);
-            that.getResource();
-          } else {
-            that.getCodeImage();
-          }
-        }).finally(() => that.loading = false);
-      },
-      saveLoginData(token, refreshToken, expiration) {
-        this.$store.commit("account/setToken", token);
-        this.$store.commit("account/setRefreshToken", refreshToken);
-        this.$store.commit("account/setExpireTime", expiration);
-      },
-      saveUserInfo(user) {
-        this.$store.commit("account/setUser", {
-        });
-        this.$store.commit("account/setUser", {
-          id: user.userId,
-          account: user.account,
-          name: user.name,
-          avatar: user.avatar,
-          expire: user.expire,
-          workDescribe: user.workDescribe,
-          roles: user.roles
-        });
-      },
-      getResource() {
-        oauthApi.getResource().then(response => {
-          const res = response.data;
-          if (res.isSuccess) {
-            const permissionsList = res.data;
-            this.$store.commit("account/setPermissions", permissionsList ? permissionsList : []);
-
-            this.loginSuccess();
-          } else {
-            this.getCodeImage();
-          }
-        });
-      },
-      loginSuccess() {
-        this.$message({
-          message: this.$t("tips.loginSuccess"),
-          type: "success"
-        });
-        this.$router.push("/");
-      },
-      loginSuccessCallback(user) {
-        console.log(user);
-      },
-
-      qcodelogin(qcodeUserValue) {
-        this.loading = true;
-        const that = this;
-        this.loginForm.tenant = `${Base64.encode(this.loginForm.tenantView)}`;
-        this.$store.commit("account/setTenant", this.loginForm.tenant);
-        this.loginForm.qcodeUserValue = qcodeUserValue
-        this.loginForm.grantType="password";
-        loginApi.qcodelogin(this.loginForm).then(response => {
-          const res = response.data;
-          if (res.isSuccess) {
-            that.saveLoginData(res.data['token'], res.data['refreshToken'], res.data['expiration']);
-            that.saveUserInfo(res.data);
-            that.getResource();
-          } else {
-            that.getCodeImage();
-          }
-        }).finally(() => that.loading = false);
-      },
-
-      showQcodeUser(){
-        console.log(this.loginForm.qcodeUser.substr(this.loginForm.qcodeUser.length-1,1));
-        if(this.loginForm.qcodeUser.substr(this.loginForm.qcodeUser.length-1,1) == "#"){
-            this.qcodelogin()
-        }
-      },
-
-      getStations() {
-        productionResourcesMgrApi.getStations({}).then((res) => {
-          res = res.data;
-          if (res.isSuccess) {
-            if (res.data.length > 0) {
-              this.options = res.data;
-            }
-          }
-        });
-      },
-      selectChange(value) {
-        console.log(value);
-        this.loginForm.stationResourceId = value;
-        this.$nextTick(
-          window.onload = function () { // 光标默认位置
-            document.getElementById('qcodeUserInput').value = "";
-            var oInput = document.getElementById('qcodeUserInput');
-            oInput.focus();
-          }
-        )
-      },
-    }
-  };
-</script>
-<style lang="scss">
-	.login-form {
-		.el-tabs__item {
-			font-size: 16px;
-			color: white;
-		}
-		.el-tabs__item.is-active {
-			color: #1890ff;
-		}
-		.el-tabs__active-bar {
-			background: none;
-		}
-	}
-</style>
-<style lang="scss" scoped>
-  $bg: #2d3a4b;
-  $dark_gray: #aaa;
-  $light_gray: #eee;
-
-  .login-container {
-  	/*background: url(../../assets/logo/loginBg.gif) 50% no-repeat;
-    background-size: cover;*/
-    /*background: url(../../assets/background.jpg) 50% no-repeat;*/
-   	/*background: url(../../assets/logo/logoBg1.jpg) 50% no-repeat;*/
-   	/*background: url(../../assets/logo/logoBg2.png) 50% no-repeat;
-    background-size: cover;*/
-   	background: #000000;
-
-    width: 100%;
-    height: 100vh;
-		.saomaDom {
-			text-align: center;
-			color: white;
-			cursor: pointer;
-		}
-    .login-info {
-    	display: flex;
-    	align-items: center;
-      position: absolute;
-      left: 10%;
-      top: 44%;
-      margin-top: -100px;
-      color: #fff;
-
-			img{
-				width: 300px;
-				margin-right: 40px;
-			}
-      .title {
-        font-size: 1.8rem;
-        font-weight: 600;
-      }
-			.title:first-child{
-				margin-bottom: 15px;
-			}
-      .sub-title {
-        font-size: 1.5rem;
-        margin: 0.3rem 0 0.7rem 1rem;
-      }
-
-      .desc {
-        font-size: 0.96rem;
-        line-height: 1.9rem;
-      }
-    }
-
-    .login-form {
-      position: absolute;
-      top: 45%;
-      left: 70%;
-      margin: -180px 0 0 -160px;
-      width: 320px;
-      height: 440px;
-      padding: 10px 36px 36px 36px;
-      background: #4F535B;
-      border-radius: 3px;
-
-			.el-tabs__item {
-				font-size: 16px;
-			}
-      .code-input {
-        width: 50%;
-        display: inline-block;
-        vertical-align: middle;
-      }
-
-      .code-image {
-        display: inline-block;
-        vertical-align: top;
-        cursor: pointer;
-      }
-
-      .login-type {
-        text-align: right;
-        display: inline-block;
-        width: 100%;
-      }
-
-      .logo-wrapper {
-        display: inline-block;
-        margin: 10px 0;
-
-        img {
-          width: 1.9rem;
-          display: inline-block;
-          margin: 0.8rem 0.8rem -0.8rem 0.8rem;
-          cursor: pointer;
-
-          &.radius {
-            border-radius: 50%;
-          }
-        }
-      }
-    }
-
-    .login-footer {
-      position: fixed;
-      bottom: 1rem;
-      width: 100%;
-      text-align: center;
-      color: white;
-      font-size: 0.85rem;
-      line-height: 1rem;
-      height: 1rem;
-    }
-
-    .tips {
-      font-size: 14px;
-      color: #fff;
-      margin-bottom: 10px;
-
-      span {
-        &:first-of-type {
-          margin-right: 16px;
-        }
-      }
-    }
-
-    .title-container {
-      position: relative;
-
-      .title {
-        font-size: 20px;
-        color: #FFFFFF;
-        margin: 0 auto 40px auto;
-        text-align: center;
-        font-weight: bold;
-      }
-
-      .set-language {
-        color: #aaa;
-        position: absolute;
-        top: 3px;
-        font-size: 18px;
-        right: 0;
-        cursor: pointer;
-      }
-    }
-
-    .thirdparty-button {
-      position: absolute;
-      right: 0;
-      bottom: 6px;
-    }
-
-    @media only screen and (max-width: 470px) {
-      .thirdparty-button {
-        display: none;
-      }
-    }
-
-    @media screen and (max-width: 1100px) {
-      .login-info {
-        left: 8%;
-      }
-    }
-
-    @media screen and (max-width: 970px) {
-      .login-form {
-        left: 50%;
-      }
-      .login-info {
-        display: none;
-      }
-    }
-  }
-</style>
+<template>
+  <div class="login-container">
+    <div class="login-info">
+    	<img :src="require(`@/assets/logo/logo1.png`)"/>
+    	<div>
+	    	<div class="title">{{$t('login.shuoming.title')}}</div>
+	      <div class="title">{{$t('login.shuoming.tips')}}</div>
+      </div>
+    </div>
+    <el-form
+      :model="loginForm"
+      :rules="rules"
+      autocomplete="off"
+      class="login-form"
+      label-position="left"
+      ref="loginForm"
+    >
+	    <el-tabs v-model="activeName" @tab-click="handleClick">
+		    <el-tab-pane label="扫码登录" name="first">
+		    	<div class="saomaDom">
+		    		<img :src="require(`@/assets/logo/saoma.png`)"/>
+            <el-select
+              v-model="opValue"
+              :span="2"
+              @change="selectChange"
+              :placeholder="$t('common.pleaseSelect')"
+            >
+              <el-option
+                v-for="item in options"
+                :key="item.value"
+                :label="item.name"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+<!--		    		<div>请选择上下料站并扫码登录<el-input id="qcodeUserInput" name="qcodeUserInput"  type="password" style="z-index: -100" v-model="loginForm.qcodeUser" onfocus="this.style.imeMode = 'disabled'"  @input="showQcodeUser()"/></div>-->
+            <div>请选择上下料站并扫码登录<el-input id="qcodeUserInput" name="qcodeUserInput"   v-model="loginForm.qcodeUser"   @input="showQcodeUser()"/></div>
+          </div>
+		    </el-tab-pane>
+		    <el-tab-pane label="密码登录" name="second">
+		      <div class="title-container">
+		        <h3 class="title">{{$t('login.title')}}</h3>
+		        <lang-select class="set-language"/>
+		      </div>
+		      <span v-if="login.type === 'up'">
+		        <el-form-item prop="tenant" v-show="isMultiTenant">
+		          <el-input
+		            :placeholder="$t('login.tenant')"
+		            @keyup.enter.native="handleLogin"
+		            autocomplete="off"
+		            name="tenantView"
+		            prefix-icon="el-icon-user"
+		            ref="tenant"
+		            type="text"
+		            v-model="loginForm.tenantView"
+		          />
+		        </el-form-item>
+		        <el-form-item prop="account">
+		          <el-input
+		            :placeholder="$t('login.username')"
+		            @keyup.enter.native="handleLogin"
+		            autocomplete="off"
+		            name="account"
+		            prefix-icon="el-icon-user"
+		            ref="account"
+		            type="text"
+		            v-model="loginForm.account"
+		          />
+		        </el-form-item>
+		        <el-form-item prop="password">
+		          <el-input
+		            :placeholder="$t('login.password')"
+		            :show-password="true"
+		            @keyup.enter.native="handleLogin"
+		            autocomplete="off"
+		            name="password"
+		            prefix-icon="el-icon-key"
+		            ref="password"
+		            type="password"
+		            v-model="loginForm.password"
+		          />
+		        </el-form-item>
+		        <el-form-item class="code-input" prop="code" v-show="isCaptcha">
+		          <el-input
+		            :placeholder="$t('login.code')"
+		            @keyup.enter.native="handleLogin"
+		            autocomplete="off"
+		            name="code"
+		            prefix-icon="el-icon-lock"
+		            ref="code"
+		            style="width: 70%"
+		            type="text"
+		            v-model="loginForm.code"
+		          />
+		        </el-form-item>
+		        <img
+		          v-show="isCaptcha"
+		          :src="imageCode"
+		          @click="getCodeImage"
+		          alt="codeImage"
+		          class="code-image"
+		        />
+		        <el-button
+		          :loading="loading"
+		          @click.native.prevent="handleLogin"
+		          style="width:100%;margin-bottom:14px;"
+		          type="primary"
+		        >{{ $t("login.logIn") }}</el-button
+		        >
+		      </span>
+		      <span v-if="login.type === 'social'">
+		        {{ $t("login.chooseToSignIn") }}
+		        <div>
+		          <template v-for="(l, index) in logo">
+		            <div :key="index" class="logo-wrapper">
+		              <img
+		                :class="{ radius: l.radius }"
+		                :src="resolveLogo(l.img)"
+		                @click="socialLogin(l.name)"
+		                alt
+		              />
+		            </div>
+		          </template>
+		        </div>
+		      </span>
+		      <span style="margin-top: -1rem" v-if="login.type === 'bind'">
+		        <el-tabs @tab-click="handleTabClick" v-model="tabActiveName">
+		          <el-tab-pane :label="$t('common.bindLogin')" name="bindLogin">
+		            <el-form-item prop="bindAccount">
+		              <el-input
+		                :placeholder="$t('login.account')"
+		                autocomplete="off"
+		                name="bindAccount"
+		                prefix-icon="el-icon-user"
+		                ref="bindAccount"
+		                type="text"
+		                v-model="loginForm.bindAccount"
+		              />
+		            </el-form-item>
+		            <el-form-item prop="bindPassword">
+		              <el-input
+		                :placeholder="$t('login.password')"
+		                :show-password="true"
+		                autocomplete="off"
+		                name="bindPassword"
+		                prefix-icon="el-icon-key"
+		                ref="bindPassword"
+		                type="password"
+		                v-model="loginForm.bindPassword"
+		              />
+		            </el-form-item>
+		            <el-button
+		              :loading="loading"
+		              @click.native.prevent="bindLogin"
+		              style="width:100%;margin-bottom:14px;"
+		              type="primary"
+		            >{{ $t("common.bindLogin") }}</el-button
+		            >
+		          </el-tab-pane>
+		          <el-tab-pane :label="$t('common.signLogin')" name="signLogin">
+		            <el-form-item prop="signAccount">
+		              <el-input
+		                :placeholder="$t('login.account')"
+		                autocomplete="off"
+		                name="signAccount"
+		                prefix-icon="el-icon-user"
+		                ref="signAccount"
+		                type="text"
+		                v-model="loginForm.signAccount"
+		              />
+		            </el-form-item>
+		            <el-form-item prop="signPassword">
+		              <el-input
+		                :placeholder="$t('login.password')"
+		                :show-password="true"
+		                autocomplete="off"
+		                name="signPassword"
+		                prefix-icon="el-icon-key"
+		                ref="signPassword"
+		                type="password"
+		                v-model="loginForm.signPassword"
+		              />
+		            </el-form-item>
+		            <el-button
+		              :loading="loading"
+		              @click.native.prevent="signLogin"
+		              style="width:100%;margin-bottom:14px;"
+		              type="primary"
+		            >{{ $t("common.signLogin") }}</el-button
+		            >
+		          </el-tab-pane>
+		        </el-tabs>
+		      </span>
+		      <!--<el-dropdown class="login-type" placement="top-end">
+		        <span class="el-dropdown-link">
+		          <el-link type="primary">{{ $t("login.ortherLoginType") }}</el-link>
+		        </span>
+		        <el-dropdown-menu slot="dropdown">
+		          <el-dropdown-item
+		            :disabled="login.type === 'up'"
+		            @click.native="login.type = 'up'"
+		          >{{ $t("login.type.up") }}
+		          </el-dropdown-item
+		          >
+		          <el-dropdown-item
+		            :disabled="login.type === 'social'"
+		            @click.native="login.type = 'social'"
+		          >{{ $t("login.type.social") }}
+		          </el-dropdown-item
+		          >
+		        </el-dropdown-menu>
+		      </el-dropdown>-->
+		    </el-tab-pane>
+		  </el-tabs>
+    </el-form>
+    <span class="login-footer">
+      © 2019 - 2022
+      <span>{{$t('login.shuoming.tips')}}</span>
+    </span>
+  </div>
+</template>
+
+<script>
+  import LangSelect from "@/components/LangSelect";
+  import db from "@/utils/localstorage";
+  import {randomNum} from "@/utils";
+  import {socialLoginUrl} from "@/settings";
+  import loginApi from "@/api/Login.js";
+  import oauthApi from '@/api/Oauth'
+  import {Base64} from 'js-base64';
+  import productionResourcesMgrApi from "@/api/resourceProductMgr/productionResourcesMgr";
+
+  export default {
+    name: "Login",
+    components: {LangSelect},
+    data() {
+      return {
+        options: [],
+        opValue:'',
+      	activeName: 'first',
+        //是否启用多租户
+        isMultiTenant:
+         false,
+        isCaptcha:
+          process.env.VUE_APP_IS_CAPTCHA === "true" ? true : false,
+        tabActiveName: "bindLogin",
+        login: {
+          type: "up"
+        },
+        logo: [
+          {img: "gitee.png", name: "gitee", radius: true},
+          {img: "github.png", name: "github", radius: true},
+          {img: "tencent_cloud.png", name: "tencent_cloud", radius: true},
+          {img: "qq.png", name: "qq", radius: false},
+          {img: "dingtalk.png", name: "dingtalk", radius: true},
+          {img: "microsoft.png", name: "microsoft", radius: false}
+        ],
+        loginForm: {
+          account: "zuihou",
+          password: "",   // zuihou
+          tenantView: "0000", //显示用的
+          tenant: "", //传递给后端的
+          key: randomNum(24, 16),
+          code: "",
+          grantType: process.env.VUE_APP_IS_CAPTCHA === "true" ? "captcha" : "password",
+          bindAccount: "",
+          bindPassword: "",
+          signAccount: "",
+          signPassword: "",
+          qcodeUser: "",
+          stationResourceId: "",
+        },
+        rules: {
+          account: {
+            required: true,
+            message: this.$t("rules.require"),
+            trigger: "blur"
+          },
+          tenantView: {
+            required: true,
+            message: this.$t("rules.require"),
+            trigger: "blur"
+          },
+          password: {
+            required: true,
+            message: this.$t("rules.require"),
+            trigger: "blur"
+          },
+          code: {
+            validator: (rule, value, callback) => {
+              if (this.isCaptcha && value === '') {
+                callback(this.$t("rules.require"))
+              } else {
+                callback()
+              }
+              callback()
+            }, trigger: 'blur'
+          },
+          bindAccount: {
+            required: true,
+            message: this.$t("rules.require"),
+            trigger: "blur"
+          },
+          bindPassword: {
+            required: true,
+            message: this.$t("rules.require"),
+            trigger: "blur"
+          },
+          signAccount: [
+            {
+              required: true,
+              message: this.$t("rules.require"),
+              trigger: "blur"
+            },
+            {
+              min: 4,
+              max: 10,
+              message: this.$t("rules.range4to10"),
+              trigger: "blur"
+            }
+          ],
+          signPassword: [
+            {
+              required: true,
+              message: this.$t("rules.require"),
+              trigger: "blur"
+            },
+            {
+              min: 6,
+              max: 20,
+              message: this.$t("rules.range6to20"),
+              trigger: "blur"
+            }
+          ]
+        },
+        authUser: null,
+        loading: false,
+        showDialog: false,
+        redirect: undefined,
+        otherQuery: {},
+        imageCode: "",
+        page: {
+          width: window.screen.width * 0.5,
+          height: window.screen.height * 0.5
+        }
+      };
+    },
+    created() {
+      this.getStations()
+    },
+    mounted() {
+      db.clear();
+      this.getCodeImage();
+      this.$nextTick(
+        window.onload = function () { // 光标默认位置
+          var oInput = document.getElementById('qcodeUserInput');
+          oInput.focus();
+        }
+      )
+    },
+    destroyed() {
+      window.removeEventListener("message", this.resolveSocialLogin);
+    },
+    methods: {
+    	// Tabs切换-事件
+    	handleClick(tab, event) {
+    	    // tab切换初始化focus及内容
+    	    if(tab.name === 'first'){
+              this.$nextTick(
+                  window.onload = function () { // 光标默认位置
+                      document.getElementById('qcodeUserInput').value = "";
+                      var oInput = document.getElementById('qcodeUserInput');
+                      oInput.focus();
+                  }
+              )
+          }
+        console.log(tab, event);
+      },
+
+      getCodeImage() {
+        loginApi
+          .getCaptcha(this.loginForm.key)
+          .then(response => {
+            const res = response.data;
+            if (res.byteLength <= 100) {
+              this.$message({
+                message: this.$t("tips.systemError"),
+                type: "error"
+              });
+            }
+            return (
+              "data:image/png;base64," +
+              btoa(
+                new Uint8Array(res).reduce(
+                  (data, byte) => data + String.fromCharCode(byte),
+                  ""
+                )
+              )
+            );
+          })
+          .then(res => {
+            this.imageCode = res;
+          })
+          .catch(e => {
+            if (e.toString().indexOf("429") !== -1) {
+              this.$message({
+                message: this.$t("tips.tooManyRequest"),
+                type: "error"
+              });
+            } else {
+              this.$message({
+                message: this.$t("tips.getCodeImageFailed"),
+                type: "error"
+              });
+            }
+          });
+      },
+      handleTabClick(tab) {
+        this.tabActiveName = tab.name;
+      },
+      resolveLogo(logo) {
+        return require(`@/assets/logo/${logo}`);
+      },
+      socialLogin(oauthType) {
+        const url = `${socialLoginUrl}/${oauthType}/login`;
+        window.open(
+          url,
+          "newWindow",
+          `resizable=yes, height=${this.page.height}, width=${this.page.width}, top=10%, left=10%, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=no, status=no`
+        );
+        window.addEventListener("message", this.resolveSocialLogin, false);
+      },
+      resolveSocialLogin(e) {
+        const data = e.data;
+        const that = this;
+        if (data.message === "not_bind") {
+          that.login.type = "bind";
+          const authUser = data.data;
+          that.authUser = authUser;
+          that
+            .$confirm(
+              that.$t("common.current") +
+              authUser.source +
+              that.$t("common.socialAccount") +
+              authUser.nickname +
+              that.$t("common.socialTips"),
+              that.$t("common.tips"),
+              {
+                confirmButtonText: that.$t("common.signLogin"),
+                cancelButtonText: that.$t("common.bindLogin"),
+                type: "warning"
+              }
+            )
+            .then(() => {
+              that.tabActiveName = "signLogin";
+            })
+            .catch(() => {
+              that.tabActiveName = "bindLogin";
+            });
+        } else if (data.message === "social_login_success") {
+          that.saveLoginData(data.data);
+          that.getUserDetailInfo();
+          that.loginSuccessCallback(data.account);
+        } else {
+          // do nothing
+        }
+      },
+      bindLogin() {
+        let account_c = false;
+        let password_c = false;
+        this.$refs.loginForm.validateField("bindAccount", e => {
+          if (!e) {
+            account_c = true;
+          }
+        });
+        this.$refs.loginForm.validateField("bindPassword", e => {
+          if (!e) {
+            password_c = true;
+          }
+        });
+        if (account_c && password_c) {
+          this.loading = true;
+          const that = this;
+          const params = {
+            bindAccount: that.loginForm.bindAccount,
+            bindPassword: that.loginForm.bindPassword,
+            ...that.authUser
+          };
+          params.token = null;
+          that
+            .$post("auth/social/bind/login", params)
+            .then(r => {
+              const data = r.data.data;
+              this.saveLoginData(data);
+              this.getUserDetailInfo();
+              this.loginSuccessCallback(that.loginForm.bindAccount);
+            })
+            .catch(error => {
+              console.error(error);
+              that.loading = false;
+            });
+        }
+      },
+      signLogin() {
+        let account_c = false;
+        let password_c = false;
+        this.$refs.loginForm.validateField("signAccount", e => {
+          if (!e) {
+            account_c = true;
+          }
+        });
+        this.$refs.loginForm.validateField("signPassword", e => {
+          if (!e) {
+            password_c = true;
+          }
+        });
+        if (account_c && password_c) {
+          this.loading = true;
+          const that = this;
+          const params = {
+            bindAccount: that.loginForm.signAccount,
+            bindPassword: that.loginForm.signPassword,
+            ...that.authUser
+          };
+          params.token = null;
+          that
+            .$post("auth/social/sign/login", params)
+            .then(r => {
+              const data = r.data.data;
+              this.saveLoginData(data);
+              this.getUserDetailInfo();
+              this.loginSuccessCallback(that.loginForm.signAccount);
+            })
+            .catch(error => {
+              console.error(error);
+              that.loading = false;
+            });
+        }
+      },
+      handleLogin() {
+        this.loginForm.tenant = `${Base64.encode(this.loginForm.tenantView)}`;
+        this.$refs.loginForm.validate((valid) => {
+          if (valid) {
+            this.loginSubmit();
+          } else {
+            return false
+          }
+        })
+      },
+      loginSubmit() {
+        this.loading = true;
+        const that = this;
+        this.$store.commit("account/setTenant", this.loginForm.tenant);
+        loginApi.login(this.loginForm).then(response => {
+          const res = response.data;
+          if (res.isSuccess) {
+            that.saveLoginData(res.data['token'], res.data['refreshToken'], res.data['expiration']);
+            that.saveUserInfo(res.data);
+            that.getResource();
+          } else {
+            that.getCodeImage();
+          }
+        }).finally(() => that.loading = false);
+      },
+      saveLoginData(token, refreshToken, expiration) {
+        this.$store.commit("account/setToken", token);
+        this.$store.commit("account/setRefreshToken", refreshToken);
+        this.$store.commit("account/setExpireTime", expiration);
+      },
+      saveUserInfo(user) {
+        this.$store.commit("account/setUser", {
+        });
+        this.$store.commit("account/setUser", {
+          id: user.userId,
+          account: user.account,
+          name: user.name,
+          avatar: user.avatar,
+          expire: user.expire,
+          workDescribe: user.workDescribe,
+          roles: user.roles
+        });
+      },
+      getResource() {
+        oauthApi.getResource().then(response => {
+          const res = response.data;
+          if (res.isSuccess) {
+            const permissionsList = res.data;
+            this.$store.commit("account/setPermissions", permissionsList ? permissionsList : []);
+
+            this.loginSuccess();
+          } else {
+            this.getCodeImage();
+          }
+        });
+      },
+      loginSuccess() {
+        this.$message({
+          message: this.$t("tips.loginSuccess"),
+          type: "success"
+        });
+        this.$router.push("/");
+      },
+      loginSuccessCallback(user) {
+        console.log(user);
+      },
+
+      qcodelogin(qcodeUserValue) {
+        this.loading = true;
+        const that = this;
+        this.loginForm.tenant = `${Base64.encode(this.loginForm.tenantView)}`;
+        this.$store.commit("account/setTenant", this.loginForm.tenant);
+        this.loginForm.qcodeUserValue = qcodeUserValue
+        this.loginForm.grantType="password";
+        loginApi.qcodelogin(this.loginForm).then(response => {
+          const res = response.data;
+          if (res.isSuccess) {
+            that.saveLoginData(res.data['token'], res.data['refreshToken'], res.data['expiration']);
+            that.saveUserInfo(res.data);
+            that.getResource();
+          } else {
+            that.getCodeImage();
+          }
+        }).finally(() => that.loading = false);
+      },
+
+      showQcodeUser(){
+        console.log(this.loginForm.qcodeUser.substr(this.loginForm.qcodeUser.length-1,1));
+        if(this.loginForm.qcodeUser.substr(this.loginForm.qcodeUser.length-1,1) == "#"){
+            this.qcodelogin()
+        }
+      },
+
+      getStations() {
+        productionResourcesMgrApi.getStations({}).then((res) => {
+          res = res.data;
+          if (res.isSuccess) {
+            if (res.data.length > 0) {
+              this.options = res.data;
+            }
+          }
+        });
+      },
+      selectChange(value) {
+        console.log(value);
+        this.loginForm.stationResourceId = value;
+        this.$nextTick(
+          window.onload = function () { // 光标默认位置
+            document.getElementById('qcodeUserInput').value = "";
+            var oInput = document.getElementById('qcodeUserInput');
+            oInput.focus();
+          }
+        )
+      },
+    }
+  };
+</script>
+<style lang="scss">
+	.login-form {
+		.el-tabs__item {
+			font-size: 16px;
+			color: white;
+		}
+		.el-tabs__item.is-active {
+			color: #1890ff;
+		}
+		.el-tabs__active-bar {
+			background: none;
+		}
+	}
+</style>
+<style lang="scss" scoped>
+  $bg: #2d3a4b;
+  $dark_gray: #aaa;
+  $light_gray: #eee;
+
+  .login-container {
+  	/*background: url(../../assets/logo/loginBg.gif) 50% no-repeat;
+    background-size: cover;*/
+    /*background: url(../../assets/background.jpg) 50% no-repeat;*/
+   	/*background: url(../../assets/logo/logoBg1.jpg) 50% no-repeat;*/
+   	/*background: url(../../assets/logo/logoBg2.png) 50% no-repeat;
+    background-size: cover;*/
+   	background: #000000;
+
+    width: 100%;
+    height: 100vh;
+		.saomaDom {
+			text-align: center;
+			color: white;
+			cursor: pointer;
+		}
+    .login-info {
+    	display: flex;
+    	align-items: center;
+      position: absolute;
+      left: 10%;
+      top: 44%;
+      margin-top: -100px;
+      color: #fff;
+
+			img{
+				width: 300px;
+				margin-right: 40px;
+			}
+      .title {
+        font-size: 1.8rem;
+        font-weight: 600;
+      }
+			.title:first-child{
+				margin-bottom: 15px;
+			}
+      .sub-title {
+        font-size: 1.5rem;
+        margin: 0.3rem 0 0.7rem 1rem;
+      }
+
+      .desc {
+        font-size: 0.96rem;
+        line-height: 1.9rem;
+      }
+    }
+
+    .login-form {
+      position: absolute;
+      top: 45%;
+      left: 70%;
+      margin: -180px 0 0 -160px;
+      width: 320px;
+      height: 440px;
+      padding: 10px 36px 36px 36px;
+      background: #4F535B;
+      border-radius: 3px;
+
+			.el-tabs__item {
+				font-size: 16px;
+			}
+      .code-input {
+        width: 50%;
+        display: inline-block;
+        vertical-align: middle;
+      }
+
+      .code-image {
+        display: inline-block;
+        vertical-align: top;
+        cursor: pointer;
+      }
+
+      .login-type {
+        text-align: right;
+        display: inline-block;
+        width: 100%;
+      }
+
+      .logo-wrapper {
+        display: inline-block;
+        margin: 10px 0;
+
+        img {
+          width: 1.9rem;
+          display: inline-block;
+          margin: 0.8rem 0.8rem -0.8rem 0.8rem;
+          cursor: pointer;
+
+          &.radius {
+            border-radius: 50%;
+          }
+        }
+      }
+    }
+
+    .login-footer {
+      position: fixed;
+      bottom: 1rem;
+      width: 100%;
+      text-align: center;
+      color: white;
+      font-size: 0.85rem;
+      line-height: 1rem;
+      height: 1rem;
+    }
+
+    .tips {
+      font-size: 14px;
+      color: #fff;
+      margin-bottom: 10px;
+
+      span {
+        &:first-of-type {
+          margin-right: 16px;
+        }
+      }
+    }
+
+    .title-container {
+      position: relative;
+
+      .title {
+        font-size: 20px;
+        color: #FFFFFF;
+        margin: 0 auto 40px auto;
+        text-align: center;
+        font-weight: bold;
+      }
+
+      .set-language {
+        color: #aaa;
+        position: absolute;
+        top: 3px;
+        font-size: 18px;
+        right: 0;
+        cursor: pointer;
+      }
+    }
+
+    .thirdparty-button {
+      position: absolute;
+      right: 0;
+      bottom: 6px;
+    }
+
+    @media only screen and (max-width: 470px) {
+      .thirdparty-button {
+        display: none;
+      }
+    }
+
+    @media screen and (max-width: 1100px) {
+      .login-info {
+        left: 8%;
+      }
+    }
+
+    @media screen and (max-width: 970px) {
+      .login-form {
+        left: 50%;
+      }
+      .login-info {
+        display: none;
+      }
+    }
+  }
+</style>

+ 3 - 2
imcs-ui/src/views/zuihou/runManageCenter/orderMgr/components/draftOrder/index.vue

@@ -174,14 +174,15 @@
       @success="importSuccess"
     />
   </div>
-</template>
+</template>npm
 
 <script>
 	import Pagination from "@/components/Pagination"
 	import TenantEdit from "./components/Edit"
 	import TenantView from "./components/View"
 	// 【订单管理】-API
-	import orderMgrApi from "@/api/runManageCenter/orderMgr"
+	import
+    orderMgrApi from "@/api/runManageCenter/orderMgr"
 	import elDragDialog from '@/directive/el-drag-dialog'
 	import { downloadFile, initEnums, initDicts, initQueryParams } from '@/utils/commons'
 	import axios from 'axios'