研发图纸文件管理系统-前端项目
longyvfengyun
2022-07-14 4af440d9f6d7877e090cf3c86fc7c542020c8ef6
路由调整
8个文件已添加
4个文件已修改
694 ■■■■■ 已修改文件
src/components/table/advance/SearchArea.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/dashboard/drawcenter/DrawCenter.vue 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/drawManage/drawCenter/DrawCenter.vue 258 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/drawManage/drawCenter/i18n.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/drawManage/drawCenter/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/drawManage/drawCenter/index.less 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/login/Login.vue 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/workplace/WorkPlace.vue 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/workplace/i18n.js 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/workplace/index.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/workplace/index.less 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/router/config.js 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/table/advance/SearchArea.vue
@@ -39,7 +39,7 @@
          {{col.title}}:
        </template>
        <slot v-else-if="col.slots && col.slots.title" :name="col.slots.title"></slot>
        <a-select :allowClear="true" :options="col.search.selectOptions" v-model="col.search.value" placeholder="请选择..." @change="onSelectChange(col)" class="select" slot="content" size="small" :get-popup-container="() => $refs.selectRoot">
        <a-select :showSearch="true" :allowClear="true" :options="col.search.selectOptions" v-model="col.search.value" placeholder="请选择..." @change="onSelectChange(col)" class="select" slot="content" size="small" :get-popup-container="() => $refs.selectRoot">
        </a-select>
      </div>
      <div v-else :class="['title', {active: col.search.value}]">
src/pages/dashboard/drawcenter/DrawCenter.vue
@@ -4,8 +4,24 @@
      :data-source="dataSource"
      :columns="columns"
      :loading="loading"
      title="图纸中心"
      row-key="name">
      row-key="name"
      @search="onSearch"
      @refresh="onRefresh"
      @reset="onReset"
      :format-conditions="true"
      :pagination="{
        current: page,
        pageSize: pageSize,
        total: total,
        showSizeChanger: true,
        showLessItems: true,
        showQuickJumper: true,
        showTotal: (total, range) => `第 ${range[0]}-${range[1]} 条,总计 ${total} 条`,
        onChange: onPageChange,
        onShowSizeChange: onSizeChange,
      }">
      <template slot="action" slot-scope="scope">
        <a @click="scope.record">下载</a>
        <a-divider type="vertical"></a-divider>
@@ -25,6 +41,10 @@
  data() {
    return {
      loading: false,
      page: 1,
      pageSize: 10,
      total: 100,
      conditions: {},
      columns: [
        {
          title: '图纸编码',
@@ -38,18 +58,30 @@
          dataIndex: 'type',
          key: 'type',
          align: "center",
          searchAble: true,
          dataType: 'select',
          search: {
            selectOptions: []
          }
        },
        {
          title: '上传人',
          dataIndex: 'uploadPeople',
          key: 'uploadPeople',
          align: "center",
          searchAble: true,
          dataType: 'select',
          search: {
            selectOptions: []
          }
        },
        {
          title: '上传日期',
          dataIndex: 'uploadDate',
          key: 'uploadDate',
          align: "center",
          searchAble: true,
          dataType: 'date',
        },
        {
          title: '审核人',
@@ -61,6 +93,7 @@
          title: '审核日期',
          dataIndex: 'auditDate',
          key: 'auditDate',
          dataType: 'date',
          align: "center",
        },
        {
@@ -88,17 +121,135 @@
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        }
        },
        {
          name: "TP9527",
          type: "铜牌",
          uploadPeople: "李军",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "李军",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "TP9528",
          type: "铜牌",
          uploadPeople: "何威",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "何威",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "TP9529",
          type: "铜牌",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "SRQ9527",
          type: "散热器",
          uploadPeople: "鲁星伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "鲁星伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "SRQ9528",
          type: "散热器",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "徐仲陪",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "SRQ9529",
          type: "散热器",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "汪轩",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "YMB9527",
          type: "云母板",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "鲁星伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "YMB9528",
          type: "云母板",
          uploadPeople: "何威",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "YMB9529",
          type: "云母板",
          uploadPeople: "何威",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
      ],
    }
  },
  methods: {
    show(scope) {
      console.log(scope);
    }
    },
    onSearch(conditions, searchOptions) {
      console.log(conditions);
      console.log(searchOptions);
      this.page = 1
      this.conditions = conditions
      this.searchData();
    },
    onPageChange(page, pageSize) {
      this.page = page;
      this.pageSize = pageSize;
      this.searchData();
    },
    onSizeChange(current, size) {
      this.page = 1;
      this.pageSize = size;
      this.searchData();
    },
    onRefresh(conditions) {
      this.conditions = conditions
      this.searchData()
    },
    onReset(conditions) {
      this.conditions = conditions
      this.searchData()
    },
    searchData() {
      console.log("查询后台返回参数");
    },
  },
  computed: {},
  mounted() {}
  mounted() {
    this.columns[1].search.selectOptions = [
      {title: '钣金', value: "钣金"},
      {title: '铜牌', value: "铜牌"},
      {title: '散热器', value: "散热器"},
      {title: '面膜', value: "面膜"},
      {title: '云母板', value: "云母板"},
      {title: '支撑件', value: "支撑件"},
    ];
    this.columns[2].search.selectOptions = [
      {title: '霍东伟', value: "霍东伟"},
      {title: '何威', value: "何威"},
      {title: '徐仲培', value: "徐仲培"},
      {title: '鲁星伟', value: "鲁星伟"},
      {title: '李军', value: "李军"},
      {title: '汪轩', value: "汪轩"},
    ];
  }
}
</script>
src/pages/drawManage/drawCenter/DrawCenter.vue
New file
@@ -0,0 +1,258 @@
<template>
  <a-card>
    <advance-table
      :data-source="dataSource"
      :columns="columns"
      :loading="loading"
      title="图纸中心"
      row-key="name"
      @search="onSearch"
      @refresh="onRefresh"
      @reset="onReset"
      :format-conditions="true"
      :pagination="{
        current: page,
        pageSize: pageSize,
        total: total,
        showSizeChanger: true,
        showLessItems: true,
        showQuickJumper: true,
        showTotal: (total, range) => `第 ${range[0]}-${range[1]} 条,总计 ${total} 条`,
        onChange: onPageChange,
        onShowSizeChange: onSizeChange,
      }">
      <template slot="action" slot-scope="scope">
        <a @click="scope.record">下载</a>
        <a-divider type="vertical"></a-divider>
        <a @click="scope.record">详情</a>
      </template>
    </advance-table>
  </a-card>
</template>
<script>
import AdvanceTable from "@/components/table/advance/AdvanceTable";
export default {
  name: "DrawCenter",
  components: {
    AdvanceTable
  },
  data() {
    return {
      loading: false,
      page: 1,
      pageSize: 10,
      total: 100,
      conditions: {},
      columns: [
        {
          title: '图纸编码',
          dataIndex: 'name',
          key: 'name',
          align: "center",
          searchAble: true
        },
        {
          title: '图纸类型',
          dataIndex: 'type',
          key: 'type',
          align: "center",
          searchAble: true,
          dataType: 'select',
          search: {
            selectOptions: []
          }
        },
        {
          title: '上传人',
          dataIndex: 'uploadPeople',
          key: 'uploadPeople',
          align: "center",
          searchAble: true,
          dataType: 'select',
          search: {
            selectOptions: []
          }
        },
        {
          title: '上传日期',
          dataIndex: 'uploadDate',
          key: 'uploadDate',
          align: "center",
          searchAble: true,
          dataType: 'date',
        },
        {
          title: '审核人',
          dataIndex: 'auditPeople',
          key: 'auditPeople',
          align: "center",
        },
        {
          title: '审核日期',
          dataIndex: 'auditDate',
          key: 'auditDate',
          dataType: 'date',
          align: "center",
        },
        {
          title: '操作',
          dataIndex: "operation",
          key: 'operation',
          align: "center",
          fixed: 'right',
          scopedSlots: { customRender: 'action' }
        },
      ],
      dataSource: [
        {
          name: "BJ2312",
          type: "钣金",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "MM4815",
          type: "面膜",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "TP9527",
          type: "铜牌",
          uploadPeople: "李军",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "李军",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "TP9528",
          type: "铜牌",
          uploadPeople: "何威",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "何威",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "TP9529",
          type: "铜牌",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "SRQ9527",
          type: "散热器",
          uploadPeople: "鲁星伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "鲁星伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "SRQ9528",
          type: "散热器",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "徐仲陪",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "SRQ9529",
          type: "散热器",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "汪轩",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "YMB9527",
          type: "云母板",
          uploadPeople: "霍东伟",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "鲁星伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "YMB9528",
          type: "云母板",
          uploadPeople: "何威",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
        {
          name: "YMB9529",
          type: "云母板",
          uploadPeople: "何威",
          uploadDate: "2022-07-14 00:00:00",
          auditPeople: "霍东伟",
          auditDate: "2022-07-14 00:00:00",
        },
      ],
    }
  },
  methods: {
    show(scope) {
      console.log(scope);
    },
    onSearch(conditions, searchOptions) {
      console.log(conditions);
      console.log(searchOptions);
      this.page = 1
      this.conditions = conditions
      this.searchData();
    },
    onPageChange(page, pageSize) {
      this.page = page;
      this.pageSize = pageSize;
      this.searchData();
    },
    onSizeChange(current, size) {
      this.page = 1;
      this.pageSize = size;
      this.searchData();
    },
    onRefresh(conditions) {
      this.conditions = conditions
      this.searchData()
    },
    onReset(conditions) {
      this.conditions = conditions
      this.searchData()
    },
    searchData() {
      console.log("查询后台返回参数");
    },
  },
  computed: {},
  mounted() {
    this.columns[1].search.selectOptions = [
      {title: '钣金', value: "钣金"},
      {title: '铜牌', value: "铜牌"},
      {title: '散热器', value: "散热器"},
      {title: '面膜', value: "面膜"},
      {title: '云母板', value: "云母板"},
      {title: '支撑件', value: "支撑件"},
    ];
    this.columns[2].search.selectOptions = [
      {title: '霍东伟', value: "霍东伟"},
      {title: '何威', value: "何威"},
      {title: '徐仲培', value: "徐仲培"},
      {title: '鲁星伟', value: "鲁星伟"},
      {title: '李军', value: "李军"},
      {title: '汪轩', value: "汪轩"},
    ];
  }
}
</script>
<style scoped>
</style>
src/pages/drawManage/drawCenter/i18n.js
New file
@@ -0,0 +1,13 @@
module.exports = {
  messages: {
    CN: {
    },
    HK: {
    },
    US: {
    },
  }
}
src/pages/drawManage/drawCenter/index.js
New file
@@ -0,0 +1,2 @@
import DrawCenter from "./DrawCenter";
export default DrawCenter;
src/pages/drawManage/drawCenter/index.less
src/pages/login/Login.vue
@@ -127,12 +127,15 @@
        this.setRoles(roles)
        setAuthorization({token: loginRes.data.token, expireAt: new Date(loginRes.data.expireAt)})
        // 获取路由配置
        getRoutesConfig().then(result => {
          const routesConfig = result.data.data
          loadRoutes(routesConfig)
          this.$router.push('/dashboard/docCenter')
          this.$message.success(loginRes.message, 3)
        })
        // getRoutesConfig().then(result => {
        //   const routesConfig = result.data.data
        //   loadRoutes(routesConfig)
        //   this.$router.push('/dashboard/docCenter')
        //   this.$message.success(loginRes.message, 3)
        // })
        loadRoutes();
        this.$router.push('/workplace');
        this.$message.success(loginRes.message, 3);
      } else {
        this.error = loginRes.message
      }
src/pages/workplace/WorkPlace.vue
New file
@@ -0,0 +1,122 @@
<template>
  <page-layout :avatar="currUser.avatar">
    <div slot="headerContent">
      <div class="title">{{welcome.timeFix[lang]}},{{currUser.name}},{{welcome.message[lang]}}</div>
      <div>{{currUser.position[lang]}}</div>
    </div>
    <template slot="extra">
      <head-info class="split-right" :title="$t('project')" content="56"/>
      <head-info class="split-right" :title="$t('ranking')" content="8/24"/>
      <head-info class="split-right" :title="$t('visit')" content="2,223"/>
    </template>
    <template>
      <a-row style="margin: 0 -12px">
        <a-col style="padding: 0 12px" :xl="16" :lg="24" :md="24" :sm="24" :xs="24">
          <a-card class="project-list" :loading="loading" style="margin-bottom: 24px;" :bordered="false" :title="$t('progress')" :body-style="{padding: 0}">
            <a slot="extra">{{$t('all')}}</a>
            <div>
              <a-card-grid :key="i" v-for="(item, i) in projects">
                <a-card :bordered="false" :body-style="{padding: 0}">
                  <a-card-meta :description="item.desc">
                    <div slot="title" class="card-title">
                      <a-avatar size="small" :src="item.logo" />
                      <span>Alipay</span>
                    </div>
                  </a-card-meta>
                  <div class="project-item">
                    <a class="group" href="/#/">科学搬砖组</a>
                    <span class="datetime">9小时前</span>
                  </div>
                </a-card>
              </a-card-grid>
            </div>
          </a-card>
          <a-card :loading="loading" :title="$t('dynamic')" :bordered="false">
            <a-list>
              <a-list-item :key="index" v-for="(item, index) in activities">
                <a-list-item-meta>
                  <a-avatar slot="avatar" :src="item.user.avatar" />
                  <div slot="title" v-html="item.template" />
                  <div slot="description">9小时前</div>
                </a-list-item-meta>
              </a-list-item>
            </a-list>
          </a-card>
        </a-col>
        <a-col style="padding: 0 12px" :xl="8" :lg="24" :md="24" :sm="24" :xs="24">
          <a-card :title="$t('access')" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}">
            <div class="item-group">
              <a>操作一</a>
              <a>操作二</a>
              <a>操作三</a>
              <a>操作四</a>
              <a>操作五</a>
              <a>操作六</a>
              <a-button size="small" type="primary" ghost icon="plus">{{$t('add')}}</a-button>
            </div>
          </a-card>
          <a-card :loading="loading" :title="`XX ${$t('degree')}`" style="margin-bottom: 24px" :bordered="false" :body-style="{padding: 0}">
            <div style="min-height: 400px;">
              <radar />
            </div>
          </a-card>
          <a-card :loading="loading" :title="$t('team')" :bordered="false">
            <div class="members">
              <a-row>
                <a-col :span="12" v-for="(item, index) in teams" :key="index">
                  <a>
                    <a-avatar size="small" :src="item.avatar" />
                    <span class="member">{{item.name}}</span>
                  </a>
                </a-col>
              </a-row>
            </div>
          </a-card>
        </a-col>
      </a-row>
    </template>
  </page-layout>
</template>
<script>
import PageLayout from '@/layouts/PageLayout'
import HeadInfo from '@/components/tool/HeadInfo'
import Radar from '@/components/chart/Radar'
import {mapState} from 'vuex'
import {request, METHOD} from '@/utils/request'
export default {
  name: 'WorkPlace',
  components: {Radar, HeadInfo, PageLayout},
  i18n: require('./i18n'),
  data () {
    return {
      projects: [],
      loading: true,
      activities: [],
      teams: [],
      welcome: {
        timeFix: '',
        message: ''
      }
    }
  },
  computed: {
    ...mapState('account', {currUser: 'user'}),
    ...mapState('setting', ['lang'])
  },
  created() {
    request('/user/welcome', METHOD.GET).then(res => this.welcome = res.data)
    request('/work/activity', METHOD.GET).then(res => this.activities = res.data)
    request('/work/team', METHOD.GET).then(res => this.teams = res.data)
    request('/project', METHOD.GET).then(res => {
        this.projects = res.data
        this.loading = false
      })
  }
}
</script>
<style lang="less">
@import "index";
</style>
src/pages/workplace/i18n.js
New file
@@ -0,0 +1,40 @@
module.exports = {
  messages: {
    CN: {
      project: '项目数',
      ranking: '团队排名',
      visit: '项目访问',
      progress: '进行中的项目',
      all: '全部项目',
      access: '快速开始/便捷导航',
      dynamic: '动态',
      degree: '指数',
      team: '团队',
      add: '添加'
    },
    HK: {
      project: '項目數',
      ranking: '團隊排名',
      visit: '項目訪問',
      progress: '進行中的項目',
      all: '全部項目',
      access: '快速開始/便捷導航',
      dynamic: '動態',
      degree: '指數',
      team: '團隊',
      add: '添加'
    },
    US: {
      project: 'Project',
      ranking: 'Ranking',
      visit: 'Visit',
      progress: 'Projects in progress',
      all: 'All projects',
      access: 'Quick start / Easy navigation',
      dynamic: 'Dynamic',
      degree: 'degree',
      team: 'Team',
      add: 'Add'
    },
  }
}
src/pages/workplace/index.js
New file
@@ -0,0 +1,2 @@
import WorkPlace from './WorkPlace'
export default WorkPlace
src/pages/workplace/index.less
New file
@@ -0,0 +1,59 @@
.project-list {
  .card-title {
    span{
      vertical-align: middle;
      &:last-child{
        margin-left: 12px;
      }
    }
  }
  .project-item {
    display: flex;
    justify-content: space-between;
    margin-top: 8px;
    overflow: hidden;
    font-size: 12px;
    color: inherit;
    .group{
      color: @text-color;
      flex: 1 1 0;
      &:hover {
        color: @primary-color;
      }
    }
    .datetime {
      color: @text-color-second;
      flex: 0 0 auto;
    }
  }
  .ant-card-meta-description {
    height: 44px;
    line-height: 22px;
    overflow: hidden;
  }
}
.item-group{
  padding: 20px 0 8px 24px;
  font-size: 0;
  a{
    color: inherit;
    display: inline-block;
    font-size: 14px;
    margin-bottom: 13px;
    width: 25%;
  }
}
.members {
  a {
    display: block;
    margin: 12px 0;
    color: @text-color;
    &:hover {
      color: @primary-color;
    }
    .member {
      vertical-align: middle;
      margin-left: 12px;
    }
  }
}
src/router/config.js
@@ -27,7 +27,18 @@
      redirect: '/login',
      children: [
        {
          path: 'dashboard',
          path: 'workplace',
          name: '工作台',
          meta: {
            icon: 'home',
            page: {
              closable: false
            }
          },
          component: () => import('@/pages/workplace'),
        },
        {
          path: 'draw',
          name: '图纸管理',
          meta: {
            icon: 'dashboard'
@@ -35,14 +46,9 @@
          component: BlankView,
          children: [
            {
              path: 'docCenter',
              path: 'center',
              name: '图纸中心',
              meta: {
                page: {
                  closable: false
                }
              },
              component: () => import('@/pages/dashboard/drawcenter'),
              component: () => import('@/pages/drawManage/drawCenter'),
            },
            {
              path: 'analysis',