zrlibs
2025-03-20 b0478092cb738ea038216c347835a14da3768baf
fixed
1个文件已添加
8个文件已修改
176 ■■■■ 已修改文件
public/web.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/account_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/login_bg.png 补丁 | 查看 | 原始文档 | blame | 历史
src/layout/index.vue 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/account/login.vue 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/account/logout.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/examples/data-table/dialogs/info.vue 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/examples/master-slave.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vite.config.js 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/web.config.js
@@ -1,2 +1,2 @@
window.apiRoot = 'http://115.29.185.26:5101'
window.skinRoot = '/skin'
window.skinRoot = '/vue/skin'
src/assets/account_bg.png
src/assets/login_bg.png

src/layout/index.vue
@@ -54,6 +54,19 @@
            </template>
          </Menu>
        </div>
        <div class="view-wrap">
          <div class="navigator">
            <Tag
              v-for="(view, index) in openedViewList"
              :key="index"
              type="dot"
              :closable="openedViewList.length > 1"
              :color="view.query.menuId == activeName ? 'primary' : ''"
              @click="onMenuClick(view.query.menuId)"
              @on-close="onMenuClose(index)"
              >{{ view.title }}</Tag
            >
          </div>
        <div class="view">
          <RouterView v-slot="{ Component }">
            <template v-if="Component">
@@ -62,6 +75,7 @@
              </KeepAlive>
            </template>
          </RouterView>
          </div>
        </div>
      </div>
    </div>
@@ -88,6 +102,7 @@
      logo: "data:image/png;base64,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",
      avatar: "http://115.29.185.26:5101/userphoto?login=sa",
      userName: "用户名",
      openedViewList: [],
    };
  },
  computed: {
@@ -123,12 +138,29 @@
        this.refMenu.updateOpened();
      });
      let menuTitle = this.viewList.find((v) => v.id == id)?.title;
      this.$router.push({
        name: route.name,
        query: {
          menuId: id,
        },
      });
      if (!this.openedViewList.find((view) => view.query.menuId == id))
        this.openedViewList.push({
          name: route.name,
          query: {
            menuId: id,
          },
          title: menuTitle,
        });
    },
    onMenuClose(index) {
      let nextId;
      if (index > 0) nextId = this.openedViewList[index - 1].query.menuId;
      else nextId = this.openedViewList[index + 1].query.menuId;
      this.openedViewList.splice(index, 1);
      this.onMenuClick(nextId);
    },
    showError(ex) {
      showError(this, ex);
@@ -226,9 +258,22 @@
          display: none;
        }
      }
      .view {
      .view-wrap {
        width: calc(100% - 240px);
        height: 100%;
        .navigator {
          height: 40px;
          padding: 0 9px;
          background-color: #f1f1f1;
          .ivu-tag {
            margin-top: 4px;
            margin-right: 9px;
            cursor: pointer;
          }
        }
        .view {
          height: calc(100% - 40px);
        }
      }
    }
  }
src/views/account/login.vue
@@ -5,13 +5,6 @@
        <div class="account-logo">
          <img src="http://115.29.185.26:5101/userphoto?login=sa" />
        </div>
        <article class="ivu-typography ivu-text-center ivu-mt">
          <h1 class="ivu-typography">Vue Template<!----></h1>
          <div class="ivu-typography">
            基于 Vue3.0、VueRouter 和ViewUIPlus的管理系统模板演示
            <!---->
          </div>
        </article>
        <Form
          class="account-form"
          :model="form"
@@ -19,12 +12,12 @@
          label-position="top"
          ref="refFormInline"
        >
          <div class="title">Vue仓库管理系统</div>
          <div class="ivu-login">
            <FormItem prop="user">
              <Input
                type="text"
                v-model="form.user"
                size="large"
                prefix="ios-person-outline"
              >
              </Input>
@@ -33,15 +26,12 @@
              <Input
                type="password"
                v-model="form.password"
                size="large"
                prefix="ios-lock-outline"
              >
              </Input>
            </FormItem>
            <FormItem>
              <Button type="primary" @click="onSignIn" size="large" long
                >登录</Button
              >
              <Button type="primary" @click="onSignIn" long>登录</Button>
            </FormItem>
          </div>
        </Form>
@@ -130,23 +120,13 @@
  background-image: url("../../assets/login_bg.png");
  background-attachment: fixed;
  .login-wrap {
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
    -webkit-box-orient: vertical;
    -webkit-box-direction: normal;
    -ms-flex-direction: column;
    flex-direction: column;
    height: 100vh;
    overflow: auto;
  }
  .login-account {
    -webkit-box-flex: 1;
    -ms-flex: 1;
    flex: 1;
    width: 280px;
    padding: 16px 0 0;
    max-width: 420px;
    margin: 0 auto;
    margin: 0 300px 0 auto;
    margin-top: 100px;
  }
  .account-logo {
@@ -165,10 +145,38 @@
  .account-form {
    margin-top: 32px;
  }
  .title {
    font-size: 30px;
    text-align: center;
    margin-bottom: 18px;
    letter-spacing: 3px;
    font-weight: bold;
    background: -webkit-linear-gradient(#009df4, #00e9cf);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    color: transparent;
  }
  .ivu-login {
    padding: 60px 30px 3px;
    background-image: url("../../assets/account_bg.png");
    background-repeat: no-repeat;
    background-size: 100% 100%;
    background-position: right bottom;
  }
  .ivu-form-item {
    margin-bottom: 24px;
    vertical-align: top;
    zoom: 1;
    .ivu-icon {
      color: #0ba1f8;
    }
    .ivu-input {
      border: 2px solid #0ba1f8;
      background-color: transparent;
      color: #fff;
    }
  }
  .ivu-form-item-content {
    position: relative;
src/views/account/logout.vue
@@ -8,7 +8,7 @@
  mounted() {
    setTimeout(() => {
      this.$router.replace("/login");
    }, 3 * 1000);
    }, 0 * 1000);
  },
};
</script>
src/views/examples/data-table/dialogs/info.vue
@@ -124,15 +124,15 @@
      Object.assign(this.form, data);
    },
    clear() {
      this.code = "";
      this.name = "";
      this.leader = "";
      this.tel = "";
      this.topCode = "";
      this.address = "";
      this.isThisLevel = false;
      this.isEscrow = false;
      this.isEnable = false;
      this.form.code = "";
      this.form.name = "";
      this.form.leader = "";
      this.form.tel = "";
      this.form.topCode = "";
      this.form.address = "";
      this.form.isThisLevel = false;
      this.form.isEscrow = false;
      this.form.isEnable = false;
    },
  },
  watch: {
src/views/examples/master-slave.vue
@@ -13,53 +13,53 @@
              <Row>
                <Col span="6">
                  <FormItem label="仓库编码:">
                    <Input v-model="topForm.WH_Code" size="small"></Input>
                    <Input v-model="topForm.code" size="small"></Input>
                  </FormItem>
                </Col>
                <Col span="6">
                  <FormItem label="仓库名称:">
                    <Input v-model="topForm.WH_Code" size="small"></Input>
                    <Input v-model="topForm.name" size="small"></Input>
                  </FormItem>
                </Col>
                <Col span="6">
                  <FormItem label="仓库负责人:">
                    <Input v-model="topForm.WH_Code" size="small"></Input>
                    <Input v-model="topForm.leader" size="small"></Input>
                  </FormItem>
                </Col>
                <Col span="6">
                  <FormItem label="仓库电话:">
                    <Input v-model="topForm.WH_Code" size="small"></Input>
                    <Input v-model="topForm.tel" size="small"></Input>
                  </FormItem>
                </Col>
              </Row>
              <Row>
                <Col span="6">
                  <FormItem label="上级仓库编码:">
                    <Input v-model="topForm.WH_Code" size="small"></Input>
                    <Input v-model="topForm.topCode" size="small"></Input>
                  </FormItem>
                </Col>
                <Col span="6">
                  <FormItem label="地址:">
                    <Input v-model="topForm.WH_Code" size="small"></Input>
                    <Input v-model="topForm.address" size="small"></Input>
                  </FormItem>
                </Col>
                <Col span="4">
                  <FormItem :label-width="34">
                    <Checkbox v-model="topForm.WH_Code" size="small"
                    <Checkbox v-model="topForm.isThisLevel" size="small"
                      >是否本级</Checkbox
                    >
                  </FormItem>
                </Col>
                <Col span="4">
                  <FormItem :label-width="34">
                    <Checkbox v-model="topForm.WH_Code" size="small"
                    <Checkbox v-model="topForm.isEscorw" size="small"
                      >是否代管</Checkbox
                    >
                  </FormItem>
                </Col>
                <Col span="4">
                  <FormItem :label-width="34">
                    <Checkbox v-model="topForm.WH_Code" size="small"
                    <Checkbox v-model="topForm.isEnable" size="small"
                      >是否启用</Checkbox
                    >
                  </FormItem>
@@ -68,7 +68,9 @@
            </Form>
          </div>
          <div class="buttons">
            <Button type="warning" size="small">清空查询</Button>
            <Button type="warning" size="small" @click="onClearClick"
              >清空查询</Button
            >
          </div>
          <DataTable
            :tableHeight="tableTopHeight"
@@ -115,14 +117,22 @@
  data() {
    return {
      // 分隔比例
      split: 0.6,
      split: 0.8,
      // 主表参数定义
      topColumns: [],
      topData: [],
      tableTopHeight: 0,
      tableBottomHeight: 0,
      topForm: {
        WH_Code: "",
        code: "",
        name: "",
        leader: "",
        tel: "",
        topCode: "",
        address: "",
        isThisLevel: false,
        isEscorw: false,
        isEnable: false,
      },
      topPage: 1,
      topLimit: 30,
@@ -278,7 +288,7 @@
    // 从表测试数据列表
    fakeBottomDataList(topDataId) {
      return new Promise((resolve) => {
        let total = Math.floor(Math.random() * 10);
        let total = Math.floor(Math.random() * 10 + 1);
        let fakeList = [];
        for (let i = 0; i < total; i++) {
          let row = {
@@ -428,6 +438,20 @@
      this.topPage = page;
      this.loadTopData();
    },
    onClearClick() {
      this.reset();
    },
    reset() {
      this.topForm.code = "";
      this.topForm.name = "";
      this.topForm.leader = "";
      this.topForm.tel = "";
      this.topForm.topCode = "";
      this.topForm.address = "";
      this.topForm.isThisLevel = false;
      this.topForm.isEscorw = false;
      this.topForm.isEnable = false;
    },
  },
  async mounted() {
    await this.loadTopColumns();
vite.config.js
@@ -15,4 +15,5 @@
      '@': fileURLToPath(new URL('./src', import.meta.url))
    },
  },
  base: '/vue/'
})