yangys
2025-09-05 3ded1213a0b156fb04f2ffff47e2dc32104e8bb9
src/views/basesetting/machine.vue
@@ -1,44 +1,73 @@
<template>
  <basic-container>
    <avue-crud
      :addBtn="false"
      :option="option"
      :table-loading="loading"
      :data="data"
      ref="crud"
      v-model:search="search"
      v-model:page="mypage"
      @search-change="searchChange"
      @search-reset="searchReset"
      @current-change="currentChange"
      @size-change="sizeChange"
      @refresh-change="refreshChange"
      @on-load="onLoad"
    >
      <template #menu-left>
        <el-button type="primary" size="default" icon="el-icon-circle-plus" plain @click="handleExport">导出</el-button>
        <!-- <el-button type="primary" size="default" icon="el-icon-circle-plus" plain @click="handleView">导入</el-button> -->
        <el-button type="primary" size="default" icon="el-icon-circle-plus" plain @click="handleAdd">新增</el-button>
      </template>
      <template #menu="scope">
        <el-button type="primary" text size="default" icon="el-icon-upload" @click.stop="handleEdit(scope.row, scope.index)">编辑</el-button>
        <el-button type="primary" text size="default" icon="el-icon-upload" @click.stop="handleDel(scope.row, scope.index)">删除</el-button>
        <el-button type="primary" text size="default" icon="el-icon-upload" @click.stop="handleUp(scope.row, scope.index)">产生机床回传机构树</el-button>
      </template>
  <el-row>
    <el-col :span="5">
      <div class="box">
        <el-scrollbar>
          <basic-container>
            <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick" />
          </basic-container>
        </el-scrollbar>
      </div>
    </el-col>
    <el-col :span="19">
      <basic-container>
        <avue-crud
          :addBtn="false"
          :option="option"
          :table-loading="loading"
          :data="data"
          ref="crud"
          v-model:search="search"
          v-model:page="mypage"
          @search-change="searchChange"
          @search-reset="searchReset"
          @current-change="currentChange"
          @size-change="sizeChange"
          @refresh-change="refreshChange"
          @on-load="onLoad"
        >
          <template #menu-left>
            <div class="menuLeft">
              <el-button type="primary" size="default" icon="el-icon-circle-plus" plain @click="handleExport">导出</el-button>
              <!-- <el-upload :show-file-list="false" class="upload-demo"
                  action="/api/blade-mdm/machine/import"
                        :on-change="handleChange">
                <el-button type="primary" plain size="default">导入</el-button>
              </el-upload> -->
              <el-button type="primary" plain @click="importAction">导入</el-button>
               <el-button type="primary" plain @click="downloadTemplate">下载模板
                        </el-button>
              <el-button type="primary" size="default" icon="el-icon-circle-plus" plain @click="handleAdd">新增</el-button>
            </div>
          </template>
          <template #menu="scope">
            <el-button type="primary" text size="default" icon="el-icon-edit" @click.stop="handleEdit(scope.row, scope.index)">编辑</el-button>
            <el-button type="primary" text size="default" icon="el-icon-delete" @click.stop="handleDel(scope.row, scope.index)">删除</el-button>
            <!--
            <el-button type="primary" text size="default" icon="el-icon-upload" @click.stop="handleUp(scope.row, scope.index)">产生机床回传机构树</el-button>
            -->
          </template>
      <template #status="{ row }">
        <span>{{ row.status=="1"?"启用":"禁用" }}</span>
      </template>
    </avue-crud>
          <template #status="{ row }">
            <span>{{ row.status=="1"?"启用":"禁用" }}</span>
          </template>
        </avue-crud>
    <el-dialog :title="machineTitle" append-to-body v-model="editBox" width="60%">
      <avue-form ref="editFormModal1" :option="editFormModal" v-model="editForm" @submit="formSubmit" @resetForm="resetForm">
        <template #ownerDept="{}">
          <el-tree-select v-model="editForm.ownerDept" :data="organizationTreeList"/>
        </template>
      </avue-form>
    </el-dialog>
  </basic-container>
        <el-dialog :title="machineTitle" append-to-body v-model="editBox" width="60%">
          <avue-form ref="editFormModal1" :option="editFormModal" v-model="editForm" @submit="formSubmit" @resetForm="resetForm">
            <template #ownerDept="{}">
              <el-tree-select v-model="editForm.ownerDept" :data="organizationTreeList" :props="treePropsConfig"/>
            </template>
          </avue-form>
        </el-dialog>
        <el-dialog title="" append-to-body v-model="excelBox" width="555px">
            <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
            </avue-form>
        </el-dialog>
      </basic-container>
    </el-col>
  </el-row>
</template>
<script>
@@ -47,10 +76,66 @@
import NProgress from 'nprogress';
import { downloadXls } from '@/utils/util';
import 'nprogress/nprogress.css';
import { getDeptLazyTree } from '@/api/system/dept';
export default {
  data() {
    var that = this;
    return {
      excelBox: false,
      excelOption: {
          submitBtn: false,
          emptyBtn: false,
          column: [
              {
                  label: '文件导入',
                  prop: 'file',
                  type: 'upload',
                  drag: true,
                  loadText: '导入中,请稍后',
                  span: 24,
                  propsHttp: {
                      res: 'data',
                  },
                  data: {
                  },
                  tip: '',
                  action: '/blade-mdm/machine/import',
              },
          ],
      },
      excelForm: {},
      treeOption: {
        nodeKey: 'id',
        lazy: true,
        treeLoad: function (node, resolve) {
          const parentId = node.level === 0 ? 0 : node.data.id;
          getDeptLazyTree(parentId).then(res => {
            resolve(
              res.data.data.map(item => {
                return {
                  ...item,
                  leaf: !item.hasChildren,
                };
              })
            );
          });
        },
        addBtn: false,
        menu: false,
        size: 'small',
        props: {
          labelText: '标题',
          label: 'title',
          value: 'value',
          children: 'children',
        },
      },
      treeData: [],
      treePropsConfig: {
        value:  'id',
        label: 'title',
        children: 'children'
      },
      organizationTreeList: [],
      machineTitle: "新增",
      isAdd: true,
@@ -74,16 +159,18 @@
        labelWidth: 120,
        emptyBtn: false,
        searchSpan: 8,
        searchEnter:true,
        column: [
          {
            label: '编号/名称',
            type: 'input',
            prop: 'keyword',
            search: true,
            hide: true
            hide: true,
            showColumn: false
          },
          {
            label: '机床编号4',
            label: '机床编号',
            prop: 'code'
          },
          {
@@ -93,6 +180,7 @@
          {
            label: '机床组',
            prop: 'machineGroupName',
            filterable:true,
            search: true,
            type: 'select',
            dicUrl: '/blade-system/dict-biz/dictionary?code=machine_group',
@@ -176,6 +264,7 @@
          {
            label: '所属机床组',
            prop: 'machineGroupCode',
            filterable:true,
            type: 'select',
            span: 12,
            dicUrl: '/blade-system/dict-biz/dictionary?code=machine_group',
@@ -201,12 +290,13 @@
          {
            label: '所属组织',
            prop: 'ownerDept',
            type: 'tree',
            span: 12,
            rules: [
              {
                required: true,
                message: '请选择所属组织',
                trigger: 'change'
                trigger: 'click'
              }
            ]
          },
@@ -218,7 +308,7 @@
            dataType: 'string',
          },
          {
            label: '系统控制',
            label: '控制系统',
            prop: 'controlSystem',
            type: 'select',
            span: 12,
@@ -239,11 +329,27 @@
            }]
          },
          {
            label: '程序临时目录',
            prop: 'progTempDir',
            type: 'input',
            span: 12,
            dataType: 'string',
          },
          {
            label: '程序下发目录',
            prop: 'progSendDir',
            type: 'input',
            span: 12,
            dataType: 'string',
          },
          {
            label: '下发目录保存时间',
            prop: 'sendDirExpiryHours',
            placeholder:"(小时)",
            max:24,
            min:0,
            type: 'number',
            span: 12,
          },
          {
            label: '程序回传目录',
@@ -252,6 +358,16 @@
            span: 12,
            dataType: 'string',
          },
          {
            label: '回传目录保存时间',
            prop: 'receiveDirExpiryHours',
            max:24,
            min:0,
            placeholder:"(小时)",
            type: 'number',
            span: 12,
          },
          {
            label: '备注',
            prop: 'remark',
@@ -265,6 +381,33 @@
    };
  },
  methods: {
    importAction() {
      this.excelBox = true;
    },
    uploadAfter(res, done, loading, column) {
        window.console.log('res',res);
        //console.log('res',res)
        if(res.failure==0 && res.success>0){
            //有成功的,关闭对话框
            this.excelBox = false;
            this.$message.success(res.message);
            this.onLoad(this.page);
            //done();
        }else{
            //0成功的,仅提示
            this.$message.info("成功"+res.success+",失败"+res.failure+":"+res.message);
            done();
        }
    },
    handleChange(a,b,c) {
      console.log(a,b,c);
    },
    nodeClick(data) {
      this.treeDeptId = data.id;
      this.mypage.current = 1;
      this.onLoad(this.page);
    },
    handleAdd() {
      this.machineTitle = "新增";
      this.isAdd = true;
@@ -346,6 +489,15 @@
        });
      });
    },
    downloadTemplate() {
      NProgress.start();
      exportBlob(
          `/blade-mdm/machine/download-template`
      ).then(res => {
          downloadXls(res.data, `机床导入模版.xlsx`);
          NProgress.done();
      });
    },
    formSubmit(params, done) {
      var obj = {...params};
      if(params.status.length == 0) {
@@ -368,6 +520,8 @@
        }else {
          this.$message({type: 'error',message: res.data.msg});
        }
        done();
      }).catch(e=>{
        done();
      });
    },
@@ -392,28 +546,31 @@
      
    },
    onLoad() {
      this.loading = true;
      var obj = {
        keyword: this.search.keyword,
        machineGroupCode: this.search.machineGroupCode,
        current: this.mypage.current,
        size: this.mypage.size,
      }
      axios({
        url: '/blade-mdm/machine/page',
        method: 'get',
        params: obj,
      }).then(
        res => {
          const data = res.data.data;
          this.mypage.total = data.total;
          this.data = data.records;
          this.loading = false;
        },
        error => {
      this.$nextTick(()=> {
        this.loading = true;
        var obj = {
          keyword: this.search.keyword,
          machineGroupCode: this.search.machineGroupName,
          current: this.mypage.current,
          size: this.mypage.size,
          deptId: this.treeDeptId
        }
      );
        axios({
          url: '/blade-mdm/machine/page',
          method: 'get',
          params: obj,
        }).then(
          res => {
            const data = res.data.data;
            this.mypage.total = data.total;
            this.data = data.records;
            this.loading = false;
          },
          error => {
          }
        );
      })
    },
    traversalLabelValueToTree(tree) {  //遍历数组
      return tree.map(node => {
@@ -431,26 +588,23 @@
      });
    }
  },
  mounted() {
    //判断版本  0:涉密网,1:工控网;//工控网5个,涉密网4个  工控网不做了
    // 工控网是/blade-mdm/system/dept/lazy-list
    // 涉密网是/blade-mdm/dept/lazy-list
    axios({url: '/blade-mdm/system/param/getValue?paramKey=networkType',method: 'get'}).then(res => {
        // if(res.data.data === "0") {
        //   var aurl = "/blade-mdm/dept/lazy-list";
        // }else {
        //   var aurl = "/blade-mdm/system/dept/lazy-list";
        // }
        var aurl = "/blade-mdm/system/dept/lazy-list";
        axios({url: aurl,method: 'get'}).then(resp => {
          this.organizationTreeList = this.traversalLabelValueToTree(resp.data.data);
        })
      }
    );
  mounted() {
    //所属组织 /api/blade-system/dept/tree
    axios({url: '/blade-system/dept/tree',method: 'get'}).then(resp => {
      this.organizationTreeList = this.traversalLabelValueToTree(resp.data.data);
    })
  }
};
</script>
<style lang="scss">
.upload-demo {
  display: inline-block;
  margin-left: 6px;
  margin-right: 6px;
}
.menuLeft {
  display: flex;
  align-items: center;
}
</style>