<template>
|
<el-dialog :width="widthProp" v-model="dialogFormVisible" :close-on-click-modal="false">
|
<template #header>
|
<div style="color: #fff">
|
<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
|
<span>{{ title }}</span>
|
</div>
|
</template>
|
|
<p v-if="activeName != 'first'">
|
<span style="margin-left: 10px">物料编号:{{ ruleForm1.materialCode }} </span>
|
<span style="margin-left: 10%">物料名称:{{ ruleForm1.materialName }} </span>
|
</p>
|
<br />
|
<div class="msi-form tabBox100" style="margin: 0 10px">
|
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
|
<el-tab-pane label="基本信息" name="first"></el-tab-pane>
|
<el-tab-pane label="控制属性" name="second"></el-tab-pane>
|
<el-tab-pane label="批次属性" name="third"></el-tab-pane>
|
<el-tab-pane label="替代品管理" name="four"></el-tab-pane>
|
<el-tab-pane label="往来企业" name="five"></el-tab-pane>
|
<el-tab-pane label="容器类型" name="six"></el-tab-pane>
|
</el-tabs>
|
</div>
|
<!-- tab1 基本信息 form-->
|
<div v-if="activeName == 'first'">
|
<el-form :model="ruleForm1" ref="ruleFormRef1" label-width="auto" :rules="rules1">
|
<el-row :gutter="35">
|
<el-form-item v-show="false">
|
<el-input v-model="ruleForm1.id" />
|
</el-form-item>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="物料编号" prop="materialCode">
|
<el-input :disabled="title != '新增' && title != '复制'" v-model="ruleForm1.materialCode" placeholder="请输入物料编号" maxlength="50" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="物料名称" prop="materialName">
|
<el-input :disabled="title == '详情'" v-model="ruleForm1.materialName" placeholder="请输入物料名称" maxlength="50" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="ERP编号" prop="erpCode">
|
<el-input :disabled="title == '详情'" v-model="ruleForm1.erpCode" placeholder="请输入ERP编号" maxlength="255" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="物料类型" prop="materialType">
|
<el-select :disabled="title == '详情'" clearable v-model="ruleForm1.materialType" placeholder="请选择物料类型">
|
<el-option v-for="(item, index) in arrW" :key="index" :value="item.id" :label="`${item.materialTypeName}`"></el-option>
|
</el-select>
|
|
<!-- <el-select :disabled="title=='详情'" clearable v-model="ruleForm1.materialType" placeholder="请选择物料类型">
|
<el-option v-for="(item, index) in dl('MaterialTypeEnum')" :key="index" :value="item.code"
|
:label="`[${item.code}] ${item.value}`"></el-option>
|
</el-select> -->
|
</el-form-item>
|
</el-col>
|
<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="物料组" prop="materialGroup">
|
<el-input :disabled="title == '详情'" v-model="ruleForm1.materialGroup" placeholder="请输入物料组" maxlength="50"
|
show-word-limit clearable />
|
</el-form-item>
|
</el-col> -->
|
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="ABC分类" prop="abcClass">
|
<el-select :disabled="title == '详情'" clearable v-model="ruleForm1.abcClass" placeholder="请选择ABC分类">
|
<el-option v-for="(item, index) in getEnumABCClassData_Index" :key="index" :value="item.value" :label="`${item.describe}`"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
|
<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="物料规格" prop="materialSpec">
|
<el-input :disabled="title == '详情'" v-model="ruleForm1.materialSpec" placeholder="请输入物料规格" maxlength="255"
|
show-word-limit clearable />
|
|
</el-form-item>
|
|
</el-col> -->
|
<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="默认入库库位" prop="inPlaceCode">
|
<el-input :disabled="title == '详情'" v-model="ruleForm1.inPlaceCode" placeholder="请输入默认入库库位" maxlength="50"
|
show-word-limit clearable />
|
|
</el-form-item>
|
|
</el-col> -->
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="库存单位" prop="materialUnit">
|
<!-- <el-input :disabled="title=='详情'" v-model="ruleForm1.materialUnit" placeholder="请输入库存单位" maxlength="50" show-word-limit clearable /> -->
|
|
<el-select :disabled="title == '详情'" clearable v-model="ruleForm1.materialUnit" placeholder="请选择库存单位">
|
<el-option v-for="(item, index) in arrDw" :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="采购单位" prop="poUnit">
|
<!-- <el-input :disabled="title=='详情'" v-model="ruleForm1.poUnit" placeholder="请输入采购单位" maxlength="50" show-word-limit clearable /> -->
|
|
<el-select :disabled="title == '详情'" clearable v-model="ruleForm1.poUnit" placeholder="请选择采购单位">
|
<el-option v-for="(item, index) in arrDw" :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="换算率" prop="translateRate">
|
<el-input-number :min="0" :precision="0" :disabled="title == '详情'" v-model="ruleForm1.translateRate" placeholder="请输入换算率" maxlength="10" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="颜色" prop="color">
|
<el-select :disabled="title == '详情'" clearable v-model="ruleForm1.color" placeholder="请选择颜色">
|
<el-option v-for="(item, index) in getEnumColorData_Index" :key="index" :value="item.name" :label="`${item.name}`"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="重量" prop="weight">
|
<el-input-number :min="0" :precision="0" :disabled="title == '详情'" v-model="ruleForm1.weight"
|
placeholder="请输入重量" maxlength="50" show-word-limit clearable />
|
|
</el-form-item>
|
|
</el-col> -->
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="标包数量" prop="snp">
|
<el-input-number :min="0" :precision="0" :disabled="title == '详情'" v-model="ruleForm1.snp" placeholder="请输入标包数量" maxlength="10" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="是否禁用" prop="isDisabled">
|
<el-switch v-model="ruleForm1.isDisabled" active-text="是" inactive-text="否" />
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
|
<el-form-item label="描述" prop="materialDesc">
|
<el-input :disabled="title == '详情'" v-model="ruleForm1.materialDesc" placeholder="请输入描述" type="textarea" maxlength="255" show-word-limit clearable />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
</div>
|
|
|
|
<!-- tab2 控制属性 form-->
|
<div v-if="activeName == 'second'">
|
<el-form :model="ruleForm2" label-width="120px" ref="dialogRef" :rules="formRules2">
|
|
<el-row :gutter="35">
|
<el-form-item v-show="false">
|
<el-input disabled v-model="ruleForm2.id" />
|
</el-form-item>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="最高库存" prop="maxImumqty">
|
<el-input-number :disabled="title == '详情'" v-model="ruleForm2.maxImumqty" placeholder="请输入最高库存" :min="0" :precision="0" maxlength="10" show-word-limit
|
clearable />
|
|
</el-form-item>
|
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="安全库存" prop="safeImumqty">
|
<el-input-number :disabled="title == '详情'" v-model="ruleForm2.safeImumqty" placeholder="请输入安全库存" :min="0" :precision="0" maxlength="10" show-word-limit
|
clearable />
|
|
</el-form-item>
|
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="最低库存" prop="minImumqty">
|
<el-input-number :disabled="title == '详情'" v-model="ruleForm2.minImumqty" placeholder="请输入最低库存" :min="0" :precision="0" maxlength="10" show-word-limit
|
clearable />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="最小库龄" prop="minStorageAge">
|
<el-input-number :disabled="title == '详情'" v-model="ruleForm2.minStorageAge" placeholder="请输入最小库龄" :min="0" :precision="0" maxlength="10" show-word-limit
|
clearable />
|
|
</el-form-item>
|
|
</el-col>
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="最大库龄" prop="maxStorageAge">
|
<el-input-number :disabled="title == '详情'" v-model="ruleForm2.maxStorageAge" placeholder="请输入最大库龄" :min="0" :precision="0" maxlength="10" show-word-limit
|
clearable />
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="是否质检" prop="isCheck">
|
<el-switch :disabled="title == '详情'" v-model="ruleForm2.isCheck" active-text="是" inactive-text="否" />
|
</el-form-item>
|
</el-col>
|
|
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="保质期天数" prop="shelfLifeDays">
|
<el-input-number :disabled="title == '详情'" v-model="ruleForm2.shelfLifeDays" placeholder="请输入保质期天数" :min="0" :precision="0" maxlength="10" show-word-limit
|
clearable />
|
</el-form-item>
|
|
</el-col>
|
<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item disabled label="是否禁用" prop="isDisabled">
|
<el-switch :disabled="title == '详情'" v-model="ruleForm2.isDisabled" active-text="是" inactive-text="否" />
|
</el-form-item>
|
|
</el-col> -->
|
</el-row>
|
</el-form>
|
|
</div>
|
|
<!-- tab3 批次属性 -->
|
<div v-if="activeName == 'third'">
|
<el-table :data="deltailList3" border striped style="width: 99%; margin: 0 auto" @expand-change="getChildList3" height="400px" ref="tableRef3">
|
<!-- 子表 -->
|
<el-table-column fixed="left" type="expand">
|
<template #default="scope">
|
<br />
|
<el-table :data="scope.row.children" border style="width: 95%; margin: 0 auto" default-expand-all min-height="200" row-key="id">
|
<el-table-column type="index" label="序号" width="55" align="center" />
|
|
<el-table-column prop="ruleCode" label="规则编号" show-overflow-tooltip="" />
|
<el-table-column prop="ruleName" label="规则名称" show-overflow-tooltip="" />
|
<el-table-column prop="batchRuleType" label="批次规则" show-overflow-tooltip="">
|
<template #default="scope">
|
{{ getEnumDesc(scope.row.batchRuleType, getEnumBatchRuleTypeData_Index) }}
|
</template>
|
</el-table-column>
|
<!-- <el-table-column prop="batchTag" label="批次标签" show-overflow-tooltip="" /> -->
|
<el-table-column prop="attrForamt" label="属性格式" show-overflow-tooltip="">
|
<template #default="scope">
|
{{ getEnumDesc(scope.row.attrForamt, getEnumAttrForamtData_Index) }}
|
</template>
|
</el-table-column>
|
<el-table-column prop="attrOption" label="属性选项" show-overflow-tooltip="">
|
<template #default="scope">
|
{{ getEnumDesc(scope.row.attrOption, getEnumAttrOptionData_Index) }}
|
</template>
|
</el-table-column>
|
<el-table-column prop="inputControl" label="输入控制" show-overflow-tooltip="">
|
<template #default="scope">
|
{{ getEnumDesc(scope.row.inputControl, getEnumInputControlData_Index) }}
|
</template>
|
</el-table-column>
|
<el-table-column prop="priority" label="优先级" show-overflow-tooltip="" />
|
<!-- <el-table-column prop="priority" label="优先级" show-overflow-tooltip="" >
|
<template #default="scope">
|
{{ getEnumDesc(scope.row.priority, getEnumPriorityData_Index)}}
|
</template>
|
</el-table-column> -->
|
<!-- <el-table-column prop="rfTag" label="RF标签" show-overflow-tooltip="" />
|
<el-table-column prop="rFShow" label="RF显示" show-overflow-tooltip="">
|
<template #default="scope">
|
<el-tag v-if="scope.row.rfShow"> 是 </el-tag>
|
<el-tag type="danger" v-else> 否 </el-tag>
|
|
</template>
|
|
</el-table-column>
|
<el-table-column prop="keyAttr" label="关键属性" show-overflow-tooltip="" />
|
<el-table-column prop="ruleDesc" label="规则描述" show-overflow-tooltip="" />
|
<el-table-column prop="isDisabled" label="是否禁用" show-overflow-tooltip="">
|
<template #default="scope">
|
<el-tag v-if="scope.row.isDisabled"> 是 </el-tag>
|
<el-tag type="danger" v-else> 否 </el-tag>
|
|
</template>
|
|
</el-table-column> -->
|
<!-- <el-table-column prop="createTime" label="创建时间" width="130" :formatter="formatDate_T_Time" show-overflow-tooltip="" />
|
<el-table-column prop="updateTime" label="修改时间" width="130" :formatter="formatDate_T_Time" show-overflow-tooltip="" /> -->
|
<el-table-column prop="createUserName" label="创建人" show-overflow-tooltip="" />
|
<el-table-column prop="updateUserName" label="修改人" show-overflow-tooltip="" />
|
</el-table>
|
<br />
|
</template>
|
</el-table-column>
|
|
<el-table-column label="序号" align="center" width="60" type="index" />
|
<el-table-column prop="ruleCode" label="规则编号" show-overflow-tooltip="" />
|
<el-table-column prop="ruleName" label="规则名称" show-overflow-tooltip="" />
|
|
<!-- <el-table-column label="操作" width="150" align="center" fixed="right">
|
<template #default="scope">
|
<el-button type="info" plain size="small" @click="itemDelete3(scope.row, scope.index)">删除</el-button>
|
</template>
|
</el-table-column> -->
|
</el-table>
|
<br />
|
<el-button v-if="title != '详情'" icon="ele-Plus" text="" type="primary" @click="addLine('批次属性')" v-auth="'wmsMaterial:update'">新增批次属性</el-button>
|
|
<el-button v-if="title != '详情'" icon="el-icon-delete" text="" type="primary" @click="deleteLine('批次属性')" v-auth="'wmsMaterial:update'">删除批次属性</el-button>
|
</div>
|
|
<!-- tab4 替代品管理-->
|
<div v-if="activeName == 'four'">
|
<el-table :data="deltailList4" border striped style="width: 99%; margin: 0 auto" @expand-change="getChildList" ref="tableRef" height="400px">
|
<el-table-column label="序号" align="center" width="60" type="index" />
|
<el-table-column label="替代品物料编号" prop="substituteMaterialCode" align="center" min-width="140" show-overflow-tooltip />
|
<!-- <el-table-column label="替代品物料名称" prop="substituteMaterialName" align="center" min-width="140"
|
show-overflow-tooltip /> -->
|
<el-table-column label="替代次序" prop="substituteIndex" align="center" min-width="130" show-overflow-tooltip />
|
<el-table-column label="操作" width="100" align="center" fixed="right">
|
<template #default="scope">
|
<el-button type="info" plain size="small" @click="itemDelete(scope.row, scope.index)">删除</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<br />
|
<el-button v-if="title != '详情'" icon="ele-Plus" text="" type="primary" @click="addLine('替代品')" v-auth="'wmsMaterial:update'">新增替代品</el-button>
|
</div>
|
|
<!-- tab5 往来企业-->
|
<div v-if="activeName == 'five'">
|
<el-table :data="deltailList5" border striped style="width: 99%; margin: 0 auto" @expand-change="getChildList" height="400px" ref="tableRef">
|
<el-table-column label="序号" align="center" width="60" type="index" />
|
<el-table-column prop="custCode" label="编号" show-overflow-tooltip="" min-width="110px" />
|
<el-table-column prop="custChinaName" label="中文名称" show-overflow-tooltip="" min-width="100px" />
|
<el-table-column prop="custEnglishName" label="英文名称" show-overflow-tooltip="" min-width="100px" />
|
<el-table-column prop="mnemonicCode" label="助记码" show-overflow-tooltip="" />
|
<el-table-column prop="custTypeName" label="类型名称" show-overflow-tooltip="" />
|
<el-table-column prop="linkMan" label="联系人" show-overflow-tooltip="" />
|
<el-table-column prop="phone" label="电话" show-overflow-tooltip="" />
|
<el-table-column prop="email" label="电子邮件" show-overflow-tooltip="" />
|
<el-table-column prop="zipCode" label="邮编" show-overflow-tooltip="" />
|
<el-table-column prop="province" label="省份" show-overflow-tooltip="" />
|
<el-table-column prop="city" label="城市" show-overflow-tooltip="" />
|
<el-table-column prop="address" label="地址" show-overflow-tooltip="" />
|
<el-table-column label="操作" width="150" align="center" fixed="right">
|
<template #default="scope">
|
<el-button type="info" plain size="small" @click="itemDelete(scope.row, scope.index)">删除</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<br />
|
<el-button v-if="title != '详情'" icon="ele-Plus" text="" type="primary" @click="addLine('往来企业')" v-auth="'wmsMaterial:update'">新增往来企业</el-button>
|
</div>
|
|
<!-- tab6 容器类型-->
|
<div v-if="activeName == 'six'">
|
<div style="width: 400px; margin: 0 auto">
|
<el-form :model="ruleForm6" ref="ruleFormRef6" label-width="auto" :rules="rules6">
|
<el-row :gutter="35">
|
<el-form-item v-show="false">
|
<el-input v-model="ruleForm6.id" />
|
</el-form-item>
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
|
<el-form-item label="容器类型" prop="containerTypeId">
|
<el-select :disabled="title == '详情'" clearable v-model="ruleForm6.containerTypeId" placeholder="请选择容器类型">
|
<el-option v-for="(item, index) in arrRqlx" :key="index" :value="item.id" :label="`[${item.code}] ${item.value}`"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
|
<el-form-item label="物料类型ID" prop="materialTypeId">
|
<el-select clearable v-model="ruleForm6.materialTypeId" placeholder="请选择物料类型ID">
|
<el-option v-for="(item,index) in arr2" :key="index" :value="item.code" :label="`[${item.code}] ${item.value}`"></el-option>
|
|
</el-select>
|
</el-form-item>
|
</el-col> -->
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
|
<el-form-item label="物料容器容量" prop="boxQty">
|
<el-input-number min="1" :disabled="title == '详情'" v-model="ruleForm6.boxQty" :precision="0" placeholder="请输入物料容器容量" clearable />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
</div>
|
|
<br />
|
</div>
|
|
<template #footer>
|
<span class="dialog-footer">
|
<el-button @click="closeDialog">取消</el-button>
|
<el-button v-if="title != '详情'" type="primary" :disabled="loadingSub" @click="confirm"> 确认 </el-button>
|
</span>
|
</template>
|
</el-dialog>
|
|
<!--弹框 新增物料-替代品管理 -->
|
<el-dialog v-model="dialogVisibleTdp" width="30%" @close="closeDialogTdp">
|
<template #header>
|
<div style="color: #fff">
|
<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
|
<span>新增物料-替代品管理</span>
|
</div>
|
</template>
|
|
<el-form :model="addFormTdp" label-width="120px" ref="dialogRefTdp" :rules="formRulesTdp">
|
<el-row :gutter="35">
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
|
<el-form-item label="替代品物料编号" prop="substituteMaterialCode">
|
<!-- <el-select style="width:100%" clearable v-model="addFormTdp.substituteMaterialCode" placeholder="请选择替代品物料编号">
|
<el-option v-for="(item, index) in arrTdp" :key="index" :value="item.materialCode"
|
:label="`${item.materialCode}`"></el-option>
|
</el-select> -->
|
|
<el-select
|
v-model="addFormTdp.substituteMaterialCode"
|
filterable
|
remote
|
reserve-keyword
|
remote-show-suffix
|
:remote-method="remoteMethod"
|
:loading="loading"
|
placeholder="请选择替代品物料编号"
|
clearable
|
style="width: 100%"
|
@change="changeXmbh(addFormTdp.substituteMaterialCode)"
|
>
|
<el-option v-for="(item, index) in arrTdp" :key="index" :value="item.materialCode" :label="`${item.materialCode}`"></el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
|
<el-form-item label="替代次序:" prop="substituteIndex">
|
<el-input v-model="addFormTdp.substituteIndex" clearable placeholder="请输入替代次序" />
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</el-form>
|
<template #footer>
|
<span class="dialog-footer">
|
<el-button @click="dialogVisibleTdp = false">取消</el-button>
|
<el-button type="primary" @click="confirmTdp">确认</el-button>
|
</span>
|
</template>
|
</el-dialog>
|
|
<!--弹框 控制属性 客户列表 -->
|
<el-dialog v-model="dialogVisiblePage" width="90%" @close="dialogVisiblePage == false">
|
<template #header>
|
<div style="color: #fff">
|
<!--<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>-->
|
<span>列表</span>
|
</div>
|
</template>
|
|
<!-- 控制属性-->
|
<div v-show="activeName == 'second'">
|
<ControlProp ref="controlRef"></ControlProp>
|
</div>
|
|
<!-- 往来企业 -->
|
<div v-show="activeName == 'five'">
|
<PageClient ref="clientRef"></PageClient>
|
</div>
|
|
<!-- 批次属性 -->
|
<div v-show="activeName == 'third'">
|
<BatchProp ref="batchRef"></BatchProp>
|
</div>
|
|
<template #footer>
|
<span class="dialog-footer">
|
<el-button @click="dialogVisiblePage = false">取消</el-button>
|
<el-button type="primary" @click="confirmPage">确认</el-button>
|
</span>
|
</template>
|
</el-dialog>
|
</template>
|
<script lang="ts" setup>
|
import { reactive, ref, defineExpose, defineEmits, nextTick, computed, getCurrentInstance } from 'vue';
|
import { ElMessage, ElMessageBox } from 'element-plus';
|
import type { TabsPaneContext } from 'element-plus';
|
import { getDictDataItem as di, getDictDataList as dl } from '/@/utils/dict-utils';
|
import PageClient from './clientProp.vue';
|
import BatchProp from './batchProp.vue';
|
import ControlProp from './controlProp.vue';
|
import { pageWmsMaterialType, deleteWmsMaterialType } from '/@/api/main/WmsBase/wmsMaterialType';
|
import type { FormRules } from 'element-plus';
|
import { pageWmsSubstituteGood } from '/@/api/main/WmsBase/wmsSubstituteGood';
|
import { addWmsMaterial, detailWmsMaterial, pageWmsMaterial, updateWmsMaterial } from '/@/api/main/WmsBase/wmsMaterial';
|
import { handleSlectDatawmsContainerType, handleSlectDatawmsUnit } from '/@/utils/selectData';
|
const { proxy }: any = getCurrentInstance(); // 访问实例上下文 proxy同时支持开发 线上环境
|
|
// 枚举---------
|
import { SysEnumApi } from '/@/api-services/api';
|
import commonFunction from '/@/utils/commonFunction';
|
import { getAPI } from '/@/utils/axios-utils';
|
const getEnumBatchRuleTypeData_Index = ref<any>([]);
|
const getEnumAttrForamtData_Index = ref<any>([]);
|
const getEnumAttrOptionData_Index = ref<any>([]);
|
const getEnumInputControlData_Index = ref<any>([]);
|
const getEnumPriorityData_Index = ref<any>([]);
|
const getEnumRFShowData_Index = ref<any>([]);
|
const getEnumIsDisabledData_Index = ref<any>([]);
|
const { getEnumDesc } = commonFunction();
|
// 枚举---------
|
|
const emits = defineEmits(['getTabelData']);
|
const dialogFormVisible = ref(false);
|
const widthProp = ref('90%');
|
const isYuk = ref(false);
|
const activeName = ref('first');
|
//物料明细 - 详情列表
|
const deltailList3 = ref<any[]>([]);
|
|
const deltailList4 = ref<any[]>([]);
|
const deltailList5 = ref<any[]>([]);
|
const title = ref('新增基础物料信息');
|
const ruleForm1 = ref<any>({});
|
const ruleForm2 = ref<any>({
|
id: '',
|
ruleName: '',
|
maxImumqty: '',
|
minImumqty: '',
|
safeImumqty: '',
|
minStorageAge: '',
|
maxStorageAge: '',
|
isNotChek: false,
|
shelfLifeDays: '',
|
isDisabled: false,
|
});
|
|
const ruleForm6 = ref<any>({});
|
const rules6 = ref<FormRules>({
|
// containerTypeId: [
|
// {required: true, message: '请选择容器类型!', trigger: 'change',},],
|
// boxQty: [{required: true, message: '请输入物料容器容量!', trigger: 'change',},],
|
});
|
|
//自行添加其他规则
|
const rules1 = ref<FormRules>({
|
materialName: [{ required: true, message: '请输入物料名称!', trigger: 'blur' }],
|
materialCode: [{ required: true, message: '请输入物料编号!', trigger: 'blur' }],
|
// erpCode: [{ required: true, message: '请输入ERP编号!', trigger: 'blur', },],
|
materialType: [{ required: true, message: '请选择物料类型!', trigger: 'change' }],
|
materialUnit: [{ required: true, message: '请输入库存单位!', trigger: 'blur' }],
|
poUnit: [{ required: true, message: '请输入采购单位!', trigger: 'blur' }],
|
translateRate: [{ required: true, message: '请输入换算率!', trigger: 'blur' }],
|
});
|
|
//查询
|
const formModel = ref({
|
orderNo: '',
|
OrdersId: '',
|
isYuk: false,
|
});
|
const detailForm = ref({});
|
|
const detailForm2 = ref({});
|
const warehousOrderDetails = ref<any[]>([]);
|
|
const dialogRef = ref();
|
const loadingSub = ref(false);
|
//添加提交
|
const confirm = async () => {
|
if (!ruleForm1.value.materialCode || !ruleForm1.value.materialName || !ruleForm1.value.materialType || !ruleForm1.value.materialUnit || !ruleForm1.value.poUnit) {
|
ElMessage.warning('请检查必填项!');
|
return;
|
}
|
let SubstituteGoodList = deltailList4.value;
|
|
|
// SubstituteGoodList.forEach( (item:any) => {
|
// item.materialName = this.form.getFieldValue('materialName')
|
// item.materialCode = this.form.getFieldValue('materialCode')
|
// })
|
console.log('替代品');
|
let BaseCustomerList = deltailList5.value;
|
let a1: any = [];
|
BaseCustomerList.forEach((item: any) => {
|
a1.push(item.id);
|
});
|
console.log('往来企业集合');
|
|
var BatchRuleCode = ''; //新增批次属性
|
if (deltailList3.value.length > 0) {
|
BatchRuleCode = deltailList3.value[0].ruleCode;
|
}
|
debugger;
|
// console.log( '包装关系')
|
// console.log(this.$refs.addFormContainerPackagingRef.list)
|
if (!ruleForm1.value.translateRate) {
|
ElMessage.warning('换算率不能为空且大于0!');
|
return;
|
}
|
var ContainerPackagingList:any = [];
|
// 容器类型
|
if (ruleForm6.value.containerTypeId) {
|
ContainerPackagingList = [
|
// 容器类型
|
{
|
containerTypeId: ruleForm6.value.containerTypeId||"",
|
boxQty: ruleForm6.value.boxQty,
|
},
|
];
|
}
|
|
if(ruleForm2.value.maxImumqty==0 || ruleForm2.value.safeImumqty==0 || ruleForm2.value.safeImumqty == 0){
|
ElMessage.warning('请填写大于0的数量!');
|
return
|
}
|
|
if(ruleForm2.value.maxImumqty && ruleForm2.value.safeImumqty && ruleForm2.value.maxImumqty < ruleForm2.value.safeImumqty){
|
ElMessage.warning('最高库存大于安全库存!');
|
return
|
}
|
|
if(ruleForm2.value.safeImumqty && ruleForm2.value.minImumqty && ruleForm2.value.safeImumqty < ruleForm2.value.minImumqty){
|
ElMessage.warning('安全库存大于最低库存!');
|
return
|
}
|
|
if(ruleForm2.value.maxImumqty && ruleForm2.value.minImumqty && ruleForm2.value.maxImumqty < ruleForm2.value.minImumqty){
|
ElMessage.warning('最高库存大于最低库存!');
|
return
|
}
|
|
if(ruleForm2.value.minStorageAge && ruleForm2.value.maxStorageAge && ruleForm2.value.minStorageAge > ruleForm2.value.maxStorageAge){
|
ElMessage.warning('最小库龄小于最大库龄!');
|
return
|
}
|
|
var param = {
|
MaterialInput: ruleForm1.value, //基本信息
|
ControlRuleDetailInput:ruleForm2.value, //控制属性
|
SubstituteGoodList: SubstituteGoodList, //替代品
|
BatchRuleCode: BatchRuleCode, //替代品
|
BaseCustomerList: a1, //往来企业集合
|
ContainerPackagingList: ContainerPackagingList,
|
// ContainerPackagingList: this.$refs.addFormContainerPackagingRef.list //包装关系
|
};
|
|
|
if (title.value == '新增') {
|
loadingSub.value = true;
|
let res = await addWmsMaterial(param);
|
if (res.data && res.data.code == 200) {
|
ElMessage.success('新增成功');
|
dialogFormVisible.value = false;
|
closeDialog();
|
emits('getTabelData');
|
}
|
loadingSub.value = false;
|
} else if (title.value == '复制') {
|
debugger;
|
loadingSub.value = true;
|
let res = await addWmsMaterial(param);
|
if (res.data && res.data.code == 200) {
|
ElMessage.success('复制成功');
|
dialogFormVisible.value = false;
|
closeDialog();
|
emits('getTabelData');
|
}
|
loadingSub.value = false;
|
} else {
|
// 编辑成功
|
loadingSub.value = true;
|
let res = await updateWmsMaterial(param);
|
if (res.data && res.data.code == 200) {
|
ElMessage.success('编辑成功');
|
dialogFormVisible.value = false;
|
closeDialog();
|
emits('getTabelData');
|
}
|
loadingSub.value = false;
|
}
|
|
|
};
|
|
//重置搜索
|
const resetForm = () => {
|
warehousOrderDetails.value = [];
|
};
|
const closeDialog = () => {
|
dialogFormVisible.value = false;
|
deltailList3.value = [];
|
deltailList4.value = [];
|
deltailList5.value = [];
|
ruleForm1.value = {};
|
formModel.value = {
|
orderNo: '',
|
OrdersId: '',
|
isYuk: false,
|
};
|
};
|
|
const getChildList = (item?: any) => {
|
console.log('getChildList');
|
};
|
const getChildList3 = (item?: any) => {
|
console.log('getChildList');
|
};
|
const handleClick = (tab: TabsPaneContext, event: Event) => {
|
if (tab.props && tab.props.name && tab.props.name == 'second') {
|
// if (!detailForm.value.OrdersId) {
|
// ElMessage.warning('单据id传值失败');
|
// return
|
// }
|
detailForm2.value.OrdersId = detailForm.value.OrdersId;
|
// getDetail2();
|
}
|
};
|
|
// 客户列表
|
const dialogVisiblePage = ref(false);
|
|
const addLine = (param?: any) => {
|
if (param == '控制属性') {
|
dialogVisiblePage.value = true;
|
}
|
|
if (param == '替代品') {
|
dialogVisibleTdp.value = true;
|
}
|
|
if (param == '往来企业') {
|
dialogVisiblePage.value = true;
|
}
|
|
if (param == '批次属性') {
|
dialogVisiblePage.value = true;
|
}
|
};
|
|
const deleteLine = (param?: any) => {
|
if (param == '批次属性') {
|
deltailList3.value = [];
|
}
|
if (param == '解绑配置控制属性') {
|
ruleForm2.value = {};
|
addForm2.value.id = '';
|
}
|
};
|
const confirmPage = async (param?: any) => {
|
// 控制属性
|
if (activeName.value == 'second') {
|
let data2 = proxy.$refs['controlRef'].openADialog();
|
if (data2) {
|
var d2 = JSON.parse(JSON.stringify(data2))[0];
|
|
ruleForm2.value = d2;
|
}
|
addForm2.value = ruleForm2.value;
|
}
|
|
// 5往来企业
|
if (activeName.value == 'five') {
|
let data5 = proxy.$refs['clientRef'].openADialog();
|
if (data5) {
|
data5 = JSON.parse(JSON.stringify(data5));
|
data5.forEach((item: any) => {
|
var arr1 = deltailList5.value.filter((v) => v.id == item.id);
|
if (arr1.length == 0) {
|
deltailList5.value.push(item);
|
}
|
});
|
}
|
}
|
// 3批次属性
|
if (activeName.value == 'third') {
|
let data3 = proxy.$refs['batchRef'].openADialog();
|
debugger;
|
if (data3) {
|
data3 = JSON.parse(JSON.stringify(data3));
|
deltailList3.value = data3;
|
}
|
// 枚举---------
|
getEnumBatchRuleTypeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('BatchRuleEnum')).data.result ?? [];
|
|
getEnumAttrForamtData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('AttrForamtEnum')).data.result ?? [];
|
getEnumAttrOptionData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('AttrOptionEnum')).data.result ?? [];
|
|
setTimeout(async () => {
|
getEnumInputControlData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('InputControlEnum')).data.result ?? [];
|
getEnumPriorityData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('PriorityEnum')).data.result ?? [];
|
getEnumRFShowData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('TrueFalseEnum')).data.result ?? [];
|
getEnumIsDisabledData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('TrueFalseEnum')).data.result ?? [];
|
}, 1000);
|
// 枚举---------
|
}
|
|
dialogVisiblePage.value = false;
|
};
|
|
//添加/编辑参数
|
let addForm1 = ref({
|
createdTime: '',
|
updatedTime: '',
|
createdUserName: '',
|
createdUserId: '',
|
code: '',
|
quantity: 0,
|
Details: [],
|
});
|
|
//rules
|
const formRules1 = {
|
// code: [{ required: true, message: "编号不能为空", trigger: "blur" }]
|
};
|
|
//添加/编辑参数
|
let addForm2 = ref({
|
createdTime: '',
|
updatedTime: '',
|
createdUserName: '',
|
createdUserId: '',
|
code: '',
|
quantity: 0,
|
Details: [],
|
});
|
|
//rules
|
const formRules2 = {
|
// code: [{ required: true, message: "编号不能为空", trigger: "blur" }]
|
};
|
|
//批量删除
|
const itemDelete = (record: any, index: any) => {
|
const handleArr: number[] = [];
|
// checkRows.value.forEach(item => {
|
// handleArr.push(item.id);
|
// })
|
const obj = { id: handleArr };
|
ElMessageBox.confirm('是否确认删除?', '提示', {
|
confirmButtonText: '确认',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
if (activeName.value == 'five') {
|
var index = deltailList5.value.findIndex((v) => v.id == record.id);
|
deltailList5.value.splice(index, 1);
|
} else {
|
var index = deltailList4.value.findIndex((v) => v.substituteMaterialCode == record.substituteMaterialCode);
|
deltailList4.value.splice(index, 1);
|
}
|
})
|
.catch(() => {
|
ElMessage.info('已取消删除');
|
});
|
};
|
|
//批次属性 - 批量删除
|
const itemDelete3 = (record: any, index: any) => {
|
const handleArr: number[] = [];
|
// checkRows.value.forEach(item => {
|
// handleArr.push(item.id);
|
// })
|
const obj = { id: handleArr };
|
ElMessageBox.confirm('是否确认删除?', '提示', {
|
confirmButtonText: '确认',
|
cancelButtonText: '取消',
|
type: 'warning',
|
})
|
.then(() => {
|
var index = deltailList3.value.findIndex((v) => v.id == record.id);
|
deltailList5.value.splice(index, 1);
|
|
// if (activeName.value == 'five') {
|
// var index = deltailList5.value.findIndex(v => v.id == record.id)
|
// deltailList5.value.splice(index, 1)
|
// } else {
|
// var index = deltailList4.value.findIndex(v => v.substituteMaterialCode == record.substituteMaterialCode)
|
// deltailList4.value.splice(index, 1)
|
// }
|
})
|
.catch(() => {
|
ElMessage.info('已取消删除');
|
});
|
};
|
|
//-----------------------------新增物料-替代品管理-------------------
|
const dialogTypeTdp = ref('add');
|
const dialogVisibleTdp = ref(false);
|
const statusEnum_another: any[] = [
|
{
|
title: '正常',
|
value: 0,
|
},
|
{
|
title: '停用',
|
value: 1,
|
},
|
];
|
|
//操作表单ref
|
const dialogRefTdp = ref();
|
|
//添加/编辑
|
let addFormTdp = ref({
|
substituteMaterialCode: '',
|
substituteIndex: '',
|
});
|
|
//rules
|
const formRulesTdp = {
|
substituteMaterialCode: [{ required: true, message: '请选择替代品物料编号!', trigger: 'change' }],
|
substituteIndex: [{ required: true, message: '请输入替代次序!', trigger: 'blur' }],
|
};
|
|
//操作提交
|
const confirmTdp = () => {
|
dialogRefTdp.value.validate((vali: any) => {
|
if (vali) {
|
if (addFormTdp.value.substituteMaterialCode == ruleForm1.value.materialCode) {
|
ElMessage.warning('不能替代自己!');
|
return;
|
}
|
var idx = deltailList4.value.findIndex((v) => v.substituteMaterialCode == addFormTdp.value.substituteMaterialCode);
|
if (idx > -1) {
|
ElMessage.warning('物料重复!');
|
return;
|
}
|
|
var idxsubstituteIndex = deltailList4.value.findIndex((v) => v.substituteIndex == addFormTdp.value.substituteIndex);
|
if (idxsubstituteIndex > -1) {
|
ElMessage.warning('替代次序重复!');
|
return;
|
}
|
|
//添加
|
deltailList4.value.push(addFormTdp.value);
|
dialogVisibleTdp.value = false;
|
if (dialogTypeTdp.value == 'add') {
|
// addWarsehouseType(addForm.value).then(res => {
|
// if(res.code == 200) {
|
// ElMessage.success('添加成功');
|
// getTabelData();
|
// dialogVisible.value = false;
|
// }else {
|
//
|
// }
|
// }).catch(err => {
|
// console.log(err)
|
// })
|
} else {
|
// editWarsehouseType(addForm.value).then(res => {
|
// if(res.code == 200) {
|
// ElMessage.success('编辑成功');
|
// getTabelData();
|
// dialogVisible.value = false;
|
// }else {
|
//
|
// }
|
// }).catch(err => {
|
// console.log(err)
|
// })
|
}
|
} else {
|
ElMessage.warning('表单验证失败');
|
}
|
});
|
};
|
|
//关闭窗口
|
const closeDialogTdp = () => {
|
addFormTdp.value = {
|
name: '',
|
remarks: '',
|
status: '',
|
id: '',
|
};
|
};
|
//----------------------------- end 新增物料-替代品管理-------------------
|
const arrW = ref<any[]>([]);
|
|
const queryParamsW = ref<any>({});
|
const tableParamsW = ref({
|
page: 1,
|
pageSize: 100000,
|
total: 0,
|
IsDisabled: false,
|
});
|
|
//物料类型
|
const handleQueryW = async () => {
|
var res = await pageWmsMaterialType(Object.assign(queryParamsW.value, tableParamsW.value));
|
|
arrW.value = res.data.result?.items ?? [];
|
// tableData.value = res.data.result?.items ?? [];
|
// tableParams.value.total = res.data.result?.total;
|
// loading.value = false;
|
};
|
|
const getEnumColorData_Index = ref<any>([]); //下拉读取接口
|
const getEnumABCClassData_Index = ref<any>([]);
|
let arrDw: any = ref(''); //下拉读取接口
|
let arrRqlx: any = ref(''); //下拉读取接口
|
|
const openADialog = async (param?: any, item?: any) => {
|
getEnumColorData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('ColorEnum')).data.result ?? [];
|
|
getEnumABCClassData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('ABCClassEnum')).data.result ?? [];
|
|
handleQueryW(); //物料类型
|
title.value = param;
|
dialogFormVisible.value = true;
|
warehousOrderDetails.value = [];
|
deltailList4.value = [];
|
deltailList5.value = [];
|
ruleForm1.value = {};
|
ruleForm2.value = {};
|
ruleForm6.value = {};
|
|
// formModel.value.orderNo = item.orderNo
|
// formModel.value.OrdersId = item.id
|
if (param != '新增') {
|
let dataRes = (await detailWmsMaterial(item.id)).data.result;
|
if (dataRes) {
|
ruleForm1.value = dataRes.materialInfo;
|
if (dataRes.controlRuleDetailList && dataRes.controlRuleDetailList[0]) {
|
var d2 = dataRes.controlRuleDetailList[0];
|
|
ruleForm2.value = d2;
|
}
|
deltailList5.value = dataRes.baseCustomerList;
|
deltailList4.value = dataRes.substituteGoodList;
|
|
var items = dataRes.batchRuleDetailList;
|
debugger;
|
|
if (items.length > 0) {
|
deltailList3.value = [
|
{
|
ruleCode: items[0].ruleCode,
|
ruleName: items[0].ruleName,
|
children: [...items],
|
},
|
];
|
} else {
|
deltailList3.value = [];
|
}
|
|
// 容器类型
|
if (dataRes.containerPackagingList && dataRes.containerPackagingList[0]) {
|
ruleForm6.value.containerTypeId = dataRes.containerPackagingList[0].containerTypeId;
|
ruleForm6.value.boxQty = dataRes.containerPackagingList[0].boxQty;
|
}
|
|
// 枚举---------
|
getEnumBatchRuleTypeData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('BatchRuleEnum')).data.result ?? [];
|
getEnumAttrForamtData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('AttrForamtEnum')).data.result ?? [];
|
getEnumAttrOptionData_Index.value = getEnumAttrForamtData_Index.value;
|
setTimeout(async () => {
|
getEnumInputControlData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('InputControlEnum')).data.result ?? [];
|
getEnumPriorityData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('PriorityEnum')).data.result ?? [];
|
getEnumRFShowData_Index.value = (await getAPI(SysEnumApi).apiSysEnumEnumDataListGet('TrueFalseEnum')).data.result ?? [];
|
getEnumIsDisabledData_Index.value = getEnumRFShowData_Index.value;
|
}, 1000);
|
// 枚举---------
|
}
|
}
|
|
// getTabelData()
|
//清除表单的校验
|
nextTick(async () => {
|
arrDw.value = await handleSlectDatawmsUnit(); //下拉读取接
|
arrRqlx.value = await handleSlectDatawmsContainerType(); //下拉读取接
|
});
|
};
|
|
//================
|
const arrTdp = ref<any[]>([]);
|
|
//替代品
|
const handleQueryTdp = async () => {
|
var res = await pageWmsMaterial(Object.assign(queryParamsW.value, tableParamsW.value));
|
arrTdp.value = res.data.result?.items ?? [];
|
// tableData.value = res.data.result?.items ?? [];
|
// tableParams.value.total = res.data.result?.total;
|
// loading.value = false;
|
};
|
handleQueryTdp();
|
|
const loading = ref(false);
|
const changeXmbh = async (query?: any) => {
|
loading.value = true;
|
var res = await pageWmsMaterial({
|
page: 1,
|
pageSize: 200,
|
materialCode: query,
|
});
|
loading.value = false;
|
arrTdp.value = res.data.result?.items ?? [];
|
};
|
|
// 远程搜索 输入关键字以从远程服务器中查找数据。
|
|
const remoteMethod = async (query: string) => {
|
loading.value = true;
|
var res = await pageWmsMaterial({
|
page: 1,
|
pageSize: 200,
|
materialCode: query,
|
});
|
loading.value = false;
|
arrTdp.value = res.data.result?.items ?? [];
|
};
|
|
// 暴露方法
|
defineExpose({ openADialog });
|
</script>
|
<style lang="less" scoped>
|
.tipsWp {
|
margin: o auto;
|
margin-top: 3%;
|
margin-bottom: 3%;
|
display: block;
|
text-align: center;
|
}
|
|
.isYukBox {
|
margin: 10px;
|
text-align: right;
|
}
|
|
.el-dialog__title {
|
color: white !important;
|
}
|
|
.addHover {
|
cursor: pointer;
|
}
|
</style>
|