Browse Source

新增登录

zhbyyy 1 year ago
parent
commit
5b02a03732

+ 1 - 1
investment/js/investHome2.js

@@ -708,7 +708,7 @@ let app = new Vue({
           {
             name: "2023年额度",
             type: "bar",
-            data: [259.91, 400.49, 97.65, 128.96, 24.84, 7.79, 16.15, 16.18, 6.83, 0.00, 33.49, 0.00, 43.39, 76.53, 5.05, 8.59, 0.00, 0.28],
+            data: [	359.91,400.49,117.65,148.96,34.84,17.79,26.15,26.18,16.83,0.00,43.49,0.00,43.39,76.53,5.05,8.59,0.00,0.28],
             showBackground: false,
             backgroundStyle: {
               color: "#18416F",

BIN
login/fonts/element-icons.woff


BIN
login/images/accounts.png


BIN
login/images/back.png


BIN
login/images/orthogon.png


BIN
login/images/password.png


BIN
login/images/register.png


+ 37 - 0
login/js/login.js

@@ -0,0 +1,37 @@
+let app = new Vue({
+  el: '#app',
+  data () {
+    return {
+      accounts:'',
+      password:'',
+      userList:[
+        {accounts:'123',password:'456'},
+        {accounts:'admin',password:'123456'}
+      ]
+    }
+  },
+  created () {
+  },
+  beforeDestroy () {
+  },
+  mounted () {
+
+  },
+  methods: {
+    goIndex(){
+      console.log(this.accounts,this.password)
+      for(let a = 0;a<this.userList.length;a++){
+        if(this.userList[a].accounts == this.accounts){
+          if(this.userList[a].password == this.password){
+            this.$message({
+              message: '登录成功',
+              type: 'success'
+            });
+            return
+          }
+        }
+      }
+      this.$message.error('用户名不存在或密码错误');
+    }
+   },
+})

+ 190 - 0
login/js/request.js

@@ -0,0 +1,190 @@
+//如果部署在同域名的话可以直接取cookie,后端需 HttpOnly 设置成否
+// var cookie_name = 'wolfking.jeesharp.session.id'
+// getCookie(cookie_name)
+
+// 是否本地环境
+function isLocalEnv () {
+  let domain = window.location.origin
+  if (['http://127.0.0.1:5500', 'file://'].includes(domain)) {
+    return true
+  } else {
+    return false
+  }
+}
+
+// api 前缀
+function getApiUrl () {
+  // 为线上时
+  if (!isLocalEnv()) {
+    return window.location.origin
+  } else {
+    // 本地时
+    // return 'http://sxtc.com:10002'        // 内网环境
+    // return 'http://10.8.8.100:10002'   // 内网环境
+    // return 'http://1.71.170.214:18080' // 线上环境
+    // return 'http://szxm.sxcig.com:8012' // 线上环境
+    // return 'http://10.0.0.27:8080'     // 超哥环境
+    // return 'http://10.0.0.22:8080'     // 闫敏的环境
+    // return 'http://10.0.0.8:8080' // 祥慧的环境
+    // return 'http://10.0.0.115:8080'    // 王蒙的环境
+    return 'http://10.0.0.82:8080'
+  }
+}
+// websocket 前缀
+function getWsUrl () {
+  let prefix = location.protocol === 'https:' ? 'wss://' : 'ws://'
+  // 为线上时
+  if (!isLocalEnv()) {
+    return prefix + window.location.host
+  } else {
+    return prefix + 'sxtc.com:10002'
+    // return prefix + '10.0.0.115:8080'
+  }
+}
+
+// minio 前缀
+function getMinioUrl () {
+  let isProduction = location.origin.indexOf('1.71.170.214') != -1
+  if (isProduction) {
+    return 'http://1.71.170.214:19000/constr-documents/'
+  } else {
+    return 'http://10.8.8.191:9000/constr-documents-test/'
+  }
+}
+
+/** axios封装
+ * 请求拦截、相应拦截、错误统一处理
+ */
+const httpRequest = axios.create({
+  baseURL: 'http://10.0.0.82:8080', // 测试环境
+  timeout: 3 * 60 * 1000, // 3分钟等待
+  withCredentials: true // 携带cookie
+})
+
+// 请求拦截器
+// httpRequest.interceptors.request.use(
+//   function (config) {
+//     if (!isLocalEnv()) {
+//       if (getQueryVariable('token')) {
+//         config.headers['access_token'] = getQueryVariable('token')
+//       }
+//     } else {
+//       config.headers['access_token'] = localStorage.getItem('token')
+//       // config.headers['access_token'] = '4b3ed521-f509-48d9-b907-ab127479df41'
+//     }
+//     // 上传文件
+//     if (config.url == '/apiSys/oss/upload') {
+//       config.headers['Content-Type'] = 'multipart/form-data'
+//     } else {
+//       config.headers['Content-Type'] = 'application/json'
+//     }
+//     return config
+//   },
+//   function (error) {
+//     return Promise.reject(error)
+//   }
+// )
+
+//响应拦截
+httpRequest.interceptors.response.use(
+  function (response) {
+    const res = response.data
+    // if (res.code == 201) {
+    //   this.ELEMENT.Message.error(res.msg)
+    //   if (!isLocalEnv()) {
+    //     // 跳登录页
+    //     window.location = window.location.origin
+    //   } else {
+    //     localEnvLogin()
+    //   }
+    // }
+    return response
+  },
+  function (error) {
+    this.ELEMENT.Message.error(error.message)
+    return Promise.reject(error)
+  }
+)
+
+function get (url, params) {
+  return new Promise((resolve, reject) => {
+    httpRequest
+      .get(url, { params: params })
+      .then(res => {
+        resolve(res.data)
+      })
+      .catch(err => {
+        reject(err.data)
+      })
+  })
+}
+// qs.stringify(data)
+function post (url, data, config) {
+  return new Promise((resolve, reject) => {
+    httpRequest
+      .post(url, data, config)
+      .then(res => {
+        resolve(res.data)
+      })
+      .catch(err => {
+        reject(err)
+      })
+  })
+}
+
+function postFile (url, blob) {
+  return new Promise((resolve, reject) => {
+    let formdata = new FormData()
+    formdata.append('multipartFile', blob)
+    httpRequest
+      .post(url, formdata)
+      .then(res => {
+        resolve(res.data)
+      })
+      .catch(err => {
+        reject(err)
+      })
+  })
+}
+
+function localEnvLogin () {
+  post(
+    '/apiSys/login',
+    {
+      username: 'admin',
+      password: '1q2w3e4r5t'
+    },
+    {
+      transformRequest: [
+        function (data, headers) {
+          // 将请求数据转换成功 formdata 接收格式
+          headers['Content-Type'] = 'application/x-www-form-urlencoded'
+          return stringify(data)
+        }
+      ]
+    }
+  ).then(res => {
+    localStorage.setItem('token', res.data.token || getQueryVariable('token'))
+  })
+}
+
+// 将参数转换成功 formdata 接收格式
+function stringify (data) {
+  let ret = ''
+  for (const it in data) {
+    ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'
+  }
+  ret = ret.substring(0, ret.lastIndexOf('&'))
+  return ret
+}
+// 格式化日期
+function formatDate (time) {
+  let date = time ? new Date(Number(time)) : new Date();
+  let Y = date.getFullYear() + '-';
+  let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+  let D = date.getDate() < 10 ? '0' + date.getDate() + ' ' : date.getDate() + ' ';
+  let h = date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':';
+  let m = date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':';
+  let s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
+  return Y + M + D + h + m + s;
+}

File diff suppressed because it is too large
+ 1 - 0
login/libs/axios.min.js


File diff suppressed because it is too large
+ 0 - 0
login/libs/datav.min.js


+ 227 - 0
login/libs/echarts-tooltip-carousel.js

@@ -0,0 +1,227 @@
+/**
+ * Created by chengwb on 2016/9/3.
+ */
+(function (global) {
+  global.tools = global.tools || {};
+
+  /**
+   * echarts tooltip轮播
+   * @param chart ECharts实例
+   * @param chartOption echarts的配置信息
+   * @param options object 选项
+   * {
+   *  interval    轮播时间间隔,单位毫秒,默认为2000
+   *  loopSeries  boolean类型,默认为false。
+   *              true表示循环所有series的tooltip,false则显示指定seriesIndex的tooltip
+   * 	seriesIndex 默认为0,指定某个系列(option中的series索引)循环显示tooltip,
+   * 	            当loopSeries为true时,从seriesIndex系列开始执行。
+   *  updateData  自定义更新数据的函数,默认为null;
+   *              用于类似于分页的效果,比如总数据有20条,chart一次只显示5条,全部数据可以分4次显示。
+   * }
+   * @returns {{clearLoop: clearLoop}}
+   */
+  tools.loopShowTooltip = function (chart, chartOption, options) {
+    let defaultOptions = {
+      interval: 2000,
+      loopSeries: false,
+      seriesIndex: 0,
+      updateData: null
+    };
+
+    if (!chart || !chartOption) {
+      return;
+    }
+
+    let dataIndex = 0; // 数据索引,初始化为-1,是为了判断是否是第一次执行
+    let seriesIndex = 0; // 系列索引
+    let timeTicket = 0;
+    let seriesLen = chartOption.series.length; // 系列个数
+    let dataLen = 0; // 某个系列数据个数
+    let chartType; // 系列类型
+    let first = true;
+    let lastShowSeriesIndex = 0;
+    let lastShowDataIndex = 0;
+    if (seriesLen === 0) {
+      return;
+    }
+
+    //待处理列表
+    //不循环series时seriesIndex指定显示tooltip的系列,不指定默认为0,指定多个则默认为第一个
+    //循环series时seriesIndex指定循环的series,不指定则从0开始循环所有series,指定单个则相当于不循环,指定多个
+    //要不要添加开始series索引和开始的data索引?
+
+    if (options) {
+      options.interval = options.interval || defaultOptions.interval;
+      options.loopSeries = options.loopSeries || defaultOptions.loopSeries;
+      options.seriesIndex = options.seriesIndex || defaultOptions.seriesIndex;
+      options.updateData = options.updateData || defaultOptions.updateData;
+    } else {
+      options = defaultOptions;
+    }
+
+    //如果设置的seriesIndex无效,则默认为0
+    if (options.seriesIndex < 0 || options.seriesIndex >= seriesLen) {
+      seriesIndex = 0;
+    } else {
+      seriesIndex = options.seriesIndex;
+    }
+
+    /**
+     * 清除定时器
+     */
+    function clearLoop() {
+      if (timeTicket) {
+        clearInterval(timeTicket);
+        timeTicket = 0;
+      }
+      chart.off('mousemove', stopAutoShow);
+      zRender.off('mousemove', zRenderMouseMove);
+      zRender.off('globalout', zRenderGlobalOut);
+    }
+
+    /**
+     * 取消高亮
+     */
+    function cancelHighlight() {
+      /**
+       * 如果dataIndex为0表示上次系列完成显示,如果是循环系列,且系列索引为0则上次是seriesLen-1,否则为seriesIndex-1;
+       * 如果不是循环系列,则就是当前系列;
+       * 如果dataIndex>0则就是当前系列。
+       */
+      let tempSeriesIndex = dataIndex === 0 ?
+        (options.loopSeries ?
+          (seriesIndex === 0 ? seriesLen - 1 : seriesIndex - 1)
+          : seriesIndex)
+        : seriesIndex;
+      let tempType = chartOption.series[tempSeriesIndex].type;
+
+      if (tempType === 'pie' || tempType === 'radar') {
+        chart.dispatchAction({
+          type: 'downplay',
+          seriesIndex: lastShowSeriesIndex,
+          dataIndex: lastShowDataIndex
+        });//wait 系列序号为0且循环系列,则要判断上次的系列类型是否是pie、radar
+      }
+    }
+
+    /**
+     * 自动轮播tooltip
+     */
+    function autoShowTip() {
+      let invalidSeries = 0;
+      let invalidData = 0;
+
+      function showTip() {
+        //判断是否更新数据
+        if (dataIndex === 0 && !first && typeof options.updateData === "function") {
+          options.updateData();
+          chart.setOption(chartOption);
+        }
+
+        let series = chartOption.series;
+        let currSeries = series[seriesIndex];
+        if (!series || series.length === 0 ||
+          !currSeries || !currSeries.type || !currSeries.data ||
+          !currSeries.data.length) {
+          return;
+        }
+        chartType = currSeries.type; // 系列类型
+        dataLen = currSeries.data.length; // 某个系列的数据个数
+
+        let tipParams = {seriesIndex: seriesIndex};
+        switch (chartType) {
+          case 'pie':
+          case 'map':
+          case 'chord':
+            tipParams.name = currSeries.data[dataIndex].name;
+            break;
+          case 'radar': // 雷达图
+            tipParams.seriesIndex = seriesIndex;
+            tipParams.dataIndex = dataIndex;
+            break;
+          default:
+            tipParams.dataIndex = dataIndex;
+            break;
+        }
+
+        if (chartType === 'pie' || chartType === 'radar') {
+          if (!first) {
+            cancelHighlight();
+          }
+
+          // 高亮当前图形
+          chart.dispatchAction({
+            type: 'highlight',
+            seriesIndex: seriesIndex,
+            dataIndex: dataIndex
+          });
+        }
+
+        // 显示 tooltip
+        tipParams.type = 'showTip';
+
+        // 防止updateData时先处理tooltip后刷新数据导出tooltip显示不正确
+        setTimeout(() => {
+          chart.dispatchAction(tipParams);
+        }, 0);
+
+        lastShowSeriesIndex = seriesIndex;
+        lastShowDataIndex = dataIndex;
+        dataIndex = (dataIndex + 1) % dataLen;
+        if (options.loopSeries && dataIndex === 0) { // 数据索引归0表示当前系列数据已经循环完
+          invalidData = 0;
+          seriesIndex = (seriesIndex + 1) % seriesLen;
+          if (seriesIndex === options.seriesIndex) {
+            invalidSeries = 0;
+          }
+        }
+
+        first = false;
+      }
+
+      showTip();
+      timeTicket = setInterval(showTip, options.interval);
+    }
+
+    // 关闭轮播
+    function stopAutoShow() {
+      if (timeTicket) {
+        clearInterval(timeTicket);
+        timeTicket = 0;
+
+        if (chartType === 'pie' || chartType === 'radar') {
+          cancelHighlight();
+        }
+      }
+    }
+
+    let zRender = chart.getZr();
+
+    function zRenderMouseMove(param) {
+      if (param.event) {
+        //阻止canvas上的鼠标移动事件冒泡
+        param.event.cancelBubble = true;
+      }
+
+      stopAutoShow();
+    }
+
+    // 离开echarts图时恢复自动轮播
+    function zRenderGlobalOut() {
+      if (!timeTicket) {
+        autoShowTip();
+      }
+    }
+
+    // 鼠标在echarts图上时停止轮播
+    chart.on('mousemove', stopAutoShow);
+    zRender.on('mousemove', zRenderMouseMove);
+    zRender.on('globalout', zRenderGlobalOut);
+
+    autoShowTip();
+
+    return {
+      clearLoop: clearLoop
+    };
+  };
+})(window);

File diff suppressed because it is too large
+ 21 - 0
login/libs/echarts.min.js


File diff suppressed because it is too large
+ 0 - 0
login/libs/element-ui@2.15.9.js


File diff suppressed because it is too large
+ 10 - 0
login/libs/vue@2.7.10.js


+ 46 - 0
login/login.html

@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8" />
+  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+  <meta name="viewport" content="width=device-width, initial-scale=1" />
+  <!-- 引入样式 -->
+  <link rel="stylesheet" href="./styles/element-ui@2.15.9.css" />
+  <link rel="stylesheet" href="./styles/login.css" />
+  <!-- 引入js -->
+  <script src="./libs/vue@2.7.10.js"></script>
+  <script src="./libs/datav.min.js"></script>
+  <script src="./libs/echarts.min.js"></script>
+  <script src="./libs/element-ui@2.15.9.js"></script>
+  <script src="./libs/axios.min.js"></script>
+  <script src="./js/request.js"></script>
+  <script src="./libs/echarts-tooltip-carousel.js"></script>
+</head>
+
+<body>
+  <div id="app">
+    <dv-full-screen-container>
+      <div class="main">
+        <span class="title">国有资本数智化平台人力资源系统</span>
+        <div class="login">
+          <div>平 台 登 录</div>
+          <div class="card">
+            <div class="" style="margin-bottom: 20px;">
+              <img src="./images/accounts.png" alt="" >
+              <el-input v-model="accounts" placeholder="请输入用户名" style="width:80%"></el-input>
+            </div>
+            <div class="">
+              <img src="./images/password.png" alt="" >
+              <el-input type="password" v-model="password" placeholder="请输入密码" style="width:80%"></el-input>
+            </div>
+          </div>
+          <div type="primary" class="loginButton" @click="goIndex">登录</div>
+        </div>
+      </div>
+    </dv-full-screen-container>
+  </div>
+  <script src="./js/login.js"></script>
+</body>
+
+</html>

+ 751 - 0
login/styles/common.css

@@ -0,0 +1,751 @@
+*,
+*:before,
+*:after {
+  padding: 0;
+  margin: 0;
+  box-sizing: border-box;
+}
+html,
+body {
+  height: 100%;
+  font-size: 13px;
+  background-color: #f3f3f3;
+  font-family: 'Microsoft YaHei', 'Helvetica Neue', Helvetica, 'PingFang SC',
+    'Hiragino Sans GB', Arial, sans-serif;
+  /* overflow: hidden; */
+}
+
+.flex {
+  display: flex;
+}
+.flex1 {
+  flex: 1;
+}
+.flex-around {
+  display: flex;
+  justify-content: space-around;
+}
+.flex-between {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.flex-end {
+  display: flex;
+  justify-content: flex-end;
+}
+.flex-align-center {
+  display: flex;
+  align-items: center;
+}
+.text-center {
+  text-align: center;
+}
+.font12 {
+  font-size: 12px;
+}
+.main-color {
+  color: #228af5;
+}
+.danger-color {
+  color: #f56c6c;
+}
+.btm10 {
+  margin-bottom: 10px;
+}
+.btm20 {
+  margin-bottom: 20px;
+}
+a {
+  text-decoration: none;
+  cursor: pointer;
+}
+.dialog-full-icon {
+  padding: 5px;
+  color: #fff;
+  position: absolute;
+  right: 50px;
+  top: 18px;
+  font-size: 16px;
+  cursor: pointer;
+}
+
+[v-cloak] {
+  display: none;
+}
+#app {
+  height: 100vh;
+}
+/* 头部 */
+.header {
+  height: 77px;
+  flex: 0 0 auto;
+  background-color: #fff;
+  display: flex;
+}
+.header-item {
+  padding: 15px;
+  text-align: center;
+  color: #333;
+  cursor: pointer;
+  position: relative;
+}
+.header-item p {
+  width: 150%;
+  margin-left: -25%;
+}
+.header-item:hover {
+  background-color: #cae5fb;
+  color: #228af5;
+}
+.header-item.active {
+  background-color: #cae5fb;
+  color: #228af5;
+}
+.nav-dropdown {
+  display: block;
+  font-size: 13px;
+  color: #333;
+}
+
+#designer {
+  width: 100%;
+  height: 100%;
+}
+.main-wrap {
+  height: calc(100vh - 77px);
+  padding: 10px 0;
+  flex: 1;
+}
+.main {
+  display: flex;
+  padding: 0px;
+  height: 100%;
+  margin: 0 10px;
+  background: #fff;
+  border: 1px solid #e5e5e5;
+}
+/* 左侧 */
+.aside {
+  height: 100%;
+  background-color: #fff;
+  border: 1px solid #e5e5e5;
+}
+.el-tree > .el-tree-node {
+  display: inline-block;
+  min-width: 100%;
+}
+
+/* el-tree 操作弹出 */
+.contextmenu__item {
+  display: block;
+  line-height: 34px;
+  text-align: left;
+  padding: 0 20px;
+}
+.contextmenu__item:not(:last-child) {
+  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
+}
+.menu {
+  position: fixed;
+  background-color: #fff;
+  font-size: 14px;
+  color: #444040;
+  border-radius: 4px;
+  border: 1px solid rgba(0, 0, 0, 0.15);
+  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+  white-space: nowrap;
+  z-index: 1000;
+}
+.contextmenu__item:hover {
+  cursor: pointer;
+  background: #66b1ff;
+  border-color: #66b1ff;
+  color: #fff;
+}
+.main > div.left {
+  flex: 1;
+  overflow: hidden;
+  padding: 5px;
+}
+.main > div.right {
+  flex: 1;
+  overflow: hidden;
+  padding: 5px;
+  border-left: 1px solid #ccc;
+}
+
+.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
+  background-color: #e8f3fe;
+}
+/* 公共弹框样式 */
+.el-dialog {
+  border-radius: 8px;
+  overflow: hidden;
+}
+.el-dialog__header {
+  padding: 15px;
+  background-color: #228af5;
+}
+
+.el-dialog__header .el-dialog__title {
+  color: #fff;
+  font-size: 16px;
+}
+.el-dialog__headerbtn .el-dialog__close {
+  color: #fff;
+  font-size: 20px;
+}
+.el-dialog__body {
+  padding: 15px;
+  border-top: 1px solid #f1f1f1;
+}
+.el-form-item--mini.el-form-item,
+.el-form-item--small.el-form-item {
+  margin-bottom: 15px;
+}
+.build-modal .el-dialog__body {
+  padding: 0;
+}
+.build-modal .el-card {
+  margin-bottom: 10px;
+}
+.build-modal .el-card p {
+  line-height: 1.6;
+}
+.build-modal .el-form {
+  flex: 0 0 300px;
+  margin-right: 30px;
+}
+.build-modal .el-card__header {
+  padding: 10px;
+  background-color: whitesmoke;
+}
+.build-modal .el-card__body {
+  padding: 15px;
+}
+.inline-inputs .el-form-item__content {
+  display: flex;
+  justify-content: space-between;
+}
+.inline-inputs .el-form-item__content span {
+  margin: 0 20px;
+}
+
+.select-box .el-radio-group {
+  display: flex;
+  flex-direction: column;
+  margin-top: 15px;
+}
+.select-box .el-checkbox-group {
+  display: flex;
+  flex-direction: column;
+}
+.select-box .el-radio-group label {
+  margin-bottom: 20px;
+}
+.select-box .el-checkbox-group label {
+  margin-bottom: 15px;
+}
+.nav-icon {
+  display: inline-block;
+  width: 35px;
+  height: 35px;
+  margin-bottom: 3px;
+}
+.nav-icon1 {
+  background: url(../images/navs/1.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon2 {
+  background: url(../images/navs/2.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon3 {
+  background: url(../images/navs/3.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon4 {
+  background: url(../images/navs/4.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon5 {
+  background: url(../images/navs/5.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon6 {
+  background: url(../images/navs/6.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon7 {
+  background: url(../images/navs/7.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon8 {
+  background: url(../images/navs/8.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon9 {
+  background: url(../images/navs/9.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon10 {
+  background: url(../images/navs/10.png) no-repeat;
+  background-size: 100% 100%;
+}
+
+.nav-icon11 {
+  background: url(../images/navs/11.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon12 {
+  background: url(../images/navs/12.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon13 {
+  background: url(../images/navs/13.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon14 {
+  background: url(../images/navs/14.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon15 {
+  background: url(../images/navs/15.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon16 {
+  background: url(../images/navs/16.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon17 {
+  background: url(../images/navs/17.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon18 {
+  background: url(../images/navs/18.png) no-repeat;
+  background-size: 100% 100%;
+}
+.nav-icon19 {
+  background: url(../images/navs/19.png) no-repeat;
+  background-size: 100% 100%;
+}
+
+.tree-icon {
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  margin-right: 5px;
+  vertical-align: -2px;
+}
+.tree-icon01 {
+  background: url(../images/tree/project-1@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon02 {
+  background: url(../images/tree/project-2@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon03 {
+  background: url(../images/tree/project-3@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon1,
+.tree-icon18,
+.tree-icon20,
+.tree-icon22 {
+  background: url(../images/tree/project@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon2 {
+  background: url(../images/tree/class@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon3 {
+  background: url(../images/tree/sub-class@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon4 {
+  background: url(../images/tree/sub-class-child@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon5 {
+  background: url(../images/tree/form@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon6,
+.tree-icon17,
+.tree-icon19,
+.tree-icon21 {
+  background: url(../images/tree/floor@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon7 {
+  background: url(../images/tree/build@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon8 {
+  background: url(../images/tree/form8@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon9 {
+  background: url(../images/tree/floor@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon10 {
+  background: url(../images/tree/project@2x.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon11 {
+  background: url(../images/tree/tong1.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon12 {
+  background: url(../images/tree/tong2.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon13 {
+  background: url(../images/tree/tong3.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon14 {
+  background: url(../images/tree/tong4.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon15 {
+  background: url(../images/tree/tong5.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon16 {
+  background: url(../images/tree/tong6.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon100 {
+  background: url(../images/tree/tong7.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon101 {
+  background: url(../images/tree/tong8.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon102 {
+  background: url(../images/tree/tong9.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon103 {
+  background: url(../images/tree/tong10.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon104 {
+  background: url(../images/tree/tong1.png) no-repeat;
+  background-size: 100% 100%;
+}
+.tree-icon105 {
+  background: url(../images/tree/tong2.png) no-repeat;
+  background-size: 100% 100%;
+}
+
+.tree-icon-company {
+  background: url(../images/icons/company.png) no-repeat;
+  background-size: 110% 110%;
+}
+
+.home-content {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  flex: 1;
+}
+.home-content h1 {
+  margin-bottom: 50px;
+}
+.home-content img {
+  width: 80%;
+  height: 50%;
+}
+.dialog-nowrap {
+  pointer-events: none;
+}
+.dialog-nowrap .el-dialog {
+  pointer-events: auto;
+}
+.el-drawer__wrapper {
+  pointer-events: none;
+}
+.el-drawer__wrapper .el-drawer {
+  pointer-events: auto;
+}
+/* 新建表格tab ...限制宽度 */
+.sheet-modal .el-tabs__item {
+  max-width: 400px;
+  overflow: hidden;
+  padding: 0 15px 0 10px;
+  text-overflow: ellipsis;
+}
+/* 使用element 滚动条样式 */
+::-webkit-scrollbar {
+  z-index: 11;
+  width: 6px;
+  height: 6px;
+}
+::-webkit-scrollbar-thumb {
+  border-radius: 5px;
+  width: 6px;
+  background: #b4bccc;
+}
+::-webkit-scrollbar-corner {
+  background: #fff;
+}
+::-webkit-scrollbar-track {
+  background: #fff;
+}
+::-webkit-scrollbar-track-piece {
+  background: #fff;
+  width: 6px;
+}
+.ribbon-button-lock {
+  background-image: url('../images/icons/lock.png');
+  background-size: 100% 100% !important;
+}
+.ribbon-button-unlock {
+  background-image: url('../images/icons/unlock.png');
+  background-size: 100% 100% !important;
+}
+.ribbon-button-tags {
+  background-image: url('../images/icons/tags.png');
+  background-size: 100% 100% !important;
+}
+.ribbon-button-check {
+  background-image: url('../images/icons/check.png');
+  background-size: 100% 100% !important;
+}
+.ribbon-button-clear-source {
+  background-image: url('../images/icons/clear.png');
+  background-size: 100% 100% !important;
+}
+.ribbon-button-select {
+  background-image: url('../images/icons/select.png');
+  background-size: 100% 100% !important;
+}
+
+.gc-ribbon-bar .ribbon-button-item.ribbon-bigbutton {
+  min-width: 40px;
+  max-width: 60px;
+  min-height: 0;
+}
+.grid-box {
+  display: flex;
+  flex-wrap: wrap;
+  border-left: 1px solid #ccc;
+}
+.grid-box > div {
+  width: 30px;
+  height: 35px;
+  text-align: center;
+  line-height: 35px;
+  color: #000;
+  border-bottom: 1px solid #ccc;
+  border-right: 1px solid #ccc;
+  border-top: 1px solid #ccc;
+  cursor: pointer;
+  font-size: 18px;
+}
+.grid-box > div:nth-child(n + 21) {
+  border-top: none;
+}
+.grid-box > div.checked {
+  background-color: #409eff;
+  color: #f1f1f1;
+}
+
+.char-tab .el-tabs__nav,
+.char-tab .el-tabs__content {
+  max-height: 300px;
+  overflow: auto;
+}
+.char-tab .el-tabs__item {
+  height: 25px;
+  line-height: 25px;
+  font-family: 'chars';
+}
+.char-input .el-input__inner {
+  font-family: 'chars';
+}
+.fonts {
+  font-family: 'chars';
+}
+.char-pop {
+  text-align: center;
+  height: 80px;
+  line-height: 60px;
+  width: 80px;
+  font-size: 60px;
+  font-family: 'chars';
+}
+
+/* 拖拽的线 */
+#box {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+  /* background-color:royalblue; */
+}
+#resize {
+  width: 2px;
+  height: 100%;
+  cursor: w-resize;
+  background-color: #ccc;
+  float: left;
+  position: relative;
+}
+#resize2 {
+  height: 5px;
+  width: 100%;
+  background-color: #ccc;
+  cursor: n-resize;
+  position: relative;
+}
+#left {
+  width: 350px;
+  height: 100%;
+  /* background:skyblue; */
+  float: left;
+  overflow: auto;
+}
+#right {
+  float: right;
+  width: calc(100% - 352px);
+  height: 100%;
+  /* background:tomato; */
+  overflow: auto;
+}
+#top {
+  height: 300px;
+  width: 100%;
+  /* background:skyblue; */
+  overflow: auto;
+}
+
+#bottom {
+  height: calc(100% - 305px);
+  width: 100%;
+  /* background:tomato; */
+  overflow: auto;
+}
+.resImg {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  margin: auto;
+  width: 12px;
+  height: 60px;
+  cursor: pointer;
+}
+#resize2 .resImg {
+  position: absolute;
+  left: 0;
+  right: 0;
+  margin: auto;
+  height: 12px;
+  width: 60px;
+  cursor: pointer;
+}
+.left-tree {
+  flex: 0 0 300px;
+  padding: 10px 10px 10px 0;
+  border: 1px solid #ccc;
+  min-height: 400px;
+  height: 100%;
+  /* margin-right: 15px;
+  border-radius: 5px; */
+  overflow: auto;
+}
+.el-table tbody tr:hover > td {
+  background-color: unset !important;
+}
+.el-table .cell {
+  line-height: 1.2;
+}
+.capacity-cell {
+  background-color: rgb(212, 243, 255);
+  position: relative;
+}
+.capacity-cell:hover .xuan-btn {
+  display: block;
+}
+.xuan-btn {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  margin: auto;
+  right: 0;
+  padding: 4px;
+  display: none;
+}
+.bottom-cell {
+  position: relative;
+  padding-top: 20px !important;
+}
+.inline-input .el-input__inner {
+  padding: 0 4px;
+}
+.scheme-table.el-table .cell {
+  padding: 0 5px;
+  line-height: 1.3;
+}
+.bottom-cell:hover .opration {
+  display: block;
+}
+.opration {
+  position: absolute;
+  top: 0;
+  right: 0;
+  display: block;
+  border: 1px solid #ccc;
+  line-height: 1;
+  display: none;
+}
+.opration i {
+  cursor: pointer;
+  font-size: 14px;
+  color: #409eff;
+  border: 1px solid #409eff;
+}
+.branch-list .el-radio-group {
+  display: flex;
+  flex-wrap: wrap;
+}
+.branch-list .el-radio-group label {
+  flex: 0 0 50%;
+  margin-right: 0px;
+  margin: 6px 0;
+}
+.input-number input::-webkit-outer-spin-button {
+  -webkit-appearance: none;
+}
+.input-number input::-webkit-inner-spin-button {
+  -webkit-appearance: none;
+}
+.input-number input[type='number'] {
+  -moz-appearance: textfield;
+}
+/* table 行内编辑使用 */
+.item_input {
+  display: none;
+}
+.item_input .el-input__inner {
+  padding: 0px 2px;
+  height: 18px;
+  line-height: 18px;
+}
+.text-overflow {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.is-tooltipStyle {
+  max-width: 20%;
+  color: #fff;
+  background-color: #444040;
+}

File diff suppressed because it is too large
+ 0 - 0
login/styles/element-ui@2.15.9.css


+ 286 - 0
login/styles/login.css

@@ -0,0 +1,286 @@
+*,
+*:before,
+*:after {
+  padding: 0;
+  margin: 0;
+  box-sizing: border-box;
+}
+html,
+body {
+  height: 100%;
+  font-size: 14px;
+  background-color: #ecffff;
+  font-family: 'Microsoft YaHei', 'Helvetica Neue', Helvetica, 'PingFang SC',
+    'Hiragino Sans GB', Arial, sans-serif;
+}
+.main {
+  width: 100%;
+  height: 100%;
+  background: url('/images/back.png') center center no-repeat;
+  background-size: 100% 100%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  flex-direction: column;
+}
+.login {
+  width: 700px;
+  height: 450px;
+  display: grid;
+  grid-template-rows: repeat(3, 1fr);
+  align-items: center;
+  background: url('/images/register.png') center center no-repeat;
+  background-size: 100% 100%;
+}
+.title {
+  background: linear-gradient(-3deg, #99eeff 0%, #99eeff 30%, #ffffff 91%);
+  -webkit-background-clip: text;
+  -webkit-text-fill-color: transparent;
+  font-size: 36px;
+  font-weight: bold;
+  margin-bottom: 30px;
+}
+.loginButton {
+  width: 330px;
+  height: 50px;
+  line-height: 50px;
+  margin: 0 auto;
+  background: url('/images/orthogon.png') center center no-repeat;
+  background-size: 100% 100%;
+  text-align: center;
+  color: #fff;
+}
+.login>div:nth-child(1){
+  height: 50px;
+  line-height: 50px;
+  text-align: center;
+  color: #Fff;
+  font-size: 24px;
+}
+.card{
+  display: flex;
+  justify-content: center;
+  flex-direction: column;
+  align-items: center;
+}
+.card img{
+  width: 21px;
+  height: 23px;
+  margin-right: 10px;
+}
+.card div{
+  width: 70%;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background-color: #263E5F;
+  padding: 3px 0;
+}
+.el-input__inner{
+  background: #263E5F;
+  border: 0;
+  color: #fff;
+
+}
+/* top-[3px] */
+/* z-[100] */
+
+/* 显示隐藏未脱离文档流 */
+.visible {
+  visibility: visible;
+}
+.invisible {
+  visibility: hidden;
+}
+
+/* 内边距 */
+.p-0 {
+  padding: 0px;
+}
+.px-0 {
+  padding-left: 0px;
+  padding-right: 0px;
+}
+.py-0 {
+  padding-top: 0px;
+  padding-bottom: 0px;
+}
+.pt-0 {
+  padding-top: 0px;
+}
+.pr-0 {
+  padding-right: 0px;
+}
+.pb-0 {
+  padding-bottom: 0px;
+}
+.pl-0 {
+  padding-left: 0px;
+}
+/* p-[5px] */
+
+/* 外边距 */
+.m-0 {
+  margin: 0px;
+}
+.mx-0 {
+  margin-left: 0px;
+  margin-right: 0px;
+}
+.my-0 {
+  margin-top: 0px;
+  margin-bottom: 0px;
+}
+.mt-0 {
+  margin-top: 0px;
+}
+.mr-0 {
+  margin-right: 0px;
+}
+.mb-0 {
+  margin-bottom: 0px;
+}
+.ml-0 {
+  margin-left: 0px;
+}
+/* m-[5px] */
+
+/* 宽度 */
+.w-full {
+  width: 100%;
+}
+.w-screen {
+  width: 100vw;
+}
+/* w-[32rem] */
+/* min-w-[50%] */
+/* max-w-[50%] */
+
+/* 高度 */
+.h-full {
+  height: 100%;
+}
+.h-screen {
+  height: 100vh;
+}
+/* h-[32rem] */
+/* min-h-[50%] */
+/* max-h-[32rem] */
+
+/* 字体 */
+.text-xs {
+  font-size: 0.75rem; /* 12px */
+  line-height: 1rem; /* 16px */
+}
+.text-sm {
+  font-size: 0.875rem; /* 14px */
+  line-height: 1.25rem; /* 20px */
+}
+.text-base {
+  font-size: 1rem; /* 16px */
+  line-height: 1.5rem; /* 24px */
+}
+.text-lg {
+  font-size: 1.125rem; /* 18px */
+  line-height: 1.75rem; /* 28px */
+}
+.text-xl {
+  font-size: 1.25rem; /* 20px */
+  line-height: 1.75rem; /* 28px */
+}
+.text-2xl {
+  font-size: 1.5rem; /* 24px */
+  line-height: 2rem; /* 32px */
+}
+.text-3xl {
+  font-size: 1.875rem; /* 30px */
+  line-height: 2.25rem; /* 36px */
+}
+.text-4xl {
+  font-size: 2.25rem; /* 36px */
+  line-height: 2.5rem; /* 40px */
+}
+.text-5xl {
+  font-size: 3rem; /* 48px */
+  line-height: 1;
+}
+.text-6xl {
+  font-size: 3.75rem; /* 60px */
+  line-height: 1;
+}
+.text-7xl {
+  font-size: 4.5rem; /* 72px */
+  line-height: 1;
+}
+.text-8xl {
+  font-size: 6rem; /* 96px */
+  line-height: 1;
+}
+.text-9xl {
+  font-size: 8rem; /* 128px */
+  line-height: 1;
+}
+/* text-[14px] */
+/* 字体粗细font-weight */
+/* font-[1100] */
+/* https://tailwindcss.com/docs/font-weight */
+/* 字体间距letter-spacing */
+/* tracking-[.25em] */
+/* 行高line-height */
+/* leading-[3rem] */
+/* 无列表样式 */
+.list-none {
+  list-style-type: none;
+}
+/* 小圆点 */
+.list-disc {
+  list-style-type: disc;
+}
+/* 数字列表 */
+.list-decimal {
+  list-style-type: decimal;
+}
+.text-left {
+  text-align: left;
+}
+.text-center {
+  text-align: center;
+}
+.text-right {
+  text-align: right;
+}
+/* 所有文本头尾对齐 */
+.text-justify {
+  text-align: justify;
+}
+/* 文本颜色 */
+/* text-[#50d71e] */
+/* https://tailwindcss.com/docs/text-color */
+/* 下划线 */
+.underline {
+  text-decoration-line: underline;
+}
+/* 上划线 */
+.overline {
+  text-decoration-line: overline;
+}
+/* 中划线 */
+.line-through {
+  text-decoration-line: line-through;
+}
+/* 无划线 */
+.no-underline {
+  text-decoration-line: none;
+}
+/* 全小写 */
+.lowercase {
+  text-transform: lowercase;
+}
+/* 全大写 */
+.uppercase {
+  text-transform: uppercase;
+}
+/* 首字母大写 */
+.capitalize {
+  text-transform: capitalize;
+}

+ 264 - 0
login/styles/normalize.css

@@ -0,0 +1,264 @@
+/* Document
+ * ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ */
+
+:where(html) {
+  line-height: 1.15; /* 1 */
+}
+
+/* Sections
+ * ========================================================================== */
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Edge, Firefox, and Safari.
+ */
+
+:where(h1) {
+  font-size: 2em;
+  margin-block-end: 0.67em;
+  margin-block-start: 0.67em;
+}
+
+/* Grouping content
+ * ========================================================================== */
+
+/**
+ * Remove the margin on nested lists in Chrome, Edge, and Safari.
+ */
+
+:where(dl, ol, ul) :where(dl, ol, ul) {
+  margin-block-end: 0;
+  margin-block-start: 0;
+}
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Correct the inheritance of border color in Firefox.
+ */
+
+:where(hr) {
+  box-sizing: content-box; /* 1 */
+  color: inherit; /* 2 */
+  height: 0; /* 1 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+:where(pre) {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+ * ========================================================================== */
+
+/**
+ * Add the correct text decoration in Safari.
+ */
+
+:where(abbr[title]) {
+  text-decoration: underline;
+  text-decoration: underline dotted;
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+:where(b, strong) {
+  font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+:where(code, kbd, samp) {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+:where(small) {
+  font-size: 80%;
+}
+
+/* Tabular data
+ * ========================================================================== */
+
+/**
+ * 1. Correct table border color in Chrome, Edge, and Safari.
+ * 2. Remove text indentation from table contents in Chrome, Edge, and Safari.
+ */
+
+:where(table) {
+  border-color: currentColor; /* 1 */
+  text-indent: 0; /* 2 */
+}
+
+/* Forms
+ * ========================================================================== */
+
+/**
+ * Remove the margin on controls in Safari.
+ */
+
+:where(button, input, select) {
+  margin: 0;
+}
+
+/**
+ * Remove the inheritance of text transform in Firefox.
+ */
+
+:where(button) {
+  text-transform: none;
+}
+
+/**
+ * Correct the inability to style buttons in iOS and Safari.
+ */
+
+:where(button, input:is([type="button" i], [type="reset" i], [type="submit" i])) {
+  -webkit-appearance: button;
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Edge, and Firefox.
+ */
+
+:where(progress) {
+  vertical-align: baseline;
+}
+
+/**
+ * Remove the inheritance of text transform in Firefox.
+ */
+
+:where(select) {
+  text-transform: none;
+}
+
+/**
+ * Remove the margin in Firefox and Safari.
+ */
+
+:where(textarea) {
+  margin: 0;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome, Edge, and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+:where(input[type="search" i]) {
+  -webkit-appearance: textfield; /* 1 */
+  outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Safari.
+ */
+
+::-webkit-inner-spin-button,
+::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+ * Correct the text style of placeholders in Chrome, Edge, and Safari.
+ */
+
+::-webkit-input-placeholder {
+  color: inherit;
+  opacity: 0.54;
+}
+
+/**
+ * Remove the inner padding in Chrome, Edge, and Safari on macOS.
+ */
+
+::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style upload buttons in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button; /* 1 */
+  font: inherit; /* 2 */
+}
+
+/**
+ * Remove the inner border and padding of focus outlines in Firefox.
+ */
+
+:where(button, input:is([type="button" i], [type="color" i], [type="reset" i], [type="submit" i]))::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+/**
+ * Restore the focus outline styles unset by the previous rule in Firefox.
+ */
+
+:where(button, input:is([type="button" i], [type="color" i], [type="reset" i], [type="submit" i]))::-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+
+/**
+ * Remove the additional :invalid styles in Firefox.
+ */
+
+:where(:-moz-ui-invalid) {
+  box-shadow: none;
+}
+
+/* Interactive
+ * ========================================================================== */
+
+/*
+ * Add the correct styles in Safari.
+ */
+
+:where(dialog) {
+  background-color: white;
+  border: solid;
+  color: black;
+  height: -moz-fit-content;
+  height: fit-content;
+  left: 0;
+  margin: auto;
+  padding: 1em;
+  position: absolute;
+  right: 0;
+  width: -moz-fit-content;
+  width: fit-content;
+}
+
+:where(dialog:not([open])) {
+  display: none;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+:where(summary) {
+  display: list-item;
+}

Some files were not shown because too many files changed in this diff