Compare commits

..

No commits in common. "79e77317f9858fae5ac001d2bb8ee48b4fd4f80f" and "d86036d443d03aeff8c68e992f26e34294cc3b83" have entirely different histories.

6 changed files with 191 additions and 274 deletions

View File

@ -40,7 +40,7 @@ export function getDistinctProjectCodes(query) {
return request({ return request({
url: '/system/route/getDistinctProjectCodes', // 后端接口 URL确保正确 url: '/system/route/getDistinctProjectCodes', // 后端接口 URL确保正确
method: 'get', method: 'get',
params: { query } // 将查询关键字传递给后端 params: {query} // 将查询关键字传递给后端
}) })
.then((response) => { .then((response) => {
return response; // 返回数据部分 return response; // 返回数据部分
@ -55,7 +55,7 @@ export function getProcessInfoList(query) {
return request({ return request({
url: '/system/route/getProcessInfoList', // 后端接口 URL确保正确 url: '/system/route/getProcessInfoList', // 后端接口 URL确保正确
method: 'get', method: 'get',
params: { query } // 将查询关键字传递给后端 params: {query} // 将查询关键字传递给后端
}) })
.then((response) => { .then((response) => {
return response; // 返回数据部分 return response; // 返回数据部分
@ -66,23 +66,6 @@ export function getProcessInfoList(query) {
}); });
} }
export function onSave(list) {
return request({
url: '/system/route/addRoute',
method: 'post',
data: list,
})
.then((response) => {
return response;
})
.catch((error) => {
console.error('Error saving route:', error);
throw error;
});
}
// 删除工艺路线 // 删除工艺路线
export function delRoute(id) { export function delRoute(id) {
return request({ return request({

View File

@ -42,9 +42,3 @@ export function delStockData(id) {
method: 'delete' method: 'delete'
}) })
} }
export function generateDoc() {
return request({
url: '/system/stockData/generateDoc', // 这个路径应该和你的后端接口路径一致
method: 'post'
});
}

View File

@ -3,19 +3,14 @@ import clonedeep from "lodash.clonedeep";
const tableDrag = { const tableDrag = {
bind(el, binding) { bind(el, binding) {
// 这里是定义了一个对象只接收value和arg
const { value, arg } = binding; const { value, arg } = binding;
// 如果没有获取到元素节点
if (!el) { if (!el) {
return; return;
} }
// 定义对象,如果没有的话为空
const { elementSeletor, onEnd, ...config } = arg || {}; const { elementSeletor, onEnd, ...config } = arg || {};
// 三元表达式判断元素节点是否为空,不为空则选择到el中指定的节点
const bindEls = elementSeletor ? el.querySelector(elementSeletor) : el; const bindEls = elementSeletor ? el.querySelector(elementSeletor) : el;
// 创建
el.sortable = sortable.create(bindEls, { el.sortable = sortable.create(bindEls, {
animation: 150,//动画时长设置 ms animation: 150,
ghostClass: "blue-background-class", ghostClass: "blue-background-class",
...config, ...config,
handle: ".handle", handle: ".handle",

View File

@ -145,7 +145,7 @@
</el-row> </el-row>
<el-table v-loading="loading" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" <el-table v-loading="loading" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
:data="detailsList" border @selection-change="handleSelectionChange"> :data="detailsList" @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="id" align="center" prop="id" v-if="true"/>-->
<el-table-column label="生产令号" align="center" prop="totalWeight"/> <el-table-column label="生产令号" align="center" prop="totalWeight"/>

View File

@ -100,7 +100,7 @@
<el-form :model="queryParams"> <el-form :model="queryParams">
<el-form-item label="项目令号" prop="routeDescription"> <el-form-item label="项目令号" prop="routeDescription">
<el-select v-model="queryParams.routeDescription" filterable remote :remote-method="handleQuery1" <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-option v-for="item in projectCodes" :key="item" :label="item" :value="item"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -109,83 +109,87 @@
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<!-- <el-form-item label="工序控制" prop="processControl"> <!-- <el-form-item label="工序控制" prop="processControl">
<el-input v-model="queryParams.processControl" placeholder="请输入工序控制" clearable <el-input v-model="queryParams.processControl" placeholder="请输入工序控制" clearable
@keyup.enter.native="handleQuery"/> @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item>
<el-form-item label="活动时长" prop="activityDuration"> <el-form-item label="活动时长" prop="activityDuration">
<el-input v-model="queryParams.activityDuration" placeholder="请输入活动时长" clearable <el-input v-model="queryParams.activityDuration" placeholder="请输入活动时长" clearable
@keyup.enter.native="handleQuery"/> @keyup.enter.native="handleQuery"/>
</el-form-item> </el-form-item>
<el-form-item label="活动单位" prop="activityUnit"> <el-form-item label="活动单位" prop="activityUnit">
<el-input v-model="queryParams.activityUnit" placeholder="请输入活动单位" clearable <el-input v-model="queryParams.activityUnit" placeholder="请输入活动单位" clearable
@keyup.enter.native="handleQuery"/> @keyup.enter.native="handleQuery"/>
</el-form-item>--> </el-form-item>-->
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
v-hasPermi="['system:route:add']">新增 v-hasPermi="['system:route:add']">新增
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate"
v-hasPermi="['system:route:edit']">修改 v-hasPermi="['system:route:edit']">修改
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete"
v-hasPermi="['system:route:remove']">删除 v-hasPermi="['system:route:remove']">删除
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:route:export']">导出 v-hasPermi="['system:route:export']">导出
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport" <el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport"
v-hasPermi="['system:details:import']">导入工艺 v-hasPermi="['system:details:import']">导入工艺
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="pushRouteBom" <el-button type="info" plain icon="el-icon-upload" size="mini" @click="pushRouteBom"
v-hasPermi="['system:details:import']">推送工艺 v-hasPermi="['system:details:import']">推送工艺
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="updateProcessPlan" <el-button type="info" plain icon="el-icon-upload" size="mini" @click="updateProcessPlan"
v-hasPermi="['system:details:import']">更新计划时间 v-hasPermi="['system:details:import']">更新计划时间
</el-button> </el-button>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="generatePDFs" <el-button type="info" plain icon="el-icon-upload" size="mini" @click="generatePDFs"
v-hasPermi="['system:details:import']">生成PDF v-hasPermi="['system:details:import']">生成PDF
</el-button> </el-button>
</el-col> </el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-form :inline="true" :model="form" ref="ruleForm" size="mini" :rules="rules"> <el-form :inline="true" :model="list" ref="ruleForm" size="mini" :rules="rules">
<el-table v-if="showtable" v-loading="loading" row-key="id" ref="tree" v-drag:[config]="form.routeList" <el-table v-if="showtable" v-loading="loading" row-key="id" ref="tree" v-drag:[config]="routeList"
:tree-props="{ children: 'children' }" :data="form.routeList" stripe :row-class-name="tableRowClassName" :tree-props="{ children: 'children' }" :data="routeList" stripe :row-class-name="tableRowClassName"
:cell-style="columnStyle" border max-height="680px" @cell-click="cellhand" :default-expand-all="true" :cell-style="columnStyle" border max-height="680px" @cell-click="cellhand" :default-expand-all="true"
@selection-change="handleSelectionChange"> @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="主键ID" align="center" prop="id" v-if="true"/>-->
<el-table-column label="操作" align="center"> <el-table-column label="操作" align="center">
<template slot-scope="props"> <template slot-scope="props">
<!-- <el-button type="text" icon="el-icon-check" v-if="scope.row.id < 0" @click="onSaveChild()" /> --> <!-- <el-button type="text" icon="el-icon-check" v-if="scope.row.id < 0" @click="onSaveChild()" /> -->
<!-- <fromed v-if="props.row.parentId" /> --> <!-- <fromed v-if="props.row.parentId" /> -->
<!-- {{props.row.materialCode}} --> <!-- {{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> </template>
</el-table-column> </el-table-column>
@ -195,20 +199,20 @@
scope.row.routeDescription }}</router-link> scope.row.routeDescription }}</router-link>
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column label="物料编码" width="100" align="center" prop="materialCode" /> <el-table-column label="物料编码" width="100" align="center" prop="materialCode"/>
<el-table-column label="名称" width="100" align="center" prop="materialName" /> <el-table-column label="名称" width="100" align="center" prop="materialName"/>
<el-table-column label="材质" width="80" align="center" prop="material" /> <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="discWeight"/>
<!-- <!--
<el-table-column label="材料BOM物料编码" width="220"align="center" prop="rawMaterialCode" /> <el-table-column label="材料BOM物料编码" width="220"align="center" prop="rawMaterialCode" />
<el-table-column label="材料BOM物料名称"width="220" align="center" prop="rawMaterialName" /> <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="discUsage" />
<el-table-column label="单位"width="60" align="center" prop="bomUnit" />--> <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="150" align="center"> <el-table-column label="工作中心" width="150" align="center" prop="workCenter">
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'routeList.' + scope.$index + '.workCenter'"> <el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key'">
<el-select v-model="scope.row.workCenter" placeholder="工作中心" clearable @keyup.enter.native="handleQuery2"> <el-select v-model="queryParams.workCenter" placeholder="工作中心" clearable @keyup.enter.native="handleQuery2">
<el-option label="机一工段" value="机一工段"></el-option> <el-option label="机一工段" value="机一工段"></el-option>
<el-option label="机二工段" value="机二工段"></el-option> <el-option label="机二工段" value="机二工段"></el-option>
<el-option label="机三工段" value="机三工段"></el-option> <el-option label="机三工段" value="机三工段"></el-option>
@ -219,55 +223,37 @@
<el-option label="委外中心" value="委外中心"></el-option> <el-option label="委外中心" value="委外中心"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<span v-else>{{ scope.row.workCenter }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工序名称" width="150" align="center"> <el-table-column label="工序名称" width="150" align="center" prop="processName">
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'routeList.' + scope.$index + '.processName'"> <el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key1'">
<el-select v-model="scope.row.processName" filterable remote :remote-method="handleQuery3" <el-select v-model="queryParams.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-option v-for="item in processName" :key="item" :label="item" :value="item"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<span v-else>{{ scope.row.processName }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工序说明" width="300" align="center"> <el-table-column label="工序说明" width="300" align="center" prop="processDescription">
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'routeList.' + scope.$index + '.processDescription'"> <el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key2'">
<el-input v-model="scope.row.processDescription"></el-input> <el-input v-model="list.key2"></el-input>
</el-form-item> </el-form-item>
<span v-else>{{ scope.row.processDescription }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工序控制" width="220" align="center"> <el-table-column label="工序控制" width="220" align="center" prop="processControl">
<template slot-scope="scope"> <template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :prop="'routeList.' + scope.$index + '.processControl'"> <el-form-item v-if="scope.row.id < 0" :prop="'list.' + scope.$index + '.key3'">
<el-select v-model="scope.row.processControl" placeholder="工序控制" clearable @keyup.enter.native="handleQuery2"> <el-input v-model="list.key3"></el-input>
<el-option label="汇报+免检" value="汇报+免检"></el-option>
<el-option label="委外+质量" value="委外+质量"></el-option>
<el-option label="汇报+质量" value="汇报+质量"></el-option>
</el-select>
</el-form-item> </el-form-item>
<span v-else>{{ scope.row.processControl }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="活动时长" align="center" prop="activityDuration"/>
<el-table-column label="活动时长" align="center" prop="activityDuration"> <el-table-column label="活动单位" align="center" prop="activityUnit"/>
<template slot-scope="scope">
<el-form-item v-if="scope.row.id < 0" :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="xuStartTime" width="180"> <el-table-column label="序开始时间" align="center" prop="xuStartTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.xuStartTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.xuStartTime, '{y}-{m}-{d}') }}</span>
@ -278,10 +264,10 @@
<span>{{ parseTime(scope.row.xuEndTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.xuEndTime, '{y}-{m}-{d}') }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="单位" align="center" prop="bomUnit" /> <el-table-column label="材料BOM单位" align="center" prop="bomUnit"/>
<el-table-column label="单台数量" align="center" prop="unitQuantity" /> <el-table-column label="单台数量" align="center" prop="unitQuantity"/>
<el-table-column label="本批数量" align="center" prop="batchQuantity" /> <el-table-column label="本批数量" align="center" prop="batchQuantity"/>
<el-table-column label="首批数量" align="center" prop="firstBatchQuantity" /> <el-table-column label="首批数量" align="center" prop="firstBatchQuantity"/>
<el-table-column label="计划开始时间" align="center" prop="planStartTime" width="180"> <el-table-column label="计划开始时间" align="center" prop="planStartTime" width="180">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ parseTime(scope.row.planStartTime, '{y}-{m}-{d}') }}</span> <span>{{ parseTime(scope.row.planStartTime, '{y}-{m}-{d}') }}</span>
@ -294,23 +280,23 @@
</el-table-column> </el-table-column>
<el-table-column class="maxWidth" label="操作" width="220" fixed="right" align="center" <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"> <template slot-scope="scope">
<el-button class="btn" size="mini" @click="onAddChild(scope)" v-if="!scope.row.parentId"> <el-button class="btn" size="mini" @click="onAddChild(scope)" v-if="!scope.row.parentId">
添加工艺 添加工艺
</el-button> </el-button>
<el-button class="btn" size="mini" type="success" @click="onSave(scope)" <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> </el-button>
<el-button class="btn" size="mini" type="danger" @click="onDelete(scope)" v-if="scope.row.id < 0"> <el-button class="btn" size="mini" type="danger" @click="onDelete(scope)" v-if="scope.row.id < 0">
删除工艺 删除工艺
</el-button> </el-button>
<el-button class="btn" size="mini" type="primary" @click="handleUpdate(scope.row)" <el-button class="btn" size="mini" type="primary" @click="handleUpdate(scope.row)"
v-hasPermi="['system:route:edit']" v-if="scope.row.id > 0 && scope.row.parentId">修改 v-hasPermi="['system:route:edit']" v-if="scope.row.id > 0 && scope.row.parentId">修改
</el-button> </el-button>
<el-button class="btn" size="mini" type="danger" @click="handleDelete(scope.row)" <el-button class="btn" size="mini" type="danger" @click="handleDelete(scope.row)"
v-hasPermi="['system:route:remove']" v-if="scope.row.id > 0">删除 v-hasPermi="['system:route:remove']" v-if="scope.row.id > 0">删除
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -318,55 +304,55 @@
</el-form> </el-form>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" <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="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px"> <el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="工艺路线描述" prop="routeDescription"> <el-form-item label="工艺路线描述" prop="routeDescription">
<el-input v-model="form.routeDescription" placeholder="请输入工艺路线描述" /> <el-input v-model="form.routeDescription" placeholder="请输入工艺路线描述"/>
</el-form-item> </el-form-item>
<el-form-item label="物料编码" prop="materialCode"> <el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" placeholder="请输入物料编码" /> <el-input v-model="form.materialCode" placeholder="请输入物料编码"/>
</el-form-item> </el-form-item>
<el-form-item label="物料名称" prop="materialName"> <el-form-item label="物料名称" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入物料名称" /> <el-input v-model="form.materialName" placeholder="请输入物料名称"/>
</el-form-item> </el-form-item>
<el-form-item label="单位" prop="bomUnit"> <el-form-item label="单位" prop="bomUnit">
<el-input v-model="form.bomUnit" placeholder="请输入单位" /> <el-input v-model="form.bomUnit" placeholder="请输入单位"/>
</el-form-item> </el-form-item>
<el-form-item label="工序号" prop="processNo"> <el-form-item label="工序号" prop="processNo">
<el-input v-model="form.processNo" placeholder="请输入工序号" /> <el-input v-model="form.processNo" placeholder="请输入工序号"/>
</el-form-item> </el-form-item>
<el-form-item label="工作中心" prop="workCenter"> <el-form-item label="工作中心" prop="workCenter">
<el-input v-model="form.workCenter" placeholder="请输入工作中心" /> <el-input v-model="form.workCenter" placeholder="请输入工作中心"/>
</el-form-item> </el-form-item>
<el-form-item label="工序名称" prop="processName"> <el-form-item label="工序名称" prop="processName">
<el-input v-model="form.processName" placeholder="请输入工序名称" /> <el-input v-model="form.processName" placeholder="请输入工序名称"/>
</el-form-item> </el-form-item>
<el-form-item label="原材料编码" prop="rawMaterialCode"> <el-form-item label="原材料编码" prop="rawMaterialCode">
<el-input v-model="form.rawMaterialCode" placeholder="请输入原材料编码" /> <el-input v-model="form.rawMaterialCode" placeholder="请输入原材料编码"/>
</el-form-item> </el-form-item>
<el-form-item label="原材料名称" prop="rawMaterialName"> <el-form-item label="原材料名称" prop="rawMaterialName">
<el-input v-model="form.rawMaterialName" placeholder="请输入原材料名称" /> <el-input v-model="form.rawMaterialName" placeholder="请输入原材料名称"/>
</el-form-item> </el-form-item>
<el-form-item label="金碟重量" prop="discWeight"> <el-form-item label="金碟重量" prop="discWeight">
<el-input v-model="form.discWeight" placeholder="请输入金碟重量" /> <el-input v-model="form.discWeight" placeholder="请输入金碟重量"/>
</el-form-item> </el-form-item>
<el-form-item label="金碟用量" prop="discUsage"> <el-form-item label="金碟用量" prop="discUsage">
<el-input v-model="form.discUsage" placeholder="请输入金碟用量" /> <el-input v-model="form.discUsage" placeholder="请输入金碟用量"/>
</el-form-item> </el-form-item>
<el-form-item label="工序说明" prop="processDescription"> <el-form-item label="工序说明" prop="processDescription">
<el-input v-model="form.processDescription" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.processDescription" type="textarea" placeholder="请输入内容"/>
</el-form-item> </el-form-item>
<el-form-item label="工序控制" prop="processControl"> <el-form-item label="工序控制" prop="processControl">
<el-input v-model="form.processControl" placeholder="请输入工序控制" /> <el-input v-model="form.processControl" placeholder="请输入工序控制"/>
</el-form-item> </el-form-item>
<el-form-item label="活动时长" prop="activityDuration"> <el-form-item label="活动时长" prop="activityDuration">
<el-input v-model="form.activityDuration" placeholder="请输入活动时长" /> <el-input v-model="form.activityDuration" placeholder="请输入活动时长"/>
</el-form-item> </el-form-item>
<el-form-item label="活动单位" prop="activityUnit"> <el-form-item label="活动单位" prop="activityUnit">
<el-input v-model="form.activityUnit" placeholder="请输入活动单位" /> <el-input v-model="form.activityUnit" placeholder="请输入活动单位"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -377,13 +363,13 @@
<!-- 导入导入对话框 --> <!-- 导入导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body> <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" <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag> :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
<i class="el-icon-upload"></i> <i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div> <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip"> <div class="el-upload__tip text-center" slot="tip">
<div class="el-upload__tip" slot="tip"> <div class="el-upload__tip" slot="tip">
<el-checkbox v-model="upload.updateSupport" /> <el-checkbox v-model="upload.updateSupport"/>
是否更新已经存在的物料数据 是否更新已经存在的物料数据
</div> </div>
<span>仅允许导入xlsxlsx格式文件</span> <span>仅允许导入xlsxlsx格式文件</span>
@ -400,16 +386,15 @@
<el-drawer title="添加BOM" :visible.sync="BOMpop" :before-close="bomClose" :size="850"> <el-drawer title="添加BOM" :visible.sync="BOMpop" :before-close="bomClose" :size="850">
<div style="padding: 20px;"> <div style="padding: 20px;">
<el-table :data="bomList" stripe max-height="400px" border> <el-table :data="bomList" stripe max-height="400px" border>
<el-table-column label="生产令号" width="100" align="center" prop="projectNumber" /> <el-table-column label="生产令号" width="100" align="center" prop="projectNumber"/>
<el-table-column label="物料编码" width="150" align="center" prop="materialCode" /> <el-table-column label="物料编码" width="150" align="center" prop="materialCode"/>
<el-table-column label="物料名称" width="150" align="center" prop="materialName" /> <el-table-column label="物料名称" width="150" align="center" prop="materialName"/>
<el-table-column label="材质" width="70" align="center" prop="materialType" /> <el-table-column label="材质" width="70" align="center" prop="materialType"/>
<el-table-column label="用量" width="88" align="center" prop="quantity" /> <el-table-column label="用量" width="88" align="center" prop="quantity"/>
<el-table-column label="单位" width="88" align="center" prop="unit" /> <el-table-column label="单位" width="88" align="center" prop="unit"/>
<el-table-column class="maxWidth" label="操作" width="150" fixed="right" align="center" <el-table-column class="maxWidth" label="操作" width="150" fixed="right" align="center" class-name="small-padding fixed-width" />
class-name="small-padding fixed-width" />
</el-table> </el-table>
<Bomfrom v-if="BOMpop" style="padding-top: 20px;" /> <Bomfrom v-if="BOMpop" style="padding-top: 20px;"/>
</div> </div>
</el-drawer> </el-drawer>
</div> </div>
@ -426,10 +411,12 @@ import {
updateProcessPlan, generatePDFs updateProcessPlan, generatePDFs
} from "@/api/system/route"; } from "@/api/system/route";
import upload from "svg-sprite-loader/examples/custom-runtime-generator/build/main"; import upload from "svg-sprite-loader/examples/custom-runtime-generator/build/main";
import { getToken } from "../../../utils/auth"; import {getToken} from "../../../utils/auth";
import Fromed from './fromed' import Fromed from './fromed'
import Bomfrom from './bomfrom' import Bomfrom from './bomfrom'
import { getProcessInfoList, pushRouteBom, onSave } from "../../../api/system/route"; // js
import Sortable from 'sortablejs'
import {getProcessInfoList, pushRouteBom} from "../../../api/system/route";
export default { export default {
name: "", name: "",
@ -474,10 +461,8 @@ export default {
showParentSaveBtn: null, showParentSaveBtn: null,
// //
total: 0, total: 0,
form: { // 线
// 线 routeList: [],
routeList: [],
},
// //
title: "", title: "",
// //
@ -485,7 +470,7 @@ export default {
// //
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 500, pageSize: 100,
routeDescription: [], routeDescription: [],
materialCode: undefined, materialCode: undefined,
materialName: undefined, materialName: undefined,
@ -563,16 +548,22 @@ export default {
'喷砂底漆': '委外中心' '喷砂底漆': '委外中心'
}, },
// //
form: {},
projectCodes: [], // projectCodes: [], //
processName: [], processName:[],
activeRows: [], // activeRows: [], //
config: { config: {
elementSeletor: "tbody", // elementSeletor: "tbody",
filter: ".filtered", // filter: ".filtered",
onEnd: (event, oldValue, newValue) => { onEnd: (event, oldValue, newValue) => {
console.log("源数据", oldValue); console.log(
console.log("改变后的数据", newValue); "源数据",
oldValue.map((i) => i.date)
);
console.log(
"改变后的数据",
newValue.map((i) => i.date)
);
}, },
}, },
upload: { upload: {
@ -585,69 +576,91 @@ export default {
// //
updateSupport: 0, updateSupport: 0,
// //
headers: { Authorization: "Bearer " + getToken() }, headers: {Authorization: "Bearer " + getToken()},
// //
url: process.env.VUE_APP_BASE_API + "/system/route/importData" url: process.env.VUE_APP_BASE_API + "/system/route/importData"
}, },
id: 0,//ID id: 0,//ID
list: {
key1: '',
key2: '',
key3: '',
key4: '',
key5: ''
},
// //
rules: { rules: {
id: [ id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" } {required: true, message: "主键ID不能为空", trigger: "blur"}
], ],
routeDescription: [ routeDescription: [
{ required: true, message: "工艺路线描述不能为空", trigger: "blur" } {required: true, message: "工艺路线描述不能为空", trigger: "blur"}
], ],
materialCode: [ materialCode: [
{ required: true, message: "物料编码不能为空", trigger: "blur" } {required: true, message: "物料编码不能为空", trigger: "blur"}
], ],
materialName: [ materialName: [
{ required: true, message: "物料名称不能为空", trigger: "blur" } {required: true, message: "物料名称不能为空", trigger: "blur"}
], ],
bomUnit: [ bomUnit: [
{ required: true, message: "单位不能为空", trigger: "blur" } {required: true, message: "单位不能为空", trigger: "blur"}
], ],
processNo: [ processNo: [
{ required: true, message: "工序号不能为空", trigger: "blur" } {required: true, message: "工序号不能为空", trigger: "blur"}
], ],
workCenter: [ workCenter: [
{ required: true, message: "工作中心不能为空", trigger: "blur" } {required: true, message: "工作中心不能为空", trigger: "blur"}
], ],
processName: [ processName: [
{ required: true, message: "工序名称不能为空", trigger: "blur" } {required: true, message: "工序名称不能为空", trigger: "blur"}
], ],
rawMaterialCode: [ rawMaterialCode: [
{ required: true, message: "原材料编码不能为空", trigger: "blur" } {required: true, message: "原材料编码不能为空", trigger: "blur"}
], ],
rawMaterialName: [ rawMaterialName: [
{ required: true, message: "原材料名称不能为空", trigger: "blur" } {required: true, message: "原材料名称不能为空", trigger: "blur"}
], ],
discWeight: [ discWeight: [
{ required: true, message: "金碟重量不能为空", trigger: "blur" } {required: true, message: "金碟重量不能为空", trigger: "blur"}
], ],
discUsage: [ discUsage: [
{ required: true, message: "金碟用量不能为空", trigger: "blur" } {required: true, message: "金碟用量不能为空", trigger: "blur"}
], ],
processDescription: [ processDescription: [
{ required: true, message: "工序说明不能为空", trigger: "blur" } {required: true, message: "工序说明不能为空", trigger: "blur"}
], ],
processControl: [ processControl: [
{ required: true, message: "工序控制不能为空", trigger: "blur" } {required: true, message: "工序控制不能为空", trigger: "blur"}
], ],
activityDuration: [ activityDuration: [
{ required: true, message: "活动时长不能为空", trigger: "blur" } {required: true, message: "活动时长不能为空", trigger: "blur"}
], ],
activityUnit: [ activityUnit: [
{ required: true, message: "活动单位不能为空", trigger: "blur" } {required: true, message: "活动单位不能为空", trigger: "blur"}
], ],
createBy: [ createBy: [
{ required: true, message: "创建者不能为空", trigger: "blur" } {required: true, message: "创建者不能为空", trigger: "blur"}
], ],
createTime: [ createTime: [
{ required: true, message: "创建时间不能为空", trigger: "blur" } {required: true, message: "创建时间不能为空", trigger: "blur"}
], ],
updateTime: [ updateTime: [
{ required: true, message: "更新时间不能为空", trigger: "blur" } {required: true, message: "更新时间不能为空", trigger: "blur"}
],
key1: [
{required: true, message: "请选择工作中心", trigger: "blur"}
],
key2: [
{required: true, message: "请选择工序名称", trigger: "blur"}
],
key3: [
{required: true, message: "请输入工序说明", trigger: "blur"}
],
key4: [
{required: true, message: "请选择工序控制", trigger: "blur"}
],
key5: [
{required: true, message: "请输入活动时长", trigger: "blur"}
] ]
} }
}; };
@ -671,38 +684,37 @@ export default {
this.rowDrop(); this.rowDrop();
}, },
methods: { methods: {
handleProcessNameChange(scope) { handleProcessNameChange(scope){
console.log(scope) console.log(scope)
const selectedProcessName = scope.row.processName; const selectedProcessName = scope.row.processName;
console.log(selectedProcessName) console.log(selectedProcessName)
if (this.processToWorkCenterMap[selectedProcessName]) { if (this.processToWorkCenterMap[selectedProcessName]){
scope.row.workCenter = this.processToWorkCenterMap[selectedProcessName]; scope.row.workCenter = this.processToWorkCenterMap[selectedProcessName];
} else { }else{
scope.row.workCenter = ''; scope.row.workCenter = '';
} }
}, },
handleQuery3(query) { handleQuery3(query) {
if (query === '') { if (query === '') {
this.processName = []; this.processName = [];
return; return;
} }
// //
this.loading = true; this.loading = true;
// //
getProcessInfoList(query).then((response) => { getProcessInfoList(query).then((response) => {
// //
this.loading = false; this.loading = false;
this.processName = response; this.processName = response;
}).catch(() => { }).catch(() => {
this.loading = false; // this.loading = false; //
this.processName = []; // this.processName = []; //
}); });
}, },
//
tableRowClassName({ row, rowIndex }) { tableRowClassName({row, rowIndex}) {
//
if (!row.parentId) { if (!row.parentId) {
return "filtered"; return "filtered";
} }
@ -711,63 +723,33 @@ export default {
// //
onAddChild(props) { onAddChild(props) {
// , // ,
var index = this.form.routeList.findIndex(item => item.id === props.row.id); var index = this.routeList.findIndex(item => item.id === props.row.id);
// -1 // -1
if (index === -1) { if (index === -1) {
alert("刷新试试,为检索到此目录,可能不存在") alert("刷新试试,为检索到此目录,可能不存在")
return; return;
} }
var routeList = this.form.routeList[index].children; var routeList = this.routeList[index].children;
var route = routeList.sort(function (a, b) { var route = routeList.sort(function (a, b) {
return a.processNo - b.processNo return a.processNo - b.processNo
})[routeList.length - 1]; })[routeList.length - 1];
var processNo = !route ? 0 : route.processNo + 10; var processNo = !route ? 0 : route.processNo + 10;
routeList.push({ id: --this.id, parentId: props.row.id, processNo: processNo, children: null }); routeList.push({id: --this.id, parentId: props.row.id, processNo: processNo, children: null});
this.showParentSaveBtn = props.row.id; this.showParentSaveBtn = props.row.id;
}, },
//
onSave(props) {
//
var list = this.form.routeList.find(item => item.id === props.row.id);
var newChildrenList = list.children.filter(item => item.id < 0).map(v => ({
id: v.parentId,
routeDescription: list.routeDescription,
materialCode: list.materialCode,
materialName: list.materialName,
material: list.material,
discWeight: list.discWeight,
processNo: v.processNo,
workCenter: v.workCenter,
processControl: v.processControl,
processDescription: v.processDescription,
processName: v.processName,
activityDuration: v.activityDuration
}))
//
onSave(newChildrenList)
.then((response) => {
Messages.success('工艺路线保存成功');
//
this.getList();
})
.catch((error) => {
Messages.error('工艺路线保存失败');
});
},
// //
onDelete(props) { onDelete(props) {
// //
var index = this.form.routeList.findIndex(item => item.id === props.row.parentId); var index = this.routeList.findIndex(item => item.id === props.row.parentId);
// //
var childrenIndex = this.form.routeList[index].children.findIndex(item => item.id === props.row.id); var childrenIndex = this.routeList[index].children.findIndex(item => item.id === props.row.id);
// //
this.form.routeList[index].children.splice(childrenIndex, 1); this.routeList[index].children.splice(childrenIndex, 1);
// //
for (let i = 0; i < this.form.routeList[index].children.length; i++) { for (let i = 0; i < this.routeList[index].children.length; i++) {
// //
this.form.routeList[index].children[i].processNo = (i + 1) * 10; this.routeList[index].children[i].processNo = (i + 1) * 10;
} }
}, },
cellhand(row, column) { cellhand(row, column) {
@ -797,7 +779,7 @@ export default {
getList() { getList() {
this.loading = true; this.loading = true;
listRoute(this.queryParams).then(response => { listRoute(this.queryParams).then(response => {
this.form.routeList = response.rows; this.routeList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
@ -848,7 +830,7 @@ export default {
this.upload.isUploading = false; this.upload.isUploading = false;
this.$refs.upload.clearFiles(); this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" 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(); this.getList();
}, },
// //
@ -963,7 +945,7 @@ export default {
// //
this.form = response; this.form = response;
// //
this.$modal.msgSuccess("更新" + rooteProdet + "工序计划时间成功"); this.$modal.msgSuccess("更新"+rooteProdet+"工序计划时间成功");
// //
this.getList(); this.getList();
}) })
@ -993,7 +975,7 @@ export default {
// //
this.form = response; this.form = response;
// //
this.$modal.msgSuccess("生成" + rooteProdet + "的PDF 成功 "); this.$modal.msgSuccess("生成"+rooteProdet+"的PDF 成功 ");
// //
this.getList(); this.getList();
}) })
@ -1009,6 +991,8 @@ export default {
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {

View File

@ -90,16 +90,6 @@
v-hasPermi="['system:stockData:export']" v-hasPermi="['system:stockData:export']"
>导出</el-button> >导出</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="generateDoc"
v-hasPermi="['system:stockData:generateDoc']"
>生成安全库存单据</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
@ -177,15 +167,7 @@
</template> </template>
<script> <script>
import { import { listStockData, getStockData, delStockData, addStockData, updateStockData } from "@/api/system/stockData";
listStockData,
getStockData,
delStockData,
addStockData,
updateStockData,
generateDoc
} from "@/api/system/stockData";
import {listRoute} from "@/api/system/route";
export default { export default {
name: "StockData", name: "StockData",
@ -376,28 +358,7 @@ export default {
this.download('system/stockData/export', { this.download('system/stockData/export', {
...this.queryParams ...this.queryParams
}, `stockData_${new Date().getTime()}.xlsx`) }, `stockData_${new Date().getTime()}.xlsx`)
}, }
generateDoc() {
this.loading = true;
generateDoc().then(response => {
this.loading = false;
//
if (response.code === 200) {
const stockDataList = response.data;
} else {
this.$message.error('生成安全库存单据失败,请稍后再试');
}
//
this.refreshPage();
})
.catch((error) => {
this.loading = false;
console.error('请求错误:', error);
this.$message.error('请求失败,请检查网络连接');
//
this.refreshPage();
});
},
} }
}; };
</script> </script>