已修改10个文件
已添加4个文件
418 ■■■■ 文件已修改
index.html 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/favicon.png 补丁 | 查看 | 原始文档 | blame | 历史
public/img/logo.png 补丁 | 查看 | 原始文档 | blame | 历史
public/img/logo123.png 补丁 | 查看 | 原始文档 | blame | 历史
public/initiallong.b9495273.png 补丁 | 查看 | 原始文档 | blame | 历史
src/api/common.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/flowmgr/programexport.js 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/tool/code.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/config/website.js 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/lang/zh.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flow/components/TodolistLeft.vue 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/flowmgr/programexport.vue 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tasks/machinereturnfileop.vue 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wel/index.vue 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
index.html
@@ -1,3 +1,11 @@
<!--
 * @Author: æŽå–†(开发组) lzhe@yxqiche.com
 * @Date: 2025-05-28 12:03:55
 * @LastEditors: æŽå–†(开发组) lzhe@yxqiche.com
 * @LastEditTime: 2025-07-07 17:36:28
 * @FilePath: /dev-optimize-0710-lzhe/Users/test/MDM/mdmweb/index.html
 * @Description: è¿™æ˜¯é»˜è®¤è®¾ç½®,请设置`customMade`, æ‰“å¼€koroFileHeader查看配置 è¿›è¡Œè®¾ç½®: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<!DOCTYPE html>
<html lang='en'>
@@ -18,19 +26,16 @@
  <link rel='stylesheet' href='/iconfont/common/iconfont.css'>
  <link rel='stylesheet' href='/css/loading.css'>
  <link rel='stylesheet' href='/css/saber.css'>
  <title>BladeX微服务开发平台</title>
  <title>MDM管理平台</title>
</head>
<body>
<div id='app'>
  <div id='loader-wrapper'>
    <div class='loader-box'>
      <span>BladeX</span>
      <span>å¾®</span>
      <span>服</span>
      <span>务</span>
      <span>开</span>
      <span>发</span>
      <span>MDM</span>
      <span>管</span>
      <span>理</span>
      <span>å¹³</span>
      <span>台</span>
    </div>
public/favicon.png

public/img/logo.png

public/img/logo123.png
public/initiallong.b9495273.png
src/api/common.js
@@ -1,3 +1,9 @@
/*
 * @Date: 2025-05-27 23:44:41
 * @LastEditors: gaoshp
 * @LastEditTime: 2025-07-07 22:47:09
 * @FilePath: /mdmweb/src/api/common.js
 */
import request from '@/axios';
/**
@@ -13,3 +19,12 @@
    responseType: 'blob',
  });
};
export const exportBlobPost = (url, params,data) => {
  return request({
    url: url,
    params: params,
    data,
    method: 'post',
    responseType: 'blob',
  });
};
src/api/flowmgr/programexport.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
/*
 * @Date: 2025-06-12 22:38:05
 * @LastEditors: gaoshp
 * @LastEditTime: 2025-07-07 21:49:01
 * @FilePath: /mdmweb/src/api/flowmgr/programexport.js
 */
import request from '@/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/blade-mdm/program/exchange/export-dnc-page',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    },
  })
};
src/api/tool/code.js
@@ -18,7 +18,7 @@
    method: 'post',
    params: {
      ids,
      system: 'saber',
      system: 'MDM',
    },
  });
};
src/config/website.js
@@ -1,11 +1,19 @@
/*
 * @Author: æŽå–†(开发组) lzhe@yxqiche.com
 * @Date: 2025-06-11 10:04:08
 * @LastEditors: æŽå–†(开发组) lzhe@yxqiche.com
 * @LastEditTime: 2025-07-07 17:46:08
 * @FilePath: /dev-optimize-0710-lzhe/Users/test/MDM/mdmweb/src/config/website.js
 * @Description: è¿™æ˜¯é»˜è®¤è®¾ç½®,请设置`customMade`, æ‰“å¼€koroFileHeader查看配置 è¿›è¡Œè®¾ç½®: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
/**
 * å…¨å±€é…ç½®æ–‡ä»¶
 */
export default {
  title: 'Saber',
  title: 'MDM',
  logo: 'X',
  key: 'saber', //配置主键,目前用于存储
  indexTitle: 'BladeX å¾®æœåŠ¡å¹³å°',
  indexTitle: 'MDM管理平台',
  clientId: 'saber3', // å®¢æˆ·ç«¯id
  clientSecret: 'saber3_secret', // å®¢æˆ·ç«¯å¯†é’¥
  tenantMode: false, // æ˜¯å¦å¼€å¯ç§Ÿæˆ·æ¨¡å¼
@@ -50,7 +58,7 @@
  //水印配置
  watermark: {
    mode: false,
    text: 'BladeX',
    text: 'MDM',
  },
  //oauth2配置
  oauth2: {
src/lang/zh.js
@@ -1,5 +1,5 @@
export default {
  title: 'BladeX微服务平台',
  title: 'MDM管理平台',
  confirmTip: '提示',
  logoutTip: '退出系统, æ˜¯å¦ç»§ç»­?',
  submitText: '确定',
@@ -79,7 +79,7 @@
  },
  login: {
    title: '登录 ',
    info: 'BladeX å¾®æœåŠ¡å¹³å°',
    info: 'MDM管理平台',
    tenantId: '请输入租户ID',
    name: '请输入姓名',
    username: '请输入账号',
src/views/flow/components/TodolistLeft.vue
@@ -1,7 +1,7 @@
<!--
 * @Date: 2025-07-01 20:45:15
 * @LastEditors: gaoshp
 * @LastEditTime: 2025-07-01 23:50:05
 * @LastEditTime: 2025-07-07 20:00:11
 * @FilePath: /mdmweb/src/views/flow/components/TodolistLeft.vue
-->
<template>
@@ -9,12 +9,15 @@
        <div class="tool" v-show="row.taskDefinitionKey === 'programmingTask'">
            <el-button type="primary" @click="addApp">添加程序</el-button>
        </div>
        <el-table :data="tableData" border @row-click="showContent">
            <el-table-column prop="code" label="编号">
        <el-table :data="tableData" border @row-click="showContent" max-height="200">
            <el-table-column prop="machineCode" label="加工机床">
            </el-table-column>
            <el-table-column prop="name" label="程序名称">
            </el-table-column>
            <el-table-column prop="name" label="工序名称">
            <el-table-column fixed="right" label="操作" width="100">
            <template #default="scope" v-show="row.taskDefinitionKey === 'programmingTask'">
                <el-button type="text" size="small" @click.stop="del(scope.$index,scope.row)">删除</el-button>
            </template>
            </el-table-column>
        </el-table>
        <h4>程序内容</h4>
@@ -75,17 +78,17 @@
                dialogClickModal: false,
                column: [
                    {
                        label: 'machineCode',
                        prop: '设备编号',
                        label: '加工机床',
                        prop: 'machineCode',
                    },
                    {
                        label: '程序名称',
                        prop: 'name',
                    },
                    {
                        label: '工序名称',
                        prop: 'processName',
                    },
                    // {
                    //     label: '工序名称',
                    //     prop: 'processName',
                    // },
                ],
            },
        }
@@ -140,6 +143,10 @@
                    this.appContent = '程序内容加载失败'
                }
            })
        },
        del (index,row) {
            this.tableData = this.tableData.filter(item => item.id !== row.id);
            this.$emit('selection-change',this.tableData)
        }
    },
}
@@ -156,7 +163,9 @@
}
.app-content {
    background-color: #fffee1;
    padding: 10px;
    padding: 10px 30px;
    min-height: 100px;
    overflow: auto;
    max-height: 400px;
}
</style>
src/views/flowmgr/programexport.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,195 @@
<!--
 * @Date: 2025-06-20 20:48:17
 * @LastEditors: gaoshp
 * @LastEditTime: 2025-07-07 23:00:25
 * @FilePath: /mdmweb/src/views/flowmgr/programexport.vue
-->
<template>
    <basic-container>
        <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" v-model="form" ref="crud" @current-change="currentChange"
            @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange">
            <template #menu-left>
                <!-- <el-button type="primary" plain @click="exportWebSite">导出回传涉密网</el-button> -->
                <!-- <el-button type="primary" plain @click="reassign">挂载车床程序库</el-button> -->
                <el-button type="primary" plain @click="exportExcel">导出</el-button>
            </template>
            <template #menu="scope">
                <!-- <el-button type="primary" text size="default"
                    @click.stop="handleAction(scope.row, scope.index)">处理意见
                </el-button> -->
            </template>
        </avue-crud>
    </basic-container>
</template>
<script>
    import { getList } from '@/api/flowmgr/programexport.js';
    import NProgress from 'nprogress';
    import { exportBlobPost } from '@/api/common';
    import { getToken } from '@/utils/auth';
    import { downloadFile } from '@/utils/util';
    export default {
    name: 'programexport',
    data() {
        return {
            // Define your data properties here
            page: {
                pageSize: 10,
                currentPage: 1,
                total: 0,
            },
            form: {},
            query: {},
            loading: true,
            data: [],
            selection: [],
            option: {
                addBtn: false,
                editBtn: false,
                delBtn: false,
                viewBtn: true,
                columnBtn: false,
                tip: false,
                // simplePage: true,
                searchShow: true,
                searchMenuSpan: 6,
                dialogWidth: '60%',
                // tree: true,
                border: true,
                index: true,
                selection: true,
                // viewBtn: true,
                menuWidth: 200,
                menu: false,
                dialogClickModal: false,
                column: [
                    {
                        label: '图号',
                        prop: 'partNo',
                    },
                    {
                        label: '图号版次',
                        prop: 'partNoEdition',
                    },
                    {
                        label: '工序名称',
                        prop: 'processName',
                    },
                    {
                        label: '程序名称',
                        prop: 'name',
                        search: true,
                    },
                    {
                        label: '通过时间',
                        prop: 'createTime',
                    },
                    {
                        label: '完成时间',
                        prop: 'passTime',
                        search: true,
                        hide: true,
                        type: 'datetime',
                        format: 'YYYY-MM-DD HH:mm:ss',
                        valueFormat: 'YYYY-MM-DD HH:mm:ss',
                        searchRange: true,
                        searchSpan: 8,
                    },
                ],
            }
        };
    },
    methods: {
        selectionChange(list) {
            this.selection = list;
        },
        // Define your methods here
        currentChange(currentPage) {
            this.page.currentPage = currentPage;
            // this.onLoad();
        },
        sizeChange(pageSize) {
            this.page.pageSize = pageSize;
        },
        refreshChange() {
            this.onLoad(this.page, this.query);
        },
        searchChange(params, done) {
            let data = {}
            this.query = params;
            this.page.currentPage = 1;
            console.log('searchChange', params);
            params.passTimeBegin = params?.passTime?.[0] || '';
            params.passTimeEnd = params?.passTime?.[1] || '';
            console.log(params);
            data = {
                createTimeBegin: params.passTimeBegin,
                createTimeEnd: params.passTimeEnd,
                name: params.name || ''
            }
            this.query = data
            this.onLoad(this.page, data);
            done();
        },
        searchReset() {
            this.query = {};
            this.onLoad(this.page);
        },
        /** * é¡µé¢åŠ è½½æ—¶èŽ·å–æ•°æ®
         */
        onLoad(page, params = {}) {
            console.log('onLoad', page, params);
            const query = {
                ...this.query,
                // category: params.category ? flowCategory(params.category) : null,
                mode: this.mode,
            };
            try {
                delete query.confirmTime; // åˆ é™¤ä¸å¿…要的查询条件
            } catch (error) {
                console.error('日期格式化错误', error);
            }
            this.loading = true;
            getList(page.currentPage, page.pageSize, Object.assign(query, params)).then(res => {
                const data = res.data.data;
                this.page.total = data.total;
                this.data = data.records;
                this.loading = false;
            }, () => {
                this.data = [];
                this.loading = false;
            }).catch(err => {
                this.data = [];
                this.loading = false;
            });
        },
        exportExcel() {
            this.$confirm('是否导出?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning',
            }).then(() => {
                console.log(this.selection)
                NProgress.start();
                exportBlobPost(
                    `/blade-mdm/program/exchange/export-dnc`,
                    {},
                    {ids: this.selection.map(item => item.id)},
                ).then(res => {
                    console.log(res);
                    downloadFile(res.data, `导出DNC${this.$dayjs().format('YYYY-MM-DD HH:mm:ss')}.zip`);
                    NProgress.done();
                });
            });
        },
    },
    mounted() {
    }
}
</script>
<style lang="scss" scoped>
</style>
src/views/tasks/machinereturnfileop.vue
@@ -76,7 +76,7 @@
                    {
                        label: '程序编号',
                        prop: 'programName',
                        prop: 'code',
                    },
                    {
                        label: '回传机床',
@@ -85,14 +85,14 @@
                    {
                        label: '文件名称',
                        prop: '',
                        formatter: (val, value, label) => {
                            return `${val?.variables?.machineCode}`;
                        },
                        prop: 'name'
                    },
                    {
                        label: '文件固化状态',
                        prop: 'machineCode',
                        prop: 'isCured',
                        formatter: (val, value, label) => {
                            return `${val==0?'未固化':"已固化"}`;
                        },
                    },
                    {
                        label: '文件到达时间',
@@ -100,11 +100,7 @@
                        type: 'datetime',
                        format: 'YYYY-MM-DD HH:mm:ss',
                        valueFormat: 'YYYY-MM-DD HH:mm:ss',
                    },
                    {
                        label: '文件数据库编号',
                        prop: '',
                    },
                    }
                ],
            }
        }
src/views/wel/index.vue
@@ -25,26 +25,24 @@
        <el-button :size="size" text v-if="row.nodeType < 60" icon="el-icon-document-add" type="primary" @click="showAdd(row)" placeholder="新增子级" title="新增子级"></el-button>
        <el-button :size="size" text v-if="row.nodeType == 60" icon="el-icon-upload" type="primary" @click="showUpload(row)" placeholder="文件上传" title="文件上传"></el-button>
        <el-button :size="size" text v-if="row.nodeType == 60" icon="el-icon-pie-chart" type="primary" @click="upgrade(row)" placeholder="升级" title="升级"></el-button>
        <el-button :size="size" text v-if="row.nodeType == 60 && !isSM" icon="el-icon-position" type="primary" @click="downsend(row)" placeholder="下发" title="下发"></el-button>
      </template>
    </avue-crud>
    <el-dialog :title="modalTitle" append-to-body v-model="modalBox">
      <avue-form :option="modalOption" v-model="modalForm" @submit="modalSubmit" @reset-change="modalCancel"/>
    </el-dialog>
    <el-dialog title="上传文件" append-to-body v-model="uploadmodalBox">
      <avue-form :option="uploadmodalOption" v-model="uploadmodalForm" @submit="uploadmodalSubmit" @reset-change="uploadmodalCancel" :upload-before="uploadBefore" :upload-after="uploadAfter">
        <template #filelist>
          <div v-for="item in fileList" v-if="fileList.length > 0">
      <avue-form :option="uploadmodalOption" v-model="uploadmodalForm" @submit="uploadmodalSubmit" @reset-change="uploadmodalCancel" :upload-before="uploadBefore" :upload-after="uploadAfter"></avue-form>
    </el-dialog>
    <avue-tabs :option="tabsOption" @change="tabsHandleChange" style="margin-top: 30px;" v-if="isShowTabs"></avue-tabs>
      <avue-form v-if="tabsType == 'tab1'" :option="tabsFormOption" v-model="tabsForm"></avue-form>
      <span v-else-if="tabsType == 'tab2'">版本信息</span>
      <template v-else-if="tabsType == 'tab3'">
          <div v-for="item in fileList" v-if="fileList.length > 0" class="fileListStyle">
            <span>{{item.name}}</span>
            <span class="delFile" @click="delFile(item)">X</span>
          </div>
        </template>
      </avue-form>
    </el-dialog>
    <avue-tabs :option="tabsOption" @change="tabsHandleChange" style="margin-top: 30px;"></avue-tabs>
      <avue-form v-if="tabsType === 'tab1'" :option="tabsFormOption" v-model="tabsForm"></avue-form>
      <span v-else-if="tabsType === 'tab2'">版本信息</span>
      <span v-else-if="tabsType === 'tab3'">文件内容</span>
      </template>
  </basic-container>
</template>
@@ -53,6 +51,9 @@
export default {
  data() {
    return {
      isSM: false,  //是否是涉密网 ï¼Œå·¥æŽ§ç½‘5个,涉密网4个
      isShowTabs: true,
      nodeTypeList: [],
      fileList: [],
      tabsType: "tab1",
      tabsOption: {},
@@ -88,7 +89,7 @@
        column: [
          {
            label: '节点类型',
            prop: 'nodeType',
            prop: 'nodeTypeName',
            disabled: true,
            placeholder: " "
          },
@@ -121,13 +122,6 @@
            prop: 'updateTime',
            disabled: true,
            placeholder: " "
          },
          {
            label: '节点全路径',
            prop: '',
            disabled: true,
            placeholder: " ",
            span: 24
          }
        ]
      },
@@ -166,11 +160,6 @@
            hide: true
          },
          {
            label: '全路径',
            prop: 'abc',
            span: 24
          },
          {
            label: '备注',
            prop: 'remark',
            type: "textarea",
@@ -204,7 +193,7 @@
          {
            label: '目录',
            prop: 'name',
            width: '300'
            width: '360'
          },
          {
            label: '版本',
@@ -274,20 +263,11 @@
            label: '选择文件',
            prop: 'uploadFile',
            type: 'upload',
            data: {nodeId: this.tabsForm.id},
            data: {nodeId: this.id},
            action: "",
            showFileList: false,
            span: 24,
            action: "/blade-mdm/program/ncfile/upload"
          },
          {
            label: '文件列表',
            prop: 'filelist'
          },
          {
            label: '全路径',
            prop: 'abc',
            span: 24
          },
          {
            label: '备注',
@@ -305,6 +285,12 @@
    }
  },
  methods: {
    downsend(row) {
    },
    uploadAfter() {
      this.getFile(this.id);
    },
    upgrade(row) {  //升级
      this.loading = true;
      var obj = {id: row.id}
@@ -327,7 +313,8 @@
        params: obj,
      }).then(
        resp => {
          this.getFile(this.uploadmodalForm.id);
          this.loading = false;
          this.getFile(this.id);
        }
      );
    },
@@ -335,28 +322,35 @@
      done();
      //nodeId: this.tabsForm.id
    },
    uploadAfter(res,done,loading,column) {
      this.getFile(column.data.nodeId);
    },
    rowClick(row) {
      this.tabsForm = row;
      this.id = row.id;
      this.isShowTabs = false;
      this.nodeTypeList.forEach(item=> {
        if(item.dictKey == row.nodeType) {
          this.tabsForm.nodeTypeName = item.dictValue;
        }
      })
      if(this.tabsForm.nodeType < 60) {
        this.tabsOption = this.tabsOption1;
      }else {
        this.tabsOption = this.tabsOption2;
        //获取文件list
        this.getFile(row.id);
      }
      this.$nextTick(()=> {
        this.tabsType = 'tab1';
        this.isShowTabs = true;
      })
    },
    tabsHandleChange(tabs) {
      this.tabsType = tabs.prop;
    },
    showUpload(row) {
      this.uploadmodalForm = row;
      //获取文件list
      this.getFile(row.id);
      this.uploadmodalBox = true;
    },
    getFile(id) {
      this.loading = true;
      var obj = {nodeId: id}
      axios({
        url: '/blade-mdm/program/ncfile/list-by-node',
@@ -369,7 +363,8 @@
      );
    },
    uploadmodalSubmit(row,done) {
      this.uploadmodalBox = false;
      done();
    },
    rowDel(row, index, done) {
      done(row);
@@ -503,6 +498,11 @@
        res => {
          this.data = res.data.data;
          this.tabsForm = res.data.data[0];  //节点信息
          this.nodeTypeList.forEach(item=> {
            if(item.dictKey == this.data[0].nodeType) {
              this.tabsForm.nodeTypeName = item.dictValue;
            }
          })
          this.loading = false;
        }
      );
@@ -510,6 +510,18 @@
  },
  mounted() {
    this.tabsOption = this.tabsOption1;
    //获取nodetype
    axios({url: '/blade-system/dict-biz/dictionary?code=nc_node_type',method: 'get'}).then(res => {
        this.nodeTypeList = res.data.data;
      }
    );
    //判断版本  0:涉密网,1:工控网;//工控网5个,涉密网4个
    axios({url: '/blade-system/param/detail?paramKey=networkType',method: 'get'}).then(res => {
        if(res.data.data.paramValue === "0") {
          this.isSM = true;
        }
      }
    );
    //查看内容
    // this.loading = true;
    // var obj = {id: "1940982493963415554"}
@@ -535,4 +547,8 @@
  margin-left: 12px;
  cursor: pointer;
}
.fileListStyle {
  margin-left: 10px;
  margin-top: 12px;
}
</style>