研发图纸文件管理系统-前端项目
he wei
2022-09-06 5ac808dd8b3a4af40b4e72f055dfc9cd21ea4df9
UA 页面根据权限控制按钮
5个文件已修改
2个文件已添加
157 ■■■■ 已修改文件
src/assets/js/const/const_permits.js 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/tools/checkPermit.js 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/components/filesTable.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/resourceManage/materialsCenter/list.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/resourceManage/product/details/details.vue 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/resourceManage/product/list.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/resourceManage/software/list.vue 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/assets/js/const/const_permits.js
New file
@@ -0,0 +1,9 @@
export default {
  downloadSoftware: 10001,
  downloadDoc: 10002,
  downloadBom: 10003,
  downloadOther: 10004,
  uploadBom: 10009,
  uploadSoftware: 10008
}
src/assets/js/tools/checkPermit.js
New file
@@ -0,0 +1,5 @@
function checkPermit(permitId, permitList) {
  return permitList.some((v) => v == permitId);
}
export default checkPermit;
src/pages/components/filesTable.vue
@@ -13,8 +13,10 @@
      <template slot="action" slot-scope="text, record">
        <div v-if="record.url">
          <a @click="view(record)">预览</a>
          <a-divider type="vertical"></a-divider>
          <a @click="downloadLog(record)">下载</a>
          <template v-if="canDownloadOther">
            <a-divider type="vertical"></a-divider>
            <a @click="downloadLog(record)">下载</a>
          </template>
        </div>
      </template>
    </a-table>
@@ -33,6 +35,9 @@
import getWebUrl from "@/assets/js/tools/getWebUrl";
import { dwgReview } from "@/pages/workplace/apis";
import { downloadLog } from "@/pages/system/logs/apis";
import checkPermit from "@/assets/js/tools/checkPermit";
import PERMITS from "@/assets/js/const/const_permits";
import { mapGetters } from "vuex";
export default {
  name: "",
  props: {
@@ -101,7 +106,7 @@
          this.dwgReview(obj.url);
          break;
        default:
          this.$message.warn('该类型文件暂不支持预览');
          this.$message.warn("该类型文件暂不支持预览");
          break;
      }
    },
@@ -152,6 +157,10 @@
        };
      });
    },
    ...mapGetters("account", ["permits"]),
    canDownloadOther() {
      return checkPermit(PERMITS.canDownloadOther, this.permits);
    },
  },
  mounted() {},
};
src/pages/resourceManage/materialsCenter/list.vue
@@ -34,6 +34,7 @@
              <span class="title">物料中心</span>
              <a-space class="operator" style="margin-left: 1em">
                <a-upload
                  v-if="canUpload"
                  :before-upload="beforeUpload"
                  :showUploadList="false"
                  @change="uploadChange"
@@ -137,6 +138,7 @@
        <a-space>
          <a-button @click="fileListCancel">关闭</a-button>
          <a-upload
            v-if="canUpload"
            :before-upload="beforeUpload"
            @change="fileUploadChange"
            :showUploadList="false"
@@ -163,6 +165,8 @@
import { dwgReview } from "@/pages/workplace/apis";
import { downloadLog } from "@/pages/system/logs/apis";
import { mapGetters } from "vuex";
import checkPermit from '@/assets/js/tools/checkPermit';
import PERMITS from '@/assets/js/const/const_permits';
import createWs from "@/assets/js/websocket";
const WSMixin = createWs("material");
@@ -332,6 +336,10 @@
      return this.isAdd ? "批量增加关联关系" : "批量解除关联关系";
    },
    ...mapGetters("setting", ["affixed"]),
    ...mapGetters('account', ['permits']),
    canUpload() {
      return checkPermit(PERMITS.uploadBom, this.permits);
    },
  },
  components: {
    AdvanceTable,
src/pages/resourceManage/product/details/details.vue
@@ -77,10 +77,10 @@
              <files-table slot="content" :list="otherDoc"></files-table>
              <a-button type="primary">其他附件</a-button>
            </a-popover>
            <a-button type="primary" @click="zipDownload">bom下载</a-button>
            <a-button v-if="canUploadBom" type="primary" @click="zipDownload">bom下载</a-button>
            <a-button
              type="primary"
              v-if="softwareList.length"
              v-if="softwareList.length && canUploadSoftware"
              @click="showSoftwareDownload"
              >软件下载</a-button
            >
@@ -145,6 +145,8 @@
import ImageView from "@/pages/components/ImageView";
import FilesTable from "@/pages/components/filesTable";
import DiffList from "@/pages/components/diffList";
import checkPermit from "@/assets/js/tools/checkPermit";
import PERMITS from "@/assets/js/const/const_permits";
import List from "./list";
import getWebUrl from "@/assets/js/tools/getWebUrl";
@@ -333,6 +335,13 @@
  },
  computed: {
    ...mapGetters("setting", ["affixed"]),
    ...mapGetters("account", ["permits"]),
    canUploadSoftware() {
      return checkPermit(PERMITS.uploadSoftware, this.permits);
    },
    canDownloadBom() {
      return checkPermit(PERMITS.downloadBom, this.permits);
    },
  },
  watch: {
    update(n) {
@@ -404,7 +413,7 @@
      const {
        currentVersion: { id, version },
        info,
        lastId
        lastId,
      } = this;
      if (id == lastId) {
        return false;
src/pages/resourceManage/product/list.vue
@@ -33,24 +33,26 @@
            <template slot="title">
              <a-space class="operator">
                <span class="title">产品中心</span>
                <a-button type="primary" @click="uploadBom">新增</a-button>
                <a-button v-if="canUploadBom" type="primary" @click="uploadBom">新增</a-button>
              </a-space>
            </template>
            <template slot="isNormal" slot-scope="{ record }">
              {{ record.customCode == "" ? "是" : "否" }}
            </template>
            <template slot="action" slot-scope="{ record }">
              <a @click="upload(record)">上传软件</a>
              <a-divider type="vertical"></a-divider>
              <template v-if="canUploadSoftware">
                <a @click="upload(record)">上传软件</a>
                <a-divider type="vertical"></a-divider>
              </template>
              <a @click="goDetails(record)">详情</a>
              <a-divider type="vertical"></a-divider>
              <a-popover title="" trigger="hover">
                <a-space direction="vertical" slot="content">
                  <a-button type="primary" @click="edit(record)">编辑</a-button>
                  <a-button type="primary" @click="download(record)"
                  <a-button v-if="canDownloadBom" type="primary" @click="download(record)"
                    >下载</a-button
                  >
                  <a-button type="primary" @click="showCustom(record)"
                  <a-button type="primary" v-if="canUploadBom" @click="showCustom(record)"
                    >定制</a-button
                  >
                </a-space>
@@ -264,6 +266,8 @@
import { productSoftwareSubmit } from "../software/apis";
import { zipParse } from "@/pages/workplace/myDraw/apis";
import { mapGetters } from "vuex";
import checkPermit from "@/assets/js/tools/checkPermit";
import PERMITS from "@/assets/js/const/const_permits";
import createWs from "@/assets/js/websocket";
import DiffList from "@/pages/components/diffList";
@@ -610,13 +614,14 @@
        bomList: bomList.map((v) => ({ ...v, id: undefined })),
        fileUrl: this.fileUrl,
        customCode: data.customCode,
        id: this.fromProd,
        parentCode,
        parentModel,
        parentName,
      };
      addProduct(param).then((res) => {
        const { code, data, msg } = res.data;
        if (code && data) {
        const { code, msg } = res.data;
        if (code) {
          this.$message.success(msg);
          this.prodUploadShow = false;
        } else {
@@ -693,8 +698,8 @@
            this.resList = data2;
            this.diffData = {
              addList: data3.addList,
              delList: data3.deleteList,
              updateList: data3.diffList
              delList: data3.deleteList.map((v) => v.materialObj),
              updateList: data3.diffList,
            };
            this.fileUrl = msg;
            this.prodUploadShow = true;
@@ -766,8 +771,18 @@
      "roles",
      "projectManagerList",
      "generalManagerList",
      'permits'
    ]),
    ...mapGetters("setting", ["affixed"]),
    canUploadBom() {
      return checkPermit(PERMITS.uploadBom, this.permits);
    },
    canUploadSoftware() {
      return checkPermit(PERMITS.uploadSoftware, this.permits);
    },
    canDownloadBom() {
      return checkPermit(PERMITS.downloadBom, this.permits);
    }
  },
  mounted() {
    this.getUserByRoleId();
src/pages/resourceManage/software/list.vue
@@ -9,12 +9,12 @@
            :data-source="dataSource"
            :columns="columns"
            title=""
            row-key="parentModel"
            :row-key="(record, index) => index"
            @search="onSearch"
            @refresh="onRefresh"
            @reset="onReset"
            :format-conditions="true"
            :scroll="{ x: 400, y }"
            :scroll="{ y }"
            :pagination="{
              current: pageCurr,
              pageSize: pageSize,
@@ -33,7 +33,7 @@
              <span class="title">软件中心</span>
            </template>
            <template slot="action" slot-scope="{ record }">
              <template >
              <template v-if="canDownloadSoftware">
                <a @click="download(record)">下载</a>
              </template>
            </template>
@@ -46,6 +46,8 @@
<script>
import AdvanceTable from "@/components/table/advance/AdvanceTable";
import checkPermit from "@/assets/js/tools/checkPermit";
import PERMITS from "@/assets/js/const/const_permits";
import { getList, downLoadSoftware } from "./apis";
import { mapGetters } from "vuex";
@@ -77,7 +79,6 @@
          key: "softwareName",
          align: "center",
          noSearch: true,
          width: 160,
        },
        {
          title: "操作",
@@ -134,7 +135,7 @@
      };
      getList(pageCurr, pageSize, params).then((res) => {
        res = res.data;
        console.log(res);
        // console.log(res);
        let data = [];
        let total = 0;
        if (res.code && res.data) {
@@ -151,7 +152,7 @@
    download(obj) {
      const { parentModel, softwareName } = obj;
      downLoadSoftware(softwareName).then((res) => {
        console.log(res, "===========");
        // console.log(res, "===========");
        let { headers, data, status } = res;
        if (200 == status && data) {
          let url = window.URL.createObjectURL(data);
@@ -175,37 +176,50 @@
        this.update = Math.random();
      }, 200);
    },
    activeFN() {
      this.resize();
    },
  },
  watch: {
    update(n) {
      if (-1 != n) {
        // this.$nextTick(() => {
        //   const table = this.$refs.table;
        //   const header = document.querySelectorAll(
        //     ".doc-center-table .ant-table-header"
        //   )[0].clientHeight;
        //   const bar = document.querySelectorAll(".header-bar")[0].clientHeight;
        //   if (table.fullScreen) {
        //     this.y = table.$el.clientHeight - bar - header - 64;
        //   } else {
        //     const wraper = this.$refs.wraper.clientHeight;
        //     const card = document.querySelectorAll(".ant-card-body")[0];
        //     const { paddingBottom, paddingTop } = getComputedStyle(card, null);
        //     const h =
        //       wraper -
        //       header -
        //       64 -
        //       bar -
        //       parseInt(paddingBottom) -
        //       parseInt(paddingTop);
        //     // console.log(h, "h",wraper, header, bar );
        //     this.y = h;
        //   }
        // });
        this.$nextTick(() => {
          const table = this.$refs.table;
          const header = document.querySelectorAll(
            ".doc-center-table .ant-table-header"
          )[0].clientHeight;
          const bar = document.querySelectorAll(".header-bar")[0].clientHeight;
          if (table.fullScreen) {
            this.y = table.$el.clientHeight - bar - header - 64;
          } else {
            const wraper = this.$refs.wraper.clientHeight;
            const card = document.querySelectorAll(".ant-card-body")[0];
            const { paddingBottom, paddingTop } = getComputedStyle(card, null);
            const h =
              wraper -
              header -
              64 -
              bar -
              parseInt(paddingBottom) -
              parseInt(paddingTop);
            // console.log(h, "h",wraper, header, bar );
            this.y = h;
          }
        });
      }
    },
    affixed() {
      setTimeout(() => {
        this.update = Math.random();
      }, 200);
    },
  },
  computed: {
    ...mapGetters("account", ["permits"]),
    ...mapGetters("setting", ["affixed"]),
    canDownloadSoftware() {
      return checkPermit(PERMITS.downloadSoftware, this.permits);
    },
  },
  mounted() {
    this.searchData();