<template>
|
<el-row class="container" id="productCon">
|
|
<p-head ref="pHead"></p-head>
|
<el-col :span="24" class="main" id="productDrag">
|
<el-aside
|
id="treeDiv" :class="'menu-expanded'"
|
@contextmenu.prevent.native="rightClick($event)"
|
>
|
<div style="width:100%;height:100%;overflow:hidden">
|
<div class="search_box">
|
<el-input
|
placeholder="输入关键字进行搜索"
|
v-model="filterText"
|
>
|
</el-input>
|
</div>
|
<div >
|
<el-tree
|
id="productTree"
|
class="filter-tree"
|
:filter-node-method="filterNode"
|
:data="treeList"
|
:default-expanded-keys="expandedKeys"
|
:props="defaultProps"
|
highlight-current
|
node-key="id"
|
ref="tree"
|
@node-contextmenu="rightClick"
|
:current-node-key="currentNodekey"
|
:expand-on-click-node="false"
|
@node-click="handleNodeClick"
|
:style="treeHeight">
|
<span class="custom-tree-node" slot-scope="{ node, data }">
|
<span>
|
<!-- <img v-if="node.level==1" src="@assets/tree/icon_1.png" alt="">
|
<img v-if="node.level==2" src="@assets/tree/icon_2.png" alt="">
|
<img v-if="node.level==3" src="@assets/tree/icon_3.png" alt=""> -->
|
<i v-if="data.type==1" class="el-icon-goods"></i>
|
<i v-if="data.type==2" class="el-icon-camera"></i>
|
<i v-if="data.type==3" class="el-icon-coin"></i>
|
{{ node.label }}
|
</span>
|
</span>
|
</el-tree>
|
</div>
|
|
<!--右键菜单-->
|
<div class="treeRightMenu">
|
<ContextMenu
|
ref="ContextMenu"
|
@loadTree="loadTree"
|
@showUploadDialog="showUploadDialog"
|
@showProductAddDialog="showProductAddDialog"
|
@showComponentAddDialog="showComponentAddDialog"
|
@showPartAddDialog="showPartAddDialog"
|
@showProductEditDialog="showProductEditDialog"
|
@showComponentEditDialog="showComponentEditDialog"
|
@showPartEditDialog="showPartEditDialog"
|
@showProcessAddDialog="showProcessAddDialog"
|
@assignConfig="assignConfig"
|
@productDelete="productDelete"
|
@componentDelete="componentDelete"
|
@partDelete="partDelete"
|
/>
|
</div>
|
</div>
|
|
</el-aside>
|
<div id="productResize" class="drag-two-resize"></div>
|
<section class="content-container" id="productDoc" >
|
<keep-alive>
|
<div v-if="nodeType === 1" id="filesTab" class="grid-content">
|
<el-tabs type="card" @tab-click="handleClick">
|
<el-tab-pane label="其他文档">
|
<el-row>
|
<el-col :span="24">
|
<others-table
|
ref="OthersTable"
|
@showDocEditDialog="showDocEditDialog"
|
@showUploadDialog="showUploadDialog"
|
v-on:indexChange="setIndex($event)"
|
:nodeList="nodeList"
|
:key="timer"></others-table>
|
</el-col>
|
</el-row>
|
</el-tab-pane>
|
|
</el-tabs>
|
</div>
|
<files-tab
|
id="filesTab"
|
v-else-if="nodeType != 0"
|
ref="FilesTab"
|
@showDocEditDialog="showDocEditDialog"
|
@showUploadDialog="showUploadDialog"
|
@showProcessAddDialog="showProcessAddDialog"
|
@showProcessEditDialog="showProcessEditDialog"
|
v-on:indexChange="setIndex($event)"
|
:nodeList="nodeList"
|
:key="timer"></files-tab>
|
</keep-alive>
|
<div v-if="nodeType != 0" id="tabResize" class="r-resize"></div>
|
<div>
|
<el-col id="attributeTab" :span="24" class="content-wrapper" :style="conheight">
|
<keep-alive>
|
<product-tab style="height: 100%" ref="ProductTab" v-if="tabType === 1" :nodeList="productList"></product-tab>
|
<component-tab ref="ComponentTab" v-else-if="tabType === 2" :nodeList="componentList"></component-tab>
|
<part-tab ref="PartTab" v-else-if="tabType === 3" :nodeList="partsList"></part-tab>
|
<process-tab ref="ProcessTab" v-else-if="tabType === 5" :nodeList="processList"></process-tab>
|
<file-tab ref="FileTab" v-else-if="tabType === 6" :nodeList="ncFileList"></file-tab>
|
<other-file-tab ref="OtherFileTab" v-else-if="tabType === 7" :nodeList="otherFileList"></other-file-tab>
|
</keep-alive>
|
</el-col>
|
</div>
|
</section>
|
<!--产品新增、编辑窗口-->
|
<el-dialog :visible.sync="productFromVisible" :close-on-click-modal="false" :title="productDialogTitle.productFromTitle" :before-close="closeDialog" width="480px">
|
<el-form :model="productFrom" :rules="productFromRules" ref="productFrom" label-width="80px">
|
<el-form-item label="产品编号" prop="productId" hidden>
|
<el-input v-model.trim="productFrom.productId"></el-input>
|
</el-form-item>
|
<el-form-item label="产品名称" prop="productName">
|
<el-input placeholder="请输入产品名称" v-model.trim="productFrom.productName"></el-input>
|
</el-form-item>
|
<el-form-item label="产品代号" prop="productNo">
|
<el-input placeholder="请输入产品代号" v-model.trim="productFrom.productNo"></el-input>
|
</el-form-item>
|
<el-form-item label="产品型号" prop="productModel">
|
<el-input placeholder="请输入产品型号" v-model.trim="productFrom.productModel"></el-input>
|
</el-form-item>
|
|
<!--<el-form-item label="产品状态" prop="productStatus">
|
<el-select placeholder="请选择产品状态" v-model.trim="productFrom.productStatus">
|
<el-option label="设计" value=1></el-option>
|
<el-option label="发布" value=2></el-option>
|
<el-option label="归档" value=3></el-option>
|
</el-select>
|
</el-form-item>-->
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click.native="productCommit" :loading="buttonLoading" type="primary" class="btn-custom">
|
<span>保 存</span>
|
</el-button>
|
<el-button @click="closeDialog" class="btn-custom">
|
<span>取 消</span>
|
</el-button>
|
</div>
|
</el-dialog>
|
<!--部件新增、编辑窗口-->
|
<el-dialog :visible.sync="componentFromVisible" :close-on-click-modal="false" :title="productDialogTitle.componentFromTitle" :before-close="closeDialog" width="750px">
|
<el-form :model="componentFrom" :rules="componentFromRules" ref="componentFrom" label-width="80px">
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="部件名称" prop="componentName">
|
<el-input placeholder="请输入部件名称" v-model.trim="componentFrom.componentName"></el-input>
|
</el-form-item>
|
</el-col>
|
|
<el-col :span="12">
|
<el-form-item label="代号" prop="componentCode">
|
<el-input placeholder="请输入代号" v-model.trim="componentFrom.componentCode"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="部件型号" prop="componentModel">
|
<el-input placeholder="请输入部件型号" v-model.trim="componentFrom.componentModel"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="规格" prop="componentScale">
|
<el-input placeholder="请选择部件规格" v-model.trim="componentFrom.componentScale"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="装配类型" prop="assembleType">
|
<el-input placeholder="请选择装配类型" v-model.trim="componentFrom.assembleType"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="重量" prop="componentWeight">
|
<el-input placeholder="请输入部件重量" v-model.trim="componentFrom.componentWeight"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="24">
|
|
<el-col :span="12">
|
<el-form-item label="物料编码" prop="materielCode">
|
<el-input placeholder="请输入物料编码" v-model.trim="componentFrom.materielCode"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="结构类型" prop="structureType">
|
<el-input placeholder="请选择结构类型" v-model.trim="componentFrom.structureType"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="处理类型" prop="processType">
|
<el-input placeholder="请选择处理类型" v-model.trim="componentFrom.processType"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="生产类型" prop="produceType">
|
<el-input placeholder="请选择生产类型" v-model.trim="componentFrom.produceType"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<!-- <el-row :gutter="20">
|
<el-col :span="10">
|
<el-form-item label="材料" prop="materielDesp">
|
<el-input placeholder="请输入材料" v-model.trim="componentFrom.materielDesp"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row> -->
|
<el-row>
|
<el-col :span="24">
|
<el-form-item label="描述" prop="description">
|
<el-input placeholder="请输入部件描述信息" v-model.trim="componentFrom.description" type="textarea" rows="3" resize="none"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click.native="componentCommit" :loading="buttonLoading" type="primary" class="btn-custom">
|
<span>保 存</span>
|
</el-button>
|
<el-button @click="closeDialog" class="btn-custom">
|
<span>取 消</span>
|
</el-button>
|
</div>
|
</el-dialog>
|
<!--零件新增、编辑窗口-->
|
<el-dialog :visible.sync="partFromVisible" :close-on-click-modal="false" :title="productDialogTitle.partFromTitle" :before-close="closeDialog" width="880px">
|
<el-form :model="partFrom" :rules="partFromRules" ref="partFrom" label-width="80px">
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="零件名称" prop="partsName">
|
<el-input placeholder="请输入零件名称" v-model.trim="partFrom.partsName"></el-input>
|
</el-form-item>
|
</el-col>
|
|
<el-col :span="12">
|
<el-form-item label="代号" prop="partsCode">
|
<el-input placeholder="请输入代号" v-model.trim="partFrom.partsCode"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="零件型号" prop="partsModel">
|
<el-input placeholder="请输入零件型号" v-model.trim="partFrom.partsModel"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="规格" prop="partsScale">
|
<el-input placeholder="请选择零件规格" v-model.trim="partFrom.partsScale"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
|
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="重量" prop="partsWeight">
|
<el-input placeholder="请输入零件重量" v-model.trim="partFrom.partsWeight"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="装配类型" prop="assembleType">
|
<el-input placeholder="请选择装配类型" v-model.trim="partFrom.assembleType"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="物料编码" prop="materielCode">
|
<el-input placeholder="请输入物料编码" v-model.trim="partFrom.materielCode"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="结构类型" prop="structureType">
|
<el-input placeholder="请选择结构类型" v-model.trim="partFrom.structureType"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="24">
|
<el-col :span="12">
|
<el-form-item label="处理类型" prop="processType">
|
<el-input placeholder="请选择处理类型" v-model.trim="partFrom.processType"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="生产类型" prop="produceType">
|
<el-input placeholder="请输入生产类型" v-model.trim="partFrom.produceType"></el-input>
|
</el-form-item>
|
</el-col>
|
|
</el-row>
|
<el-row :gutter="24">
|
<!-- <el-col :span="12">
|
<el-form-item label="材料" prop="materielDesp">
|
<el-input placeholder="请输入材料" v-model.trim="partFrom.materielDesp"></el-input>
|
</el-form-item>
|
</el-col> -->
|
<el-col :span="24">
|
<el-form-item label="描述" prop="description">
|
<el-input placeholder="请输入零件描述信息" type="textarea" v-model.trim="partFrom.description" rows="3" resize="none"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click.native="partCommit" :loading="buttonLoading" type="primary" class="btn-custom">
|
<span>保 存</span>
|
</el-button>
|
<el-button @click="closeDialog" class="btn-custom">
|
<span>取 消</span>
|
</el-button>
|
</div>
|
</el-dialog>
|
<!--产品权限配置-->
|
<el-dialog :visible.sync="assignDialogVisible" class="transfer_dialog" :close-on-click-modal="false" :title="productDialogTitle.assignDialogTitle" :before-close="closeDialog" width="50%">
|
<template>
|
<el-row>
|
<el-form :inline="true" class="demo-form-inline">
|
<el-form-item :label="assignParentData.parentNodeTitle">
|
<el-input v-model.trim="assignParentData.parentNodeName" readOnly></el-input>
|
</el-form-item>
|
<el-form-item label="是否分配子节点">
|
<el-switch
|
style="display: block"
|
height="40px"
|
line-height="40px"
|
active-color="#13ce66"
|
v-model="relativeFlag"
|
>
|
</el-switch>
|
</el-form-item>
|
</el-form>
|
</el-row>
|
<el-tabs v-model="activeName">
|
<el-tab-pane label="分配部门" name="first">
|
<template>
|
<div style="text-align: center">
|
<el-transfer
|
style="text-align: left; display: inline-block"
|
v-model="productDepartListKey"
|
:props="{
|
key: 'departId',
|
label: 'departName'
|
}"
|
:data="productDepartList"
|
@change="handleProductDepartListChange"
|
:titles="['未分配部门', '已分配部门']"
|
:button-texts="['移出部门','分配部门']"
|
>
|
</el-transfer>
|
</div>
|
</template>
|
</el-tab-pane>
|
<el-tab-pane label="分配用户" name="second">
|
<template>
|
<div style="text-align: center">
|
<el-transfer
|
filterable
|
style="text-align: left; display: inline-block"
|
v-model="productUserListKey"
|
:props="{
|
key: 'userId',
|
label: 'label'
|
}"
|
:data="productUserList"
|
@change="handleProductUserListChange"
|
:titles="['未分配', '已分配']"
|
:button-texts="['移除用户','分配用户']"
|
>
|
<span slot-scope="{ option }">{{setLabel(option)}}</span>
|
</el-transfer>
|
</div>
|
</template>
|
</el-tab-pane>
|
</el-tabs>
|
</template>
|
</el-dialog>
|
<!--工序新增、编辑窗口-->
|
<el-dialog :visible.sync="processFromVisible" :close-on-click-modal="false" :title="productDialogTitle.processFromTitle" :before-close="closeDialog" width="680px">
|
<el-form :model="processFrom" :rules="processFromRules" ref="processFrom" label-width="100px">
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="工序号" prop="processCode">
|
<el-input placeholder="请输入工序号" v-model.trim="processFrom.processCode" :readonly="processCodeReadonly"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="工序名称" prop="processName">
|
<el-input placeholder="请输入工序名称" v-model.trim="processFrom.processName"></el-input>
|
</el-form-item>
|
</el-col>
|
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="24">
|
<el-form-item label="加工设备编号" prop="processingEquipmentCode">
|
<!--<el-input placeholder="请输入加工设备编号" v-model.trim="processFrom.processingEquipmentCode"></el-input>-->
|
<el-select v-model="processFrom.processingEquipmentCode" clearable filterable placeholder="请选择加工设备编号" style="width: 100%" @change="changeList">
|
<el-option
|
v-for="item in treeDate"
|
:key="item.deviceNo"
|
:label="item.deviceName"
|
:value="item.deviceNo">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="工艺编号" prop="craftNo">
|
<el-input placeholder="请输入工艺编号" v-model.trim="processFrom.craftNo"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="工艺规程版本" prop="craftVersion">
|
<el-input placeholder="请输入工艺规程版本" v-model.trim="processFrom.craftVersion"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="工序类型" prop="processType">
|
<el-input placeholder="请选择工序类型" v-model.trim="processFrom.processType"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="工序描述" prop="description">
|
<el-input placeholder="请输入工序描述" v-model.trim="processFrom.description"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="工装编号" prop="assembleStep">
|
<el-input placeholder="请输入工装编号" v-model.trim="processFrom.assembleStep"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="工装名称" prop="assembleName">
|
<el-input placeholder="请输入工装名称" v-model.trim="processFrom.assembleName"></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
<el-row :gutter="20">
|
<el-col :span="12">
|
<el-form-item label="加工设备类型" prop="processingEquipmentOs">
|
<el-input placeholder="请输入加工设备类型" v-model.trim="processFrom.processingEquipmentOs"></el-input>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="设备类" prop="deviceManagementId">
|
<el-select v-model="processFrom.deviceManagementId" clearable filterable placeholder="请选择设备类" style="width: 100%" @change="changeList">
|
<el-option
|
v-for="item in deviceManagement"
|
:key="item.id"
|
:label="item.deviceManagementName"
|
:value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click.native="processCommit" :loading="buttonLoading" type="primary" class="btn-custom">
|
<span>保 存</span>
|
</el-button>
|
<el-button @click="closeDialog" class="btn-custom">
|
<span>取 消</span>
|
</el-button>
|
</div>
|
</el-dialog>
|
<!--文件导入窗口-->
|
<el-dialog :visible.sync="fileUploadVisible" :close-on-click-modal="false" title="文件上传" :before-close="closeDialog" width="680px">
|
<el-upload
|
class="upload-demo"
|
ref="upload"
|
action="string"
|
:data="docUploadParams"
|
multiple
|
show-file-list
|
:on-change="handleUploadChange"
|
:on-preview="handlePreview"
|
:on-remove="handleRemove"
|
:before-remove="beforeRemove"
|
:on-exceed="handleExceed"
|
:http-request="handleRequest"
|
:limit="50"
|
:file-list="fileList"
|
:auto-upload="false">
|
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
|
<el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
|
<div slot="tip" class="el-upload__tip">已选择{{fileLen}}个文件</div>
|
</el-upload>
|
</el-dialog>
|
<el-dialog :visible.sync="docFromVisible" :close-on-click-modal="false" title="编辑文档信息" :before-close="closeDialog" width="480px">
|
<el-form :model="docFrom" :rules="docFromRules" ref="docFrom" label-width="100px">
|
<el-form-item label="文档原名称" prop="docName">
|
<el-input placeholder="请输入文档原名称" v-model.trim="docFrom.docName"></el-input>
|
</el-form-item>
|
<el-form-item label="设备编号" prop="docCode">
|
<!--<el-input placeholder="请输入文档代码" v-model.trim="docFrom.docCode"></el-input>-->
|
<el-select v-model="docFrom.docCode" filterable clearable placeholder="请选择设备编号" style="width: 100%">
|
<el-option
|
v-for="item in TreeDateList"
|
:key="item.deviceNo"
|
:label="item.deviceNo"
|
:value="item.deviceNo">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item label="代码版本" prop="docAlias">
|
<el-input placeholder="请输入代码版本" v-model.trim="docFrom.docAlias"></el-input>
|
</el-form-item>
|
<el-form-item label="描述" prop="description">
|
<el-input type="textarea" placeholder="请输入文档描述" rows="3" resize="none" v-model.trim="docFrom.description"></el-input>
|
</el-form-item>
|
</el-form>
|
<div slot="footer" class="dialog-footer">
|
<el-button @click.native="docCommit" :loading="buttonLoading" type="primary" class="btn-custom">
|
<span>保 存</span>
|
</el-button>
|
<el-button @click="closeDialog" class="btn-custom">
|
<span>取 消</span>
|
</el-button>
|
</div>
|
</el-dialog>
|
</el-col>
|
<p-foot></p-foot>
|
</el-row>
|
</template>
|
|
<script>
|
import PHead from '@/base/components/head.vue';
|
import PFoot from '@/base/components/foot.vue';
|
import * as productApi from '../api/product';
|
import Bus from '../components/bus.js'
|
import utilApi from '../../../common/utils'
|
import { dragTwoColDiv, dragThreeColDiv, dragTwoRowDiv } from "@/common/drag";
|
import FilesTab from '@/module/productManager/components/file_tab_info.vue';
|
import OthersTable from '@/module/productManager/components/other_file_table_info.vue';
|
import ProductTab from '@/module/productManager/components/product_attribute_info.vue';
|
import ComponentTab from '@/module/productManager/components/component_attribute_info.vue';
|
import ProcessTab from '@/module/productManager/components/process_attribute_info.vue';
|
import PartTab from '@/module/productManager/components/part_attribute_info.vue';
|
import FileTab from '@/module/productManager/components/file_attribute_info.vue';
|
import OtherFileTab from '@/module/productManager/components/other_file_attribute_info.vue';
|
import ContextMenu from '@/module/productManager/components/productContextMenu.vue'
|
import * as SystemApi from "../../../base/api/system";
|
|
let _this = {};
|
export default {
|
name: "product_manager",
|
components:{
|
PHead,
|
PFoot,
|
Bus,
|
FilesTab,
|
OthersTable,
|
ProductTab,
|
ComponentTab,
|
ProcessTab,
|
PartTab,
|
FileTab,
|
OtherFileTab,
|
ContextMenu
|
},
|
data() {
|
return {
|
conheight:{
|
height:''
|
},
|
treeHeight:{
|
height:''
|
},
|
nodeType:0,
|
tabType:0,
|
mineStatus: '',
|
treeDate:[],
|
deviceManagement:[],
|
TreeDateList:[],
|
deviceManagementData:[],
|
rightcCurrentNodeId:'',
|
currentNodeType:'',
|
currentNodeId:'',
|
contextQueryParams:{
|
flag:2, //查询按钮的范围 1 菜单 2 对象
|
param:null, //flag 为2时需要传递该参数 该参数与param对应数据id
|
objectId:null, //查询参数,按类型而不同 1 菜单路径 2 对象权限码
|
},
|
deleteParam:{
|
id:''
|
},
|
timer:'',
|
filterText: '',
|
treeList: [],
|
expandedKeys:[],
|
currentNodekey:'',
|
defaultProps: {
|
children: 'children',
|
label: 'label'
|
},
|
relativeFlag:false,
|
buttonLoading: false,
|
productFromVisible : false,
|
componentFromVisible :false,
|
partFromVisible :false,
|
assignDialogVisible:false,
|
processFromVisible:false,
|
fileUploadVisible:false,
|
docFromVisible:false,
|
productDialogTitle:{
|
productFromTitle:'',
|
componentFromTitle:'',
|
partFromTitle:'',
|
processFromTitle:'',
|
assignDialogTitle:'产品权限配置',
|
},
|
processCodeReadonly:false,
|
assignParentData:{
|
parentNodeTitle:'',
|
parentNodeName:'',
|
},
|
nodeData:[],
|
nodeEntity:[],
|
nodeList:{
|
index:1,
|
list:''
|
},
|
productList:{
|
index:1,
|
list:''
|
},
|
componentList:{
|
index:2,
|
list:''
|
},
|
partsList:{
|
index:3,
|
list:''
|
},
|
processList:{
|
index:5,
|
list:''
|
},
|
ncFileList:{
|
index:6,
|
list:'',
|
nodeObjId:'',
|
nodeObjType:'',
|
},
|
otherFileList:{
|
index:7,
|
list:'',
|
nodeObjId:'',
|
nodeObjType:'',
|
},
|
defaultProductFrom:null,
|
defaultComponentFrom:null,
|
defaultPartFrom:null,
|
defaultProcessFrom:null,
|
defaultDocFrom:null,
|
productFrom:{
|
productId: '',
|
productModel: '',
|
productName: '',
|
productNo: '',
|
productStatus: ''
|
},
|
productFromRules:{
|
productModel:[
|
{required: false, message: '请输入产品型号', trigger: 'blur'}
|
],
|
productName:[
|
{required: true, message: '请输入产品名称', trigger: 'blur'}
|
],
|
productNo: [
|
{required: true, message: '请输入产品代号', trigger: 'blur'}
|
],
|
productStatus: [
|
{required: false, message: '请选择产品状态', trigger: 'change'}
|
]
|
},
|
componentFrom:{
|
assembleType: null,
|
componentCode: '',
|
componentId: '',
|
componentModel: '',
|
componentName: '',
|
componentScale: '',
|
createTime:"",
|
createUser:"",
|
updateTime:"",
|
updateUser:"",
|
componentStatus: null,
|
componentWeight: null,
|
description: '',
|
materielCode: '',
|
materielDesp: '',
|
parentId: '',
|
processType: null,
|
produceType: null,
|
productId: '',
|
rankLevel: null,
|
structureType: null
|
},
|
componentFromRules:{
|
assembleType:[
|
{required: false, message: '请选择装配类型', trigger: 'change'}
|
],
|
componentCode:[
|
{required: true, message: '请输入代号', trigger: 'blur'}
|
],
|
componentId: [
|
{required: false, message: '部件编号', trigger: 'blur'}
|
],
|
componentModel: [
|
{required: false, message: '请输入型号', trigger: 'blur'}
|
],
|
componentName:[
|
{required: true, message: '请输入名称', trigger: 'change'}
|
],
|
componentScale:[
|
{required: false, message: '请输入规格', trigger: 'blur'}
|
],
|
componentStatus: [
|
{required: false, message: '状态', trigger: 'blur'}
|
],
|
componentWeight: [
|
{required: false, message: '请输入重量', trigger: 'change'}
|
],
|
description:[
|
{required: false, message: '描述', trigger: 'change'}
|
],
|
materielCode:[
|
{required: false, message: '物料编码', trigger: 'blur'}
|
],
|
materielDesp: [
|
{required: false, message: '请输入材料', trigger: 'blur'}
|
],
|
processType:[
|
{required: false, message: '请选择处理类型', trigger: 'change'}
|
],
|
produceType:[
|
{required: false, message: '请选择生产类型', trigger: 'change'}
|
],
|
productId: [
|
{required: true, message: '所属产品', trigger: 'blur'}
|
],
|
parentId: [
|
{required: true, message: '父节点', trigger: 'blur'}
|
],
|
structureType:[
|
{required: false, message: '请选择结构类型', trigger: 'change'}
|
]
|
},
|
partFrom:{
|
assembleType: null,
|
componentId: '',
|
description: '',
|
materielCode: '',
|
materielDesp: '',
|
partsCode: null,
|
partsId: null,
|
createTime:"",
|
createUser:"",
|
updateTime:"",
|
updateUser:"",
|
partsModel: '',
|
partsName: '',
|
partsScale: '',
|
partsStatus: '',
|
partsWeight: null,
|
processType: null,
|
produceType: '',
|
productId: null,
|
structureType: null
|
},
|
partFromRules:{
|
assembleType:[
|
{required: false, message: '请选择装配类型', trigger: 'change'}
|
],
|
componentId: [
|
{required: false, message: '所属部件', trigger: 'blur'}
|
],
|
description:[
|
{required: false, message: '描述', trigger: 'change'}
|
],
|
materielCode:[
|
{required: false, message: '物料编码', trigger: 'blur'}
|
],
|
materielDesp: [
|
{required: false, message: '请输入材料', trigger: 'blur'}
|
],
|
partsCode: [
|
{required: true, message: '代号', trigger: 'change'}
|
],
|
partsId: [
|
{required: false, message: '主键', trigger: 'change'}
|
],
|
partsModel:[
|
{required: false, message: '型号', trigger: 'change'}
|
],
|
partsName:[
|
{required: true, message: '请输入名称', trigger: 'change'}
|
],
|
partsScale:[
|
{required: false, message: '请输入规格', trigger: 'blur'}
|
],
|
partsStatus: [
|
{required: false, message: '状态', trigger: 'blur'}
|
],
|
partsWeight: [
|
{required: false, message: '请输入重量', trigger: 'change'}
|
],
|
processType:[
|
{required: false, message: '请选择处理类型', trigger: 'change'}
|
],
|
produceType:[
|
{required: false, message: '请选择生产类型', trigger: 'change'}
|
],
|
productId: [
|
{required: true, message: '所属产品', trigger: 'blur'}
|
],
|
structureType:[
|
{required: false, message: '请选择结构类型', trigger: 'change'}
|
]
|
},
|
processFrom:{
|
assembleName: "",
|
assembleStep: "",
|
componentId: "",
|
craftNo: "",
|
createTime:"",
|
createUser:"",
|
updateTime:"",
|
updateUser:"",
|
craftVersion: "",
|
description: "",
|
partsId: "",
|
processCode: "",
|
processId: "",
|
processName: "",
|
processType: 0,
|
processingEquipmentCode: "",
|
processingEquipmentModel: "",
|
productId: ""
|
},
|
processFromRules:{
|
assembleName:[
|
{required: false, message: '请输入工装名称', trigger: 'change'}
|
],
|
assembleStep:[
|
{required: false, message: '请输入工装编号', trigger: 'blur'}
|
],
|
componentId: [
|
{required: false, message: '部件id', trigger: 'blur'}
|
],
|
craftNo: [
|
{required: false, message: '请输入工艺编号', trigger: 'blur'}
|
],
|
craftVersion:[
|
{required: false, message: '请输入工艺规程版本', trigger: 'blur'}
|
],
|
description:[
|
{required: false, message: '请输入工序描述', trigger: 'blur'}
|
],
|
partsId: [
|
{required: false, message: '零件id', trigger: 'blur'}
|
],
|
processCode: [
|
{required: true, message: '工序号', trigger: 'blur'}
|
],
|
processId:[
|
{required: false, message: '工序主键', trigger: 'blur'}
|
],
|
processName:[
|
{required: true, message: '请输入工序名称', trigger: 'blur'}
|
],
|
processType: [
|
{required: false, message: '请选择工序类型', trigger: 'change'}
|
],
|
processingEquipmentCode:[
|
{required: false, message: '请输入加工设备编号', trigger: 'blur'}
|
],
|
processingEquipmentModel:[
|
{required: false, message: '请输入加工设备型号', trigger: 'blur'}
|
],
|
productId:[
|
{required: false, message: '请输入产品id', trigger: 'blur'}
|
]},
|
docFrom:{
|
doc_id:"",
|
description: "",
|
docAlias: "",
|
docCode: "",
|
docName: "",
|
},
|
docFromRules:{
|
docName:[
|
{required: true, message: '请输入文档原名称', trigger: 'blur'}
|
],
|
docAlias:[
|
{required: false, message: '请选择代码版本', trigger: 'blur'}
|
],
|
docCode: [
|
{required: false, message: '请输入设备编号', trigger: 'blur'}
|
],
|
description: [
|
{required: false, message: '请输入文档描述信息', trigger: 'blur'}
|
],
|
},
|
activeName:'first',
|
productDepartList:[],
|
productUserList:[],
|
productDepartMovedKeys:null,
|
productUserMovedKeys:null,
|
productDepartListKey:[],
|
productUserListKey:[],
|
docUploadParams:{
|
attributionId:'',
|
attributionType:1,
|
docClassCode:'OTHER',
|
},
|
fileList:[],
|
fileLen:0,
|
};
|
},
|
beforeCreate(){
|
_this = this;
|
},
|
methods: {
|
changeList(){
|
this.$forceUpdate()
|
},
|
getUserList: function () {
|
SystemApi.user_select_list()
|
.then(res => {
|
if (res.success && res.list && res.list.length > 0) {
|
this.userList = res.list;
|
} else {
|
this.userList = [];
|
}
|
})
|
.catch(error => {
|
this.userList = [];
|
});
|
},
|
loadTree(){
|
productApi.load_tree().then((res) =>{
|
if (res.success) {
|
this.treeList = res.list;
|
if (res.list && res.list.length > 0) {
|
this.expandedKeys=[res.list[0].id];
|
if (this.rightcCurrentNodeId != null || this.rightcCurrentNodeId != '') {
|
this.expandedKeys.push(this.rightcCurrentNodeId);
|
}
|
this.checkNode(res.list[0].type, res.list[0].id).then((s) =>{
|
if (s.success) {
|
}else {
|
this.nodeType = 0;
|
this.tabType = 0;
|
//this.$message.error(s.message);
|
}
|
|
});
|
}
|
}
|
})
|
},
|
async checkNode(nodeType, paramId) {
|
return await productApi.check_node_invlid(nodeType, paramId);
|
},
|
filterNode(value, data) {
|
if (!value) return true;
|
return data.label.indexOf(value) !== -1;
|
},
|
handleNodeClick(data) {
|
this.checkNode(data.type, data.id).then((res) => {
|
if(res.success) {
|
this.$refs.ContextMenu.closeTreeMenu();
|
this.timer = new Date().getTime();
|
this.visible = false;
|
this.nodeData = data.label;
|
this.nodeList.index = data.type;
|
if (data.entity.createUser != '') {
|
this.userList.forEach((v, k) => {
|
if (v.userId == data.entity.createUser) {
|
return data.entity.createUser = v.nickname;
|
}
|
});
|
}
|
if (data.entity.updateUser != '') {
|
this.userList.forEach((v, k) => {
|
if (v.userId == data.entity.updateUser) {
|
return data.entity.updateUser = v.nickname;
|
}
|
});
|
}
|
this.nodeList.list = data.entity;
|
this.docUploadParams.attributionId = data.id;
|
this.docUploadParams.attributionType = data.type;
|
if (data.type == 1) {
|
this.productList.list = data.entity;
|
this.otherFileList.nodeObjId = data.id;
|
this.otherFileList.nodeObjType = data.type;
|
}else if (data.type == 2) {
|
this.componentList.list = data.entity;
|
this.otherFileList.nodeObjId = data.id;
|
this.otherFileList.nodeObjType = data.type;
|
this.ncFileList.nodeObjId = data.id;
|
this.ncFileList.nodeObjType = data.type;
|
}else if (data.type == 3) {
|
this.partsList.list = data.entity;
|
this.otherFileList.nodeObjId = data.id;
|
this.otherFileList.nodeObjType = data.type;
|
this.ncFileList.nodeObjId = data.id;
|
this.ncFileList.nodeObjType = data.type;
|
}
|
this.nodeType = data.type;
|
this.tabType = data.type;
|
}else {
|
this.nodeType = 0;
|
this.tabType = 0;
|
//this.$message.error(res.message);
|
}
|
});
|
},
|
handleClick(tab, event) {
|
},
|
setIndex(msg){
|
msg = JSON.parse(JSON.stringify(msg));
|
if (msg.list != null) {
|
this.tabType = msg.index;
|
if(msg.index == 1){
|
this.productList.list = msg.list;
|
}else if (msg.index == 2) {
|
this.componentList.list = msg.list;
|
}else if (msg.index == 3) {
|
this.partsList.list = msg.list;
|
}else if (msg.index == 5) {
|
this.processList.list = msg.list;
|
}else if (msg.index == 6) {
|
this.ncFileList.list = msg.list;
|
}else if (msg.index == 7) {
|
this.otherFileList.list = msg.list;
|
}
|
}
|
},
|
setLabel(info){
|
let departs = JSON.parse(JSON.stringify(info.departs));
|
let label = info.nickname;
|
if (departs.length > 0) {
|
label += '/';
|
label += departs.reduce((pre ,cur) => pre+ '[' + cur.departName + ']','')
|
}
|
return label;
|
},
|
getHeight(){
|
this.conheight.height=window.innerHeight-382+'px';
|
this.treeHeight.height=window.innerHeight-140+'px';
|
},
|
rightClick(MouseEvent, object, Node, element) { // 鼠标右击触发事件
|
if (object == undefined) {
|
this.rightcCurrentNodeId = null;
|
this.contextQueryParams.param = 'product';
|
this.contextQueryParams.objectId = null;
|
this.$refs.ContextMenu.blankRightClick(MouseEvent,this.contextQueryParams);
|
}else {
|
this.relativeFlag = true;
|
this.rightcCurrentNodeId = object.id;
|
this.nodeEntity = object.entity;
|
this.currentNodeType = object.type;
|
this.currentNodeId = object.id;
|
this.docUploadParams.attributionId = object.id;
|
this.docUploadParams.attributionType = object.type;
|
this.assignParentData.parentNodeName = object.label;
|
if (object.type == 1) {
|
this.contextQueryParams.param = 'product';
|
this.productDialogTitle.assignDialogTitle = '产品权限配置';
|
this.assignParentData.parentNodeTitle='产品名称';
|
}else if (object.type == 2) {
|
this.contextQueryParams.param = 'component';
|
this.productDialogTitle.assignDialogTitle = '部件权限配置';
|
this.assignParentData.parentNodeTitle='部件名称';
|
} else if (object.type == 3) {
|
this.contextQueryParams.param = 'parts';
|
this.productDialogTitle.assignDialogTitle = '零件权限配置';
|
this.assignParentData.parentNodeTitle='零件名称';
|
}
|
this.contextQueryParams.objectId = object.id;
|
this.$refs.ContextMenu.treeRightClick(MouseEvent, object, Node, element,this.contextQueryParams,this.docUploadParams);
|
}
|
},
|
showProductAddDialog(){
|
this.productDialogTitle.productFromTitle = '新增产品';
|
this.productFromVisible = true;
|
},
|
showProductEditDialog(){
|
this.productDialogTitle.productFromTitle = '编辑产品';
|
this.productFromVisible = true;
|
this.productFrom = Object.assign({}, this.nodeEntity);
|
},
|
showComponentAddDialog(){
|
this.productDialogTitle.componentFromTitle = '新增部件';
|
this.componentFromVisible = true;
|
this.componentFrom.parentId = this.nodeEntity.componentId;
|
this.componentFrom.productId = this.nodeEntity.productId;
|
},
|
showComponentEditDialog(){
|
this.productDialogTitle.componentFromTitle = '编辑部件';
|
this.componentFromVisible = true;
|
this.componentFrom = Object.assign({}, this.nodeEntity);
|
},
|
showPartAddDialog(){
|
this.productDialogTitle.partFromTitle = '新增零件';
|
this.partFromVisible = true;
|
this.partFrom.componentId = this.nodeEntity.componentId;
|
this.partFrom.productId = this.nodeEntity.productId;
|
},
|
showPartEditDialog(){
|
this.productDialogTitle.partFromTitle = '编辑零件';
|
this.partFromVisible = true;
|
this.partFrom = Object.assign({}, this.nodeEntity);
|
},
|
showProcessAddDialog(){
|
this.productDialogTitle.processFromTitle = '新增工序';
|
this.processCodeReadonly = false;
|
this.processFromVisible = true;
|
this.processFrom.productId = this.nodeList.list.productId;
|
this.processFrom.componentId = this.nodeList.list.componentId;
|
if (!this.nodeList.list.partsId) {
|
this.processFrom.partsId = null;
|
}else if (this.nodeList.list.partsId) {
|
this.processFrom.partsId = this.nodeList.list.partsId;
|
}
|
},
|
showProcessEditDialog(processRow){
|
this.processFrom = Object.assign({}, processRow);
|
this.productDialogTitle.processFromTitle = '编辑工序';
|
this.processCodeReadonly = true;
|
this.processFromVisible = true;
|
},
|
showUploadDialog(params){
|
this.fileList = [];
|
this.fileLen = 0;
|
if (params != undefined) {
|
this.docUploadParams = params;
|
}
|
this.fileUploadVisible = true;
|
},
|
showDocEditDialog(params){
|
this.docFrom = Object.assign({}, params);
|
this.docFromVisible = true;
|
},
|
productCommit(){
|
if (this.productFrom.productId ==''){
|
this.productAdd();
|
} else {
|
this.productEdit();
|
}
|
},
|
componentCommit(){
|
if (this.componentFrom.componentId =='' || this.componentFrom.componentId == null){
|
this.componentAdd();
|
} else {
|
this.componentEdit();
|
}
|
},
|
partCommit(){
|
if (this.partFrom.partsId =='' || this.partFrom.partsId == null){
|
this.partAdd();
|
} else {
|
this.partEdit();
|
}
|
},
|
processCommit(){
|
if (this.processFrom.processId =='' || this.processFrom.processId == null){
|
this.processAdd();
|
} else {
|
this.processEdit();
|
}
|
|
},
|
docCommit(){
|
this.docEdit();
|
},
|
productAdd(){
|
this.$refs.productFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.product_add(this.productFrom).then((res) => {
|
if(res.success){
|
this.buttonLoading = false;
|
//NProgress.done();
|
this.closeDialog();
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
productEdit(){
|
this.$refs.productFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.product_edit(this.nodeEntity.productId,this.productFrom).then((res) => {
|
if (res.success) {
|
this.buttonLoading = false;
|
if (this.tabType === 1) {
|
this.productList.list = this.processFrom;
|
}
|
this.closeDialog();
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
} else if (res.message) {
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
//删除产品
|
productDelete(){
|
this.$confirm('删除后不可取消,确认删除吗?', '提示', {}).then(() => {
|
this.deleteParam.id = this.nodeEntity.productId;
|
productApi.product_delete(this.deleteParam).then((res) => {
|
if (res.success) {
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
} else if (res.message) {
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
},
|
//新增部件
|
componentAdd(){
|
this.$refs.componentFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.component_add(this.componentFrom).then((res) => {
|
if(res.success){
|
this.buttonLoading = false;
|
this.closeDialog();
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
//编辑部件信息
|
componentEdit(){
|
this.$refs.componentFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.component_edit(this.nodeEntity.componentId,this.componentFrom).then((res) => {
|
if (res.success) {
|
this.buttonLoading = false;
|
if (this.tabType === 2) {
|
this.componentList.list = this.componentFrom;
|
}
|
this.closeDialog();
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
} else if (res.message) {
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
//删除部件
|
componentDelete(){
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.deleteParam.id = this.nodeEntity.componentId;
|
productApi.component_delete(this.deleteParam).then((res) => {
|
if (res.success) {
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
} else if (res.message) {
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
},
|
//新增零件
|
partAdd(){
|
this.$refs.partFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.part_add(this.partFrom).then((res) => {
|
if(res.success){
|
this.buttonLoading = false;
|
this.closeDialog();
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
//编辑零件信息
|
partEdit(){
|
this.$refs.partFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.part_edit(this.nodeEntity.partsId,this.partFrom).then((res) => {
|
if (res.success) {
|
this.buttonLoading = false;
|
if (this.tabType === 3) {
|
this.partsList.list = this.partFrom;
|
}
|
this.closeDialog();
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
} else if (res.message) {
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
//删除零件
|
partDelete(){
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.deleteParam.id = this.nodeEntity.partsId;
|
productApi.part_delete(this.deleteParam).then((res) => {
|
if (res.success) {
|
this.loadTree();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
} else if (res.message) {
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
},
|
//新增工序信息
|
processAdd(){
|
this.processFrom.processingEquipmentCode = this.processFrom.processingEquipmentCode.toString();
|
this.$refs.processFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.process_add(this.processFrom).then((res) => {
|
if(res.success){
|
this.buttonLoading = false;
|
Bus.$emit('queryProcessList');
|
//this.timer = new Date().getTime();
|
this.closeDialog();
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.buttonLoading = false;
|
this.$message.error(res.message);this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
processEdit(){
|
this.processFrom.processingEquipmentCode = this.processFrom.processingEquipmentCode.toString();
|
this.$refs.processFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.process_edit(this.processFrom.processId,this.processFrom).then((res) => {
|
if (res.success) {
|
this.buttonLoading = false;
|
if (this.tabType === 5) {
|
this.processList.list = this.processFrom;
|
}
|
this.closeDialog();
|
Bus.$emit('queryProcessList');
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
} else if (res.message) {
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
docEdit(){
|
this.$refs.docFrom.validate((valid) => {
|
if (valid) {
|
this.$confirm('确认提交吗?', '提示', {}).then(() => {
|
this.buttonLoading = true;
|
productApi.doc_edit(this.docFrom.docId,this.docFrom).then((res) => {
|
if (res.success) {
|
this.buttonLoading = false;
|
if (this.tabType === 6) {
|
this.ncFileList.list = this.docFrom;
|
}
|
if (this.tabType === 7) {
|
this.otherFileList.list = this.docFrom;
|
}
|
this.closeDialog();
|
this.$emit('queryOtherDoc');
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
if (this.nodeType != 1) {
|
this.$emit('queryNCDoc');
|
}
|
} else if (res.message) {
|
this.buttonLoading = false;
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
});
|
}
|
});
|
},
|
//权限配置按钮 获得数据
|
assignConfig(){
|
this.assignDialogVisible = true;
|
this.getProductDepartList();
|
this.getProductUserList();
|
},
|
//产品部门分配穿梭框值
|
handleProductDepartListChange(value, direction, movedKeys) {
|
let flag = 0;
|
if(this.relativeFlag) {
|
flag = 1;
|
}else {
|
flag = 2;
|
}
|
this.productDepartMovedKeys = movedKeys;
|
if (direction == 'right') {
|
this.productDepartAdd(flag);
|
}else if (direction == 'left') {
|
this.productDepartRemove(flag);
|
}
|
},
|
//产品用户分配穿梭框值
|
handleProductUserListChange(value, direction, movedKeys) {
|
this.productUserMovedKeys = movedKeys;
|
let flag = 0;
|
if(this.relativeFlag) {
|
flag = 1;
|
}else {
|
flag = 2;
|
}
|
if (direction == 'right') {
|
this.productUserAdd(flag);
|
}else if (direction == 'left') {
|
this.productUserRemove(flag);
|
}
|
this.productUserListKey = value;
|
},
|
//所有的部门列表
|
getProductDepartNonList(){
|
productApi.product_depart_all(this.currentNodeType,this.currentNodeId).then((res)=>{
|
if (res.success && res.list.length> 0) {
|
this.productDepartList= res.list;
|
}
|
})
|
},
|
//产品指定的部门列表
|
getProductDepartList(){
|
productApi.product_depart(this.currentNodeType,this.currentNodeId).then((res)=>{
|
if (res.success && res.list.length> 0) {
|
res.list.forEach((v,k)=>{
|
this.productDepartListKey.push(v.departId);
|
});
|
}
|
})
|
},
|
//所有的用户列表
|
getProductUserNonList(){
|
productApi.product_user_all(this.currentNodeType,this.currentNodeId).then((res)=>{
|
if (res.success && res.list.length> 0) {
|
res.list.forEach( v =>{
|
let label = v.nickname;
|
if (v.departs.length > 0) {
|
label += '/';
|
label += v.departs.reduce((pre ,cur) => pre+ '[' + cur.departName + ']','')
|
}
|
v.label = label
|
});
|
this.productUserList = res.list;
|
|
}
|
})
|
},
|
//产品指定的用户列表
|
getProductUserList(){
|
productApi.product_user(this.currentNodeType,this.currentNodeId).then((res)=>{
|
if (res.success && res.list.length> 0) {
|
res.list.forEach((v,k)=>{
|
this.productUserListKey.push(v.userId);
|
});
|
}
|
});
|
},
|
//给产品树节点分配可操作部门--添加
|
productDepartAdd(flag){
|
productApi.product_depart_add(this.currentNodeType,this.currentNodeId,flag,this.productDepartMovedKeys).then((res)=>{
|
if(res.success){
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
},
|
//给产品树节点分配可操作部门--移除
|
productDepartRemove(flag){
|
productApi.product_depart_remove(this.currentNodeType,this.currentNodeId,flag,this.productDepartMovedKeys).then((res)=>{
|
if(res.success){
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
},
|
//给产品树节点分配可操作用户--添加
|
productUserAdd(flag){
|
productApi.product_user_add(this.currentNodeType,this.currentNodeId,flag,this.productUserMovedKeys).then((res)=>{
|
if(res.success){
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
},
|
//给产品树节点分配可操作用户--移除
|
productUserRemove(flag){
|
productApi.product_user_remove(this.currentNodeType,this.currentNodeId,flag,this.productUserMovedKeys).then((res)=>{
|
if(res.success){
|
this.$message({
|
message: res.message,
|
type: 'success'
|
});
|
}else if(res.message){
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
});
|
},
|
//关闭Dialog方法
|
closeDialog () {
|
this.assignDialogVisible = false;
|
this.productFromVisible = false;
|
this.componentFromVisible = false;
|
this.partFromVisible = false;
|
this.processFromVisible = false;
|
this.fileUploadVisible = false;
|
this.docFromVisible = false;
|
this.productDepartListKey=[];
|
this.productUserListKey=[];
|
this.processFrom = JSON.parse(JSON.stringify(this.defaultProcessFrom));
|
this.productFrom = JSON.parse(JSON.stringify(this.defaultProductFrom));
|
this.componentFrom = JSON.parse(JSON.stringify(this.defaultComponentFrom));
|
this.partFrom = JSON.parse(JSON.stringify(this.defaultPartFrom));
|
this.docFrom = JSON.parse(JSON.stringify(this.defaultDocFrom));
|
},
|
//上传
|
handleUploadChange(file, fileList){
|
this.fileLen = fileList.length;
|
},
|
handleRemove(file, fileList) {
|
},
|
handlePreview(file) {
|
},
|
handleExceed(files, fileList) {
|
this.$message.warning(`当前限制选择 50 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
|
},
|
beforeRemove(file, fileList) {
|
return this.$confirm(`确定移除 ${ file.name }?`);
|
},
|
submitUpload(){
|
this.$refs.upload.submit();
|
},
|
getDeviceList(){
|
productApi.getDeviceList().then((res)=>{
|
if (res.success && res.list && res.list.length > 0) {
|
this.treeDate = res.list;
|
this.TreeDateList = res.list
|
}
|
})
|
},
|
getDeviceManagement(){
|
productApi.device_class_list().then((res)=>{
|
if (res.success && res.list && res.list.length > 0) {
|
this.deviceManagement = res.list;
|
this.deviceManagementData = res.list
|
}
|
})
|
},
|
handleRequest(uploader){
|
let formData = new FormData();
|
formData.append("file", uploader.file);
|
productApi.doc_add(this.docUploadParams,formData,uploader).then((res)=>{
|
if (res.success) {
|
//上传成功 调用onSuccess方法,否则没有完成图标 //处理自己的逻辑
|
uploader.onSuccess();
|
if (this.nodeType > 1) {
|
Bus.$emit('queryNCDoc');
|
Bus.$emit('queryOtherDoc');
|
}else {
|
Bus.$emit('queryOtherDoc');
|
}
|
|
}else if(res.message){
|
this.$message({
|
message: res.message,
|
type: 'error'
|
});
|
}
|
}).catch((err)=>{ //上传失败 调用onError方法 //处理自己的逻辑
|
//uploader.onError();
|
})
|
},
|
},
|
//初始化 模板渲染前调用
|
created(){
|
this.defaultProductFrom = JSON.parse(JSON.stringify(this.productFrom));
|
this.defaultComponentFrom = JSON.parse(JSON.stringify(this.componentFrom));
|
this.defaultPartFrom = JSON.parse(JSON.stringify(this.partFrom));
|
this.defaultProcessFrom = JSON.parse(JSON.stringify(this.processFrom));
|
this.defaultDocFrom = JSON.parse(JSON.stringify(this.docFrom));
|
window.addEventListener('resize', this.getHeight);
|
this.getHeight();
|
},
|
//发起后端请求,获取数据 模板渲染后调用
|
mounted() {
|
//树结构
|
this.loadTree();
|
this.getUserList();
|
this.getDeviceList();
|
this.getDeviceManagement();
|
this.getProductDepartNonList();
|
this.getProductUserNonList();
|
this.$refs.pHead.activeIndex = '/home/product';
|
Bus.$off('setIndex');
|
Bus.$on('setIndex',val =>{//监听first组件的txt事件
|
let msg = JSON.parse(JSON.stringify(val));
|
_this.setIndex(msg);
|
});
|
dragTwoColDiv("productDrag", "treeDiv", "productResize", "productDoc");
|
},
|
//监听
|
watch: {
|
//右键菜单
|
visible(value) {
|
if (value) {
|
document.body.addEventListener('click', this.closeMenu)
|
} else {
|
document.body.removeEventListener('click', this.closeMenu)
|
}
|
},
|
nodeList:{
|
deep: true, // 深度监听
|
handler(newValue, oldValue) {
|
if (newValue.index != 0) {
|
this.$nextTick(function () {
|
dragTwoRowDiv("productDoc", "filesTab", "tabResize", "attributeTab");
|
})
|
}
|
}
|
|
},
|
//结构树搜索框内容
|
filterText(val) {
|
this.$refs.tree.filter(val);
|
}
|
},
|
}
|
</script>
|
|
<style scoped lang="scss">
|
.container {
|
position: absolute;
|
top: 0px;
|
bottom: 0px;
|
width: 100%;
|
}
|
.main {
|
display: flex;
|
position: absolute;
|
top: 60px;
|
bottom: 0px;
|
overflow: hidden;
|
aside {
|
width: 230px;
|
.el-tree{
|
overflow: auto;
|
}
|
}
|
.drag-two-resize {
|
width: 5px;
|
cursor: w-resize;
|
background: #104AB7;
|
}
|
.r-resize{
|
height: 5px;
|
cursor: s-resize;
|
background: #104AB7;
|
}
|
|
}
|
.search_box{
|
background-color: #fff;
|
padding: 10px;
|
}
|
.search_box input{
|
border-radius: 15%;
|
}
|
.menu-expanded {
|
width: 230px;
|
padding: 10px;
|
background-color: #f0f8ff;
|
}
|
.content-container {
|
background: #fff;
|
flex: 1;
|
overflow-x: hidden;
|
overflow-y: auto;
|
padding: 20px;
|
.content-wrapper {
|
background-color: #fff;
|
box-sizing: border-box;
|
padding: 20px 0;
|
}
|
.grid-content {
|
height: 312px;
|
}
|
}
|
.grid-table-height{
|
height: 312px;
|
overflow: auto;
|
}
|
.el-aside {
|
border: 1px solid #ccc;
|
border-right: none;
|
}
|
|
.el-main {
|
border: 1px solid #ccc;
|
}
|
.treeRightMenu{
|
position: absolute;
|
top: 0;
|
left: 0;
|
height: 100%;
|
}
|
#attributeTab{
|
position: relative;
|
}
|
</style>
|
<style >
|
td, th {
|
padding: 5px 0;
|
min-width: 0;
|
-webkit-box-sizing: border-box;
|
box-sizing: border-box;
|
text-overflow: ellipsis;
|
vertical-align: middle;
|
position: relative;
|
text-align: left;
|
}
|
.el-switch{
|
height: 40px;
|
line-height: 40px;
|
}
|
.el-upload-list{
|
max-height: 500px;
|
overflow: auto;
|
}
|
@media screen and (max-height: 760px) {
|
.el-upload-list{
|
max-height: 330px;
|
overflow: auto;
|
}
|
}
|
</style>
|