feat(system):下发图纸模块

This commit is contained in:
tzy 2025-07-18 11:57:35 +08:00
parent b5585458ec
commit 9172b9c881
25 changed files with 3215 additions and 1074 deletions

8
.idea/.gitignore vendored Normal file
View File

@ -0,0 +1,8 @@
# 默认忽略的文件
/shelf/
/workspace.xml
# 基于编辑器的 HTTP 客户端请求
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitToolBoxBlameSettings">
<option name="showEditorInlineBlameOverride">
<BoolValueOverride>
<option name="enabled" value="true" />
<option name="value" value="true" />
</BoolValueOverride>
</option>
<option name="version" value="2" />
</component>
</project>

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>

View File

@ -37,13 +37,14 @@
"dependencies": {
"@element-plus/icons-vue": "^2.3.1",
"@riophae/vue-treeselect": "0.4.0",
"@vue/composition-api": "^1.7.2",
"axios": "^0.24.0",
"clipboard": "2.0.8",
"core-js": "3.25.3",
"dayjs": "^1.11.11",
"dhtmlx-gantt": "^8.0.9",
"echarts": "5.4.0",
"element-ui": "2.15.12",
"dhtmlx-gantt": "^8.0.11",
"echarts-gl": "^2.0.9",
"element-ui": "^2.15.12",
"file-saver": "2.0.5",
"font-awesome": "^4.7.0",
"fuse.js": "6.4.3",
@ -62,6 +63,8 @@
"vue": "2.6.12",
"vue-count-to": "1.0.13",
"vue-cropper": "0.5.5",
"vue-echart": "^1.0.5",
"vue-echarts": "^5.0.0-beta.0",
"vue-gantt-schedule-timeline-calendar": "^3.0.44",
"vue-meta": "2.4.0",
"vue-router": "3.4.9",
@ -77,6 +80,7 @@
"chalk": "4.1.0",
"compression-webpack-plugin": "5.0.2",
"connect": "3.6.6",
"echarts": "^5.6.0",
"eslint": "^6.0.1",
"eslint-plugin-vue": "7.2.0",
"less": "^4.2.0",

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询图纸配置列表
export function listConfigIni(query) {
return request({
url: '/system/configIni/list',
method: 'get',
params: query
})
}
// 查询图纸配置详细
export function getConfigIni(id) {
return request({
url: '/system/configIni/' + id,
method: 'get'
})
}
// 新增图纸配置
export function addConfigIni(data) {
return request({
url: '/system/configIni',
method: 'post',
data: data
})
}
// 修改图纸配置
export function updateConfigIni(data) {
return request({
url: '/system/configIni',
method: 'put',
data: data
})
}
// 删除图纸配置
export function delConfigIni(id) {
return request({
url: '/system/configIni/' + id,
method: 'delete'
})
}

View File

@ -18,9 +18,9 @@ export function getOrderPro(id) {
}
export function processList(params) {
return request({
url: '/system/orderPro/processlist', // 这里应该是 processlist而不是 processList
url: '/system/orderPro/processlist',
method: 'get',
params: params // 使用 params 来传递查询参数
params: params
});
}
@ -49,3 +49,58 @@ export function delOrderPro(id) {
method: 'delete'
})
}
// 获取图纸类型数据
export function getDrawingTypeDict() {
return request({
url: '/system/configIni/list',
method: 'get',
params: {
pageNum: 1,
pageSize: 1000 // 获取足够多的数据
}
})
}
export function addProduct(data) {
return request({
url: '/system/orderPro/addProduct',
method: 'post',
data
});
}
// 查询此项目用到的产品列表
export function listSave(query) {
return request({
url: '/system/save/list',
method: 'get',
params: query
})
}
// 执行出图
export function executDrawing(data) {
return request({
url: '/system/orderPro/executDrawing',
method: 'post',
data
})
}
// 删除销齿链型号
export function delSave(ids) {
return request({
url: '/system/save/' + ids,
method: 'delete'
})
}
// 下载PDF
export function uploadPDF(id) {
return request({
url: '/system/orderPro/uploadPDF',
method: 'get',
params: { id },
responseType: 'blob', // 设置响应类型为blob用于文件下载
headers: { 'Content-Type': 'application/json; application/octet-stream' }
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询销齿链型号管理列表
export function listRigidChain(query) {
return request({
url: '/system/pcRigidChain/list',
method: 'get',
params: query
})
}
// 查询销齿链型号管理详细
export function getRigidChain(id) {
return request({
url: '/system/pcRigidChain/' + id,
method: 'get'
})
}
// 新增销齿链型号管理
export function addRigidChain(data) {
return request({
url: '/system/pcRigidChain',
method: 'post',
data: data
})
}
// 修改销齿链型号管理
export function updateRigidChain(data) {
return request({
url: '/system/pcRigidChain',
method: 'put',
data: data
})
}
// 删除销齿链型号管理
export function delRigidChain(id) {
return request({
url: '/system/rigidChain/' + id,
method: 'delete'
})
}

View File

@ -19,7 +19,7 @@ export function getRigidChain(id) {
// 新增刚性链报价
export function addRigidChain(data) {
return request({
return request({
url: '/system/rigidChain',
method: 'post',
data: data
@ -42,3 +42,15 @@ export function delRigidChain(id) {
method: 'delete'
})
}

View File

@ -104,8 +104,40 @@ export function updateProcessPlan(rooteProdet) {
method: 'post',
params: { rooteProdet },
});
}
}export function updateProcesTime(rooteProdet) {
return request({
url: '/system/route/updateProcesTime',
method: 'post',
params: { rooteProdet },
});
}
export function getKindeeExcel(rooteProdet) {
return request({
url: '/system/route/getKindeeExcel',
method: 'get',
params: { rooteProdet },
})
.then(response => {
return response.data; // 返回数据
})
.catch(error => {
throw new Error('获取标准工艺失败,请重试!');
});
}
export function getAllRouteAndUse(rooteProdet) {
return request({
url: '/system/route/getAllRouteAndUse',
method: 'post',
params: { rooteProdet },
})
.then(response => {
return response.data; // 返回数据
})
.catch(error => {
throw new Error('获取全部工艺失败,请重试!');
});
}
export function generatePDFs(rooteProdet) {
return request({
url: '/system/route/generatePDFs',

View File

@ -1,5 +1,5 @@
import Vue from 'vue'
import VueComposition from '@vue/composition-api'
import Cookies from 'js-cookie'
import Element from 'element-ui'
@ -34,12 +34,25 @@ import ImagePreview from "@/components/ImagePreview"
// 字典标签组件
import DictTag from '@/components/DictTag'
// 头部标签组件
import VueMeta from 'vue-meta'
// 字典数据组件
import DictData from '@/components/DictData'
// 表格拖拽
import VDrag from "./assets/js/drag";
import ECharts from 'vue-echarts'
// 手动引入 ECharts 各模块来减小打包体积
import 'echarts/lib/chart/bar'
import 'echarts/lib/component/tooltip'
import 'echarts/lib/chart/line'
import 'echarts/lib/component/polar'
// 如果需要配合 ECharts 扩展使用,只需要直接引入扩展包即可
// 以 ECharts-GL 为例:
// 需要安装依赖npm install --save echarts-gl并添加如下引用
import 'echarts-gl'
// 全局方法挂载
Vue.prototype.$axios = axios
Vue.prototype.getDicts = getDicts
@ -61,7 +74,9 @@ Vue.component('Editor', Editor)
Vue.component('FileUpload', FileUpload)
Vue.component('ImageUpload', ImageUpload)
Vue.component('ImagePreview', ImagePreview)
Vue.component('v-chart', ECharts)
Vue.use(VueComposition)
Vue.use(directive)
Vue.use(plugins)
Vue.use(VueMeta)

View File

@ -70,6 +70,11 @@ export const constantRoutes = [
component: () => import('@/views/login'),
hidden: true
},
{
path: '/login',
component: () => import('@/views/'),
hidden: true
},
{
path: '/register',
component: () => import('@/views/register'),
@ -114,7 +119,7 @@ export const constantRoutes = [
{
path: '/index',
component: () => import('@/views/index'),
hidden: true
hidden: true
}
// {
// path: '/',

View File

@ -1,143 +1,257 @@
<template>
<div>
<el-form
v-for="(n,i) in list"
:inline="true"
:model="n"
ref="ruleForm"
size="mini"
:rules="rules"
>
<el-form-item prop="key1">
<el-input
placeholder="请输入材料BOM物料编码"
v-model="n.key1"
size="mini"
clearable />
</el-form-item>
<el-form-item prop="key2">
<el-input
placeholder="请输入材料BOM物料名称"
v-model="n.key2"
size="mini"
clearable />
</el-form-item>
<el-form-item prop="key3">
<el-input
placeholder="请输入用量"
style="width:120px"
v-model="n.key3"
size="mini"
clearable />
</el-form-item>
<el-form-item prop="key4">
<el-input
placeholder="请输入单重"
style="width:120px"
v-model="n.key4"
size="mini"
clearable />
</el-form-item>
<el-form-item v-if="i == 0">
<el-button
type="primary"
plain
size="mini"
@click="save"
>保存</el-button>
<el-button
type="primary"
plain
size="mini"
@click="addlist"
>添加</el-button>
</el-form-item>
<div class="dashboard-container">
<!-- 顶部统计卡片 -->
<el-row :gutter="20">
<el-col :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#409EFF">
<i class="el-icon-s-data"></i>
</div>
<div class="card-info">
<span class="label">今日产量</span>
<span class="value">1,234 </span>
</div>
</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#67C23A">
<i class="el-icon-s-check"></i>
</div>
<div class="card-info">
<span class="label">良品率</span>
<span class="value">98.5%</span>
</div>
</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#E6A23C">
<i class="el-icon-s-tools"></i>
</div>
<div class="card-info">
<span class="label">设备利用率</span>
<span class="value">85%</span>
</div>
</div>
</el-card>
</el-col>
<el-col :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#F56C6C">
<i class="el-icon-s-flag"></i>
</div>
<div class="card-info">
<span class="label">异常数量</span>
<span class="value">3 </span>
</div>
</div>
</el-card>
</el-col>
</el-row>
<el-form-item v-else>
<el-button
type="danger"
plain
size="mini"
@click="dellist(i)"
>删除</el-button>
</el-form-item>
<!-- 主要图表区域 -->
<el-row :gutter="20" class="chart-row">
<el-col :span="16">
<el-card>
<div slot="header" class="chart-title">生产趋势分析</div>
<v-chart :options="lineChart" class="chart" />
</el-card>
</el-col>
<el-col :span="8">
<el-card>
<div slot="header" class="chart-title">生产进度</div>
<el-progress
type="circle"
:percentage="75"
:stroke-width="10"
status="success"
class="progress-circle"/>
<div class="progress-text">当前工单进度</div>
</el-card>
</el-col>
</el-row>
</el-form>
</div>
<!-- 底部设备状态 -->
<el-row :gutter="20" class="status-row">
<el-col :span="24">
<el-card>
<div slot="header" class="chart-title">设备运行状态</div>
<div class="equipment-status">
<div
v-for="(item, index) in equipmentList"
:key="index"
class="status-item">
<i class="el-icon-s-platform" :style="{color: item.statusColor}"></i>
<span>{{ item.name }}</span>
<el-tag :type="item.statusType">{{ item.statusText }}</el-tag>
</div>
</div>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import ECharts from 'vue-echarts'
import 'echarts/lib/chart/line'
import 'echarts/lib/component/polar'
export default {
props:{
showdel:{
type:Boolean,
default:true
},
obj:{
type:Object,
default(){
return {}
}
}
},
data() {
return {
list:[{
key1:'',
key2:'',
key3:'',
key4:''
}],
rules: {
key1: [
{ required: true, message: "请输入材料BOM物料编码", trigger: "blur" }
],
key2: [
{ required: true, message: "请输入材料BOM物料名称", trigger: "blur" }
],
key3: [
{ required: true, message: "请输入用量", trigger: "blur" }
],
key4: [
{ required: true, message: "请输入单重", trigger: "blur" }
]
}
}
},
methods:{
addlist() {
this.list.push({
key1:'',
key2:'',
key3:'',
key4:''
})
},
dellist(i) {
this.list.splice(i,1)
},
save() {
const _this = this
let isyz = true
this.list.forEach((n,i) => {
this.$refs['ruleForm'][i].validate((valid) => {
if (!valid) {
isyz = false
}
})
})
if(isyz){
this.$message({
message: '保存成功',
type: 'success'
})
}
}
export default {
components: {
'v-chart': ECharts
},
data() {
let data = []
for (let i = 0; i <= 360; i++) {
let t = i / 180 * Math.PI
let r = Math.sin(2 * t) * Math.cos(2 * t)
data.push([r, i])
}
return {
polar: {
title: {
text: '极坐标双数值轴'
},
legend: {
data: ['line']
},
polar: {
center: ['50%', '54%']
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
}
},
angleAxis: {
type: 'value',
startAngle: 0
},
radiusAxis: {
min: 0
},
series: [
{
coordinateSystem: 'polar',
name: 'line',
type: 'line',
showSymbol: false,
data: data
}
],
animationDuration: 2000
},
equipmentList: [
{ name: 'CNC-001', statusText: '运行中', statusType: 'success', statusColor: '#67C23A' },
{ name: '注塑机-002', statusText: '待机', statusType: 'warning', statusColor: '#E6A23C' },
{ name: '组装线-003', statusText: '故障', statusType: 'danger', statusColor: '#F56C6C' },
{ name: '包装机-004', statusText: '维护', statusType: 'info', statusColor: '#909399' }
]
}
}
}
</script>
<style lang="scss" scoped>
.dashboard-container {
padding: 20px;
.stat-card {
margin-bottom: 20px;
.card-content {
display: flex;
align-items: center;
.card-icon {
width: 50px;
height: 50px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
i {
font-size: 24px;
color: white;
}
}
.card-info {
margin-left: 15px;
.label {
display: block;
color: #999;
font-size: 14px;
}
.value {
display: block;
font-size: 24px;
font-weight: bold;
margin-top: 5px;
}
}
}
}
.chart-row {
margin-top: 20px;
.chart {
height: 400px;
}
.progress-circle {
display: block;
margin: 20px auto;
}
.progress-text {
text-align: center;
color: #666;
font-size: 16px;
}
}
.status-row {
margin-top: 20px;
.equipment-status {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
.status-item {
display: flex;
align-items: center;
padding: 10px;
background: #f8f8f8;
border-radius: 4px;
i {
font-size: 24px;
margin-right: 10px;
}
span {
flex: 1;
margin-right: 10px;
}
}
}
}
}
</style>

View File

@ -1,664 +1,251 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="项目令号" prop="routeDescription">
<el-input
v-model="queryParams.routeDescription"
placeholder="请输入令号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="工序控制" prop="processControl">
<el-input
v-model="queryParams.processControl"
placeholder="请输入工序控制"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="活动时长" prop="activityDuration">
<el-input
v-model="queryParams.activityDuration"
placeholder="请输入活动时长"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="活动单位" prop="activityUnit">
<el-input
v-model="queryParams.activityUnit"
placeholder="请输入活动单位"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:route:add']"
>新增</el-button>
<div class="dashboard-container">
<!-- 顶部统计卡片 -->
<el-row :gutter="20">
<el-col :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#409EFF">
<i class="el-icon-s-data"></i>
</div>
<div class="card-info">
<span class="label">今日产量</span>
<span class="value">1,234 </span>
</div>
</div>
</el-card>
</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 :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#67C23A">
<i class="el-icon-s-check"></i>
</div>
<div class="card-info">
<span class="label">良品率</span>
<span class="value">98.5%</span>
</div>
</div>
</el-card>
</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 :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#E6A23C">
<i class="el-icon-s-tools"></i>
</div>
<div class="card-info">
<span class="label">设备利用率</span>
<span class="value">85%</span>
</div>
</div>
</el-card>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:route:export']"
>导出</el-button>
<el-col :span="6">
<el-card class="stat-card">
<div class="card-content">
<div class="card-icon" style="background:#F56C6C">
<i class="el-icon-s-flag"></i>
</div>
<div class="card-info">
<span class="label">异常数量</span>
<span class="value">3 </span>
</div>
</div>
</el-card>
</el-col>
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['system:details:import']"
>导入工艺
</el-button>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="shouhide"
v-hasPermi="['system:details:import']"
>展开/折叠
</el-button>
</el-col> -->
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table
v-if="showtable"
v-loading="loading"
:data="routeList"
stripe
:cell-style="columnStyle"
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 label="主键ID" align="center" prop="id" v-if="true"/>-->
<el-table-column label="" align="center" type="expand">
<template slot-scope="props">
<el-row>
<el-col :span="12">
<!-- 主要图表区域 -->
<el-row :gutter="20" class="chart-row">
<el-col :span="16">
<el-card>
<div slot="header" class="chart-title">生产趋势分析</div>
<v-chart :options="polar" />
</el-card>
</el-col>
<el-col :span="8">
<el-card>
<div slot="header" class="chart-title">生产进度</div>
<el-progress
type="circle"
:percentage="75"
:stroke-width="10"
status="success"
class="progress-circle"/>
<div class="progress-text">当前工单进度</div>
</el-card>
</el-col>
</el-row>
<fromed />
</el-col>
<!-- <el-col :span="12">
<el-col :span="1.5">
<el-button
type="primary"
plain
size="mini"
@click="save"
>保存</el-button>
</el-col>
<el-col :span="2">
<el-button
type="primary"
plain
size="mini"
@click="addgx"
>添加</el-button>
</el-col>
</el-col> -->
</el-row>
<!-- {{props.row.materialCode}} -->
</template>
</el-table-column>
<el-table-column label="项目令号" align="center">
<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="100" align="center" prop="materialCode" />
<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="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="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="150"align="center" prop="workCenter" />
<el-table-column label="工序名称"width="150" align="center" prop="processName" />
<el-table-column label="工序说明" width="300"align="center" prop="processDescription" />
<el-table-column label="工序控制"width="220" align="center" prop="processControl" />
<el-table-column label="活动时长" align="center" prop="activityDuration" />
<el-table-column label="活动单位" align="center" prop="activityUnit" />
<el-table-column label="材料BOM单位" align="center" prop="bomUnit" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:route:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:route:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改工艺路线对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="工艺路线描述" prop="routeDescription">
<el-input v-model="form.routeDescription" placeholder="请输入工艺路线描述" />
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入物料名称" />
</el-form-item>
<el-form-item label="单位" prop="bomUnit">
<el-input v-model="form.bomUnit" placeholder="请输入单位" />
</el-form-item>
<el-form-item label="工序号" prop="processNo">
<el-input v-model="form.processNo" placeholder="请输入工序号" />
</el-form-item>
<el-form-item label="工作中心" prop="workCenter">
<el-input v-model="form.workCenter" placeholder="请输入工作中心" />
</el-form-item>
<el-form-item label="工序名称" prop="processName">
<el-input v-model="form.processName" placeholder="请输入工序名称" />
</el-form-item>
<el-form-item label="原材料编码" prop="rawMaterialCode">
<el-input v-model="form.rawMaterialCode" placeholder="请输入原材料编码" />
</el-form-item>
<el-form-item label="原材料名称" prop="rawMaterialName">
<el-input v-model="form.rawMaterialName" placeholder="请输入原材料名称" />
</el-form-item>
<el-form-item label="金碟重量" prop="discWeight">
<el-input v-model="form.discWeight" placeholder="请输入金碟重量" />
</el-form-item>
<el-form-item label="金碟用量" prop="discUsage">
<el-input v-model="form.discUsage" placeholder="请输入金碟用量" />
</el-form-item>
<el-form-item label="工序说明" prop="processDescription">
<el-input v-model="form.processDescription" type="textarea" placeholder="请输入内容" />
</el-form-item>
<el-form-item label="工序控制" prop="processControl">
<el-input v-model="form.processControl" placeholder="请输入工序控制" />
</el-form-item>
<el-form-item label="活动时长" prop="activityDuration">
<el-input v-model="form.activityDuration" placeholder="请输入活动时长" />
</el-form-item>
<el-form-item label="活动单位" prop="activityUnit">
<el-input v-model="form.activityUnit" placeholder="请输入活动单位" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<!-- 导入导入对话框 -->
<el-dialog :title="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
>
<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-row :gutter="20" class="status-row">
<el-col :span="24">
<el-card>
<div slot="header" class="chart-title">设备运行状态</div>
<div class="equipment-status">
<div
v-for="(item, index) in equipmentList"
:key="index"
class="status-item">
<i class="el-icon-s-platform" :style="{color: item.statusColor}"></i>
<span>{{ item.name }}</span>
<el-tag :type="item.statusType">{{ item.statusText }}</el-tag>
</div>
</div>
<span>仅允许导入xlsxlsx格式文件</span>
<!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;"
@click="importTemplate">下载模板
</el-link>-->
</div>
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm"> </el-button>
<el-button @click="upload.open = false"> </el-button>
</div>
</el-dialog>
<el-drawer
title="添加BOM"
:visible.sync="BOMpop"
:before-close="bomClose"
:size="850"
>
<div style="padding: 20px;">
<el-table
:data="bomList"
stripe
max-height="400px"
border
>
<el-table-column label="单重" width="70" align="center" prop="discWeight" />
<el-table-column label="材料BOM物料编码" width="330" align="center" prop="rawMaterialCode" />
<el-table-column label="材料BOM物料名称" width="320" align="center" prop="rawMaterialName" />
<el-table-column label="用量" width="88" align="center" prop="discUsage" />
</el-table>
<Bomfrom v-if="BOMpop" style="padding-top: 20px;" />
</div>
</el-drawer>
</el-card>
</el-col>
</el-row>
</div>
</template>
<script>
import { listRoute, getRoute, delRoute, addRoute, updateRoute } from "@/api/system/route";
import upload from "svg-sprite-loader/examples/custom-runtime-generator/build/main";
import {getToken} from "../../../utils/auth";
import Fromed from './fromed'
import Bomfrom from './bomfrom'
export default {
name: "",
components:{
Fromed,
Bomfrom
},
computed: {
upload() {
return upload
}
},
data() {
let data = []
for (let i = 0; i <= 360; i++) {
let t = i / 180 * Math.PI
let r = Math.sin(2 * t) * Math.cos(2 * t)
data.push([r, i])
}
return {
showtable:true,
expand:true,
BOMpop:false,
bomList:[],
//expandRowKeys:[],
omdelData:'',
routeDescription: '', // productionOrderNo
// loading
buttonLoading: false,
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 线
routeList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 100,
routeDescription: undefined,
materialCode: undefined,
materialName: undefined,
bomUnit: undefined,
processNo: undefined,
workCenter: undefined,
processName: undefined,
rawMaterialCode: undefined,
rawMaterialName: undefined,
discWeight: undefined,
discUsage: undefined,
processDescription: undefined,
processControl: undefined,
activityDuration: undefined,
activityUnit: undefined,
},
//
form: {},
upload: {
//
open: false,
//
title: "",
//
isUploading: false,
//
updateSupport: 0,
//
headers: {Authorization: "Bearer " + getToken()},
//
url: process.env.VUE_APP_BASE_API + "/system/route/importData"
},
//
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
routeDescription: [
{ required: true, message: "工艺路线描述不能为空", trigger: "blur" }
],
materialCode: [
{ required: true, message: "物料编码不能为空", trigger: "blur" }
],
materialName: [
{ required: true, message: "物料名称不能为空", trigger: "blur" }
],
bomUnit: [
{ required: true, message: "单位不能为空", trigger: "blur" }
],
processNo: [
{ required: true, message: "工序号不能为空", trigger: "blur" }
],
workCenter: [
{ required: true, message: "工作中心不能为空", trigger: "blur" }
],
processName: [
{ required: true, message: "工序名称不能为空", trigger: "blur" }
],
rawMaterialCode: [
{ required: true, message: "原材料编码不能为空", trigger: "blur" }
],
rawMaterialName: [
{ required: true, message: "原材料名称不能为空", trigger: "blur" }
],
discWeight: [
{ required: true, message: "金碟重量不能为空", trigger: "blur" }
],
discUsage: [
{ required: true, message: "金碟用量不能为空", trigger: "blur" }
],
processDescription: [
{ required: true, message: "工序说明不能为空", trigger: "blur" }
],
processControl: [
{ required: true, message: "工序控制不能为空", trigger: "blur" }
],
activityDuration: [
{ required: true, message: "活动时长不能为空", trigger: "blur" }
],
activityUnit: [
{ required: true, message: "活动单位不能为空", trigger: "blur" }
],
createBy: [
{ required: true, message: "创建者不能为空", trigger: "blur" }
],
createTime: [
{ required: true, message: "创建时间不能为空", trigger: "blur" }
],
updateTime: [
{ required: true, message: "更新时间不能为空", trigger: "blur" }
]
}
};
},
created() {
const productionOrderNo = this.$route.query.productionOrderNo;
if (productionOrderNo) {
this.queryParams.routeDescription = productionOrderNo;
}else {}
this.getList();
},
mounted() {
// productionOrderNo
},
methods: {
cellhand(row, column) {
if(/单重|材料BOM物料编码|材料BOM物料名称|用量/.test(column.label)){
this.BOMpop = true
}
},
bomClose(){
this.BOMpop = false
},
shouhide() {
this.showtable = false
setTimeout(() => {
this.showtable = true
this.expand = !this.expand
}, 0);
},
columnStyle({ row, column, rowIndex, columnIndex }) {
//
if (columnIndex === 6) {
return 'background:#ccff99'
}
if (columnIndex === 7) {
return 'background:#ccff99'
}
if (columnIndex === 8) {
return 'background:#ccff99'
}
if (columnIndex === 9) {
return 'background:#ccff99'
}
},
/** 查询工艺路线列表 */
getList() {
this.loading = true;
listRoute(this.queryParams).then(response => {
this.routeList = response.rows;
this.total = response.total;
// this.expandRowKeys = routeList.map(n => {
// return n.id
// })
this.loading = false;
});
},
//
reset() {
this.form = {
id: undefined,
routeDescription: undefined,
materialCode: undefined,
materialName: undefined,
bomUnit: undefined,
processNo: undefined,
workCenter: undefined,
processName: undefined,
rawMaterialCode: undefined,
rawMaterialName: undefined,
discWeight: undefined,
discUsage: undefined,
processDescription: undefined,
processControl: undefined,
activityDuration: undefined,
activityUnit: undefined,
createBy: undefined,
updateBy: undefined,
createTime: undefined,
updateTime: undefined
};
this.resetForm("form");
},
/** 导入按钮操作 */
handleImport() {
this.upload.title = "工艺导入";
this.upload.open = true;
},
/** 下载模板操作 */
importTemplate() {
this.download('system/route/importTemplate', {}, `route_template_${new Date().getTime()}.xlsx`)
},
//
handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
this.upload.open = false;
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});
this.getList();
},
//
submitFileForm() {
this.$refs.upload.submit();
},
//
cancel() {
this.open = false;
this.reset();
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加工艺路线";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getRoute(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改工艺路线";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateRoute(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addRoute(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
polar: {
title: {
text: '极坐标双数值轴'
},
legend: {
data: ['line']
},
polar: {
center: ['50%', '54%']
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross'
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除工艺路线编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delRoute(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/route/export', {
...this.queryParams
}, `route_${new Date().getTime()}.xlsx`)
},
angleAxis: {
type: 'value',
startAngle: 0
},
radiusAxis: {
min: 0
},
series: [
{
coordinateSystem: 'polar',
name: 'line',
type: 'line',
showSymbol: false,
data: data
}
],
animationDuration: 2000
},
equipmentList: [
{ name: 'CNC-001', statusText: '运行中', statusType: 'success', statusColor: '#67C23A' },
{ name: '注塑机-002', statusText: '待机', statusType: 'warning', statusColor: '#E6A23C' },
{ name: '组装线-003', statusText: '故障', statusType: 'danger', statusColor: '#F56C6C' },
{ name: '包装机-004', statusText: '维护', statusType: 'info', statusColor: '#909399' }
]
}
}
};
}
</script>
<style lang="scss" scoped>
.dashboard-container {
padding: 20px;
.stat-card {
margin-bottom: 20px;
.card-content {
display: flex;
align-items: center;
.card-icon {
width: 50px;
height: 50px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
i {
font-size: 24px;
color: white;
}
}
.card-info {
margin-left: 15px;
.label {
display: block;
color: #999;
font-size: 14px;
}
.value {
display: block;
font-size: 24px;
font-weight: bold;
margin-top: 5px;
}
}
}
}
.chart-row {
margin-top: 20px;
.echarts {
width: 100% !important;
height: 100vh !important;
}
.progress-circle {
display: block;
margin: 20px auto;
}
.progress-text {
text-align: center;
color: #666;
font-size: 16px;
}
}
.status-row {
margin-top: 20px;
.equipment-status {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
.status-item {
display: flex;
align-items: center;
padding: 10px;
background: #f8f8f8;
border-radius: 4px;
i {
font-size: 24px;
margin-right: 10px;
}
span {
flex: 1;
margin-right: 10px;
}
}
}
}
}
</style>

View File

@ -103,16 +103,25 @@
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<el-dialog :visible="dialogVisible" @close="dialogVisible = false" width="30%">
<span class="dialog-title"> 库存信息</span>
<div class="dialog-content">
<p class="dialog-text">物料编号: {{ inventoryData.materialCode }}</p>
<p class="dialog-text">库存数量: {{ inventoryData.inventory }}</p>
<p class="dialog-text">物料仓库: {{ inventoryData.stockName }}</p>
<p class="dialog-text">物料名称: {{ inventoryData.materialName }}</p>
<p class="dialog-text">物料单位: {{ inventoryData.stockUnit }}</p>
</div>
</el-dialog>
<transition name="fade">
<el-dialog :visible="dialogVisible" @close="dialogVisible = false" width="30%">
<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">
<span class="dialog-title">库存信息</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-card>
</el-dialog>
</transition>
</div>
@ -134,6 +143,7 @@ export default {
return {
// loading
buttonLoading: false,
dialogLoading: false,
//
loading: true,
//
@ -183,17 +193,21 @@ export default {
this.showInventory(row.materialCode); //
},
showInventory(materialCode) {
//
this.dialogLoading = true; //
material_inventory(materialCode).then(response => {
this.inventoryData.materialCode = materialCode; //
this.inventoryData.inventory = response.data.quantity; //
this.inventoryData.materialName = response.data.materialName; //
this.inventoryData.stockName = response.data.stockName; //
this.inventoryData.stockUnit = response.data.stockUnit; //
this.dialogVisible = true; //
this.inventoryData.materialCode = materialCode;
this.inventoryData.inventory = response.data.quantity;
this.inventoryData.materialName = response.data.materialName;
this.inventoryData.stockName = response.data.stockName;
this.inventoryData.stockUnit = response.data.stockUnit;
this.inventoryData.kucun = response.data.kucun;
this.dialogVisible = true;
})
.catch(error => {
console.error('获取库存数失败:', error);
})
.finally(() => {
this.dialogLoading = false; //
});
},
@ -275,6 +289,39 @@ export default {
align-items: flex-start; /* 左对齐字段数据 */
margin-left: 5px; /* 调整字段数据与边框的距禿 */
}
.fade-enter-active, .fade-leave-active {
transition: opacity 0.4s ease;
}
.fade-enter, .fade-leave-to {
opacity: 0;
}
.box-card {
border-radius: 8px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
.dialog-title {
font-size: 18px;
font-weight: bold;
color: #409EFF;
}
.dialog-body {
font-family: '微软雅黑', sans-serif;
line-height: 1.6;
}
.dialog-item {
margin-bottom: 10px;
font-size: 14px;
color: #333;
}
.clearfix::after {
content: "";
display: block;
clear: both;
}
.dialog-text {
margin: 8px 0;

View File

@ -0,0 +1,394 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<!-- <el-form-item label="dir" prop="dir">
<el-input
v-model="queryParams.dir"
placeholder="请输入dir"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>-->
<el-form-item label="路径" prop="url">
<el-input
v-model="queryParams.url"
placeholder="请输入路径"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="项目图纸路径" prop="productDir">
<el-input
v-model="queryParams.productDir"
placeholder="请输入项目图纸路径"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="图纸路径" prop="fileUrl">
<el-input
v-model="queryParams.fileUrl"
placeholder="请输入图纸路径"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="备用字段1" prop="sparedOne">
<el-input
v-model="queryParams.sparedOne"
placeholder="请输入备用字段1"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="备用字段2" prop="sparedTwo">
<el-input
v-model="queryParams.sparedTwo"
placeholder="请输入备用字段2"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="备用字段3" prop="sparedThree">
<el-input
v-model="queryParams.sparedThree"
placeholder="请输入备用字段3"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="备用字段4" prop="sparedFour">
<el-input
v-model="queryParams.sparedFour"
placeholder="请输入备用字段4"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:configIni: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:configIni: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:configIni:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:configIni:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="configIniList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="项目图纸路径" align="center" prop="productDir" />-->
<el-table-column label="图纸类别" align="center" prop="fileType" />
<el-table-column label="图纸路径" align="center" prop="fileUrl" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:configIni:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:configIni:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改图纸配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<!-- <el-form-item label="dir" prop="dir">
<el-input v-model="form.dir" placeholder="请输入dir" />
</el-form-item>
<el-form-item label="路径" prop="url">
<el-input v-model="form.url" placeholder="请输入路径" />
</el-form-item>-->
<el-form-item label="项目图纸路径" prop="productDir">
<el-input v-model="form.productDir" placeholder="请输入项目图纸路径" />
</el-form-item>
<el-form-item label="图纸路径" prop="fileUrl">
<el-input v-model="form.fileUrl" placeholder="请输入图纸路径" />
</el-form-item>
<!-- <el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" placeholder="请输入备注" />
</el-form-item>
<el-form-item label="备用字段1" prop="sparedOne">
<el-input v-model="form.sparedOne" placeholder="请输入备用字段1" />
</el-form-item>
<el-form-item label="备用字段2" prop="sparedTwo">
<el-input v-model="form.sparedTwo" placeholder="请输入备用字段2" />
</el-form-item>
<el-form-item label="备用字段3" prop="sparedThree">
<el-input v-model="form.sparedThree" placeholder="请输入备用字段3" />
</el-form-item>
<el-form-item label="备用字段4" prop="sparedFour">
<el-input v-model="form.sparedFour" placeholder="请输入备用字段4" />
</el-form-item>-->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listConfigIni, getConfigIni, delConfigIni, addConfigIni, updateConfigIni } from "@/api/system/configIni";
export default {
name: "ConfigIni",
data() {
return {
// loading
buttonLoading: false,
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
configIniList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
dir: undefined,
url: undefined,
productDir: undefined,
fileType: undefined,
fileUrl: undefined,
sparedOne: undefined,
sparedTwo: undefined,
sparedThree: undefined,
sparedFour: undefined,
},
//
form: {},
//
rules: {
/*id: [
{ required: true, message: "主键id不能为空", trigger: "blur" }
],
dir: [
{ required: true, message: "dir不能为空", trigger: "blur" }
],
url: [
{ required: true, message: "路径不能为空", trigger: "blur" }
],*/
productDir: [
{ required: true, message: "项目图纸路径不能为空", trigger: "blur" }
],
fileType: [
{ required: true, message: "图纸类别不能为空", trigger: "change" }
],
fileUrl: [
{ required: true, message: "图纸路径不能为空", trigger: "blur" }
],
/*remark: [
{ required: true, message: "备注不能为空", trigger: "blur" }
],
sparedOne: [
{ required: true, message: "备用字段1不能为空", trigger: "blur" }
],
sparedTwo: [
{ required: true, message: "备用字段2不能为空", trigger: "blur" }
],
sparedThree: [
{ required: true, message: "备用字段3不能为空", trigger: "blur" }
],
sparedFour: [
{ required: true, message: "备用字段4不能为空", trigger: "blur" }
],*/
}
};
},
created() {
this.getList();
},
methods: {
/** 查询图纸配置列表 */
getList() {
this.loading = true;
listConfigIni(this.queryParams).then(response => {
this.configIniList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
createTime: undefined,
dir: undefined,
url: undefined,
productDir: undefined,
fileType: undefined,
fileUrl: undefined,
remark: undefined,
sparedOne: undefined,
sparedTwo: undefined,
sparedThree: undefined,
sparedFour: undefined,
delFlag: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加图纸配置";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getConfigIni(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改图纸配置";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateConfigIni(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addConfigIni(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除图纸配置编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delConfigIni(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/configIni/export', {
...this.queryParams
}, `configIni_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -414,6 +414,11 @@ export default {
},
generateMaterialCode() {
//
if (this.form.id) {
return;
}
const materialType = this.form.materialType; //
if (!materialType) {
this.$message.warning('请先选择类别。');
@ -427,8 +432,6 @@ export default {
},
getNextMaterialCode(baseCode) {
//
// ["DC0000000001", "DC0000000002"]
const existingCodes = ["DC0000000001", "DC0000000002"]; //
let nextCode = baseCode;
@ -445,15 +448,20 @@ export default {
//
handleModelSelect(item) {
if (item) {
//
//
const currentMaterialCode = this.form.materialCode;
//
this.form = {
...this.form, //
materialCode: item.materialCode,
materialType: item.materialType,
materialName: item.materialName,
model: item.model,
brand: item.brand
};
//
this.form.materialCode = currentMaterialCode;
}
},

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,621 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="型号全称" prop="typeName">
<el-input
v-model="queryParams.typeName"
placeholder="请输入型号全称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input
v-model="queryParams.productName"
placeholder="请输入产品名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input
v-model="queryParams.materialCode"
placeholder="请输入物料编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:pcRigidChain: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:pcRigidChain: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:pcRigidChain:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:pcRigidChain:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="pcRigidChainList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键" align="center" prop="id" v-if="true"/>
<el-table-column label="类型" align="center" prop="type" />
<el-table-column label="型号全称" align="center" prop="typeName" />
<el-table-column label="产品id" align="center" prop="productId" />
<el-table-column label="产品名称" align="center" prop="productName" />
<el-table-column label="轴向" align="center" prop="axialDirection" />
<el-table-column label="箱体" align="center" prop="box" />
<el-table-column label="行程" align="center" prop="journey" />
<el-table-column label="标记号" align="center" prop="lableNumber" />
<el-table-column label="L1" align="center" prop="lOne" />
<el-table-column label="L2" align="center" prop="lTwo" />
<el-table-column label="L3" align="center" prop="lThree" />
<el-table-column label="总重量" align="center" prop="sumWeight" />
<el-table-column label="链条自重" align="center" prop="chainWeight" />
<el-table-column label="动载荷" align="center" prop="dynamicLoad" />
<el-table-column label="静载荷" align="center" prop="deadLoad" />
<el-table-column label="每转上升高度" align="center" prop="riseInHeightPerRevolution" />
<el-table-column label="速度" align="center" prop="speed" />
<el-table-column label="系统效率" align="center" prop="efficiency" />
<el-table-column label="链条节距" align="center" prop="chainPitch" />
<el-table-column label="节圆半径" align="center" prop="pitchRadius" />
<el-table-column label="最低高度" align="center" prop="minimumAltitude" />
<el-table-column label="一米链条自重" align="center" prop="singleMeterChainWeight" />
<el-table-column label="驱动箱重量" align="center" prop="drivingBoxWeight" />
<el-table-column label="链箱重量" align="center" prop="chainBoxWeight" />
<el-table-column label="单价" align="center" prop="univalence" />
<el-table-column label="图片" align="center" prop="picture" />
<el-table-column label="部件id集合" align="center" prop="partId" />
<el-table-column label="备注" align="center" prop="remark" />
<el-table-column label="备用字段1" align="center" prop="sparedOne" />
<el-table-column label="备用字段2" align="center" prop="sparedTwo" />
<el-table-column label="备用字段3" align="center" prop="sparedThree" />
<el-table-column label="备用字段4" align="center" prop="sparedFour" />
<el-table-column label="行程" align="center" prop="vOne" />
<el-table-column label="设备总长" align="center" prop="vTwo" />
<el-table-column label="地脚位置1" align="center" prop="vThree" />
<el-table-column label="地脚位置2" align="center" prop="vFour" />
<el-table-column label="箱体装配长度" align="center" prop="vFive" />
<el-table-column label="箱体地脚位置1" align="center" prop="vSix" />
<el-table-column label="箱体地脚位置2" align="center" prop="vSeven" />
<el-table-column label="铝箱长度1" align="center" prop="vEight" />
<el-table-column label="铝箱长度2" align="center" prop="vNine" />
<el-table-column label="导向条长度1" align="center" prop="vTen" />
<el-table-column label="导向条长度1数量" align="center" prop="vEleven" />
<el-table-column label="导向条长度2" align="center" prop="vTwelve" />
<el-table-column label="导向条长度2数量" align="center" prop="vThirteen" />
<el-table-column label="导向条长度3" align="center" prop="vFourteen" />
<el-table-column label="导向条长度3数量" align="center" prop="vFifteen" />
<el-table-column label="孔位总长1" align="center" prop="vSixteen" />
<el-table-column label="间隔数量1" align="center" prop="vSeveteen" />
<el-table-column label="孔位总长2" align="center" prop="vEighteen" />
<el-table-column label="间隔数量2" align="center" prop="vNineteen" />
<el-table-column label="铆钉数量" align="center" prop="vTwenty" />
<el-table-column label="v21" align="center" prop="vTwentyOne" />
<el-table-column label="v22" align="center" prop="vTwentyTwo" />
<el-table-column label="v23" align="center" prop="vTwentyThree" />
<el-table-column label="v24" align="center" prop="vTwentyFour" />
<el-table-column label="v25" align="center" prop="vTwentyFive" />
<el-table-column label="26" align="center" prop="vTwentySix" />
<el-table-column label="v27" align="center" prop="vTwentySeven" />
<el-table-column label="v28" align="center" prop="vTwentyEight" />
<el-table-column label="v29" align="center" prop="vTwentyNine" />
<el-table-column label="v30" align="center" prop="vThirty" />
<el-table-column label="v31" align="center" prop="vThirtyOne" />
<el-table-column label="v32" align="center" prop="vThirtyTwo" />
<el-table-column label="v33" align="center" prop="vThirtyThree" />
<el-table-column label="v34" align="center" prop="vThirtyFour" />
<el-table-column label="v35" align="center" prop="vThirtyFive" />
<el-table-column label="v36" align="center" prop="vThirtySix" />
<el-table-column label="v37" align="center" prop="vThirtySeven" />
<el-table-column label="v38" align="center" prop="vThirtyEight" />
<el-table-column label="v39" align="center" prop="vThirtyNine" />
<el-table-column label="v40" align="center" prop="vForty" />
<el-table-column label="X1" align="center" prop="vFortyOne" />
<el-table-column label="X2" align="center" prop="vFortyTwo" />
<el-table-column label="X3" align="center" prop="vFortyThree" />
<el-table-column label="X4" align="center" prop="vFortyFour" />
<el-table-column label="X5" align="center" prop="vFortyFive" />
<el-table-column label="X6" align="center" prop="vFortySix" />
<el-table-column label="X7" align="center" prop="vFortySeven" />
<el-table-column label="X8" align="center" prop="vFortyEight" />
<el-table-column label="X9" align="center" prop="vFortyNine" />
<el-table-column label="X10" align="center" prop="vFifty" />
<el-table-column label="X11" align="center" prop="vFiftyOne" />
<el-table-column label="X12" align="center" prop="vFiftyTwo" />
<el-table-column label="X13" align="center" prop="vFiftyThree" />
<el-table-column label="重量" align="center" prop="gOne" />
<el-table-column label="重量" align="center" prop="gTwo" />
<el-table-column label="重量" align="center" prop="gThree" />
<el-table-column label="重量" align="center" prop="gFour" />
<el-table-column label="重量" align="center" prop="gFive" />
<el-table-column label="重量" align="center" prop="gSix" />
<el-table-column label="重量" align="center" prop="gSeven" />
<el-table-column label="重量" align="center" prop="gEight" />
<el-table-column label="重量" align="center" prop="gNine" />
<el-table-column label="重量" align="center" prop="gTen" />
<el-table-column label="重量" align="center" prop="gEleven" />
<el-table-column label="重量" align="center" prop="gTwelve" />
<el-table-column label="重量" align="center" prop="gThirteen" />
<el-table-column label="重量" align="center" prop="gFourteen" />
<el-table-column label="重量" align="center" prop="gFifteen" />
<el-table-column label="重量" align="center" prop="gSixteen" />
<el-table-column label="重量" align="center" prop="gSeveteen" />
<el-table-column label="重量" align="center" prop="gEighteen" />
<el-table-column label="重量" align="center" prop="gNineteen" />
<el-table-column label="重量" align="center" prop="gTwenty" />
<el-table-column label="物料编码" align="center" prop="materialCode" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:pcRigidChain:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:pcRigidChain:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改销齿链型号管理对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="型号全称" prop="typeName">
<el-input v-model="form.typeName" placeholder="请输入型号全称" />
</el-form-item>
<el-form-item label="产品id" prop="productId">
<el-input v-model="form.productId" placeholder="请输入产品id" />
</el-form-item>
<el-form-item label="产品名称" prop="productName">
<el-input v-model="form.productName" placeholder="请输入产品名称" />
</el-form-item>
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listRigidChain, getRigidChain, delRigidChain, addRigidChain, updateRigidChain } from "@/api/system/pcRigidChain";
export default {
name: "RigidChain",
data() {
return {
// loading
buttonLoading: false,
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 齿
pcRigidChainList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
type: undefined,
typeName: undefined,
productId: undefined,
productName: undefined,
axialDirection: undefined,
box: undefined,
journey: undefined,
lableNumber: undefined,
lOne: undefined,
lTwo: undefined,
lThree: undefined,
sumWeight: undefined,
chainWeight: undefined,
dynamicLoad: undefined,
deadLoad: undefined,
riseInHeightPerRevolution: undefined,
speed: undefined,
efficiency: undefined,
chainPitch: undefined,
pitchRadius: undefined,
minimumAltitude: undefined,
singleMeterChainWeight: undefined,
drivingBoxWeight: undefined,
chainBoxWeight: undefined,
univalence: undefined,
picture: undefined,
partId: undefined,
sparedOne: undefined,
sparedTwo: undefined,
sparedThree: undefined,
sparedFour: undefined,
vOne: undefined,
vTwo: undefined,
vThree: undefined,
vFour: undefined,
vFive: undefined,
vSix: undefined,
vSeven: undefined,
vEight: undefined,
vNine: undefined,
vTen: undefined,
vEleven: undefined,
vTwelve: undefined,
vThirteen: undefined,
vFourteen: undefined,
vFifteen: undefined,
vSixteen: undefined,
vSeveteen: undefined,
vEighteen: undefined,
vNineteen: undefined,
vTwenty: undefined,
vTwentyOne: undefined,
vTwentyTwo: undefined,
vTwentyThree: undefined,
vTwentyFour: undefined,
vTwentyFive: undefined,
vTwentySix: undefined,
vTwentySeven: undefined,
vTwentyEight: undefined,
vTwentyNine: undefined,
vThirty: undefined,
vThirtyOne: undefined,
vThirtyTwo: undefined,
vThirtyThree: undefined,
vThirtyFour: undefined,
vThirtyFive: undefined,
vThirtySix: undefined,
vThirtySeven: undefined,
vThirtyEight: undefined,
vThirtyNine: undefined,
vForty: undefined,
vFortyOne: undefined,
vFortyTwo: undefined,
vFortyThree: undefined,
vFortyFour: undefined,
vFortyFive: undefined,
vFortySix: undefined,
vFortySeven: undefined,
vFortyEight: undefined,
vFortyNine: undefined,
vFifty: undefined,
vFiftyOne: undefined,
vFiftyTwo: undefined,
vFiftyThree: undefined,
gOne: undefined,
gTwo: undefined,
gThree: undefined,
gFour: undefined,
gFive: undefined,
gSix: undefined,
gSeven: undefined,
gEight: undefined,
gNine: undefined,
gTen: undefined,
gEleven: undefined,
gTwelve: undefined,
gThirteen: undefined,
gFourteen: undefined,
gFifteen: undefined,
gSixteen: undefined,
gSeveteen: undefined,
gEighteen: undefined,
gNineteen: undefined,
gTwenty: undefined,
materialCode: undefined
},
//
form: {},
//
rules: {
id: [
{ required: true, message: "主键不能为空", trigger: "blur" }
],
type: [
{ required: true, message: "类型不能为空", trigger: "change" }
],
typeName: [
{ required: true, message: "型号全称不能为空", trigger: "blur" }
],
productId: [
{ required: true, message: "产品id不能为空", trigger: "blur" }
],
productName: [
{ required: true, message: "产品名称不能为空", trigger: "blur" }
],
materialCode: [
{ required: true, message: "物料编码不能为空", trigger: "blur" }
]
}
};
},
created() {
this.getList();
},
methods: {
/** 查询销齿链型号管理列表 */
getList() {
this.loading = true;
listRigidChain(this.queryParams).then(response => {
this.pcRigidChainList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
createTime: undefined,
type: undefined,
typeName: undefined,
productId: undefined,
productName: undefined,
axialDirection: undefined,
box: undefined,
journey: undefined,
lableNumber: undefined,
lOne: undefined,
lTwo: undefined,
lThree: undefined,
sumWeight: undefined,
chainWeight: undefined,
dynamicLoad: undefined,
deadLoad: undefined,
riseInHeightPerRevolution: undefined,
speed: undefined,
efficiency: undefined,
chainPitch: undefined,
pitchRadius: undefined,
minimumAltitude: undefined,
singleMeterChainWeight: undefined,
drivingBoxWeight: undefined,
chainBoxWeight: undefined,
univalence: undefined,
picture: undefined,
partId: undefined,
remark: undefined,
sparedOne: undefined,
sparedTwo: undefined,
sparedThree: undefined,
sparedFour: undefined,
delFlag: undefined,
vOne: undefined,
vTwo: undefined,
vThree: undefined,
vFour: undefined,
vFive: undefined,
vSix: undefined,
vSeven: undefined,
vEight: undefined,
vNine: undefined,
vTen: undefined,
vEleven: undefined,
vTwelve: undefined,
vThirteen: undefined,
vFourteen: undefined,
vFifteen: undefined,
vSixteen: undefined,
vSeveteen: undefined,
vEighteen: undefined,
vNineteen: undefined,
vTwenty: undefined,
vTwentyOne: undefined,
vTwentyTwo: undefined,
vTwentyThree: undefined,
vTwentyFour: undefined,
vTwentyFive: undefined,
vTwentySix: undefined,
vTwentySeven: undefined,
vTwentyEight: undefined,
vTwentyNine: undefined,
vThirty: undefined,
vThirtyOne: undefined,
vThirtyTwo: undefined,
vThirtyThree: undefined,
vThirtyFour: undefined,
vThirtyFive: undefined,
vThirtySix: undefined,
vThirtySeven: undefined,
vThirtyEight: undefined,
vThirtyNine: undefined,
vForty: undefined,
vFortyOne: undefined,
vFortyTwo: undefined,
vFortyThree: undefined,
vFortyFour: undefined,
vFortyFive: undefined,
vFortySix: undefined,
vFortySeven: undefined,
vFortyEight: undefined,
vFortyNine: undefined,
vFifty: undefined,
vFiftyOne: undefined,
vFiftyTwo: undefined,
vFiftyThree: undefined,
gOne: undefined,
gTwo: undefined,
gThree: undefined,
gFour: undefined,
gFive: undefined,
gSix: undefined,
gSeven: undefined,
gEight: undefined,
gNine: undefined,
gTen: undefined,
gEleven: undefined,
gTwelve: undefined,
gThirteen: undefined,
gFourteen: undefined,
gFifteen: undefined,
gSixteen: undefined,
gSeveteen: undefined,
gEighteen: undefined,
gNineteen: undefined,
gTwenty: undefined,
materialCode: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加销齿链型号管理";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getRigidChain(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改销齿链型号管理";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateRigidChain(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addRigidChain(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除销齿链型号管理编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delRigidChain(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/pcRigidChain/export', {
...this.queryParams
}, `pcRigidChain_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -305,19 +305,40 @@
<el-input v-model="form.drawingPreview" placeholder="请输入执行单路径"/>
</el-form-item>
</el-col>
</el-row>
<!-- 循环展示固定的七个子项 -->
<el-row :gutter="20" v-for="(item, index) in form.subItems" :key="index">
<el-col :span="12">
<el-form-item :label="item.text">
<el-date-picker v-model="item.startDate" type="datetime" placeholder="请选择开始日期"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<el-input v-model.number="item.duration" placeholder="请输入持续时间(天数)"/>
</el-form-item>
</el-col>
<el-form-item label="开始日期" prop="startDate">
<el-date-picker clearable
v-model="form.startDate"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择开始日期">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="endTime">
<el-date-picker clearable
v-model="form.endTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择结束时间">
</el-date-picker>
</el-form-item>
<!-- 图片上传控件 -->
<el-form-item label="图片" prop="pictureUrl">
<el-upload
:action="imgUpload.url"
:headers="imgUpload.headers"
:on-success="handlePictureSuccess"
:before-upload="beforePictureUpload"
list-type="picture-card"
:file-list="fileListShow"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemovePicture"
multiple>
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" />
</el-dialog>
</el-form-item>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
@ -526,7 +547,16 @@ export default {
productionAssemblyTime: [
{ required: true, message: "生产装配时间不能为空", trigger: "blur" }
],*/
}
},
imgUpload: {
url: process.env.VUE_APP_BASE_API + "/system/plan/uploadPicture",
headers: {Authorization: "Bearer " + getToken()}
},
dialogVisible: false,
dialogImageUrl: '',
fileListShow: [],
fileListPut: [],
type: 0
};
},
created() {
@ -881,27 +911,31 @@ export default {
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
const id = row.id || this.ids;
getPlan(id).then(response => {
this.loading = false;
this.form = response.data;
console.log(response.data)
// this.form.subItems = [
// {text: ' ', startDate: '', duration: ''},
// {text: ' ', startDate: '', duration: ''},
// {text: ' ', startDate: '', duration: ''},
// {text: '', startDate: '', duration: ''},
// {text: ' ', startDate: '', duration: ''},
// {text: '', startDate: '', duration: ''},
// {text: '', startDate: '', duration: ''},
// {text: ' ', startDate: '', duration: ''}
// ]
//
if (this.form.pictureUrl) {
try {
this.fileListShow = JSON.parse(this.form.pictureUrl);
this.fileListPut = JSON.parse(this.form.pictureUrl);
} catch (e) {
this.fileListShow = [];
this.fileListPut = [];
}
} else {
this.fileListShow = [];
this.fileListPut = [];
}
this.open = true;
this.title = "修改排产计划";
});
},
/** 提交按钮 */
submitForm() {
// JSON
this.form.pictureUrl = JSON.stringify(this.fileListPut);
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
@ -945,6 +979,27 @@ export default {
this.download('system/plan/export', {
...this.queryParams
}, `plan_${new Date().getTime()}.xlsx`)
},
handlePictureSuccess(response, file) {
const imgObj = { name: file.name, url: response.data.url };
this.fileListShow.push(imgObj);
this.fileListPut.push(imgObj);
},
beforePictureUpload(file) {
const isJPG = file.type === 'image/jpeg';
const isPNG = file.type === 'image/png';
if (!isJPG && !isPNG) {
this.$message.error('上传图片只能是 JPG 或 PNG 格式!');
}
return isJPG || isPNG;
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
handleRemovePicture(file) {
this.fileListShow = this.fileListShow.filter(f => f.name !== file.name);
this.fileListPut = this.fileListPut.filter(f => f.name !== file.name);
}
}
};

View File

@ -0,0 +1,67 @@
/* dhtmlx-gantt basic styling */
.dhx_cal_data {
background-color: #ffffff;
border: 1px solid #ccc;
}
.dhx_cal_event {
position: absolute;
cursor: pointer;
border-radius: 3px;
}
.dhx_cal_event_line {
background-color: #00a0e9;
border: 1px solid #0077b5;
}
.dhx_cal_event_task {
background-color: #f5a623;
}
.dhx_cal_event_complete {
background-color: #66bb6a;
}
.dhx_gantt_task_line {
border-left: 2px solid #00a0e9;
}
.dhx_gantt_grid_line {
border-top: 1px solid #ccc;
}
.dhx_gantt_grid_data {
background-color: #fafafa;
}
.dhx_gantt_grid_cell {
padding: 4px;
text-align: center;
font-size: 12px;
}
.dhx_gantt_calendar_button {
border: 1px solid #ccc;
padding: 5px;
cursor: pointer;
}
.dhx_gantt_scale {
background-color: #f4f4f4;
padding: 5px;
text-align: center;
}
.dhx_gantt_scale_cell {
border-right: 1px solid #ddd;
}
.dhx_gantt_scale_cell_today {
background-color: #ffeb3b;
}
.dhx_gantt_task {
background-color: #e1e8f0;
border: 1px solid #b0c4de;
}

View File

@ -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>
@ -21,50 +21,65 @@
<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']">新增
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']">修改
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']">删除
v-hasPermi="['system:route:remove']">删除
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:route:export']">导出
<el-button type="primary" plain icon="el-icon-download" size="mini" @click="handleExport"
v-hasPermi="['system:route:export']">导出
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload2" size="mini" @click="handleImport"
v-hasPermi="['system:details:import']">导入工艺
<el-button type="success" plain icon="el-icon-upload" size="mini" @click="handleImport"
v-hasPermi="['system:details:importRoute']">导入工艺
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="handleImportTime"
v-hasPermi="['system:route:importDataTime']">导入时间
<el-button type="warning" plain icon="el-icon-time" size="mini" @click="handleImportTime"
v-hasPermi="['system:route:importDataTime']">导入时间
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="pushRouteBom"
v-hasPermi="['system:details:import']">推送工艺
<el-button type="info" plain icon="el-icon-share" size="mini" @click="pushRouteBom"
v-hasPermi="['system:details:pushRouteBom']">推送工艺
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="updateProcessPlan"
v-hasPermi="['system:details:import']">更新计划时间
<el-button type="danger" plain icon="el-icon-edit" size="mini" @click="updateProcessPlan"
v-hasPermi="['system:details:updateProcessPlan']">更新计划时间
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="generatePDFs1"
v-hasPermi="['system:details:import']">生成PDF
<el-button type="success" plain icon="el-icon-setting" size="mini" @click="updateProcesTime"
v-hasPermi="['system:details: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:details:generatePDFs1']">生成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']">获取标准工艺
</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']">获取全部工艺
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
@ -72,18 +87,18 @@
<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"
:cell-style="columnStyle" 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"
:cell-style="columnStyle" 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="操作" align="center">
<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>
@ -93,12 +108,12 @@
scope.row.routeDescription }}</router-link>
</template>
</el-table-column> -->
<el-table-column label="物料编码" width="120" align="center" prop="materialCode" />
<el-table-column label="名称" width="120" align="center" prop="materialName" />
<el-table-column label="物料编码" width="120" align="center" prop="materialCode"/>
<el-table-column label="名称" width="120" align="center" prop="materialName"/>
<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="firstBatchQuantity">
<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="{
color: scope.row.firstBatchQuantity > 0 ? 'green' : 'red',
@ -108,34 +123,35 @@
</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="材料BOM物料编码" width="220"align="center" prop="rawMaterialCode" />
<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="84" align="center">
<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>
<el-table-column label="工序名称" width="100" align="center">
<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>
@ -143,10 +159,10 @@
</template>
</el-table-column>
<el-table-column label="序说明" width="200" align="center">
<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>
@ -170,20 +186,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>
@ -192,16 +208,17 @@
<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="bomUnit" /> -->
<!-- <el-table-column label="单台数量" align="center" prop="unitQuantity" /> -->
<el-table-column label="计划开始时间" align="center" prop="planStartTime" width="180">
<template slot-scope="scope">
@ -215,13 +232,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">
@ -236,11 +253,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>
@ -257,7 +274,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">
@ -265,12 +282,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>
@ -278,12 +295,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>
@ -303,7 +320,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>
@ -311,12 +328,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>
@ -340,7 +357,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>
@ -350,7 +367,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>
@ -367,7 +384,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>
@ -375,15 +392,17 @@
<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>
@ -397,13 +416,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>仅允许导入xlsxlsx格式文件</span>
@ -420,8 +439,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">
@ -465,13 +484,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">
@ -483,12 +502,13 @@
<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>
@click="handleBomDelete(scope.row)">删除
</el-button>
</template>
</el-table-column>
</el-table>
@ -502,7 +522,8 @@
<!-- 物料名称 - 支持搜索或手动输入 -->
<el-form-item label="物料名称" prop="materialName">
<el-autocomplete v-model="bomForm.materialName" :fetch-suggestions="handleMaterialSearch"
:trigger-on-focus="false" @select="handleMaterialSelect" placeholder="请输入物料名称" clearable
:trigger-on-focus="false" @select="handleMaterialSelect" placeholder="请输入物料名称"
clearable
popper-class="material-autocomplete-dropdown">
<template slot-scope="{ item }">
<div class="material-suggestion-item">
@ -542,12 +563,14 @@
<!-- 当前库存 - 允许手动输入 -->
<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>
@ -562,14 +585,14 @@
<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" width="140" align="center" />
<el-table-column label="物料名称" prop="materialName" 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" width="140" align="center"/>
<el-table-column label="物料名称" prop="materialName" 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)"
:type="selectedRouteId === scope.row.id ? 'success' : 'primary'">
:type="selectedRouteId === scope.row.id ? 'success' : 'primary'">
{{ selectedRouteId === scope.row.id ? '查看中' : '查看' }}
</el-button>
</template>
@ -582,11 +605,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 }}
@ -607,16 +630,18 @@ import {
addRoute,
updateRoute,
getDistinctProjectCodes,
updateProcessPlan, generatePDFs, updateBom, addBom, deleteBom
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";
DictData.install();
export default {
name: "",
@ -643,7 +668,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: [], //
@ -676,7 +701,7 @@ export default {
//
single: true,
//
multiple: true,
multiple: false,
//
showSearch: true,
//
@ -810,7 +835,7 @@ export default {
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
headers: {Authorization: "Bearer " + getToken()},
//
url: process.env.VUE_APP_BASE_API + "/system/route/importData"
},
@ -818,25 +843,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,
@ -855,31 +880,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: [],
@ -899,6 +924,7 @@ export default {
selectedRouteId: null, // 线ID
selectedRoute: null, // 线
currentProcessList: [], //
dataList: [], //
};
},
created() {
@ -935,11 +961,77 @@ export default {
}
},
methods: {
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.$route.query.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();
},
dict,
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.$route.query.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);
//
@ -971,7 +1063,7 @@ export default {
}
}
return { valid: true };
return {valid: true};
},
//
@ -1029,9 +1121,6 @@ export default {
},
/** 导入时间按钮操作 */
handleImportTime() {
this.timeUpload.title = "导入时间";
@ -1047,7 +1136,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();
},
//
@ -1058,7 +1147,7 @@ export default {
const tbody = document.querySelector('.el-table__body-wrapper tbody');
const _this = this;
Sortable.create(tbody, {
onEnd({ newIndex, oldIndex }) {
onEnd({newIndex, oldIndex}) {
const currRow = _this.form.routeList[oldIndex];
//
if (currRow.parentId) {
@ -1109,7 +1198,6 @@ export default {
this.bomData = response || [];
this.totalBomCount = this.bomData.length;
}).catch(error => {
console.error('获取BOM数据失败:', error);
this.$message.error('获取BOM数据失败');
this.bomData = [];
}).finally(() => {
@ -1163,7 +1251,7 @@ export default {
});
},
//
tableRowClassName({ row, rowIndex }) {
tableRowClassName({row, rowIndex}) {
//
if (!row.parentId) {
return "filtered";
@ -1259,7 +1347,6 @@ export default {
},
setTotalWeight() {
const totalWeight = this.$route.query.productionOrderNo;
if (totalWeight) {
@ -1326,7 +1413,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();
},
//
@ -1389,7 +1476,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,
@ -1407,7 +1494,6 @@ export default {
},
/**推送工艺 */
async pushRouteBom() {
//
@ -1449,7 +1535,7 @@ export default {
timeoutPromise
]);
//
const { duplicateRoutes, failedRoutes, successfulRoutes } = response;
const {duplicateRoutes, failedRoutes, successfulRoutes} = response;
//
const duplicateCodes = duplicateRoutes.join(', ');
const failedCodes = failedRoutes.map(route => route.materialCode).join(', ');
@ -1494,7 +1580,7 @@ export default {
this.loading = false;
}
},
/** 更新计划<EFBFBD><EFBFBD><EFBFBD>间*/
/** 更新计划时间间*/
updateProcessPlan(row) {
//
this.loading = true;
@ -1524,6 +1610,36 @@ export default {
this.loading = false;
});
},
/** 更新生产订单时间*/
updateProcesTime(row) {
//
this.loading = true;
// reset
this.reset();
//
const rooteProdet = this.$route.query.productionOrderNo;
console.log(rooteProdet);
// API
updateProcesTime(rooteProdet)
.then(response => {
//
this.form = response;
//
this.$modal.msgSuccess("更新" + rooteProdet + "生产订单成功");
//
this.getList();
})
.catch(error => {
//
this.$modal.msgError("更新,请重试!");
console.error('更新生产订单失败:', error);
})
.finally(() => {
//
this.loading = false;
});
},
generatePDFs1(row) {
//
this.loading = true;
@ -1537,7 +1653,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
@ -1653,7 +1769,8 @@ export default {
}).then(() => {
this.$message.success('删除成功');
this.handleBomRefresh();
}).catch(() => { });
}).catch(() => {
});
},
// BOM

View File

@ -90,6 +90,8 @@
<el-table-column label="主键ID" align="center" prop="id" v-if="true"/>
<el-table-column label="物料编码" align="center" prop="materialCode" />
<el-table-column label="物料名称" align="center" prop="materialName" />
<el-table-column label="材质" align="center" prop="wlMaterial" />
<el-table-column label="类型" align="center" prop="type" />
<el-table-column label="最低安全库存" align="center" prop="minSafetyStock" />
<el-table-column label="最高安全库存" align="center" prop="maxSafetyStock" />
<el-table-column label="即时库存" align="center" prop="currentStock" />

View File

@ -9,11 +9,19 @@
<el-input v-model="queryParams.materialName" placeholder="请输入物料名称" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="所需库存" prop="requiredStock">
<el-form-item label="材质" prop="wlMaterial">
<el-input
v-model="queryParams.wlMaterial"
placeholder="请输入材质"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="预计可用量" prop="requiredStock">
<el-input v-model="queryParams.requiredStock" placeholder="请输入所需库存" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
<el-form-item label="当前库存" prop="currentStock">
<el-form-item label="即时库存" prop="currentStock">
<el-input v-model="queryParams.currentStock" placeholder="请输入当前库存" clearable
@keyup.enter.native="handleQuery" />
</el-form-item>
@ -22,6 +30,31 @@
placeholder="请选择触发时间">
</el-date-picker>
</el-form-item>
<el-form-item label="是否符合要求" prop="safeStatus">
<el-select v-model="queryParams.safeStatus" placeholder="请选择" clearable>
<el-option label="是" :value="1" />
<el-option label="否" :value="0" />
</el-select>
</el-form-item>
<el-form-item label="分组" prop="wlMaterial">
<el-select v-model="queryParams.wlMaterial" placeholder="请选择" clearable>
<el-option label="30S" value="30S" />
<el-option label="30D" value="30D" />
<el-option label="35E" value="35E" />
<el-option label="40S" value="40S" />
<el-option label="35R" value="35R" />
<el-option label="40R" value="40R" />
<el-option label="40C" value="40C" />
<el-option label="60R" value="60R" />
<el-option label="80R" value="80R" />
<el-option label="通用" value="通用" />
<el-option label="行程检测" value="行程检测" />
<el-option label="行程检测白模具三" value="行程检测白模具三" />
<el-option label="行程检测灰模具三" value="行程检测灰模具三" />
<el-option label="行程检测模具四" value="行程检测模具四" />
<el-option label="行程检测模具五" value="行程检测模具五" />
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -67,23 +100,30 @@
</el-table-column>
<el-table-column label="物料名称" align="center" prop="materialName" />
<el-table-column label="所需库存" align="center" prop="requiredStock" />
<el-table-column label="当前库存" align="center" prop="currentStock" />
<el-table-column label="材质 " align="center" width="200" prop="documentType" />
<el-table-column label="预计可用量" align="center" prop="currentStock" />
<!-- <el-table-column label="即时库存" align="center" prop="currentStock" />-->
<el-table-column label="可用库存" align="center" prop="availableStock" />
<el-table-column label="库存量" align="center" prop="secAvbqty" />
<el-table-column label="生产订单数量" align="center" prop="productionQty" />
<el-table-column label="采购订单数量" align="center" prop="purchaseQty" />
<el-table-column label="预留量" align="center" prop="secQty" />
<el-table-column label="用料清单未领料数量" align="center" prop="availableStock" />
<el-table-column label="即时库存" align="center" prop="secAvbqty" />
<el-table-column label="生产订单未入库数量" align="center" prop="productionQty" />
<el-table-column label="采购订单未入库数量" align="center" prop="purchaseQty" />
<el-table-column label="最大安全库存" align="center" prop="maxsafetyStock" />
<el-table-column label="最低安全库存" align="center" prop="minsafetyStock" />
<el-table-column label="分组" align="center" prop="wlMaterial" />
<el-table-column label="是否符合安全库存要求" align="center" prop="safeStatus">
<template slot-scope="scope">
<dict-tag :options="dict.type.safe_status" :value="scope.row.safeStatus"></dict-tag>
</template>
</el-table-column>
<el-table-column label="触发时间" align="center" prop="triggerTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.triggerTime, '{y}-{m}-{d}') }}</span>
</template>
</el-table-column>
<el-table-column label="单据类型 " align="center" width="200" prop="documentType" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
@ -137,6 +177,7 @@
</template>
<script>
import {
listStockData,
getStockData,
@ -145,10 +186,12 @@ import {
updateStockData,
generateDoc,
logs,
fetchLogs
} from "@/api/system/stockData";
import dict from "@/utils/dict";
import DictData from "@/components/DictData";
DictData.install();
export default {
dicts: ['safe_status'],
name: "StockData",
data() {
return {
@ -182,6 +225,7 @@ export default {
currentStock: undefined,
triggerTime: undefined,
documentType: undefined,
wlMaterial: undefined,
},
//
form: {},
@ -231,6 +275,7 @@ export default {
this.getList();
},
methods: {
dict,
/** 查询安全库存单据列表 */
getList() {
this.loading = true;
@ -256,6 +301,8 @@ export default {
triggerTime: undefined,
documentType: undefined,
createTime: undefined,
safeStatus: undefined,
wlMaterial: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined

View File

@ -1,14 +1,14 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="生产令号" prop="productionOrderNumber">
<!-- <el-form-item label="生产令号" prop="productionOrderNumber">
<el-input
v-model="queryParams.productionOrderNumber"
placeholder="请输入生产令号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-form-item>-->
<el-form-item label="物料编码" prop="materialCode">
<el-input
v-model="queryParams.materialCode"
@ -25,28 +25,28 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="数量" prop="quantity">
<el-form-item label="仓库编码" prop="quantity">
<el-input
v-model="queryParams.quantity"
placeholder="请输入数量"
placeholder="请输入仓库编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="库存" prop="inventory">
<el-form-item label="仓位编码" prop="inventory">
<el-input
v-model="queryParams.inventory"
placeholder="请输入库存"
placeholder="请输入仓位编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="需求时间" prop="demandTime">
<!-- <el-form-item label="需求时间" prop="demandTime">
<el-date-picker clearable
v-model="queryParams.demandTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择需求时间">
v-model="queryParams.demandTime"
type="date"
value-format="yyyy-MM-dd"
placeholder="请选择需求时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remarks">
@ -56,7 +56,7 @@
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
</el-form-item>-->
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@ -106,18 +106,17 @@
v-hasPermi="['system:total:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="totalList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="" align="center" prop="id" v-if="true"/>
<el-table-column label="生产令号" align="center" prop="productionOrderNumber" />
<!-- <el-table-column label="" align="center" prop="id" v-if="true"/>
<el-table-column label="生产令号" align="center" prop="productionOrderNumber" />-->
<el-table-column label="物料编码" align="center" prop="materialCode" />
<el-table-column label="物料名称" align="center" prop="materialName" />
<el-table-column label="数量" align="center" prop="quantity" />
<el-table-column label="库存" align="center" prop="inventory" />
<el-table-column label="仓库编码" align="center" prop="quantity" />
<el-table-column label="仓位编码" align="center" prop="inventory" />
<el-table-column label="需求时间" align="center" prop="demandTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.demandTime, '{y}-{m}-{d}') }}</span>
@ -155,27 +154,27 @@
<!-- 添加或修改物料汇总对话框 -->
<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-item label="生产令号" prop="productionOrderNumber">
<!-- <el-form-item label="生产令号" prop="productionOrderNumber">
<el-input v-model="form.productionOrderNumber" placeholder="请输入生产令号" />
</el-form-item>
</el-form-item>-->
<el-form-item label="物料编码" prop="materialCode">
<el-input v-model="form.materialCode" placeholder="请输入物料编码" />
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input v-model="form.materialName" placeholder="请输入物料名称" />
</el-form-item>
<el-form-item label="数量" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入数量" />
<el-form-item label="仓库编码" prop="quantity">
<el-input v-model="form.quantity" placeholder="请输入仓库编码" />
</el-form-item>
<el-form-item label="库存" prop="inventory">
<el-input v-model="form.inventory" placeholder="请输入库存" />
<el-form-item label="仓位编码" prop="inventory">
<el-input v-model="form.inventory" placeholder="请输入仓位编码" />
</el-form-item>
<el-form-item label="需求时间" prop="demandTime">
<el-date-picker clearable
v-model="form.demandTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择需求时间">
v-model="form.demandTime"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="请选择需求时间">
</el-date-picker>
</el-form-item>
<el-form-item label="备注" prop="remarks">
@ -233,12 +232,7 @@ export default {
form: {},
//
rules: {
id: [
{ required: true, message: "不能为空", trigger: "blur" }
],
productionOrderNumber: [
{ required: true, message: "生产令号不能为空", trigger: "blur" }
],
materialCode: [
{ required: true, message: "物料编码不能为空", trigger: "blur" }
],
@ -246,17 +240,15 @@ export default {
{ required: true, message: "物料名称不能为空", trigger: "blur" }
],
quantity: [
{ required: true, message: "数量不能为空", trigger: "blur" }
{ required: true, message: "仓库编码不能为空", trigger: "blur" }
],
inventory: [
{ required: true, message: "库存不能为空", trigger: "blur" }
{ required: true, message: "仓位编码不能为空", trigger: "blur" }
],
demandTime: [
{ required: true, message: "需求时间不能为空", trigger: "blur" }
],
remarks: [
{ required: true, message: "备注不能为空", trigger: "blur" }
]
}
};
},
@ -316,7 +308,7 @@ export default {
handleAdd() {
this.reset();
this.open = true;
this.title = "添加物料汇总";
this.title = "添加仓位编码";
},
/** 修改按钮操作 */
handleUpdate(row) {
@ -327,7 +319,7 @@ export default {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改物料汇总";
this.title = "修改仓位编码";
});
},
/** 提交按钮 */

View File

@ -40,6 +40,14 @@ module.exports = {
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
},
'/all': {
//target: `http://192.168.5.23:9000`,
target: `http://192.168.5.18:9000`,
changeOrigin: true,
pathRewrite: {
'^/all': ''
}
}
},
disableHostCheck: true
@ -132,5 +140,9 @@ module.exports = {
}
}
)
}
},
transpileDependencies: [
'vue-echarts',
'resize-detector'
]
}