|
|
|
@ -1,5 +1,8 @@
|
|
|
|
|
<template>
|
|
|
|
|
<Dialog :title="dialogTitle" v-model="dialogVisible">
|
|
|
|
|
<el-card class="hl-card">
|
|
|
|
|
<template #header>
|
|
|
|
|
<span>新建</span>
|
|
|
|
|
</template>
|
|
|
|
|
<el-form
|
|
|
|
|
ref="formRef"
|
|
|
|
|
:model="formData"
|
|
|
|
@ -7,91 +10,328 @@
|
|
|
|
|
label-width="100px"
|
|
|
|
|
v-loading="formLoading"
|
|
|
|
|
>
|
|
|
|
|
<el-form-item label="入库出库类型:1为入库,2为出库" prop="stockType">
|
|
|
|
|
<el-radio-group v-model="formData.stockType">
|
|
|
|
|
<el-radio label="1">请选择字典生成</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="入/出库单号" prop="stockNo">
|
|
|
|
|
<el-input v-model="formData.stockNo" placeholder="请输入入/出库单号" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="上游单号" prop="headerNo">
|
|
|
|
|
<el-input v-model="formData.headerNo" placeholder="请输入上游单号" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="物料 Id,对应 base_material表中的 Id 列" prop="materialId">
|
|
|
|
|
<el-input v-model="formData.materialId" placeholder="请输入物料 Id,对应 base_material表中的 Id 列" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="批次号" prop="lotNo">
|
|
|
|
|
<el-input v-model="formData.lotNo" placeholder="请输入批次号" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="仓库 Id,对应 wms_wh 表中的Id" prop="whId">
|
|
|
|
|
<el-input v-model="formData.whId" placeholder="请输入仓库 Id,对应 wms_wh 表中的Id" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="库区 Id,对应 wms_rg 表中的Id" prop="rgId">
|
|
|
|
|
<el-input v-model="formData.rgId" placeholder="请输入库区 Id,对应 wms_rg 表中的Id" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="库区 Id,对应 wms_rg 表中的Id" prop="pnId">
|
|
|
|
|
<el-input v-model="formData.pnId" placeholder="请输入库区 Id,对应 wms_rg 表中的Id" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="库存良品数量" prop="storageOkQty">
|
|
|
|
|
<el-input v-model="formData.storageOkQty" placeholder="请输入库存良品数量" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="库存不良品数量" prop="storageNgQty">
|
|
|
|
|
<el-input v-model="formData.storageNgQty" placeholder="请输入库存不良品数量" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="库存报废数量" prop="storageSpQty">
|
|
|
|
|
<el-input v-model="formData.storageSpQty" placeholder="请输入库存报废数量" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="备注" prop="description">
|
|
|
|
|
<el-input v-model="formData.description" type="textarea" placeholder="请输入备注" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="状态:1为保存;2为提交;3为作废" prop="status">
|
|
|
|
|
<el-radio-group v-model="formData.status">
|
|
|
|
|
<el-radio label="1">请选择字典生成</el-radio>
|
|
|
|
|
</el-radio-group>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="入库人" prop="keeper">
|
|
|
|
|
<el-input v-model="formData.keeper" placeholder="请输入入库人" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="入库时间" prop="keeperTime">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
v-model="formData.keeperTime"
|
|
|
|
|
type="date"
|
|
|
|
|
value-format="x"
|
|
|
|
|
placeholder="选择入库时间"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="出库人" prop="outer">
|
|
|
|
|
<el-input v-model="formData.outer" placeholder="请输入出库人" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="出库时间" prop="outerTime">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
v-model="formData.outerTime"
|
|
|
|
|
type="date"
|
|
|
|
|
value-format="x"
|
|
|
|
|
placeholder="选择出库时间"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="作废人" prop="cancel">
|
|
|
|
|
<el-input v-model="formData.cancel" placeholder="请输入作废人" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-form-item label="作废时间" prop="cancelTime">
|
|
|
|
|
<el-date-picker
|
|
|
|
|
v-model="formData.cancelTime"
|
|
|
|
|
type="date"
|
|
|
|
|
value-format="x"
|
|
|
|
|
placeholder="选择作废时间"
|
|
|
|
|
/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
<el-card class="hl-card-info">
|
|
|
|
|
<template #header>
|
|
|
|
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">基础信息</span>
|
|
|
|
|
</template>
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item prop="name" label="入库单号" required>
|
|
|
|
|
<el-input v-model="formData.name" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item prop="level" label="入库类型">
|
|
|
|
|
<el-select v-model="formData.level" clearable style="width: 100%">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_CUSTOMER_LEVEL)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.label"
|
|
|
|
|
:value="dict.value"
|
|
|
|
|
/>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item prop="name" label="单号日期" required>
|
|
|
|
|
<el-input v-model="formData.name" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item prop="code" label="上游单号">
|
|
|
|
|
<el-input v-model="formData.code" />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item prop="industry" label="单据状态">
|
|
|
|
|
<el-input v-model="formData.industry" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item prop="level" label="入库仓库">
|
|
|
|
|
<el-select v-model="formData.level" clearable style="width: 100%">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="dict in getIntDictOptions(DICT_TYPE.HELI_CUSTOMER_LEVEL)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.label"
|
|
|
|
|
:value="dict.value"
|
|
|
|
|
/>
|
|
|
|
|
</el-select>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col :span="24">
|
|
|
|
|
<el-form-item label="备注" prop="description">
|
|
|
|
|
<el-input type="textarea" v-model="formData.description" show-word-limit maxlength="200"/>
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</el-card>
|
|
|
|
|
|
|
|
|
|
<el-card class="hl-card-info">
|
|
|
|
|
<template #header>
|
|
|
|
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">物料信息</span>
|
|
|
|
|
</template>
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-card class="hl-incard">
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-button class="hl-addbutton" type="primary" size="large" @click="onAddItem"
|
|
|
|
|
>新增</el-button
|
|
|
|
|
>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-table
|
|
|
|
|
:data="formData.productBomItemDOList"
|
|
|
|
|
class="hl-table"
|
|
|
|
|
@cell-click="handleCellClick"
|
|
|
|
|
@cell-blur="handleCellBlur"
|
|
|
|
|
>
|
|
|
|
|
<el-table-column prop="" label="序号" />
|
|
|
|
|
<el-table-column prop="projectName" label="物料编码">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input v-model="scope.row.projectName" :disabled="!scope.row.editable" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="name" label="物料名称">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input
|
|
|
|
|
v-model="scope.row.name"
|
|
|
|
|
@click="openshoopname(scope.$index)"
|
|
|
|
|
:disabled="!scope.row.editable"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="inventoryType" label="物料类型">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<dict-tag
|
|
|
|
|
:type="DICT_TYPE.PRODUCT_SAVE_TYPE"
|
|
|
|
|
:value="scope.row.inventoryType"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="spec" label="规格/型号" />
|
|
|
|
|
|
|
|
|
|
<el-table-column prop="inventoryUnitId" label="系统单位">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<dict-tag
|
|
|
|
|
:type="DICT_TYPE.PRODUCT_INVENTORY_UNIT_ID"
|
|
|
|
|
:value="scope.row.inventoryUnitId"
|
|
|
|
|
/>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="unit" width="120" label="入库库区">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-select v-model="scope.row.unit" placeholder="" style="width: 100%">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="dict in getIntDictOptions(DICT_TYPE.PRODUCT_INVENTORY_UNIT_ID)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.label"
|
|
|
|
|
:value="dict.value.toString()"
|
|
|
|
|
/>
|
|
|
|
|
</el-select>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="unit" width="120" label="入库库位">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-select v-model="scope.row.unit" placeholder="" style="width: 100%">
|
|
|
|
|
<el-option
|
|
|
|
|
v-for="dict in getIntDictOptions(DICT_TYPE.PRODUCT_INVENTORY_UNIT_ID)"
|
|
|
|
|
:key="dict.value"
|
|
|
|
|
:label="dict.label"
|
|
|
|
|
:value="dict.value.toString()"
|
|
|
|
|
/>
|
|
|
|
|
</el-select>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="proportionNum" width="120" label="本次入库数量">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input v-model="scope.row.proportionNum" :disabled="!scope.row.editable" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="proportionNum" width="120" label="批次号">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input v-model="scope.row.proportionNum" :disabled="!scope.row.editable" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column prop="proportionNum" width="150" label="备注">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-input v-model="scope.row.proportionNum" :disabled="!scope.row.editable" />
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column label="操作" align="center" width="240">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button
|
|
|
|
|
v-if="!scope.row.editable"
|
|
|
|
|
type="primary"
|
|
|
|
|
size="small"
|
|
|
|
|
link
|
|
|
|
|
@click="handleEdit(scope.$index)"
|
|
|
|
|
>
|
|
|
|
|
编辑
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button
|
|
|
|
|
link
|
|
|
|
|
v-else
|
|
|
|
|
type="success"
|
|
|
|
|
size="small"
|
|
|
|
|
@click="handleSave(scope.$index)"
|
|
|
|
|
>
|
|
|
|
|
保存
|
|
|
|
|
</el-button>
|
|
|
|
|
|
|
|
|
|
<el-button link type="primary" @click="handlefuke(scope.$index, scope.row)"
|
|
|
|
|
>复制</el-button
|
|
|
|
|
>
|
|
|
|
|
<el-button
|
|
|
|
|
link
|
|
|
|
|
type="danger"
|
|
|
|
|
size="small"
|
|
|
|
|
@click.prevent="handleDelete2(scope.$index)"
|
|
|
|
|
>
|
|
|
|
|
删除
|
|
|
|
|
</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</el-card>
|
|
|
|
|
|
|
|
|
|
<el-card class="hl-card-info">
|
|
|
|
|
<template #header>
|
|
|
|
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">附件信息</span>
|
|
|
|
|
</template>
|
|
|
|
|
<el-row>
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-card class="hl-incard">
|
|
|
|
|
<el-col>
|
|
|
|
|
<el-upload
|
|
|
|
|
v-model:file-list="fileList"
|
|
|
|
|
:show-file-list="false"
|
|
|
|
|
class="upload-demo"
|
|
|
|
|
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
|
|
|
|
multiple
|
|
|
|
|
:on-preview="handlePreview"
|
|
|
|
|
:on-remove="handleRemove"
|
|
|
|
|
:before-remove="beforeRemove"
|
|
|
|
|
:limit="3"
|
|
|
|
|
:on-exceed="handleExceed"
|
|
|
|
|
@before-upload="handleBeforeUpload"
|
|
|
|
|
>
|
|
|
|
|
<el-button type="primary" size="large" class="hl-addbutton">上传</el-button>
|
|
|
|
|
</el-upload>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-table :data="fileList" class="hl-table">
|
|
|
|
|
<el-table-column prop="name" label="文件名称" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<!-- <div></div> -->
|
|
|
|
|
<a :href="scope.row.url" style="color: #409eff">{{ scope.row.name }} </a>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
|
|
|
|
<el-table-column prop="uploadTimestamp" align="center" label="上传日期" />
|
|
|
|
|
|
|
|
|
|
<el-table-column label="操作" align="center">
|
|
|
|
|
<template #default="scope">
|
|
|
|
|
<el-button link type="danger" size="small" @click="handleDelete(scope.$index)">
|
|
|
|
|
删除
|
|
|
|
|
</el-button>
|
|
|
|
|
<el-button link type="primary" size="small"> 下载 </el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
</el-table>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</el-card>
|
|
|
|
|
<el-card class="hl-card-info">
|
|
|
|
|
<template #header>
|
|
|
|
|
<div class="hl-card-info-icona"></div><span class="hl-card-info-text">系统信息</span>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<el-row justify="center">
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-form-item prop="level" label="创建人">
|
|
|
|
|
<el-input v-model="formData.level" class="!w-300px" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-form-item prop="level" label="创建时间">
|
|
|
|
|
<el-input v-model="formData.level" class="!w-300px" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-row justify="center">
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-form-item prop="level" label="入库人">
|
|
|
|
|
<el-input v-model="formData.level" class="!w-300px" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-form-item prop="level" label="入库时间">
|
|
|
|
|
<el-input v-model="formData.level" class="!w-300px" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
<el-row justify="center">
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-form-item prop="level" label="作废人">
|
|
|
|
|
<el-input v-model="formData.level" class="!w-300px" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
<el-col :span="8">
|
|
|
|
|
<el-form-item prop="level" label="作废时间">
|
|
|
|
|
<el-input v-model="formData.level" class="!w-300px" disabled />
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</el-col>
|
|
|
|
|
</el-row>
|
|
|
|
|
</el-card>
|
|
|
|
|
</el-form>
|
|
|
|
|
<template #footer>
|
|
|
|
|
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
|
|
|
|
|
<el-button @click="dialogVisible = false">取 消</el-button>
|
|
|
|
|
</template>
|
|
|
|
|
</Dialog>
|
|
|
|
|
<div class="text-center hl-footer">
|
|
|
|
|
<el-button @click="goback" size="large">取 消</el-button>
|
|
|
|
|
<el-button @click="submitForm" type="success" :disabled="formLoading" size="large"
|
|
|
|
|
>保 存</el-button
|
|
|
|
|
>
|
|
|
|
|
<el-button @click="submitForm" type="primary" :disabled="formLoading" size="large"
|
|
|
|
|
>提 交</el-button
|
|
|
|
|
>
|
|
|
|
|
<el-button @click="submitForm" type="danger" :disabled="formLoading" size="large"
|
|
|
|
|
>报 废</el-button
|
|
|
|
|
>
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
</template>
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import * as StorageApi from '@/api/heli/storage'
|
|
|
|
|
import { ref } from 'vue'
|
|
|
|
|
import { ElMessage, ElMessageBox } from 'element-plus'
|
|
|
|
|
|
|
|
|
|
import type { UploadProps, UploadUserFile } from 'element-plus'
|
|
|
|
|
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
|
|
|
|
|
import * as MouldTypeApi from '@/api/heli/mouldtype'
|
|
|
|
|
|
|
|
|
|
const { t } = useI18n() // 国际化
|
|
|
|
|
const message = useMessage() // 消息弹窗
|
|
|
|
@ -102,33 +342,13 @@ const formLoading = ref(false) // 表单的加载中:1)修改时的数据加
|
|
|
|
|
const formType = ref('') // 表单的类型:create - 新增;update - 修改
|
|
|
|
|
const formData = ref({
|
|
|
|
|
id: undefined,
|
|
|
|
|
stockType: undefined,
|
|
|
|
|
stockNo: undefined,
|
|
|
|
|
headerNo: undefined,
|
|
|
|
|
materialId: undefined,
|
|
|
|
|
lotNo: undefined,
|
|
|
|
|
whId: undefined,
|
|
|
|
|
rgId: undefined,
|
|
|
|
|
pnId: undefined,
|
|
|
|
|
storageOkQty: undefined,
|
|
|
|
|
storageNgQty: undefined,
|
|
|
|
|
storageSpQty: undefined,
|
|
|
|
|
description: undefined,
|
|
|
|
|
status: undefined,
|
|
|
|
|
keeper: undefined,
|
|
|
|
|
keeperTime: undefined,
|
|
|
|
|
outer: undefined,
|
|
|
|
|
outerTime: undefined,
|
|
|
|
|
cancel: undefined,
|
|
|
|
|
cancelTime: undefined,
|
|
|
|
|
name: undefined,
|
|
|
|
|
status: 1,
|
|
|
|
|
productBomItemDOList: []
|
|
|
|
|
})
|
|
|
|
|
const formRules = reactive({
|
|
|
|
|
stockType: [{ required: true, message: '入库出库类型:1为入库,2为出库不能为空', trigger: 'blur' }],
|
|
|
|
|
stockNo: [{ required: true, message: '入/出库单号不能为空', trigger: 'blur' }],
|
|
|
|
|
materialId: [{ required: true, message: '物料 Id,对应 base_material表中的 Id 列不能为空', trigger: 'blur' }],
|
|
|
|
|
whId: [{ required: true, message: '仓库 Id,对应 wms_wh 表中的Id不能为空', trigger: 'blur' }],
|
|
|
|
|
rgId: [{ required: true, message: '库区 Id,对应 wms_rg 表中的Id不能为空', trigger: 'blur' }],
|
|
|
|
|
pnId: [{ required: true, message: '库区 Id,对应 wms_rg 表中的Id不能为空', trigger: 'blur' }],
|
|
|
|
|
name: [{ required: true, message: '模具类型不能为空', trigger: 'blur' }],
|
|
|
|
|
status: [{ required: true, message: '启用状态不能为空', trigger: 'blur' }]
|
|
|
|
|
})
|
|
|
|
|
const formRef = ref() // 表单 Ref
|
|
|
|
|
|
|
|
|
@ -142,7 +362,7 @@ const open = async (type: string, id?: number) => {
|
|
|
|
|
if (id) {
|
|
|
|
|
formLoading.value = true
|
|
|
|
|
try {
|
|
|
|
|
formData.value = await StorageApi.getStorage(id)
|
|
|
|
|
formData.value = await MouldTypeApi.getMouldType(id)
|
|
|
|
|
} finally {
|
|
|
|
|
formLoading.value = false
|
|
|
|
|
}
|
|
|
|
@ -158,46 +378,167 @@ const submitForm = async () => {
|
|
|
|
|
// 提交请求
|
|
|
|
|
formLoading.value = true
|
|
|
|
|
try {
|
|
|
|
|
const data = formData.value as unknown as StorageApi.StorageVO
|
|
|
|
|
const data = formData.value as unknown as MouldTypeApi.MouldTypeVO
|
|
|
|
|
if (formType.value === 'create') {
|
|
|
|
|
await StorageApi.createStorage(data)
|
|
|
|
|
await MouldTypeApi.createMouldType(data)
|
|
|
|
|
message.success(t('common.createSuccess'))
|
|
|
|
|
} else {
|
|
|
|
|
await StorageApi.updateStorage(data)
|
|
|
|
|
await MouldTypeApi.updateMouldType(data)
|
|
|
|
|
message.success(t('common.updateSuccess'))
|
|
|
|
|
}
|
|
|
|
|
dialogVisible.value = false
|
|
|
|
|
// 发送操作成功的事件
|
|
|
|
|
goback()
|
|
|
|
|
emit('success')
|
|
|
|
|
} finally {
|
|
|
|
|
formLoading.value = false
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const goback = () => {
|
|
|
|
|
resetForm()
|
|
|
|
|
}
|
|
|
|
|
/** 重置表单 */
|
|
|
|
|
const resetForm = () => {
|
|
|
|
|
formData.value = {
|
|
|
|
|
id: undefined,
|
|
|
|
|
stockType: undefined,
|
|
|
|
|
stockNo: undefined,
|
|
|
|
|
headerNo: undefined,
|
|
|
|
|
materialId: undefined,
|
|
|
|
|
lotNo: undefined,
|
|
|
|
|
whId: undefined,
|
|
|
|
|
rgId: undefined,
|
|
|
|
|
pnId: undefined,
|
|
|
|
|
storageOkQty: undefined,
|
|
|
|
|
storageNgQty: undefined,
|
|
|
|
|
storageSpQty: undefined,
|
|
|
|
|
description: undefined,
|
|
|
|
|
status: undefined,
|
|
|
|
|
keeper: undefined,
|
|
|
|
|
keeperTime: undefined,
|
|
|
|
|
outer: undefined,
|
|
|
|
|
outerTime: undefined,
|
|
|
|
|
cancel: undefined,
|
|
|
|
|
cancelTime: undefined,
|
|
|
|
|
name: undefined,
|
|
|
|
|
status: 1,
|
|
|
|
|
productBomItemDOList: []
|
|
|
|
|
}
|
|
|
|
|
formRef.value?.resetFields()
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
const onAddItem = () => {
|
|
|
|
|
const newData = {
|
|
|
|
|
// 新数据的属性
|
|
|
|
|
projectName: '',
|
|
|
|
|
name: '',
|
|
|
|
|
productStatus: '',
|
|
|
|
|
spec: '',
|
|
|
|
|
inventoryUnitId: '',
|
|
|
|
|
inventoryType: '',
|
|
|
|
|
barCode: '',
|
|
|
|
|
productTypeId: '',
|
|
|
|
|
unit: [],
|
|
|
|
|
editable: true,
|
|
|
|
|
productBomItemValueDOList: []
|
|
|
|
|
}
|
|
|
|
|
formData.value.productBomItemDOList.push(newData)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 复制数据
|
|
|
|
|
const handlefuke = (index, item) => {
|
|
|
|
|
const data: any = formData.value.productBomItemDOList[index]
|
|
|
|
|
|
|
|
|
|
// 复制数据
|
|
|
|
|
const newData: any = {
|
|
|
|
|
...data,
|
|
|
|
|
projectName: item.projectName,
|
|
|
|
|
name: item.name,
|
|
|
|
|
productStatus: item.productStatus,
|
|
|
|
|
spec: item.spec,
|
|
|
|
|
inventoryUnitId: item.inventoryUnitId,
|
|
|
|
|
inventoryType: item.spec,
|
|
|
|
|
barCode: item.spec,
|
|
|
|
|
productTypeId: item.spec,
|
|
|
|
|
unit: [],
|
|
|
|
|
editable: true,
|
|
|
|
|
productBomItemValueDOList: []
|
|
|
|
|
}
|
|
|
|
|
// 添加新数据
|
|
|
|
|
formData.value.productBomItemDOList.splice(index + 1, 0, newData)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//点击编辑 / 保存 input框是否可输入
|
|
|
|
|
const handleEdit = (index) => {
|
|
|
|
|
formData.value.productBomItemDOList[index].editable = true
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleSave = (index) => {
|
|
|
|
|
formData.value.productBomItemDOList[index].editable = false
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleCellClick = (row, column, event) => {
|
|
|
|
|
if (row.editable) {
|
|
|
|
|
column.el.querySelector('input').focus()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleCellBlur = (row, column, event) => {
|
|
|
|
|
if (row.editable) {
|
|
|
|
|
column.el.querySelector('input').blur()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//删除新增物料信息
|
|
|
|
|
const handleDelete2 = (index: number) => {
|
|
|
|
|
formData.value.productBomItemDOList.splice(index, 1)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//上传的附件信息
|
|
|
|
|
|
|
|
|
|
const fileList = ref([
|
|
|
|
|
{
|
|
|
|
|
name: 'element-plus-logo.svg',
|
|
|
|
|
url: 'https://element-plus.org/images/element-plus-logo.svg',
|
|
|
|
|
uploadTimestamp: '2024-1-12 16:06'
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
name: 'element-plus-logo2.svg',
|
|
|
|
|
url: 'https://element-plus.org/images/element-plus-logo.svg',
|
|
|
|
|
uploadTimestamp: '2024-1-12 16:06'
|
|
|
|
|
}
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => {
|
|
|
|
|
console.log(file, uploadFiles, '11')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
|
|
|
|
|
console.log(uploadFile, '222')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleExceed: UploadProps['onExceed'] = (files, uploadFiles) => {
|
|
|
|
|
ElMessage.warning(
|
|
|
|
|
`The limit is 3, you selected ${files.length} files this time, add up to ${
|
|
|
|
|
files.length + uploadFiles.length
|
|
|
|
|
} totally`
|
|
|
|
|
)
|
|
|
|
|
console.log('333')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let uploadTimestamp: any = null
|
|
|
|
|
const handleBeforeUpload = (file: File) => {
|
|
|
|
|
uploadTimestamp = new Date().toISOString() // 获取并保存当前时间戳
|
|
|
|
|
// 如果需要阻止默认上传行为,可以返回 false
|
|
|
|
|
// return false;
|
|
|
|
|
|
|
|
|
|
// 创建新的文件对象并添加到 filelist 中
|
|
|
|
|
const newFile: any = {
|
|
|
|
|
name: '',
|
|
|
|
|
url: '', // 这里可以是实际上传后的URL,根据实际情况填写
|
|
|
|
|
uploadTimestamp: uploadTimestamp!,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
fileList.value.push(newFile);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const beforeRemove: UploadProps['beforeRemove'] = (uploadFile, uploadFiles) => {
|
|
|
|
|
console.log('444', uploadFile, uploadFiles)
|
|
|
|
|
|
|
|
|
|
return ElMessageBox.confirm(`Cancel the transfer of ${uploadFile.name} ?`).then(
|
|
|
|
|
() => true,
|
|
|
|
|
() => false
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除上传的附件信息
|
|
|
|
|
const handleDelete = (index: number) => {
|
|
|
|
|
fileList.value.splice(index, 1)
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
<style>
|
|
|
|
|
a {
|
|
|
|
|
color: #409eff;
|
|
|
|
|
text-decoration: none;
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|