feat(合卷操作): 扩展合卷操作类型范围支持200-299
fix(文件上传): 添加docx到默认支持文件类型列表 refactor(员工信息): 统一部门字段命名并修复备注字段 feat(酸轧合卷): 实现酸轧合卷页面功能 feat(员工入职): 新增员工入职页面及功能 style(合卷页面): 优化合卷页面布局和样式
This commit is contained in:
@@ -68,7 +68,7 @@
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="small" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="small" @click="resetQuery">重置</el-button>
|
||||
<el-checkbox style="margin-left: 10px;" v-model="showCoilMap" size="small">显示钢卷地图</el-checkbox>
|
||||
<el-checkbox v-if="orderBy" style="margin-left: 10px;" v-model="showCoilMap" size="small">显示钢卷地图</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@ export default {
|
||||
// 文件类型, 例如['png', 'jpg', 'jpeg']
|
||||
fileType: {
|
||||
type: Array,
|
||||
default: () => ["doc", "xls", "xlsx", "ppt", "txt", "pdf", 'png', 'jpg', 'jpeg', 'bmp', 'webp'],
|
||||
default: () => ["doc", "docx", "xls", "xlsx", "ppt", "txt", "pdf", 'png', 'jpg', 'jpeg', 'bmp', 'webp'],
|
||||
},
|
||||
// 是否显示提示
|
||||
isShowTip: {
|
||||
|
||||
@@ -427,7 +427,7 @@ export default {
|
||||
path = '/wms/split';
|
||||
}
|
||||
// 合卷操作:200-299
|
||||
else if (actionType == 200) {
|
||||
else if (actionType >= 200 && actionType <= 299) {
|
||||
path = '/wms/merge';
|
||||
}
|
||||
else if (actionType < 100) {
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<!-- 第二个位置:显示待合卷列表 -->
|
||||
<template v-else-if="!readonly">
|
||||
<div class="pending-list-title">待合卷钢卷列表</div>
|
||||
<div class="pending-coil-list" v-if="renderPendingMergeList.length > 0">
|
||||
<div class="pending-coil-list">
|
||||
<div class="pending-coil-item" v-for="pending in renderPendingMergeList" :key="pending.actionId"
|
||||
@click="selectPendingCoil(pending, index)">
|
||||
<div class="pending-coil-no">{{ pending.currentCoilNo }}</div>
|
||||
@@ -79,10 +79,11 @@
|
||||
<span class="pending-value">{{ formatTime(pending.updateTime) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else class="empty-tip">
|
||||
<i class="el-icon-info"></i>
|
||||
暂无其他待合卷钢卷
|
||||
<coil-selector @select="selectCoil($event, index)">
|
||||
<div class="pending-coil-item">
|
||||
选择其他钢卷
|
||||
</div>
|
||||
</coil-selector>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
@@ -116,116 +117,124 @@
|
||||
<span>新钢卷</span>
|
||||
</div>
|
||||
<div class="target-coil-body">
|
||||
<el-form size="small" label-width="90px">
|
||||
<el-form-item label="卷号">
|
||||
<el-input v-model="targetCoil.currentCoilNo" placeholder="输入目标卷号" :disabled="readonly"></el-input>
|
||||
<current-coil-no :current-coil-no="targetCoil.currentCoilNo" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班组">
|
||||
<el-select v-model="targetCoil.team" placeholder="请选择班组" style="width: 100%" :disabled="readonly">
|
||||
<el-option key="甲" label="甲" value="甲" />
|
||||
<el-option key="乙" label="乙" value="乙" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="材料类型">
|
||||
<el-select v-model="targetCoil.materialType" placeholder="请选择材料类型" style="width: 100%"
|
||||
:disabled="readonly" @change="handleMaterialTypeChange">
|
||||
<el-option label="原料" value="原料" />
|
||||
<el-option label="成品" value="成品" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="getItemLabel">
|
||||
<raw-material-selector v-if="targetCoil.materialType === '原料'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择原料" style="width: 100%" clearable :disabled="readonly || !targetCoil.materialType" />
|
||||
<product-selector v-else-if="targetCoil.materialType === '成品'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择成品" style="width: 100%" clearable :disabled="readonly || !targetCoil.materialType" />
|
||||
<div v-else>请先选择物料类型</div>
|
||||
</el-form-item>
|
||||
<el-form size="small" label-width="80px">
|
||||
<div class="form-row">
|
||||
<el-form-item label="卷号" class="form-item-half">
|
||||
<el-input v-model="targetCoil.currentCoilNo" placeholder="输入目标卷号" :disabled="readonly"></el-input>
|
||||
<current-coil-no :current-coil-no="targetCoil.currentCoilNo" />
|
||||
</el-form-item>
|
||||
<el-form-item label="班组" class="form-item-half">
|
||||
<el-select v-model="targetCoil.team" placeholder="请选择班组" style="width: 100%" :disabled="readonly">
|
||||
<el-option key="甲" label="甲" value="甲" />
|
||||
<el-option key="乙" label="乙" value="乙" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="质量状态" prop="qualityStatus">
|
||||
<el-select v-model="targetCoil.qualityStatus" placeholder="请选择质量状态" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="材料类型" class="form-item-half">
|
||||
<el-select v-model="targetCoil.materialType" placeholder="请选择材料类型" style="width: 100%"
|
||||
:disabled="readonly" @change="handleMaterialTypeChange">
|
||||
<el-option label="原料" value="原料" />
|
||||
<el-option label="成品" value="成品" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item :label="getItemLabel" class="form-item-half">
|
||||
<raw-material-selector v-if="targetCoil.materialType === '原料'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择原料" style="width: 100%" clearable
|
||||
:disabled="readonly || !targetCoil.materialType" />
|
||||
<product-selector v-else-if="targetCoil.materialType === '成品'" v-model="targetCoil.itemId"
|
||||
placeholder="请选择成品" style="width: 100%" clearable
|
||||
:disabled="readonly || !targetCoil.materialType" />
|
||||
<div v-else>请先选择物料类型</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="切边要求" prop="trimmingRequirement">
|
||||
<el-select v-model="targetCoil.trimmingRequirement" placeholder="请选择切边要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="净边料" value="净边料" />
|
||||
<el-option label="毛边料" value="毛边料" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="质量状态" prop="qualityStatus" class="form-item-half">
|
||||
<el-select v-model="targetCoil.qualityStatus" placeholder="请选择质量状态" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option v-for="item in dict.type.coil_quality_status" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="切边要求" prop="trimmingRequirement" class="form-item-half">
|
||||
<el-select v-model="targetCoil.trimmingRequirement" placeholder="请选择切边要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="净边料" value="净边料" />
|
||||
<el-option label="毛边料" value="毛边料" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="打包状态" prop="packingStatus">
|
||||
<el-input v-model="targetCoil.packingStatus" placeholder="请输入打包状态" :disabled="readonly">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="打包状态" prop="packingStatus" class="form-item-half">
|
||||
<el-input v-model="targetCoil.packingStatus" placeholder="请输入打包状态" :disabled="readonly">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="包装要求" prop="packagingRequirement" class="form-item-half">
|
||||
<el-select v-model="targetCoil.packagingRequirement" placeholder="请选择包装要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="裸包" value="裸包" />
|
||||
<el-option label="普包" value="普包" />
|
||||
<el-option label="简包" value="简包" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<el-form-item label="包装要求" prop="packagingRequirement">
|
||||
<el-select v-model="targetCoil.packagingRequirement" placeholder="请选择包装要求" style="width: 100%"
|
||||
:disabled="readonly">
|
||||
<el-option label="裸包" value="裸包" />
|
||||
<el-option label="普包" value="普包" />
|
||||
<el-option label="简包" value="简包" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="毛重(t)">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.grossWeight" placeholder="请输入毛重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="净重(t)">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.netWeight" placeholder="请输入净重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="长度(m)">
|
||||
<el-input-number :controls="false" v-model="targetCoil.length" placeholder="请输入长度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="实测长度(m)" prop="actualLength">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualLength" placeholder="请输入实测长度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="实测宽度(m)" prop="actualWidth">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualWidth" placeholder="请输入实测宽度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="调制度" prop="temperGrade">
|
||||
<el-input v-model="targetCoil.temperGrade" placeholder="请输入调制度" />
|
||||
</el-form-item>
|
||||
<el-form-item label="镀层种类" prop="coatingType">
|
||||
<MemoInput storageKey="coatingType" v-model="targetCoil.coatingType" placeholder="请输入镀层种类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="逻辑库区">
|
||||
<WarehouseSelect v-model="targetCoil.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" />
|
||||
</el-form-item>
|
||||
<div class="form-row">
|
||||
<el-form-item label="毛重(t)" class="form-item-half">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.grossWeight" placeholder="请输入毛重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="净重(t)" class="form-item-half">
|
||||
<el-input-number precision="3" :controls="false" v-model="targetCoil.netWeight" placeholder="请输入净重"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">吨</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="长度(m)" class="form-item-half">
|
||||
<el-input-number :controls="false" v-model="targetCoil.length" placeholder="请输入长度" type="number"
|
||||
:step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="实测长度(m)" prop="actualLength" class="form-item-half">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualLength" placeholder="请输入实测长度"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="实测宽度(m)" prop="actualWidth" class="form-item-half">
|
||||
<el-input-number :controls="false" v-model="targetCoil.actualWidth" placeholder="请输入实测宽度"
|
||||
type="number" :step="0.01" :disabled="readonly">
|
||||
<template slot="append">米</template>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="调制度" prop="temperGrade" class="form-item-half">
|
||||
<el-input v-model="targetCoil.temperGrade" placeholder="请输入调制度" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<el-form-item label="镀层种类" prop="coatingType" class="form-item-half">
|
||||
<MemoInput storageKey="coatingType" v-model="targetCoil.coatingType" placeholder="请输入镀层种类" />
|
||||
</el-form-item>
|
||||
<el-form-item label="逻辑库区" class="form-item-half">
|
||||
<WarehouseSelect v-model="targetCoil.warehouseId" placeholder="请选择逻辑库区" :disabled="readonly" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 合卷规则说明 -->
|
||||
<!-- <div class="rule-card">
|
||||
<div class="rule-title">
|
||||
<i class="el-icon-warning-outline"></i>
|
||||
合卷规则
|
||||
</div>
|
||||
<ul class="rule-list">
|
||||
<li>至少需要2个源卷</li>
|
||||
<li>所有源卷的物品类型和物品ID应保持一致</li>
|
||||
<li>请确保录入正确的新钢卷号和班组信息</li>
|
||||
</ul>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -233,7 +242,7 @@
|
||||
|
||||
<script>
|
||||
import { getMaterialCoil, mergeMaterialCoil } from '@/api/wms/coil';
|
||||
import { listPendingAction, completeAction } from '@/api/wms/pendingAction';
|
||||
import { listPendingAction, completeAction, addPendingAction } from '@/api/wms/pendingAction';
|
||||
import CoilSelector from '@/components/CoilSelector';
|
||||
import ActualWarehouseSelect from "@/components/KLPService/ActualWarehouseSelect";
|
||||
import RawMaterialSelector from "@/components/KLPService/RawMaterialSelect";
|
||||
@@ -255,6 +264,7 @@ export default {
|
||||
const currentCoilNoPrefix = generateCoilNoPrefix()
|
||||
return {
|
||||
currentCoilNoPrefix,
|
||||
actionTypeCode: '',
|
||||
// 源卷列表
|
||||
sourceCoils: [],
|
||||
// 目标卷信息
|
||||
@@ -325,12 +335,18 @@ export default {
|
||||
const coilId = this.$route.query.coilId;
|
||||
const actionId = this.$route.query.actionId;
|
||||
const readonly = this.$route.query.readonly;
|
||||
const actionTypeCode = this.$route.query.actionTypeCode;
|
||||
|
||||
// 保存当前页面的待操作ID
|
||||
if (actionId) {
|
||||
this.actionId = actionId;
|
||||
}
|
||||
|
||||
// 保存当前页面的待操作类型
|
||||
if (actionTypeCode) {
|
||||
this.actionTypeCode = actionTypeCode;
|
||||
}
|
||||
|
||||
// 设置只读模式
|
||||
if (readonly === 'true' || readonly === true) {
|
||||
this.readonly = true;
|
||||
@@ -338,7 +354,7 @@ export default {
|
||||
|
||||
// 如果有coilId,加载该钢卷作为第一个源卷
|
||||
if (coilId) {
|
||||
await this.loadFirstCoil(coilId);
|
||||
await this.loadFirstCoil(coilId, actionId);
|
||||
// 加载其他待合卷的钢卷列表
|
||||
await this.loadPendingMergeList();
|
||||
} else {
|
||||
@@ -394,57 +410,53 @@ export default {
|
||||
this.$set(this.targetCoil, 'itemId', undefined);
|
||||
},
|
||||
// 加载第一个钢卷(从待操作进入时)
|
||||
async loadFirstCoil(coilId) {
|
||||
async loadFirstCoil(coilId, actionId) {
|
||||
try {
|
||||
this.loading = true;
|
||||
const response = await getMaterialCoil(coilId);
|
||||
if (response.code === 200 && response.data) {
|
||||
const data = response.data;
|
||||
const data = response.data;
|
||||
|
||||
// 初始化源卷列表,第一个是当前钢卷
|
||||
this.sourceCoils = [
|
||||
{
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
bomItems: data.bomItemList || [],
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
},
|
||||
{
|
||||
coilId: null,
|
||||
enterCoilNo: '',
|
||||
currentCoilNo: '',
|
||||
itemType: null,
|
||||
itemId: null,
|
||||
warehouseName: '',
|
||||
actualWarehouseName: '',
|
||||
materialName: '',
|
||||
productName: '',
|
||||
specification: '',
|
||||
bomItems: [],
|
||||
grossWeight: null,
|
||||
netWeight: null,
|
||||
length: null,
|
||||
}
|
||||
];
|
||||
// 初始化源卷列表,第一个是当前钢卷
|
||||
this.sourceCoils = [
|
||||
{
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
bomItems: data.bomItemList || [],
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
actionId: actionId // 保存待操作ID,用于后续完成操作
|
||||
},
|
||||
{
|
||||
coilId: null,
|
||||
enterCoilNo: '',
|
||||
currentCoilNo: '',
|
||||
itemType: null,
|
||||
itemId: null,
|
||||
warehouseName: '',
|
||||
actualWarehouseName: '',
|
||||
materialName: '',
|
||||
productName: '',
|
||||
specification: '',
|
||||
bomItems: [],
|
||||
grossWeight: null,
|
||||
netWeight: null,
|
||||
length: null,
|
||||
}
|
||||
];
|
||||
|
||||
// 自动填充目标卷信息
|
||||
this.targetCoil.itemType = data.itemType;
|
||||
this.targetCoil.itemId = data.itemId;
|
||||
this.targetCoil.warehouseId = data.warehouseId;
|
||||
// this.targetCoil.actualWarehouseId = data.actualWarehouseId;
|
||||
|
||||
// 不再预加载物品列表,改为实时搜索
|
||||
}
|
||||
// 自动填充目标卷信息
|
||||
this.targetCoil.itemType = data.itemType;
|
||||
this.targetCoil.itemId = data.itemId;
|
||||
this.targetCoil.warehouseId = data.warehouseId;
|
||||
} catch (error) {
|
||||
this.$message.error('加载钢卷信息失败');
|
||||
console.error(error);
|
||||
@@ -460,7 +472,7 @@ export default {
|
||||
|
||||
// 分别查询待处理和处理中的记录
|
||||
const responses = await listPendingAction({
|
||||
actionType: 200, // 合卷操作
|
||||
actionType: this.actionTypeCode, // 合卷操作
|
||||
actionStatus: '-1', // -1表示只查询不为2的记录
|
||||
pageNum: 1,
|
||||
pageSize: 1000
|
||||
@@ -482,28 +494,27 @@ export default {
|
||||
try {
|
||||
this.loading = true;
|
||||
const response = await getMaterialCoil(pending.coilId);
|
||||
if (response.code === 200 && response.data) {
|
||||
const data = response.data;
|
||||
this.$set(this.sourceCoils, index, {
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
bomItems: data.bomItemList || [],
|
||||
actionId: pending.actionId // 保存待操作ID,用于后续完成操作
|
||||
});
|
||||
|
||||
this.$message.success('已添加到合卷列表');
|
||||
}
|
||||
const data = response.data;
|
||||
this.$set(this.sourceCoils, index, {
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
bomItems: data.bomItemList || [],
|
||||
actionId: pending.actionId // 保存待操作ID,用于后续完成操作
|
||||
});
|
||||
|
||||
this.$message.success('已添加到合卷列表');
|
||||
} catch (error) {
|
||||
this.$message.error('加载钢卷信息失败');
|
||||
console.error(error);
|
||||
@@ -640,21 +651,16 @@ export default {
|
||||
text: '正在合卷,请稍后...',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.completeAllRelatedActions();
|
||||
await mergeMaterialCoil(mergeData);
|
||||
|
||||
const response = await mergeMaterialCoil(mergeData);
|
||||
if (response.code === 200) {
|
||||
this.$message.success('合卷保存成功');
|
||||
this.$message.success('合卷保存成功');
|
||||
|
||||
// 完成所有相关的待操作记录
|
||||
await this.completeAllRelatedActions();
|
||||
|
||||
// 延迟返回,让用户看到成功提示
|
||||
setTimeout(() => {
|
||||
this.$router.back();
|
||||
}, 100);
|
||||
} else {
|
||||
this.$message.error(response.msg || '合卷保存失败');
|
||||
}
|
||||
// 延迟返回,让用户看到成功提示
|
||||
setTimeout(() => {
|
||||
this.$router.back();
|
||||
}, 100);
|
||||
} catch (error) {
|
||||
this.$message.error('合卷保存失败');
|
||||
console.error(error);
|
||||
@@ -666,27 +672,66 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
async selectCoil(coil, index) {
|
||||
console.log(coil, index);
|
||||
const data = coil;
|
||||
|
||||
this.$set(this.sourceCoils, index, {
|
||||
coilId: data.coilId,
|
||||
enterCoilNo: data.enterCoilNo || '',
|
||||
currentCoilNo: data.currentCoilNo || '',
|
||||
itemType: data.itemType,
|
||||
itemId: data.itemId,
|
||||
warehouseName: data.warehouseName || (data.warehouse ? data.warehouse.warehouseName : ''),
|
||||
actualWarehouseName: data.actualWarehouseName || (data.actualWarehouse ? data.actualWarehouse.warehouseName : ''),
|
||||
materialName: data.materialName || (data.rawMaterial ? data.rawMaterial.rawMaterialName : ''),
|
||||
productName: data.productName || (data.product ? data.product.productName : ''),
|
||||
specification: data.rawMaterial?.specification || data.product?.specification || '',
|
||||
grossWeight: data.grossWeight || null,
|
||||
netWeight: data.netWeight || null,
|
||||
length: data.length || null,
|
||||
bomItems: data.bomItemList || [],
|
||||
nc: true,
|
||||
actionId: pending.actionId // 保存待操作ID,用于后续完成操作
|
||||
});
|
||||
},
|
||||
|
||||
// 完成所有相关的待操作记录
|
||||
async completeAllRelatedActions() {
|
||||
try {
|
||||
// 收集所有待操作ID
|
||||
const actionIds = [];
|
||||
const ncs = [];
|
||||
|
||||
// 当前页面的actionId(从路由参数获取)
|
||||
if (this.actionId) {
|
||||
actionIds.push(this.actionId);
|
||||
}
|
||||
// if (this.actionId) {
|
||||
// actionIds.push(this.actionId);
|
||||
// }
|
||||
|
||||
// 从待合卷列表中选择的钢卷的actionId
|
||||
this.sourceCoils.forEach(item => {
|
||||
if (item.actionId) {
|
||||
actionIds.push(item.actionId);
|
||||
}
|
||||
// 或许所有需要直接完成的
|
||||
if (item.nc) {
|
||||
ncs.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
// 批量完成所有待操作
|
||||
const promises = actionIds.map(id => completeAction(id));
|
||||
await Promise.all(promises);
|
||||
const promises1 = actionIds.map(id => completeAction(id));
|
||||
const promises2 = ncs.map(item => {
|
||||
addPendingAction({
|
||||
actionType: this.actionTypeCode, // 合卷操作
|
||||
actionStatus: '2', // 2表示已完成
|
||||
coilId: item.coilId,
|
||||
currentCoilNo: item.currentCoilNo || '',
|
||||
priority: 0,
|
||||
sourceType: 'manual',
|
||||
})
|
||||
});
|
||||
await Promise.all(promises1.concat(promises2));
|
||||
} catch (error) {
|
||||
console.error('完成待操作失败:', error);
|
||||
// 不影响主流程,只记录错误
|
||||
@@ -743,9 +788,9 @@ export default {
|
||||
/* 流程图容器 */
|
||||
.flow-container {
|
||||
display: flex;
|
||||
gap: 40px;
|
||||
gap: 20px;
|
||||
background: #fff;
|
||||
padding: 30px;
|
||||
padding: 20px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
min-height: 600px;
|
||||
@@ -753,11 +798,11 @@ export default {
|
||||
|
||||
.flow-left {
|
||||
flex: 1;
|
||||
max-width: 350px;
|
||||
min-width: 300px;
|
||||
}
|
||||
|
||||
.flow-middle {
|
||||
flex: 0 0 120px;
|
||||
flex: 0 0 80px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
@@ -767,7 +812,7 @@ export default {
|
||||
|
||||
.flow-right {
|
||||
flex: 1;
|
||||
max-width: 400px;
|
||||
min-width: 350px;
|
||||
}
|
||||
|
||||
.flow-section-title {
|
||||
@@ -803,8 +848,9 @@ export default {
|
||||
background: #fff;
|
||||
border: 1px solid #e4e7ed;
|
||||
border-radius: 8px;
|
||||
margin-bottom: 12px;
|
||||
margin-bottom: 10px;
|
||||
transition: all 0.3s;
|
||||
overflow: hidden;
|
||||
|
||||
&:hover {
|
||||
border-color: #0066cc;
|
||||
@@ -813,23 +859,23 @@ export default {
|
||||
}
|
||||
|
||||
.source-coil-header {
|
||||
padding: 12px 16px;
|
||||
padding: 10px 14px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
gap: 10px;
|
||||
border-bottom: 1px solid #f5f7fa;
|
||||
}
|
||||
|
||||
.source-number {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
border-radius: 50%;
|
||||
background: #0066cc;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 14px;
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
@@ -843,16 +889,13 @@ export default {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #303133;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.source-weight {
|
||||
font-size: 13px;
|
||||
color: #909399;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.source-coil-body {
|
||||
padding: 12px 16px;
|
||||
padding: 10px 14px;
|
||||
|
||||
&:empty {
|
||||
text-align: center;
|
||||
@@ -861,13 +904,13 @@ export default {
|
||||
.empty-tip {
|
||||
text-align: center;
|
||||
color: #909399;
|
||||
font-size: 13px;
|
||||
padding: 10px 0;
|
||||
font-size: 12px;
|
||||
padding: 8px 0;
|
||||
|
||||
i {
|
||||
display: block;
|
||||
font-size: 24px;
|
||||
margin-bottom: 5px;
|
||||
font-size: 20px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -930,8 +973,8 @@ export default {
|
||||
.source-detail-row {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 8px;
|
||||
font-size: 13px;
|
||||
margin-bottom: 6px;
|
||||
font-size: 12px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
@@ -939,7 +982,7 @@ export default {
|
||||
|
||||
.detail-label {
|
||||
color: #909399;
|
||||
min-width: 90px;
|
||||
min-width: 80px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
@@ -951,27 +994,27 @@ export default {
|
||||
}
|
||||
|
||||
.source-detail-divider {
|
||||
margin: 10px 0 8px;
|
||||
padding: 5px 0;
|
||||
font-size: 12px;
|
||||
margin: 8px 0 6px;
|
||||
padding: 4px 0;
|
||||
font-size: 11px;
|
||||
font-weight: 500;
|
||||
color: #606266;
|
||||
border-bottom: 1px solid #e4e7ed;
|
||||
}
|
||||
|
||||
.source-bom-params {
|
||||
margin-top: 8px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.source-bom-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 6px;
|
||||
font-size: 12px;
|
||||
margin-bottom: 4px;
|
||||
font-size: 11px;
|
||||
|
||||
.bom-key {
|
||||
color: #909399;
|
||||
min-width: 60px;
|
||||
min-width: 50px;
|
||||
}
|
||||
|
||||
.bom-value {
|
||||
@@ -1037,6 +1080,34 @@ export default {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
/* 双列表单布局 */
|
||||
.form-row {
|
||||
display: flex;
|
||||
gap: 16px;
|
||||
margin-bottom: 12px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.form-item-half {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
/* 响应式布局 */
|
||||
@media screen and (max-width: 768px) {
|
||||
.form-row {
|
||||
flex-direction: column;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.form-item-half {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
/* 规则说明卡片 */
|
||||
.rule-card {
|
||||
background: #fff9f0;
|
||||
|
||||
@@ -1,13 +1,78 @@
|
||||
<template>
|
||||
<div>
|
||||
酸轧合卷
|
||||
</div>
|
||||
<DoPage :label="actionType" :tabs="tabs" :useSpecialSplit="useSpecialSplit" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import DoPage from '../panels/do.vue'
|
||||
|
||||
</script>
|
||||
export default {
|
||||
name: 'SplitDo',
|
||||
components: {
|
||||
DoPage
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
actionType: '分卷',
|
||||
tabs: [],
|
||||
useSpecialSplit: false,
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'$route.query.actionType': {
|
||||
handler(newVal) {
|
||||
this.actionType = newVal;
|
||||
// 根据名字获取默认的查询参数
|
||||
const map = {
|
||||
'酸连轧工序': [
|
||||
{value: '1988150044862377986', label: '酸连轧原料库'},
|
||||
{value: '1988150099140866050', label: '酸连轧成品库'},
|
||||
{value: '1988150263284953089', label: '镀锌原料库'},
|
||||
{value: '1988150545175736322', label: '脱脂原料库'},
|
||||
],
|
||||
'镀锌工序': [
|
||||
{value: '1988150263284953089', label: '镀锌原料库'},
|
||||
{value: '1988150323162836993', label: '镀锌成品库'},
|
||||
{value: '1988150487185289217', label: '镀锌纵剪分条原料库'},
|
||||
],
|
||||
'脱脂工序': [
|
||||
{value: '1988150545175736322', label: '脱脂原料库'},
|
||||
{value: '1988150586938421250', label: '脱脂成品库'},
|
||||
],
|
||||
'退火工序': [
|
||||
{value: '1988150648993148929', label: '罩式退火原料库'},
|
||||
{value: '1988150704496373761', label: '罩式退火成品库'},
|
||||
],
|
||||
'拉矫平整工序': [
|
||||
{value: '1988150854442741762', label: '拉矫原料库'},
|
||||
{value: '1988150915591499777', label: '拉矫成品库'},
|
||||
],
|
||||
'双机架工序': [
|
||||
{value: '1992873386047643650', label: '双机架原料库'},
|
||||
{value: '1992873437713080322', label: '双机架成品库'},
|
||||
],
|
||||
'镀铬工序': [
|
||||
{value: '1988151076996706306', label: '镀铬原料库'},
|
||||
{value: '1988151132361519105', label: '镀铬成品库'},
|
||||
],
|
||||
'纵剪分条工序': [
|
||||
{value: '', label: '原料库'},
|
||||
{value: '1988150210872930306', label: '酸连轧分条成品'},
|
||||
{value: '1988150800092950529', label: '退火分条成品'},
|
||||
{value: '1988150380649967617', label: '镀锌分条成品'},
|
||||
{value: '1988151027466170370', label: '拉矫分条成品'},
|
||||
],
|
||||
}
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
if (this.actionType === '镀锌工序' || this.actionType === '脱脂工序' || this.actionType === '拉矫平整工序' || this.actionType === '双机架工序' || this.actionType === '镀铬工序' || this.actionType === '纵剪分条工序') {
|
||||
this.useSpecialSplit = true
|
||||
}
|
||||
// 从map中获取默认的查询参数
|
||||
const defaultWarehouseIds = map[this.actionType] || []
|
||||
console.log(defaultWarehouseIds, 'defaultWarehouseIds')
|
||||
this.tabs = defaultWarehouseIds
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -922,7 +922,7 @@ export default {
|
||||
path = '/wms/split'
|
||||
}
|
||||
// 合卷操作:200-299
|
||||
else if (actionType == 200) {
|
||||
else if (actionType >= 200 && actionType <= 299) {
|
||||
path = '/wms/merge'
|
||||
}
|
||||
// 其他操作类型
|
||||
@@ -950,6 +950,7 @@ export default {
|
||||
query: {
|
||||
coilId: row.coilId,
|
||||
actionId: row.actionId,
|
||||
actionTypeCode: row.actionType,
|
||||
...(currentActionTypeLabel ? { actionType: currentActionTypeLabel } : {})
|
||||
}
|
||||
})
|
||||
|
||||
500
klp-ui/src/views/wms/hrm/employeeInfo/entry.vue
Normal file
500
klp-ui/src/views/wms/hrm/employeeInfo/entry.vue
Normal file
@@ -0,0 +1,500 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
||||
<el-form-item label="入职时间" prop="changeTime">
|
||||
<el-date-picker clearable v-model="queryParams.changeTime" type="date" value-format="yyyy-MM-dd"
|
||||
placeholder="请选择入职时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="异动原因" prop="changeReason">
|
||||
<el-input
|
||||
v-model="queryParams.changeReason"
|
||||
placeholder="请输入异动原因"
|
||||
clearable
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item> -->
|
||||
<el-form-item label="负责人" prop="changeHandler">
|
||||
<el-input v-model="queryParams.changeHandler" placeholder="请输入负责人" clearable
|
||||
@keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">入职</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-edit" size="mini" @click="handleSupplement">补录</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single"
|
||||
@click="handleUpdate">修改</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
|
||||
@click="handleDelete">删除</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
</el-row>
|
||||
|
||||
<el-table v-loading="loading" :data="employeeEntryList" @selection-change="handleSelectionChange">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<!-- <el-table-column label="异动记录主键ID" align="center" prop="changeId" v-if="true"/> -->
|
||||
<el-table-column label="员工姓名" align="center" prop="wmsEmployeeInfo.name" />
|
||||
<el-table-column label="岗位工种" align="center" prop="wmsEmployeeInfo.jobType" />
|
||||
<el-table-column label="入职时间" align="center" prop="changeTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ parseTime(scope.row.changeTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="入职原因" align="center" prop="changeReason" />
|
||||
<el-table-column label="负责人" align="center" prop="changeHandler" />
|
||||
<!-- <el-table-column label="附件" align="center" prop="attachment" /> -->
|
||||
<el-table-column label="备注" align="center" prop="remark" />
|
||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
|
||||
<!-- 员工入职对话框 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<!-- 公司内信息 -->
|
||||
<el-card class="mb-4" shadow="never">
|
||||
<template slot="header">
|
||||
<div class="card-header">
|
||||
<span>在职信息</span>
|
||||
</div>
|
||||
</template>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-select v-model="form.dept" placeholder="请选择部门">
|
||||
<el-option v-for="item in deptList" :value="item.deptName" :label="item.deptName"
|
||||
:key="item.deptId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="岗位工种" prop="jobType">
|
||||
<el-input v-model="form.jobType" placeholder="请输入岗位工种" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="入职时间" prop="entryTime">
|
||||
<el-date-picker clearable v-model="form.entryTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss"
|
||||
placeholder="请选择入职时间" style="width: 100%;">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.infoRemark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<!-- 员工个人信息 -->
|
||||
<el-card class="mb-4" shadow="never">
|
||||
<template slot="header">
|
||||
<div class="card-header">
|
||||
<span>员工信息</span>
|
||||
</div>
|
||||
</template>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="form.name" placeholder="请输入姓名" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="身份证号" prop="idCard">
|
||||
<el-input v-model="form.idCard" placeholder="请输入身份证号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="年龄" prop="age">
|
||||
<el-input v-model="form.age" placeholder="请输入年龄" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="性别" prop="gender">
|
||||
<el-radio-group v-model="form.gender" size="small" mode="button">
|
||||
<el-radio label="男">男</el-radio>
|
||||
<el-radio label="女">女</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="学历" prop="education">
|
||||
<el-select v-model="form.education" placeholder="请选择学历">
|
||||
<el-option v-for="item in dict.type.hrm_employee_education" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="phone">
|
||||
<el-input v-model="form.phone" placeholder="请输入联系电话" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="家庭住址" prop="homeAddress">
|
||||
<el-input v-model="form.homeAddress" placeholder="请输入家庭住址" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<!-- 紧急联系信息 -->
|
||||
<el-card class="mb-4" shadow="never">
|
||||
<template slot="header">
|
||||
<div class="card-header">
|
||||
<span>紧急联系信息</span>
|
||||
</div>
|
||||
</template>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="紧急联系人" prop="emergencyContact">
|
||||
<el-input v-model="form.emergencyContact" placeholder="请输入紧急联系人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="关系" prop="relationship">
|
||||
<el-input v-model="form.relationship" placeholder="请输入关系" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="紧急联系电话" prop="emergencyContactPhone">
|
||||
<el-input v-model="form.emergencyContactPhone" placeholder="请输入紧急联系人电话" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<!-- 备注和附件 -->
|
||||
<el-card class="mb-4" shadow="hover">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<file-upload v-model="attachment"></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 员工入职记录补录对话框 -->
|
||||
<el-dialog :title="supplementTitle" :visible.sync="supplementOpen" width="500px" append-to-body>
|
||||
<el-form ref="supplementForm" :model="supplementForm" :rules="supplementRules" label-width="80px">
|
||||
<el-form-item label="入职时间" prop="changeTime">
|
||||
<el-date-picker clearable v-model="supplementForm.changeTime" type="datetime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss" placeholder="请选择入职时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="入职原因" prop="changeReason">
|
||||
<el-input v-model="supplementForm.changeReason" placeholder="请输入入职原因" />
|
||||
</el-form-item>
|
||||
<el-form-item label="负责人" prop="changeHandler">
|
||||
<el-input v-model="supplementForm.changeHandler" placeholder="请输入负责人" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="附件" prop="attachment">
|
||||
<file-upload v-model="supplementAttachment" />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="supplementForm.remark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitSupplementForm">确 定</el-button>
|
||||
<el-button @click="cancelSupplement">取 消</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listEmployeeChange, getEmployeeChange, delEmployeeChange, updateEmployeeChange, addEmployeeChange, employeeEntry } from "@/api/wms/employeeChange";
|
||||
import { listDept } from "@/api/wms/dept";
|
||||
|
||||
export default {
|
||||
name: "EmployeeEntry",
|
||||
data() {
|
||||
return {
|
||||
// 按钮loading
|
||||
buttonLoading: false,
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 员工入职表格数据
|
||||
employeeEntryList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
infoId: undefined,
|
||||
changeType: 0,
|
||||
changeTime: undefined,
|
||||
changeReason: undefined,
|
||||
changeHandler: undefined,
|
||||
attachment: undefined,
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
},
|
||||
// 附件
|
||||
attachment: undefined,
|
||||
// 部门列表
|
||||
deptList: [],
|
||||
// 补录对话框相关
|
||||
supplementTitle: "补录员工入职记录",
|
||||
supplementOpen: false,
|
||||
supplementForm: {
|
||||
changeId: undefined,
|
||||
infoId: undefined,
|
||||
changeType: 0,
|
||||
changeTime: undefined,
|
||||
changeReason: undefined,
|
||||
changeHandler: undefined,
|
||||
attachment: undefined,
|
||||
remark: undefined
|
||||
},
|
||||
supplementRules: {
|
||||
},
|
||||
supplementAttachment: undefined
|
||||
};
|
||||
},
|
||||
dicts: ['hrm_employee_education'],
|
||||
created() {
|
||||
this.getList();
|
||||
this.getDeptList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询员工入职记录列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listEmployeeChange(this.queryParams).then(response => {
|
||||
this.employeeEntryList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
getDeptList() {
|
||||
listDept().then(response => {
|
||||
this.deptList = response.data;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 取消补录按钮操作
|
||||
cancelSupplement() {
|
||||
this.supplementOpen = false;
|
||||
this.resetSupplementForm();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
infoId: undefined,
|
||||
serialNumber: undefined,
|
||||
dept: undefined,
|
||||
jobType: undefined,
|
||||
name: undefined,
|
||||
idCard: undefined,
|
||||
age: undefined,
|
||||
gender: undefined,
|
||||
education: undefined,
|
||||
homeAddress: undefined,
|
||||
phone: undefined,
|
||||
entryTime: undefined,
|
||||
emergencyContact: undefined,
|
||||
relationship: undefined,
|
||||
emergencyContactPhone: undefined,
|
||||
createBy: undefined,
|
||||
createTime: undefined,
|
||||
updateBy: undefined,
|
||||
updateTime: undefined,
|
||||
delFlag: undefined,
|
||||
remark: undefined,
|
||||
infoRemark: undefined
|
||||
};
|
||||
this.attachment = undefined;
|
||||
this.resetForm("form");
|
||||
},
|
||||
// 补录表单重置
|
||||
resetSupplementForm() {
|
||||
this.supplementForm = {
|
||||
changeId: undefined,
|
||||
infoId: undefined,
|
||||
changeType: 0,
|
||||
changeTime: undefined,
|
||||
changeReason: undefined,
|
||||
changeHandler: undefined,
|
||||
attachment: undefined,
|
||||
remark: undefined
|
||||
};
|
||||
this.supplementAttachment = undefined;
|
||||
this.resetForm("supplementForm");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.changeId)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.reset();
|
||||
this.form.changeHandler = this.$store.getters.nickName;
|
||||
this.open = true;
|
||||
this.title = "员工入职";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.loading = true;
|
||||
this.resetSupplementForm();
|
||||
const changeId = row.changeId || this.ids
|
||||
getEmployeeChange(changeId).then(response => {
|
||||
this.loading = false;
|
||||
this.supplementForm = response.data;
|
||||
this.supplementAttachment = response.data.attachment;
|
||||
this.supplementOpen = true;
|
||||
this.supplementTitle = "修改员工入职记录";
|
||||
});
|
||||
},
|
||||
/** 补录按钮操作 */
|
||||
handleSupplement() {
|
||||
this.resetSupplementForm();
|
||||
this.supplementForm.changeHandler = this.$store.getters.nickName;
|
||||
this.supplementOpen = true;
|
||||
this.supplementTitle = "补录员工入职记录";
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
this.buttonLoading = true;
|
||||
employeeEntry({
|
||||
changeType: 0,
|
||||
changeTime: this.form.entryTime,
|
||||
changeHandler: this.$store.getters.nickName,
|
||||
attachment: this.attachment,
|
||||
...this.form
|
||||
}).then(response => {
|
||||
this.$modal.msgSuccess("员工入职成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
}).finally(() => {
|
||||
this.buttonLoading = false;
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 提交补录表单 */
|
||||
submitSupplementForm() {
|
||||
this.$refs["supplementForm"].validate(valid => {
|
||||
if (valid) {
|
||||
this.buttonLoading = true;
|
||||
if (this.supplementForm.changeId != null) {
|
||||
updateEmployeeChange(this.supplementForm).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.supplementOpen = false;
|
||||
this.getList();
|
||||
}).finally(() => {
|
||||
this.buttonLoading = false;
|
||||
});
|
||||
} else {
|
||||
addEmployeeChange({
|
||||
changeType: 0,
|
||||
changeTime: this.supplementForm.changeTime,
|
||||
changeHandler: this.supplementForm.changeHandler,
|
||||
changeReason: this.supplementForm.changeReason,
|
||||
attachment: this.supplementAttachment,
|
||||
remark: this.supplementForm.remark
|
||||
}).then(response => {
|
||||
this.$modal.msgSuccess("员工入职记录补录成功");
|
||||
this.supplementOpen = false;
|
||||
this.getList();
|
||||
}).finally(() => {
|
||||
this.buttonLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const changeIds = row.changeId || this.ids;
|
||||
this.$modal.confirm('是否确认删除员工入职记录编号为"' + changeIds + '"的数据项?').then(() => {
|
||||
this.loading = true;
|
||||
return delEmployeeChange(changeIds);
|
||||
}).then(() => {
|
||||
this.loading = false;
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => {
|
||||
}).finally(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('system/employeeChange/export', {
|
||||
...this.queryParams
|
||||
}, `employeeChange_${new Date().getTime()}.xlsx`)
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="app-container">
|
||||
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="60px">
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-select v-model="queryParams.deptId" placeholder="请选择部门" clearable @keyup.enter.native="handleQuery">
|
||||
<el-select v-model="queryParams.dept" placeholder="请选择部门" clearable @keyup.enter.native="handleQuery">
|
||||
<el-option v-for="item in deptList" :value="item.deptName" :label="item.deptName" :key="item.deptId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -105,9 +105,9 @@
|
||||
</template>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-form-item label="部门" prop="dept">
|
||||
<!-- <el-input v-model="form.dept" placeholder="请输入部门" /> -->
|
||||
<el-select v-model="form.deptId" placeholder="请选择部门">
|
||||
<el-select v-model="form.dept" placeholder="请选择部门">
|
||||
<el-option v-for="item in deptList" :value="item.deptName" :label="item.deptName"
|
||||
:key="item.deptId" />
|
||||
</el-select>
|
||||
@@ -127,7 +127,7 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
||||
<el-input v-model="form.infoRemark" placeholder="请输入备注" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -214,7 +214,7 @@
|
||||
</el-card>
|
||||
|
||||
<!-- 备注和附件 -->
|
||||
<!-- <el-card class="mb-4" shadow="hover">
|
||||
<el-card class="mb-4" shadow="hover">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="备注" prop="remark">
|
||||
@@ -227,7 +227,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card> -->
|
||||
</el-card>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
|
||||
Reference in New Issue
Block a user