金蝶工序计划
This commit is contained in:
parent
55a32a3831
commit
44e8afaacb
@ -65,3 +65,11 @@ export function delProPlan(id) {
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 设计人项目汇总(周/月/年)
|
||||
export function getDesignerSummary() {
|
||||
return request({
|
||||
url: '/system/proPlan/summary/designer',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
@ -148,6 +148,23 @@ export function generatePDFs(rooteProdet) {
|
||||
});
|
||||
}
|
||||
|
||||
// 更新生产订单仓库字段(推送工序计划单入库)
|
||||
export function updateProductionOrders(rooteProdet, cangKuNum) {
|
||||
return request({
|
||||
url: '/system/route/updateProductionOrders',
|
||||
method: 'post',
|
||||
params: { rooteProdet, cangKuNum },
|
||||
});
|
||||
}
|
||||
|
||||
export function updateCgOrders(rooteProdet, cangKuNum) {
|
||||
return request({
|
||||
url: '/system/route/updateCgOrders',
|
||||
method: 'post',
|
||||
params: { rooteProdet, cangKuNum },
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 获取物料BOM信息,后端返回物料BOM信息集合
|
||||
export function getBomInfo(materialCode, materialName, productionOrderNo) {
|
||||
|
||||
@ -37,8 +37,16 @@ export function updateSafetyStock(data) {
|
||||
|
||||
// 删除安全库存
|
||||
export function delSafetyStock(id) {
|
||||
const ids = Array.isArray(id) ? id.join(',') : id
|
||||
// 优先尝试 REST 风格 DELETE,不支持则回退到 POST /remove
|
||||
return request({
|
||||
url: '/system/safetyStock/' + id,
|
||||
url: '/system/safetyStock/' + ids,
|
||||
method: 'delete'
|
||||
}).catch(() => {
|
||||
return request({
|
||||
url: '/system/safetyStock/remove',
|
||||
method: 'post',
|
||||
data: { ids }
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@ -65,12 +65,14 @@
|
||||
</el-form>
|
||||
|
||||
|
||||
<el-table v-loading="loading" :data="materialList" >
|
||||
<el-table v-loading="loading" :data="materialList" class="material-table">
|
||||
<!-- <el-table-column type="selection" width="55" align="center" />-->
|
||||
<el-table-column label="ID" width="60" align="center" prop="id" v-if="true"/>
|
||||
<el-table-column label="物料编号" align="center" prop="materialCode">
|
||||
<template slot-scope="scope">
|
||||
<span @click="handleClick(scope.row)"> {{ scope.row.materialCode }} </span>
|
||||
<el-link type="primary" :underline="true" class="material-code-link" @click="handleClick(scope.row)">
|
||||
{{ scope.row.materialCode }}
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物料名称" align="center" prop="materialName">
|
||||
@ -111,20 +113,32 @@
|
||||
@pagination="getList"
|
||||
/>
|
||||
<transition name="fade">
|
||||
<el-dialog :visible="dialogVisible" @close="dialogVisible = false" width="30%">
|
||||
<el-dialog :visible="dialogVisible" @close="dialogVisible = false" width="36%">
|
||||
<el-card class="box-card" v-loading="dialogLoading" element-loading-text="加载中..." element-loading-background="rgba(255, 255, 255, 0.8)">
|
||||
|
||||
<div slot="header" class="clearfix">
|
||||
<div slot="header" class="clearfix header-bar">
|
||||
<span class="dialog-title">库存信息</span>
|
||||
<span class="material-title">{{ inventoryData.materialCode }}</span>
|
||||
</div>
|
||||
<div class="dialog-body">
|
||||
<p class="dialog-item"><strong>物料编号:</strong>{{ inventoryData.materialCode }}</p>
|
||||
<p class="dialog-item"><strong>库存:</strong>{{ inventoryData.kucun }}</p>
|
||||
<p class="dialog-item"><strong>子项未领料量:</strong>{{ inventoryData.inventory }}</p>
|
||||
<p class="dialog-item"><strong>生产订单未入库:</strong>{{ inventoryData.stockName }}</p>
|
||||
<p class="dialog-item"><strong>采购订单未入库:</strong>{{ inventoryData.materialName }}</p>
|
||||
<p class="dialog-item"><strong>预计可用库存:</strong>{{ inventoryData.stockUnit }}</p>
|
||||
</div>
|
||||
<el-descriptions :column="2" border class="inventory-desc" size="small">
|
||||
<el-descriptions-item label="库存">
|
||||
<span :class="['val', inventoryData.kucun > 0 ? 'val-pos' : (inventoryData.kucun < 0 ? 'val-neg' : 'val-zero')]">{{ inventoryData.kucun }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="子项未领料量">
|
||||
<span class="val">{{ inventoryData.inventory }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="生产订单未入库">
|
||||
<span class="val">{{ inventoryData.stockName }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="采购订单未入库">
|
||||
<span class="val">{{ inventoryData.materialName }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="销售订单未出库">
|
||||
<span class="val">{{ inventoryData.salesOrder }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="预计可用库存">
|
||||
<span :class="['val', inventoryData.stockUnit > 0 ? 'val-pos' : (inventoryData.stockUnit < 0 ? 'val-neg' : 'val-zero')]">{{ inventoryData.stockUnit }}</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-card>
|
||||
</el-dialog>
|
||||
</transition>
|
||||
@ -186,6 +200,7 @@ export default {
|
||||
unitPrice: undefined,
|
||||
unit: undefined,
|
||||
flag: undefined,
|
||||
salesOrder:undefined
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
@ -210,6 +225,7 @@ export default {
|
||||
this.inventoryData.stockName = response.data.stockName;
|
||||
this.inventoryData.stockUnit = response.data.stockUnit;
|
||||
this.inventoryData.kucun = response.data.kucun;
|
||||
this.inventoryData.salesOrder = response.data.salesOrder;
|
||||
this.dialogVisible = true;
|
||||
})
|
||||
.catch(error => {
|
||||
@ -342,4 +358,52 @@ export default {
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.header-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.material-title {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: #409EFF;
|
||||
}
|
||||
.material-table .el-table__header .cell {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: #303133;
|
||||
}
|
||||
.material-table .el-table__body .cell {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.material-code-link {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
.inventory-desc {
|
||||
--label-bg: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);
|
||||
--label-color: #409EFF;
|
||||
}
|
||||
.inventory-desc .el-descriptions__label {
|
||||
background: var(--label-bg);
|
||||
color: var(--label-color);
|
||||
font-weight: 600;
|
||||
}
|
||||
.inventory-desc .el-descriptions__content {
|
||||
color: #303133;
|
||||
font-size: 13px;
|
||||
}
|
||||
.val {
|
||||
font-weight: 600;
|
||||
}
|
||||
.val-pos {
|
||||
color: #67C23A;
|
||||
}
|
||||
.val-neg {
|
||||
color: #F56C6C;
|
||||
}
|
||||
.val-zero {
|
||||
color: #909399;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -194,7 +194,7 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listProPlan2, listProPlanOverdue ,listProPlanExpirys} from '@/api/system/proPlan'
|
||||
import { listProPlan2, listProPlanOverdue ,listProPlanExpirys, getDesignerSummary } from '@/api/system/proPlan'
|
||||
import dayjs from 'dayjs';
|
||||
export default {
|
||||
data () {
|
||||
@ -222,7 +222,8 @@ export default {
|
||||
hoverPause: false
|
||||
}
|
||||
,
|
||||
timeGranularity: 'month'
|
||||
timeGranularity: 'month',
|
||||
designerSummary: []
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
@ -232,8 +233,10 @@ export default {
|
||||
await this.fetchOverdue();
|
||||
// 再拉取临期项目数据
|
||||
await this.ExpiryOverdue();
|
||||
// 最后拉取方案列表填充滚动表格(此时超期和临期数据已准备好)
|
||||
// 拉取方案列表填充滚动表格(此时超期和临期数据已准备好)
|
||||
this.fetchProPlanList();
|
||||
// 拉取设计人汇总数据(用于胶囊图)
|
||||
await this.fetchDesignerSummary();
|
||||
},
|
||||
mounted() {
|
||||
// 每分钟完全刷新一次数据
|
||||
@ -242,6 +245,7 @@ export default {
|
||||
await this.ExpiryOverdue();
|
||||
this.fetchProPlanList();
|
||||
this.initProjects();
|
||||
await this.fetchDesignerSummary();
|
||||
}, 60 * 1000); // 1分钟
|
||||
|
||||
// 启动轮播(当项目超过3条时)
|
||||
@ -374,29 +378,19 @@ export default {
|
||||
};
|
||||
},
|
||||
capsuleConfig() {
|
||||
const designers = this.getUniqueDesigners();
|
||||
const timeLabels = this.getTimeLabels(this.timeGranularity);
|
||||
const latestLabel = timeLabels[timeLabels.length - 1];
|
||||
|
||||
const countsByDesigner = new Map();
|
||||
designers.forEach(d => countsByDesigner.set(d, 0));
|
||||
|
||||
(this.tableConfig.data || []).forEach(row => {
|
||||
// 清理HTML标签
|
||||
const designer = row[1] ? row[1].replace(/<[^>]*>/g, '') : '';
|
||||
const dateStr = row[4] ? row[4].replace(/<[^>]*>/g, '') : '';
|
||||
|
||||
if (!designer || !dateStr || designer === '-') return;
|
||||
const label = this.formatTimeLabel(dateStr, this.timeGranularity);
|
||||
if (label === latestLabel && countsByDesigner.has(designer)) {
|
||||
countsByDesigner.set(designer, countsByDesigner.get(designer) + 1);
|
||||
}
|
||||
});
|
||||
|
||||
const data = Array.from(countsByDesigner.entries())
|
||||
.map(([name, value]) => ({ name, value }))
|
||||
const list = Array.isArray(this.designerSummary) ? this.designerSummary : [];
|
||||
const key =
|
||||
this.timeGranularity === 'week'
|
||||
? 'weeklyCount'
|
||||
: this.timeGranularity === 'year'
|
||||
? 'yearlyCount'
|
||||
: 'monthlyCount';
|
||||
const data = list
|
||||
.map(item => ({
|
||||
name: item.designer || item.name || '-',
|
||||
value: Number(item[key] ?? 0)
|
||||
}))
|
||||
.sort((a, b) => b.value - a.value);
|
||||
|
||||
return {
|
||||
data,
|
||||
colors: ['#ef4444', '#f59e0b', '#22c55e', '#3b82f6', '#8b5cf6', '#06b6d4', '#ea580c'],
|
||||
@ -676,6 +670,17 @@ export default {
|
||||
console.error('fetchProPlanList error:', e);
|
||||
}
|
||||
},
|
||||
// 拉取设计人汇总数据
|
||||
async fetchDesignerSummary() {
|
||||
try {
|
||||
const res = await getDesignerSummary();
|
||||
const rows = res?.rows || res?.data || res || [];
|
||||
this.designerSummary = Array.isArray(rows) ? rows : [];
|
||||
} catch (e) {
|
||||
console.error('fetchDesignerSummary error:', e);
|
||||
this.designerSummary = [];
|
||||
}
|
||||
},
|
||||
getUniqueDesigners() {
|
||||
const set = new Set();
|
||||
|
||||
|
||||
@ -228,6 +228,7 @@
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
:pageSizes="[50, 100, 1000, 5000]"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
@ -362,7 +363,7 @@ export default {
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 100,
|
||||
pageSize: 1000,
|
||||
partNumber: undefined,
|
||||
fname: undefined,
|
||||
fnumber: undefined,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -39,6 +39,7 @@
|
||||
<el-select v-model="queryParams.processStatus" placeholder="请选择方案状态" clearable>
|
||||
<el-option label="未开始" value="0" />
|
||||
<el-option label="已完成" value="1" />
|
||||
<el-option label="已取消" value="2" />
|
||||
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -100,7 +101,14 @@
|
||||
<el-table-column label="方案编码" align="center" prop="projectCode" />
|
||||
<el-table-column label="设计人" align="center" prop="designer">
|
||||
<template slot-scope="scope">
|
||||
<dict-tag :options="dict.type.plan_proer" :value="scope.row.designer"/>
|
||||
<div>
|
||||
<el-tag
|
||||
v-for="n in getDesignerLabels(scope.row.designer)"
|
||||
:key="n"
|
||||
size="mini"
|
||||
style="margin-right:4px"
|
||||
>{{ n }}</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="方案备注" align="center" prop="remark" />
|
||||
@ -156,13 +164,13 @@
|
||||
<el-input v-model="form.projectCode" placeholder="请输入方案编码" />
|
||||
</el-form-item>
|
||||
<el-form-item label="设计人" prop="designer">
|
||||
<el-select v-model="form.designer" placeholder="请选择设计人">
|
||||
<el-select v-model="form.designer" multiple collapse-tags placeholder="请选择设计人" clearable>
|
||||
<el-option
|
||||
v-for="dict in dict.type.plan_proer"
|
||||
:key="dict.value"
|
||||
:label="dict.label"
|
||||
:value="dict.value"
|
||||
></el-option>
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="方案备注" prop="remark">
|
||||
@ -188,6 +196,7 @@
|
||||
<el-select v-model="form.processStatus" placeholder="请选择方案状态">
|
||||
<el-option label="未开始" value="0" />
|
||||
<el-option label="已完成" value="1" />
|
||||
<el-option label="已取消" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -330,7 +339,8 @@ export default {
|
||||
const id = row.id || this.ids
|
||||
getProPlan(id).then(response => {
|
||||
this.loading = false;
|
||||
this.form = response.data;
|
||||
this.form = response.data || {};
|
||||
this.form.designer = this.parseDesignerArray(this.form.designer);
|
||||
this.open = true;
|
||||
this.title = "修改方案管理";
|
||||
});
|
||||
@ -341,7 +351,13 @@ export default {
|
||||
if (valid) {
|
||||
this.buttonLoading = true;
|
||||
if (this.form.id != null) {
|
||||
updateProPlan(this.form).then(response => {
|
||||
const payload = {
|
||||
...this.form,
|
||||
designer: Array.isArray(this.form.designer)
|
||||
? this.form.designer.join(",")
|
||||
: this.form.designer
|
||||
};
|
||||
updateProPlan(payload).then(response => {
|
||||
this.$modal.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
@ -349,7 +365,13 @@ export default {
|
||||
this.buttonLoading = false;
|
||||
});
|
||||
} else {
|
||||
addProPlan(this.form).then(response => {
|
||||
const payload = {
|
||||
...this.form,
|
||||
designer: Array.isArray(this.form.designer)
|
||||
? this.form.designer.join(",")
|
||||
: this.form.designer
|
||||
};
|
||||
addProPlan(payload).then(response => {
|
||||
this.$modal.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
@ -380,6 +402,25 @@ export default {
|
||||
this.download('system/proPlan/export', {
|
||||
...this.queryParams
|
||||
}, `proPlan_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
parseDesignerArray(v) {
|
||||
if (!v) return [];
|
||||
if (Array.isArray(v)) return v.filter(Boolean).map(x => String(x));
|
||||
if (typeof v === "string") {
|
||||
return v.split(",").map(s => s.trim()).filter(s => s.length > 0);
|
||||
}
|
||||
return [];
|
||||
},
|
||||
getDesignerLabels(value) {
|
||||
const opts = (this.dict && this.dict.type && this.dict.type.plan_proer) || [];
|
||||
const codes = this.parseDesignerArray(value);
|
||||
return codes.map(c => {
|
||||
const m = opts.find(o =>
|
||||
String(o.value) === String(c) ||
|
||||
String((o.dictValue || "")) === String(c)
|
||||
) || null;
|
||||
return m ? (m.label || m.dictLabel || c) : c;
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -324,10 +324,10 @@ export default {
|
||||
...this.searchParams,
|
||||
text: this.options.find(option => option.value === this.value).label
|
||||
};
|
||||
|
||||
|
||||
// 调用后端API进行查询
|
||||
listProcedureGX(params).then(response => {
|
||||
// 处理返回的数据
|
||||
// 处理返回的数据
|
||||
if (response && Array.isArray(response)) {
|
||||
// ...
|
||||
// 这里的数据处理逻辑和selectChange方法中的类似
|
||||
|
||||
@ -84,6 +84,7 @@
|
||||
:model="n"
|
||||
ref="ruleForm"
|
||||
size="mini"
|
||||
:key="i"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-form-item prop="key1">
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<el-form :model="queryParams">
|
||||
<el-form-item label="项目令号" prop="routeDescription">
|
||||
<el-select v-model="queryParams.routeDescription" filterable remote :remote-method="handleQuery1"
|
||||
placeholder="请输入令号" clearable :loading="loading">
|
||||
placeholder="请输入令号" clearable :loading="loading">
|
||||
<el-option v-for="item in projectCodes" :key="item" :label="item" :value="item"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -13,81 +13,60 @@
|
||||
<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-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"
|
||||
v-hasPermi="['system:route:add']">新增
|
||||
</el-button>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
|
||||
v-hasPermi="['system:route:edit']">修改
|
||||
</el-button>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
|
||||
v-hasPermi="['system:route:remove']">删除
|
||||
</el-button>
|
||||
</el-col>-->
|
||||
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-download" size="mini" @click="handleExport"
|
||||
v-hasPermi="['system:route:export']">导出
|
||||
v-hasPermi="['system:route:export']">导出
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="el-icon-upload" size="mini" @click="handleImport"
|
||||
v-hasPermi="['system:route:importRoute']">导入工艺
|
||||
v-hasPermi="['system:route:importRoute']">导入工艺
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-time" size="mini" @click="handleImportTime"
|
||||
v-hasPermi="['system:route:importDataTime']">导入时间
|
||||
v-hasPermi="['system:route:importDataTime']">导入时间
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="info" plain icon="el-icon-share" size="mini" @click="pushRouteBom"
|
||||
v-hasPermi="['system:route:pushRouteBom']">推送工艺
|
||||
v-hasPermi="['system:route:pushRouteBom']">推送工艺
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-input
|
||||
v-model="routeGroupName"
|
||||
placeholder="请输入推送分组"
|
||||
size="mini"
|
||||
clearable
|
||||
/>
|
||||
<el-input v-model="routeGroupName" placeholder="请输入推送分组" size="mini" clearable />
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="el-icon-edit" size="mini" :disabled="multiple" @click="updateProcessPlan"
|
||||
v-hasPermi="['system:route:updateProcessPlan']">更新计划时间
|
||||
v-hasPermi="['system:route:updateProcessPlan']">更新计划时间
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="el-icon-setting" size="mini" @click="updateProcesTime"
|
||||
v-hasPermi="['system:route:updateProcesTime']">更新生产订单
|
||||
v-hasPermi="['system:route:updateProcesTime']">更新生产订单
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-document" size="mini" @click="generatePDFs1"
|
||||
v-hasPermi="['system:route:generatePDFs']">生成PDF
|
||||
v-hasPermi="['system:route:generatePDFs']">生成PDF
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="el-icon-warning" size="mini" @click="getKindeeExcel"
|
||||
v-hasPermi="['system:route:getKindeeExcel']">获取标准工艺
|
||||
v-hasPermi="['system:route:getKindeeExcel']">获取标准工艺
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" plain icon="el-icon-warning" size="mini" @click="getAllRouteAndUse"
|
||||
v-hasPermi="['system:route:getAllRouteAndUse']">获取全部工艺
|
||||
v-hasPermi="['system:route:getAllRouteAndUse']">获取全部工艺
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
||||
@ -95,32 +74,31 @@
|
||||
|
||||
<el-form :inline="true" :model="form" ref="ruleForm" size="mini" :rules="rules">
|
||||
<el-table v-if="showtable" v-loading="loading" row-key="id" ref="tree" v-drag:[config]="form.routeList"
|
||||
:tree-props="{ children: 'children' }" :data="form.routeList" stripe :row-class-name="tableRowClassName"
|
||||
border max-height="680px" @cell-click="cellhand" :default-expand-all="true"
|
||||
@selection-change="handleSelectionChange">
|
||||
:tree-props="{ children: 'children' }" :data="form.routeList" stripe :row-class-name="tableRowClassName" border
|
||||
max-height="680px" @cell-click="cellhand" :default-expand-all="true" @selection-change="handleSelectionChange">
|
||||
|
||||
<el-table-column type="selection" width="55" align="center"/>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<!-- <el-table-column label="主键ID" align="center" prop="id" v-if="true"/>-->
|
||||
<el-table-column label="操作" width="55" align="center">
|
||||
<template slot-scope="props">
|
||||
<!-- <el-button type="text" icon="el-icon-check" v-if="scope.row.id < 0" @click="onSaveChild()" /> -->
|
||||
<!-- <fromed v-if="props.row.parentId" /> -->
|
||||
<!-- {{props.row.materialCode}} -->
|
||||
<el-button v-if="props.row.parentId" size="mini" class="handle" icon="el-icon el-icon-rank"/>
|
||||
<el-button v-if="props.row.parentId" size="mini" class="handle" icon="el-icon el-icon-rank" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="项目令号" align="center">
|
||||
<template slot-scope="scope">
|
||||
<template slot-scope="scope">升降台
|
||||
<router-link :to="'/route1/' + scope.row.routeDescription" type="primary" :underline="false">{{
|
||||
scope.row.routeDescription }}</router-link>
|
||||
</template>
|
||||
</el-table-column> -->
|
||||
<el-table-column label="物料编码" width="120" align="center" prop="materialCode" fixed="left"/>
|
||||
<el-table-column label="名称" width="120" align="center" prop="materialName" fixed="left"/>
|
||||
<el-table-column label="物料编码" width="120" align="center" prop="materialCode" fixed="left" />
|
||||
<el-table-column label="名称" width="120" align="center" prop="materialName" fixed="left" />
|
||||
|
||||
<el-table-column label="材质" width="80" align="center" prop="material"/>
|
||||
<el-table-column label="单重" width="60" align="center" prop="discWeight"/>
|
||||
<el-table-column label="材质" width="80" align="center" prop="material" />
|
||||
<el-table-column label="单重" width="60" align="center" prop="discWeight" />
|
||||
<el-table-column label="单台数" width="60" align="center" prop="unitQuantity">
|
||||
<template slot-scope="scope">
|
||||
<span :style="{
|
||||
@ -131,24 +109,20 @@
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="本批数" width="60" align="center" prop="batchQuantity"/>
|
||||
<el-table-column label="本批数" width="60" align="center" prop="batchQuantity" />
|
||||
<el-table-column label="重要程度" width="80" align="center" prop="stateImportance" />
|
||||
|
||||
<!--
|
||||
<el-table-column label="材料BOM物料编码" width="220"align="center" prop="ra wMaterialCode" />
|
||||
<el-table-column label="材料BOM物料名称"width="220" align="center" prop="rawMaterialName" />
|
||||
<el-table-column label="用量"width="60"align="center" prop="discUsage" />
|
||||
<el-table-column label="单位"width="60" align="center" prop="bomUnit" />-->
|
||||
<el-table-column label="工序号" width="60" align="center" prop="processNo"/>
|
||||
<el-table-column label="工序号" width="60" align="center" prop="processNo" />
|
||||
<el-table-column label="工作中心" width="96" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="scope.row.isEdit" :prop="'routeList.' + scope.$index + '.workCenter'">
|
||||
<el-select v-model="scope.row.workCenter" placeholder="请选择工作中心" clearable>
|
||||
<el-option v-for="dict in dict.type.work_center" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value"/>
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>
|
||||
<dict-tag :options="dict.type.work_center" :value="scope.row.workCenter"/>
|
||||
<dict-tag :options="dict.type.work_center" :value="scope.row.workCenter" />
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -156,10 +130,9 @@
|
||||
<el-table-column label="工序名称" width="160" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="scope.row.id < 0 || scope.row.isEdit"
|
||||
:prop="'routeList.' + scope.$index + '.processName'">
|
||||
:prop="'routeList.' + scope.$index + '.processName'">
|
||||
<el-select v-model="scope.row.processName" filterable remote :remote-method="handleQuery3"
|
||||
placeholder="请输入工序名称" clearable :loading="loading"
|
||||
@change="handleProcessNameChange(scope)">
|
||||
placeholder="请输入工序名称" clearable :loading="loading" @change="handleProcessNameChange(scope)">
|
||||
<el-option v-for="item in processName" :key="item" :label="item" :value="item"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -170,7 +143,7 @@
|
||||
<el-table-column label="序说明" width="300" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="scope.row.id < 0 || scope.row.isEdit"
|
||||
:prop="'routeList.' + scope.$index + '.processDescription'">
|
||||
:prop="'routeList.' + scope.$index + '.processDescription'">
|
||||
<el-input v-model="scope.row.processDescription"></el-input>
|
||||
</el-form-item>
|
||||
<span v-else>{{ scope.row.processDescription }}</span>
|
||||
@ -194,20 +167,20 @@
|
||||
<el-table-column label="活动时长" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="scope.row.id < 0 || scope.row.isEdit"
|
||||
:prop="'routeList.' + scope.$index + '.activityDuration'">
|
||||
:prop="'routeList.' + scope.$index + '.activityDuration'">
|
||||
<el-input v-model="scope.row.activityDuration"></el-input>
|
||||
</el-form-item>
|
||||
<span v-else>{{ scope.row.activityDuration }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="活动单位" align="center" prop="activityUnit"/>
|
||||
<el-table-column label="活动单位" align="center" prop="activityUnit" />
|
||||
<el-table-column label="序开始时间" align="center" prop="xuStartTime" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="scope.row.id < 0 || scope.row.isEdit"
|
||||
:prop="'routeList.' + scope.$index + '.xuStartTime'">
|
||||
:prop="'routeList.' + scope.$index + '.xuStartTime'">
|
||||
<el-date-picker v-model="scope.row.xuStartTime" type="date" placeholder="选择序开始时间"
|
||||
value-format="yyyy-MM-dd" format="yyyy-MM-dd">
|
||||
value-format="yyyy-MM-dd" format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<span v-else>{{ parseTime(scope.row.xuStartTime, '{y}-{m}-{d}') }}</span>
|
||||
@ -216,17 +189,14 @@
|
||||
<el-table-column label="序结束时间" align="center" prop="xuEndTime" width="100">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="scope.row.id < 0 || scope.row.isEdit"
|
||||
:prop="'routeList.' + scope.$index + '.xuEndTime'">
|
||||
<el-date-picker v-model="scope.row.xuEndTime" type="date" placeholder="选择序结束时间"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
:prop="'routeList.' + scope.$index + '.xuEndTime'">
|
||||
<el-date-picker v-model="scope.row.xuEndTime" type="date" placeholder="选择序结束时间" value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<span v-else>{{ parseTime(scope.row.xuEndTime, '{y}-{m}-{d}') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!-- //<el-table-column label="单位" align="center" prop="bomUnit" /> -->
|
||||
<!-- <el-table-column label="单台数量" align="center" prop="unitQuantity" /> -->
|
||||
|
||||
<el-table-column label="计划开始时间" align="center" prop="planStartTime" width="180">
|
||||
<template slot-scope="scope">
|
||||
@ -240,13 +210,13 @@
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column class="maxWidth" label="操作" width="220" fixed="right" align="center"
|
||||
class-name="small-padding fixed-width">
|
||||
class-name="small-padding fixed-width">
|
||||
<template slot-scope="scope">
|
||||
<el-button class="btn" size="mini" @click="onAddChild(scope)" v-if="!scope.row.parentId">
|
||||
添加工艺
|
||||
</el-button>
|
||||
<el-button class="btn" size="mini" type="success" @click="onSave(scope)"
|
||||
v-if="!scope.row.parentId && showParentSaveBtn === scope.row.id">
|
||||
v-if="!scope.row.parentId && showParentSaveBtn === scope.row.id">
|
||||
保存工艺
|
||||
</el-button>
|
||||
<template v-else-if="scope.row.parentId">
|
||||
@ -261,11 +231,11 @@
|
||||
<template v-else>
|
||||
<template v-if="scope.row.id > 0">
|
||||
<el-button class="btn" size="mini" type="primary" @click="handleRowEdit(scope)"
|
||||
v-hasPermi="['system:route:edit']">
|
||||
v-hasPermi="['system:route:edit']">
|
||||
修改
|
||||
</el-button>
|
||||
<el-button class="btn" size="mini" type="danger" @click="handleDelete(scope)"
|
||||
v-hasPermi="['system:route:remove']">
|
||||
v-hasPermi="['system:route:remove']">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
@ -282,7 +252,7 @@
|
||||
</el-form>
|
||||
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"/>
|
||||
@pagination="getList" />
|
||||
|
||||
<el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
|
||||
@ -290,12 +260,12 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物料编码" prop="materialCode">
|
||||
<el-input v-model="form.materialCode" placeholder="请输入物料编码"/>
|
||||
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="物料名称" prop="materialName">
|
||||
<el-input v-model="form.materialName" placeholder="请输入物料名称"/>
|
||||
<el-input v-model="form.materialName" placeholder="请输入物料名称" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -303,12 +273,12 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="材质" prop="material">
|
||||
<el-input v-model="form.material" placeholder="请输入材质"/>
|
||||
<el-input v-model="form.material" placeholder="请输入材质" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单重" prop="discWeight">
|
||||
<el-input v-model="form.discWeight" placeholder="请输入单重"/>
|
||||
<el-input v-model="form.discWeight" placeholder="请输入单重" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -328,7 +298,7 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单台数量" prop="unitQuantity">
|
||||
<el-input-number v-model="form.unitQuantity" :min="0" placeholder="请输入单台数量"/>
|
||||
<el-input-number v-model="form.unitQuantity" :min="0" placeholder="请输入单台数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -336,12 +306,12 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="本批数量" prop="batchQuantity">
|
||||
<el-input-number v-model="form.batchQuantity" :min="0" placeholder="请输入本批数量"/>
|
||||
<el-input-number v-model="form.batchQuantity" :min="0" placeholder="请输入本批数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="首批数量" prop="firstBatchQuantity">
|
||||
<el-input-number v-model="form.firstBatchQuantity" :min="0" placeholder="请输入首批数量"/>
|
||||
<el-input-number v-model="form.firstBatchQuantity" :min="0" placeholder="请输入首批数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -365,7 +335,7 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工序名称" prop="processName">
|
||||
<el-select v-model="form.processName" filterable remote :remote-method="handleQuery3"
|
||||
placeholder="请输入工序名称" clearable :loading="loading" @change="handleProcessNameChange">
|
||||
placeholder="请输入工序名称" clearable :loading="loading" @change="handleProcessNameChange">
|
||||
<el-option v-for="item in processName" :key="item" :label="item" :value="item"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@ -375,7 +345,7 @@
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="工序说明" prop="processDescription">
|
||||
<el-input type="textarea" v-model="form.processDescription" placeholder="请输入工序说明"/>
|
||||
<el-input type="textarea" v-model="form.processDescription" placeholder="请输入工序说明" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -392,7 +362,7 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="活动时长" prop="activityDuration">
|
||||
<el-input v-model="form.activityDuration" placeholder="请输入活动时长"/>
|
||||
<el-input v-model="form.activityDuration" placeholder="请输入活动时长" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@ -400,17 +370,15 @@
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="序开始时间" prop="xuStartTime">
|
||||
<el-date-picker v-model="form.xuStartTime" type="date" placeholder="选择序开始时间"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
<el-date-picker v-model="form.xuStartTime" type="date" placeholder="选择序开始时间" value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="序结束时间" prop="xuEndTime">
|
||||
<el-date-picker v-model="form.xuEndTime" type="date" placeholder="选择序结束时间"
|
||||
value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
<el-date-picker v-model="form.xuEndTime" type="date" placeholder="选择序结束时间" value-format="yyyy-MM-dd"
|
||||
format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -424,13 +392,13 @@
|
||||
<!-- 导入导入对话框 -->
|
||||
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
|
||||
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
|
||||
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
|
||||
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
|
||||
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip text-center" slot="tip">
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
<el-checkbox v-model="upload.updateSupport"/>
|
||||
<el-checkbox v-model="upload.updateSupport" />
|
||||
是否更新已经存在的物料数据
|
||||
</div>
|
||||
<span>仅允许导入xls、xlsx格式文件。</span>
|
||||
@ -447,8 +415,8 @@
|
||||
|
||||
<el-dialog :title="timeUpload.title" :visible.sync="timeUpload.open" width="400px" append-to-body>
|
||||
<el-upload ref="timeUpload" :limit="1" accept=".xlsx, .xls" :headers="timeUpload.headers" :action="timeUpload.url"
|
||||
:disabled="timeUpload.isUploading" :on-progress="handleTimeFileUploadProgress"
|
||||
:on-success="handleTimeFileSuccess" :auto-upload="false" drag>
|
||||
:disabled="timeUpload.isUploading" :on-progress="handleTimeFileUploadProgress"
|
||||
:on-success="handleTimeFileSuccess" :auto-upload="false" drag>
|
||||
<i class="el-icon-upload"></i>
|
||||
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip text-center" slot="tip">
|
||||
@ -461,7 +429,8 @@
|
||||
</div>
|
||||
</el-dialog>
|
||||
<!-- 抽屉 -->
|
||||
<el-drawer title="BOM信息" :visible.sync="BOMpop" :before-close="bomClose" :size="1100" :destroy-on-close="true" :modal="false">
|
||||
<el-drawer title="BOM信息" :visible.sync="BOMpop" :before-close="bomClose" :size="1100" :destroy-on-close="true"
|
||||
:modal="false">
|
||||
<div style="padding: 20px;">
|
||||
<!-- BOM信息头部 -->
|
||||
<div class="bom-header">
|
||||
@ -492,13 +461,13 @@
|
||||
|
||||
<!-- BOM数据表格 -->
|
||||
<el-table :data="filteredBomData" stripe max-height="400px" border v-loading="bomLoading"
|
||||
@selection-change="handleBomSelectionChange" element-loading-text="加载中..."
|
||||
element-loading-spinner="el-icon-loading">
|
||||
<el-table-column type="selection" width="55" align="center"/>
|
||||
<el-table-column label="生产令号" width="150" align="center" prop="projectNumber"/>
|
||||
<el-table-column label="物料编码" width="200" align="center" prop="materialCode" show-overflow-tooltip/>
|
||||
<el-table-column label="物料名称" width="200" align="center" prop="materialName" show-overflow-tooltip/>
|
||||
<el-table-column label="材质" width="70" align="center" prop="materialType"/>
|
||||
@selection-change="handleBomSelectionChange" element-loading-text="加载中..."
|
||||
element-loading-spinner="el-icon-loading">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="生产令号" width="150" align="center" prop="projectNumber" />
|
||||
<el-table-column label="物料编码" width="200" align="center" prop="materialCode" show-overflow-tooltip />
|
||||
<el-table-column label="物料名称" width="200" align="center" prop="materialName" show-overflow-tooltip />
|
||||
<el-table-column label="材质" width="70" align="center" prop="materialType" />
|
||||
|
||||
<el-table-column label="库存" width="88" align="center" prop="singleWeight ">
|
||||
<template slot-scope="scope">
|
||||
@ -510,12 +479,11 @@
|
||||
<span>{{ scope.row.quantity || '0' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位" width="88" align="center" prop="unit"/>
|
||||
<el-table-column label="单位" width="88" align="center" prop="unit" />
|
||||
<el-table-column label="操作" align="center" width="150">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleBomEdit(scope.row)">修改</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete"
|
||||
@click="handleBomDelete(scope.row)">删除
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleBomDelete(scope.row)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -530,9 +498,8 @@
|
||||
<!-- 物料名称 - 支持搜索或手动输入 -->
|
||||
<el-form-item label="物料名称" prop="materialName">
|
||||
<el-autocomplete v-model="bomForm.materialName" :fetch-suggestions="handleMaterialSearch"
|
||||
:trigger-on-focus="false" @select="handleMaterialSelect" placeholder="请输入物料名称"
|
||||
clearable
|
||||
popper-class="material-autocomplete-dropdown">
|
||||
:trigger-on-focus="false" @select="handleMaterialSelect" placeholder="请输入物料名称" clearable
|
||||
popper-class="material-autocomplete-dropdown">
|
||||
<template slot-scope="{ item }">
|
||||
<div class="material-suggestion-item">
|
||||
<div class="material-name">{{ item.materialName }}</div>
|
||||
@ -571,14 +538,12 @@
|
||||
|
||||
<!-- 当前库存 - 允许手动输入 -->
|
||||
<el-form-item label="当前库存" prop="stock">
|
||||
<el-input-number v-model="bomForm.stock" :min="0" :precision="2"
|
||||
placeholder="请输入库存"></el-input-number>
|
||||
<el-input-number v-model="bomForm.stock" :min="0" :precision="2" placeholder="请输入库存"></el-input-number>
|
||||
</el-form-item>
|
||||
|
||||
<!-- 用量 -->
|
||||
<el-form-item label="用量" prop="quantity">
|
||||
<el-input-number v-model="bomForm.quantity" :min="0" :precision="2"
|
||||
placeholder="请输入用量"></el-input-number>
|
||||
<el-input-number v-model="bomForm.quantity" :min="0" :precision="2" placeholder="请输入用量"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@ -593,15 +558,13 @@
|
||||
<h3>工艺路线信息</h3>
|
||||
</div>
|
||||
<el-table :data="processRoutes" stripe border v-loading="processLoading">
|
||||
<el-table-column label="工艺编号" prop="fnumber" width="120" align="center"/>
|
||||
<el-table-column label="项目令号" prop="project_code" width="180" align="center"/>
|
||||
<el-table-column label="物料编码" prop="materialCode" fixed="left" width="140" align="center"/>
|
||||
<el-table-column label="物料名称" prop="materialName" fixed="left" min-width="140" align="center"/>
|
||||
<el-table-column label="工艺编号" prop="fnumber" width="120" align="center" />
|
||||
<el-table-column label="项目令号" prop="project_code" width="180" align="center" />
|
||||
<el-table-column label="物料编码" prop="materialCode" fixed="left" width="140" align="center" />
|
||||
<el-table-column label="物料名称" prop="materialName" fixed="left" min-width="140" align="center" />
|
||||
<el-table-column label="操作" width="120" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="text"
|
||||
@click="handleViewRoute(scope.row)"
|
||||
<el-button @click="handleViewRoute(scope.row)"
|
||||
:type="selectedRouteId === scope.row.id ? 'success' : 'primary'">
|
||||
{{ selectedRouteId === scope.row.id ? '查看中' : '查看' }}
|
||||
</el-button>
|
||||
@ -615,11 +578,11 @@
|
||||
<h4>工序信息 - {{ selectedRoute.fnumber }}</h4>
|
||||
</div>
|
||||
<el-table :data="currentProcessList" stripe border max-height="300px">
|
||||
<el-table-column label="工序号" prop="processNo" width="80" align="center"/>
|
||||
<el-table-column label="工作中心" prop="workCenter" width="120" align="center"/>
|
||||
<el-table-column label="工序名称" prop="processName" width="120" align="center"/>
|
||||
<el-table-column label="工序说明" prop="processDescription" min-width="200" show-overflow-tooltip/>
|
||||
<el-table-column label="工序控制" prop="processControl" width="120" align="center"/>
|
||||
<el-table-column label="工序号" prop="processNo" width="80" align="center" />
|
||||
<el-table-column label="工作中心" prop="workCenter" width="120" align="center" />
|
||||
<el-table-column label="工序名称" prop="processName" width="120" align="center" />
|
||||
<el-table-column label="工序说明" prop="processDescription" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column label="工序控制" prop="processControl" width="120" align="center" />
|
||||
<el-table-column label="活动时长" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
{{ scope.row.activityDuration }} {{ scope.row.activityUnit }}
|
||||
@ -640,14 +603,14 @@ import {
|
||||
addRoute,
|
||||
updateRoute,
|
||||
getDistinctProjectCodes,
|
||||
updateProcessPlan, generatePDFs, updateBom, addBom, deleteBom, getKindeeExcel,getAllRouteAndUse,updateProcesTime
|
||||
updateProcessPlan, generatePDFs, updateBom, addBom, deleteBom, getKindeeExcel, getAllRouteAndUse, updateProcesTime
|
||||
|
||||
} from "@/api/system/route";
|
||||
import {getToken} from "../../../utils/auth";
|
||||
import { getToken } from "../../../utils/auth";
|
||||
import Fromed from './fromed'
|
||||
import Bomfrom from './bomfrom'
|
||||
import {getProcessInfoList, pushRouteBom, onSave, getBomInfo, getProcessRouteList} from "@/api/system/route";
|
||||
import {listMaterial} from "@/api/system/material";
|
||||
import { getProcessInfoList, pushRouteBom, onSave, getBomInfo, getProcessRouteList } from "@/api/system/route";
|
||||
import { listMaterial } from "@/api/system/material";
|
||||
|
||||
import dict from "@/utils/dict";
|
||||
import DictData from "@/components/DictData";
|
||||
@ -662,7 +625,7 @@ export default {
|
||||
Bomfrom
|
||||
},
|
||||
props: {
|
||||
params:{},
|
||||
params: {},
|
||||
showdel: {
|
||||
type: Boolean,
|
||||
default: true
|
||||
@ -680,7 +643,7 @@ export default {
|
||||
open: false,
|
||||
title: "",
|
||||
isUploading: false,
|
||||
headers: {Authorization: "Bearer " + getToken()},
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
url: process.env.VUE_APP_BASE_API + "/system/route/importDataTime"
|
||||
},
|
||||
materialOptions: [], // 用于存储物料信息
|
||||
@ -738,6 +701,7 @@ export default {
|
||||
routeDescription: [],
|
||||
materialCode: undefined,
|
||||
materialName: undefined,
|
||||
stateImportance: undefined,
|
||||
bomUnit: undefined,
|
||||
processNo: undefined,
|
||||
workCenter: undefined,
|
||||
@ -847,7 +811,7 @@ export default {
|
||||
// 是否更新已经存在的用户数据
|
||||
updateSupport: 0,
|
||||
// 设置上传的请求头部
|
||||
headers: {Authorization: "Bearer " + getToken()},
|
||||
headers: { Authorization: "Bearer " + getToken() },
|
||||
// 上传的地址
|
||||
url: process.env.VUE_APP_BASE_API + "/system/route/importData"
|
||||
},
|
||||
@ -855,25 +819,25 @@ export default {
|
||||
// 表单校验
|
||||
rules: {
|
||||
id: [
|
||||
{required: true, message: "主键ID不能为空", trigger: "blur"}
|
||||
{ required: true, message: "主键ID不能为空", trigger: "blur" }
|
||||
],
|
||||
routeDescription: [
|
||||
{required: true, message: "工艺路线描述不能为空", trigger: "blur"}
|
||||
{ required: true, message: "工艺路线描述不能为空", trigger: "blur" }
|
||||
],
|
||||
materialCode: [
|
||||
{required: true, message: "物料编码不能为空", trigger: "blur"}
|
||||
{ required: true, message: "物料编码不能为空", trigger: "blur" }
|
||||
],
|
||||
materialName: [
|
||||
{required: true, message: "物料名称不能为空", trigger: "blur"}
|
||||
{ required: true, message: "物料名称不能为空", trigger: "blur" }
|
||||
],
|
||||
processControl: [ // 添加工序控制码的验证
|
||||
{required: true, message: "工序控制码不能为空", trigger: "blur"}
|
||||
{ required: true, message: "工序控制码不能为空", trigger: "blur" }
|
||||
],
|
||||
processName: [ // 添加工序名称的验证
|
||||
{required: true, message: "工序名称不能为空", trigger: "blur"}
|
||||
{ required: true, message: "工序名称不能为空", trigger: "blur" }
|
||||
],
|
||||
activityDuration: [ // 添加活动时长的验证
|
||||
{required: true, message: "活动时长不能为空", trigger: "blur"}
|
||||
{ required: true, message: "活动时长不能为空", trigger: "blur" }
|
||||
]
|
||||
},
|
||||
bomDialogVisible: false,
|
||||
@ -892,31 +856,31 @@ export default {
|
||||
},
|
||||
bomRules: {
|
||||
materialName: [
|
||||
{required: true, message: '请输入物料名称', trigger: 'blur'}
|
||||
{ required: true, message: '请输入物料名称', trigger: 'blur' }
|
||||
],
|
||||
materialCode: [
|
||||
{required: true, message: '请输入物料编码', trigger: 'blur'}
|
||||
{ required: true, message: '请输入物料编码', trigger: 'blur' }
|
||||
],
|
||||
materialType: [
|
||||
{required: true, message: '请选择材质', trigger: 'change'}
|
||||
{ required: true, message: '请选择材质', trigger: 'change' }
|
||||
],
|
||||
unit: [
|
||||
{required: true, message: '请选择单位', trigger: 'change'}
|
||||
{ required: true, message: '请选择单位', trigger: 'change' }
|
||||
],
|
||||
quantity: [
|
||||
{required: true, message: '请输入用量', trigger: 'blur'}
|
||||
{ required: true, message: '请输入用量', trigger: 'blur' }
|
||||
],
|
||||
projectNumber: [
|
||||
{required: true, message: '项目令号不能为空', trigger: 'blur'}
|
||||
{ required: true, message: '项目令号不能为空', trigger: 'blur' }
|
||||
],
|
||||
parentMaterialCode: [
|
||||
{required: true, message: '父级物料编码不能为空', trigger: 'blur'}
|
||||
{ required: true, message: '父级物料编码不能为空', trigger: 'blur' }
|
||||
],
|
||||
parentMaterialName: [
|
||||
{required: true, message: '父级物料名称不能为空', trigger: 'blur'}
|
||||
{ required: true, message: '父级物料名称不能为空', trigger: 'blur' }
|
||||
],
|
||||
stock: [
|
||||
{required: true, message: '库存不能为空', trigger: 'blur'}
|
||||
{ required: true, message: '库存不能为空', trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
selectedBomRows: [],
|
||||
@ -983,76 +947,76 @@ export default {
|
||||
methods: {
|
||||
// dict,
|
||||
getKindeeExcel() {
|
||||
// 显示加载状态
|
||||
const loadingInstance = this.$loading({
|
||||
lock: true,
|
||||
text: '正在获取已投放的工艺数据...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(255, 255, 255, 0.7)',
|
||||
});
|
||||
this.loading = true;
|
||||
|
||||
// 调用 reset 方法,重置表单或状态
|
||||
this.reset();
|
||||
|
||||
// 获取生产订单号
|
||||
const rooteProdet = this.params.productionOrderNo;
|
||||
|
||||
// 调用 getKindeeExcel 方法
|
||||
getKindeeExcel(rooteProdet)
|
||||
.then(data => {
|
||||
// 处理返回的数据
|
||||
this.$message.success('获取工艺成功!');
|
||||
})
|
||||
.catch(error => {
|
||||
this.$message.error(error.message); // 显示错误消息
|
||||
})
|
||||
.finally(() => {
|
||||
// 关闭加载状态
|
||||
loadingInstance.close();
|
||||
this.loading = false; // 关闭 loading 状态
|
||||
// 显示加载状态
|
||||
const loadingInstance = this.$loading({
|
||||
lock: true,
|
||||
text: '正在获取已投放的工艺数据...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(255, 255, 255, 0.7)',
|
||||
});
|
||||
this.loading = true;
|
||||
|
||||
// 调用 reset 方法,重置表单或状态
|
||||
this.reset();
|
||||
|
||||
// 获取生产订单号
|
||||
const rooteProdet = this.params.productionOrderNo;
|
||||
|
||||
// 调用 getKindeeExcel 方法
|
||||
getKindeeExcel(rooteProdet)
|
||||
.then(data => {
|
||||
// 处理返回的数据
|
||||
this.$message.success('获取工艺成功!');
|
||||
})
|
||||
.catch(error => {
|
||||
this.$message.error(error.message); // 显示错误消息
|
||||
})
|
||||
.finally(() => {
|
||||
// 关闭加载状态
|
||||
loadingInstance.close();
|
||||
this.loading = false; // 关闭 loading 状态
|
||||
});
|
||||
this.handleBomRefresh();
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
getAllRouteAndUse() {
|
||||
// 显示加载状态
|
||||
const loadingInstance = this.$loading({
|
||||
lock: true,
|
||||
text: '正在获取全部工艺数据...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(255, 255, 255, 0.7)',
|
||||
});
|
||||
this.loading = true;
|
||||
|
||||
// 调用 reset 方法,重置表单或状态
|
||||
this.reset();
|
||||
|
||||
// 获取生产订单号
|
||||
const rooteProdet = this.params.productionOrderNo;
|
||||
|
||||
// 调用 getAllRouteAndUse 方法
|
||||
getAllRouteAndUse(rooteProdet)
|
||||
.then(data => {
|
||||
// 处理返回的数据
|
||||
this.$message.success('获取全部工艺成功!');
|
||||
})
|
||||
.catch(error => {
|
||||
this.$message.error(error.message); // 显示错误消息
|
||||
})
|
||||
.finally(() => {
|
||||
// 关闭加载状态
|
||||
loadingInstance.close();
|
||||
this.loading = false; // 关闭 loading 状态
|
||||
getAllRouteAndUse() {
|
||||
// 显示加载状态
|
||||
const loadingInstance = this.$loading({
|
||||
lock: true,
|
||||
text: '正在获取全部工艺数据...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(255, 255, 255, 0.7)',
|
||||
});
|
||||
this.loading = true;
|
||||
|
||||
// 调用 reset 方法,重置表单或状态
|
||||
this.reset();
|
||||
|
||||
// 获取生产订单号
|
||||
const rooteProdet = this.params.productionOrderNo;
|
||||
|
||||
// 调用 getAllRouteAndUse 方法
|
||||
getAllRouteAndUse(rooteProdet)
|
||||
.then(data => {
|
||||
// 处理返回的数据
|
||||
this.$message.success('获取全部工艺成功!');
|
||||
})
|
||||
.catch(error => {
|
||||
this.$message.error(error.message); // 显示错误消息
|
||||
})
|
||||
.finally(() => {
|
||||
// 关闭加载状态
|
||||
loadingInstance.close();
|
||||
this.loading = false; // 关闭 loading 状态
|
||||
});
|
||||
this.handleBomRefresh();
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
// 处理工作中心变化
|
||||
handleWorkCenterChange(scope) {
|
||||
const {row} = scope;
|
||||
const { row } = scope;
|
||||
const currentIndex = this.form.routeList.findIndex(item => item === row);
|
||||
|
||||
// 移除自动设置工序控制码的逻辑
|
||||
@ -1084,7 +1048,7 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
return {valid: true};
|
||||
return { valid: true };
|
||||
},
|
||||
|
||||
// 开始编辑行
|
||||
@ -1157,7 +1121,7 @@ export default {
|
||||
this.timeUpload.isUploading = false;
|
||||
this.$refs.timeUpload.clearFiles();
|
||||
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>"
|
||||
+ response.msg + "</div>", "导入结果", {dangerouslyUseHTMLString: true});
|
||||
+ response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
|
||||
this.getList();
|
||||
},
|
||||
// 提交时间文件上传
|
||||
@ -1272,7 +1236,7 @@ export default {
|
||||
});
|
||||
},
|
||||
// 控制表格可移动部分
|
||||
tableRowClassName({row, rowIndex}) {
|
||||
tableRowClassName({ row, rowIndex }) {
|
||||
// 过滤掉父节点
|
||||
if (!row.parentId) {
|
||||
return "filtered";
|
||||
@ -1434,7 +1398,7 @@ export default {
|
||||
this.upload.isUploading = false;
|
||||
this.$refs.upload.clearFiles();
|
||||
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>"
|
||||
+ response.msg + "</div>", "导入结果", {dangerouslyUseHTMLString: true});
|
||||
+ response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
|
||||
this.getList();
|
||||
},
|
||||
// 提交上传文件
|
||||
@ -1497,7 +1461,7 @@ export default {
|
||||
getRoute(id).then(response => {
|
||||
this.loading = false;
|
||||
// 只提取工艺相关字段
|
||||
const {workCenter, processName, processDescription, processControl, activityDuration} = response.data;
|
||||
const { workCenter, processName, processDescription, processControl, activityDuration } = response.data;
|
||||
this.form = {
|
||||
...this.form, // 保留现有数据
|
||||
id: id,
|
||||
@ -1560,7 +1524,7 @@ export default {
|
||||
timeoutPromise
|
||||
]);
|
||||
// 处理后端返回的数据 - 适配新的返回结构 R<ProcessRoutePushResultDTO>
|
||||
const {duplicateRoutes, failedRoutes, successfulRoutes} = response.data;
|
||||
const { duplicateRoutes, failedRoutes, successfulRoutes } = response.data;
|
||||
// 提取物料编码和错误信息
|
||||
const duplicateCodes = duplicateRoutes.join(', ');
|
||||
const failedInfo = failedRoutes.map(route =>
|
||||
@ -1592,8 +1556,8 @@ export default {
|
||||
|
||||
// 显示错误通知
|
||||
this.$notify({
|
||||
title: '推送失败',
|
||||
message: error.message || '推送失败,请重试!',
|
||||
title: '推送工艺失败',
|
||||
message: error.message || '推送工艺失败,请重试!',
|
||||
type: 'error',
|
||||
duration: 0,
|
||||
showClose: true
|
||||
@ -1621,7 +1585,7 @@ export default {
|
||||
// 获取生产订单号
|
||||
const rooteProdet = this.params.productionOrderNo;
|
||||
//获取物料编码
|
||||
const materialCode = this.params.materialCode;
|
||||
const materialCode = this.params.materialCode;
|
||||
|
||||
console.log(rooteProdet);
|
||||
|
||||
@ -1688,7 +1652,7 @@ export default {
|
||||
generatePDFs(rooteProdet)
|
||||
.then(response => {
|
||||
|
||||
let blob = new Blob([response], {type: 'application/zip'})
|
||||
let blob = new Blob([response], { type: 'application/zip' })
|
||||
let url = window.URL.createObjectURL(blob)
|
||||
const link = document.createElement('a') // 创建a标签
|
||||
link.href = url
|
||||
|
||||
@ -132,15 +132,21 @@
|
||||
<el-form-item label="物料名称" prop="materialName">
|
||||
<el-input v-model="form.materialName" placeholder="请输入物料名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="材质" prop="wlMaterial">
|
||||
<el-input v-model="form.wlMaterial" placeholder="请输入材质" />
|
||||
</el-form-item>
|
||||
<el-form-item label="最低安全库存" prop="minSafetyStock">
|
||||
<el-input v-model="form.minSafetyStock" placeholder="请输入最低安全库存" />
|
||||
<el-input v-model="form.minSafetyStock" placeholder="请输入最低安全库存" type="number" />
|
||||
</el-form-item>
|
||||
<el-form-item label="最高安全库存" prop="maxSafetyStock">
|
||||
<el-input v-model="form.maxSafetyStock" placeholder="请输入最高安全库存" />
|
||||
<el-input v-model="form.maxSafetyStock" placeholder="请输入最高安全库存" type="number" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型" prop="type">
|
||||
<el-input v-model="form.type" placeholder="请输入类型" />
|
||||
</el-form-item>
|
||||
<el-form-item label="即时库存" prop="currentStock">
|
||||
<el-input v-model="form.currentStock" placeholder="请输入即时库存" type="number" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button>
|
||||
@ -180,7 +186,7 @@ export default {
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 100,
|
||||
pageSize: 10,
|
||||
materialCode: undefined,
|
||||
materialName: undefined,
|
||||
minSafetyStock: undefined,
|
||||
@ -191,32 +197,23 @@ export default {
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
id: [
|
||||
{ required: true, message: "主键ID不能为空", trigger: "blur" }
|
||||
],
|
||||
materialCode: [
|
||||
{ required: true, message: "物料编码不能为空", trigger: "blur" }
|
||||
],
|
||||
materialName: [
|
||||
{ required: true, message: "物料名称不能为空", trigger: "blur" }
|
||||
],
|
||||
wlMaterial: [
|
||||
{ required: true, message: "材质不能为空", trigger: "blur" }
|
||||
],
|
||||
minSafetyStock: [
|
||||
{ required: true, message: "最低安全库存不能为空", trigger: "blur" }
|
||||
],
|
||||
maxSafetyStock: [
|
||||
{ required: true, message: "最高安全库存不能为空", trigger: "blur" }
|
||||
],
|
||||
createTime: [
|
||||
{ required: true, message: "创建时间不能为空", trigger: "blur" }
|
||||
],
|
||||
updateTime: [
|
||||
{ required: true, message: "更新时间不能为空", trigger: "blur" }
|
||||
],
|
||||
createBy: [
|
||||
{ required: true, message: "创建人不能为空", trigger: "blur" }
|
||||
],
|
||||
updateBy: [
|
||||
{ required: true, message: "更新人不能为空", trigger: "blur" }
|
||||
type: [
|
||||
{ required: true, message: "类型不能为空", trigger: "blur" }
|
||||
]
|
||||
}
|
||||
};
|
||||
@ -245,13 +242,11 @@ export default {
|
||||
id: undefined,
|
||||
materialCode: undefined,
|
||||
materialName: undefined,
|
||||
wlMaterial: undefined,
|
||||
minSafetyStock: undefined,
|
||||
maxSafetyStock: undefined,
|
||||
currentStock: undefined,
|
||||
createTime: undefined,
|
||||
updateTime: undefined,
|
||||
createBy: undefined,
|
||||
updateBy: undefined
|
||||
type: undefined
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
|
||||
Loading…
Reference in New Issue
Block a user