From 1980a84b1aeabf2fda317b1c8ffd0a3cc1ba2b26 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期二, 12 三月 2024 15:54:54 +0800
Subject: [PATCH] 完成产品追溯,成品库存、成品出库修改
---
src/views/plan/customerorder/technology-form.vue | 119 ++++++++++++++
src/views/warehouse/FinishedWarehousing/index.vue | 5
vue.config.js | 2
src/views/plan/customerorder/index.vue | 10 +
src/api/quality/finishedDelivery.js | 2
src/api/warehouse/finishedOutcome.js | 9 +
src/views/warehouse/FinishedGoods/index.vue | 105 +++++-------
src/views/product/producttraceability/index.vue | 227 +++++++++++++++++++++-------
8 files changed, 356 insertions(+), 123 deletions(-)
diff --git a/src/api/quality/finishedDelivery.js b/src/api/quality/finishedDelivery.js
index 258847b..31bb380 100644
--- a/src/api/quality/finishedDelivery.js
+++ b/src/api/quality/finishedDelivery.js
@@ -6,4 +6,4 @@
method: 'get',
params: query
})
-}
\ No newline at end of file
+}
diff --git a/src/api/warehouse/finishedOutcome.js b/src/api/warehouse/finishedOutcome.js
new file mode 100644
index 0000000..00c6bfd
--- /dev/null
+++ b/src/api/warehouse/finishedOutcome.js
@@ -0,0 +1,9 @@
+import request from '@/router/axios'
+
+export function finishedOutcome(query) {
+ return request({
+ url: '/mes/finishedOutcome/page',
+ method: 'get',
+ params: query
+ })
+ }
diff --git a/src/views/plan/customerorder/index.vue b/src/views/plan/customerorder/index.vue
index 4ba8c0f..a9f5500 100644
--- a/src/views/plan/customerorder/index.vue
+++ b/src/views/plan/customerorder/index.vue
@@ -57,6 +57,12 @@
@click="() => (exportDialogVisible = true)"
>瀵煎嚭鍙拌处</el-button
>
+ <!-- <el-button
+ style="margin-left: 10px"
+ type="primary"
+ @click="() => ($refs.technology.init())"
+ >缂栧啓鎶�鏈氦搴曞崟</el-button
+ > -->
</template>
</ttable>
<!-- 寮圭獥, 鏃ユ湡閫夋嫨 -->
@@ -347,6 +353,7 @@
></el-table-column>
</el-table>
</el-dialog>
+ <technology-form ref="technology"></technology-form>
</div>
</template>
@@ -358,6 +365,7 @@
} from '@/api/plan/customerOrderInterrelated'
import ConfirmPullCustomerorder from './confirm-pull-customerorder'
import TableForm from './customerorder-form'
+import TechnologyForm from './technology-form.vue'
import TableFormDEesc from './customerorder-form-desc'
import SampleTableForm from './sample-customerorder-form'
import { mapGetters } from 'vuex'
@@ -400,6 +408,7 @@
interrelatedOrderId: null,
interrelatedOrderData: [],
showInterrelatedOrderDialog: false,
+ technologyDialog:true,
uniqueStateArr: [],
dataForm: {
selectTime: null,
@@ -963,6 +972,7 @@
SalesPartBatchDialog,
TableFormDEesc,
CustomerorderReturnDialog,
+ TechnologyForm,
},
computed: {
...mapGetters(['permissions']),
diff --git a/src/views/plan/customerorder/technology-form.vue b/src/views/plan/customerorder/technology-form.vue
new file mode 100644
index 0000000..e86e8d5
--- /dev/null
+++ b/src/views/plan/customerorder/technology-form.vue
@@ -0,0 +1,119 @@
+<template>
+ <el-dialog
+ top="10vh"
+ width="80%"
+ title="缂栧啓鎶�鏈氦搴曞崟"
+ :close-on-click-modal="false"
+ :visible.sync="visible"
+ v-if="visible"
+ >
+ <el-form :model="dataForm" :rules="dataRule" ref="dataForm" class="l-mes">
+ <el-form-item label="">
+ <!-- <el-date-picker
+ v-model="dataForm.selectTime"
+ type="datetime"
+ placeholder="閫夋嫨鏃ユ湡鏃堕棿"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ >
+ </el-date-picker> -->
+ <rich-text
+ editorId="fwb001122"
+ :richContent="remark"
+ @contentChange="contentChange"
+ ></rich-text>
+ </el-form-item>
+ </el-form>
+
+ <div slot="footer" class="dialog-footer">
+ <el-button type="info" @click="visible = false">鍙栨秷</el-button>
+ <el-button
+ type="primary"
+ :disabled="isSubmit"
+ v-thinclick="`dataFormSubmit`"
+ >纭畾</el-button
+ >
+ </div>
+ </el-dialog>
+ </template>
+
+ <script>
+ import { otcCustomerOrderSync } from '@/api/plan/customerorder'
+ import RichText from '@/views/common/rich-text.vue'
+
+ export default {
+ components: { RichText },
+ data() {
+ return {
+ visible: false,
+ dataForm: {
+ selectTime: null
+ },
+ dataRule: {},
+ isSubmit: false,
+ remark:''
+ }
+ },
+ methods: {
+ init() {
+ this.visible = true
+ },
+ dataFormSubmit() {
+ this.isSubmit = true
+ if (this.dataForm.selectTime != null && this.dataForm.selectTime != '') {
+ otcCustomerOrderSync({
+ selectTime: this.dataForm.selectTime,
+ pathCode: '0'
+ })
+ .then((response) => {
+ const resData = response.data
+ if (resData.code === 0) {
+ this.$message.success('鎷夊彇閿�鍞鍗曟垚鍔燂紱' + resData.msg)
+ this.visible = false
+ this.isSubmit = false
+ this.dataForm.selectTime = null
+ this.$emit('refreshDataList')
+ } else {
+ this.$message.success('鎷夊彇閿�鍞鍗曞け璐�')
+ this.isSubmit = false
+ }
+ })
+ .catch((error) => {
+ this.isSubmit = false
+ console.error(error)
+ })
+ } else {
+ this.isSubmit = false
+ this.$message.error('璇峰厛閫夋嫨鏃ユ湡')
+ }
+ },
+ contentChange(e){
+ console.log(1111,e)
+ }
+ }
+ }
+ </script>
+ <style scoped lang="scss">
+ .mps-table .el-table__row > td {
+ border: none;
+ }
+
+ .mps-table::before {
+ height: 0px;
+ }
+ /*
+ 瀛楃涓茶繃闀挎椂锛岄殣钘忔樉绀虹渷鐣ュ彿
+ */
+ .inline-el-hidden {
+ display: block;
+ width: 93%;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ margin: 0 auto;
+ }
+ ::v-deep .quill-editor{
+ .ql-container{
+ min-height: 400px!important;
+ }
+ }
+ </style>
diff --git a/src/views/product/producttraceability/index.vue b/src/views/product/producttraceability/index.vue
index 9ba6bc5..a4b1dd2 100644
--- a/src/views/product/producttraceability/index.vue
+++ b/src/views/product/producttraceability/index.vue
@@ -344,7 +344,110 @@
</el-tab-pane> -->
<el-tab-pane label="妫�娴嬩俊鎭�" name="妫�娴嬩俊鎭�">
<div style="margin-top:10px;">
- <el-tabs type="card">
+ <div class="process" v-if="process">
+ <el-divider
+ class="pane-divider"
+ direction="vertical"
+ ></el-divider>
+ <span style="font-size:14px;font-weight:bold"
+ >杩囩▼妫�</span>
+ <div style="font-size: 12px;margin-top: 10px;margin-left: 10px;">鏍峰搧鍚嶏細<span style="font-weight: 700;">{{process.sampleName}}</span></div>
+ <el-table
+ stripe
+ :data="process.sampleItem"
+ :height="paramsTableHeight"
+ :header-cell-style="paramsTableHeaderStyle0"
+ :row-class-name="tableRowClassName"
+ class="taskinfo-params-table"
+ style="margin: 10px;width: 95%;"
+ >
+ <el-table-column
+ prop="father"
+ label="椤圭洰"
+ align="center"
+ min-width="75px"
+ />
+ <el-table-column
+ prop="name"
+ label="鎸囨爣"
+ align="center"
+ min-width="100px"
+ />
+ <el-table-column
+ prop="result"
+ label="缁撴灉"
+ align="center"
+ min-width="60px"
+ >
+ <template slot-scope="scope">
+ {{
+ scope.row.isQualified == 0
+ ? '涓嶅悎鏍�'
+ : '鍚堟牸'
+ }}
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="userName"
+ label="妫�楠屼汉"
+ align="center"
+ min-width="90px"
+ />
+ </el-table>
+ </div>
+ <div class="product" v-if="finished" :class="{checkMore:process}">
+ <el-divider
+ class="pane-divider"
+ direction="vertical"
+ ></el-divider>
+ <span style="font-size:14px;font-weight:bold"
+ >浜у搧妫�</span>
+ <div style="font-size: 12px;margin-top: 10px;margin-left: 10px;">鏍峰搧鍚嶏細<span style="font-weight: 700;">{{finished.sampleName}}</span></div>
+ <el-table
+ stripe
+ :data="finished.sampleItem"
+ :height="paramsTableHeight"
+ :header-cell-style="paramsTableHeaderStyle0"
+ :row-class-name="tableRowClassName"
+ class="taskinfo-params-table"
+ style="margin: 10px;width: 95%;"
+ >
+ <el-table-column
+ prop="father"
+ label="椤圭洰"
+ align="center"
+ min-width="75px"
+ />
+ <el-table-column
+ prop="name"
+ label="鎸囨爣"
+ align="center"
+ min-width="100px"
+ />
+ <el-table-column
+ prop="result"
+ label="缁撴灉"
+ align="center"
+ min-width="60px"
+ >
+ <template slot-scope="scope">
+ {{
+ scope.row.isQualified == 0
+ ? '涓嶅悎鏍�'
+ : '鍚堟牸'
+ }}
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="userName"
+ label="妫�楠屼汉"
+ align="center"
+ min-width="90px"
+ />
+ </el-table>
+ </div>
+ <!-- <p v-show="!process&&!finished">鏆傛棤鏁版嵁</p> -->
+ <!-- <el-tabs type="card">
<el-tab-pane
v-for="(item, index) in checkItemList"
:key="item.reportTypeLabel"
@@ -423,25 +526,7 @@
</el-table-column>
</el-table>
</el-tab-pane>
- <!--<el-tab-pane label="闄勪欢">
- <el-upload
- drag
- ref="upload"
- action="/mes/reportSample/upload"
- :headers="headers"
- :auto-upload="true"
- :file-list="fileList"
- list-type="text"
- :on-preview="handlePreview"
- :with-credentials="true"
- >
- <i class="el-icon-upload"></i>
- <div class="el-upload__text">
- 灏嗘枃浠舵嫋鍒版澶勶紝鎴�<em>鐐瑰嚮涓婁紶</em>
- </div>
- </el-upload>
- </el-tab-pane>-->
- </el-tabs>
+ </el-tabs> -->
</div>
</el-tab-pane>
<el-tab-pane label="鐢熶骇璁板綍" name="鐢熶骇璁板綍">
@@ -981,6 +1066,9 @@
.taskinfo-params-table >>> td {
padding: 3px 0px;
}
+.checkMore{
+ margin-top: 20px;
+}
</style>
<script>
import {
@@ -1129,7 +1217,9 @@
traceType: 'posite',
reportTypeOptions: [],
checkItemList: [],
- mouldRecordList: []
+ mouldRecordList: [],
+ finished:null,
+ process:null
}
},
mounted() {
@@ -1332,39 +1422,51 @@
_that.currProductTracking = {}
}
// 妫�娴嬩俊鎭�
- const sampleItemList = data.data.sampleItems
- if (sampleItemList != null && sampleItemList.length > 0) {
- _that.paramValues = sampleItemList
- _that.checkItemList = []
- sampleItemList.forEach((item) => {
- const reportTypeLabel = _that.reportTypeOptions.find(
- (el) => {
- return item.reportType == el.value
- }
- )
- if (reportTypeLabel) {
- const existCheckItem = _that.checkItemList.find(
- (checkItem) => {
- return (
- reportTypeLabel.label == checkItem.reportTypeLabel
- )
- }
- )
- if (existCheckItem) {
- existCheckItem.itemList.push(item)
- } else {
- _that.checkItemList.push({
- reportTypeLabel: reportTypeLabel.label,
- itemList: [item]
- })
- }
- }
- })
- // reportTypeOptions
- } else {
- _that.paramValues = []
- _that.checkItemList = []
+ const sampleItems = data.data.sampleItems
+ // 妫�娴嬩俊鎭�-杩囩▼妫�
+ if(sampleItems&&sampleItems.process&&sampleItems.process.length>0){
+ _that.process = sampleItems.process[0]
+ }else{
+ _that.process = null
}
+ // 妫�娴嬩俊鎭�-浜у搧妫�
+ if(sampleItems&&sampleItems.finished&&sampleItems.finished.length>0){
+ _that.finished = sampleItems.finished[0]
+ }else{
+ _that.finished = null
+ }
+ // if (sampleItemList != null && sampleItemList.length > 0) {
+ // _that.paramValues = sampleItemList
+ // _that.checkItemList = []
+ // sampleItemList.forEach((item) => {
+ // const reportTypeLabel = _that.reportTypeOptions.find(
+ // (el) => {
+ // return item.reportType == el.value
+ // }
+ // )
+ // if (reportTypeLabel) {
+ // const existCheckItem = _that.checkItemList.find(
+ // (checkItem) => {
+ // return (
+ // reportTypeLabel.label == checkItem.reportTypeLabel
+ // )
+ // }
+ // )
+ // if (existCheckItem) {
+ // existCheckItem.itemList.push(item)
+ // } else {
+ // _that.checkItemList.push({
+ // reportTypeLabel: reportTypeLabel.label,
+ // itemList: [item]
+ // })
+ // }
+ // }
+ // })
+ // // reportTypeOptions
+ // } else {
+ // _that.paramValues = []
+ // _that.checkItemList = []
+ // }
_that.currOperateTask = data.data.operationTask
if (_that.currOperateTask == null) {
_that.currOperateTask = {
@@ -1392,11 +1494,11 @@
_that.productRecordParamValues = []
_that.paramTabs = []
} else {
- // 宸ユ淇℃伅
- _that.getStepRecords({
- id: _that.currOperateTask.id,
- sn: nodeData.batchNo.split('SN鍙�:')[1]
- })
+ // 宸ユ淇℃伅--鎶ラ敊娉ㄩ噴鎺変簡
+ // _that.getStepRecords({
+ // id: _that.currOperateTask.id,
+ // sn: nodeData.batchNo.split('SN鍙�:')[1]
+ // })
// 宸ヨ壓鍙傛暟淇℃伅
_that.queryTechnologyInfo(_that.currOperateTask.id)
// 鐢熶骇璁板綍
@@ -1616,6 +1718,15 @@
}
return headerStyle
},
+ paramsTableHeaderStyle0({ row, column, rowIndex, columnIndex }) {
+ let headerStyle = 'background:#599ef4;color:#fff;'
+ if (columnIndex === 0) {
+ headerStyle += 'border-radius: 6px 0px 0px 0px;'
+ } else if (columnIndex === 3) {
+ headerStyle += 'border-radius: 0px 6px 0px 0px;'
+ }
+ return headerStyle
+ },
tableRowClassName({ row, rowIndex }) {
if (rowIndex % 2 === 1) {
return 'stripe-row'
diff --git a/src/views/warehouse/FinishedGoods/index.vue b/src/views/warehouse/FinishedGoods/index.vue
index 2207225..c652a3d 100644
--- a/src/views/warehouse/FinishedGoods/index.vue
+++ b/src/views/warehouse/FinishedGoods/index.vue
@@ -4,8 +4,9 @@
<ttable
:table="table"
:isShowHide="true"
+ :ajaxFun="ajaxFun"
:prelang="prelang"
- :options="options"
+ :options="options"
ref="processconfiguration"
>
<template #toolbar></template>
@@ -16,9 +17,11 @@
<script>
import ttable from '@/views/common/ztt-table.vue'
+import { finishedOutcome } from '@/api/warehouse/finishedOutcome'
export default {
data(){
return {
+ ajaxFun: finishedOutcome,
prelang: 'operation',
dataListLoading: false,
options: {
@@ -44,104 +47,84 @@
column: [
{
minWidth: '140',
- prop: 'material',
- label: '璁㈠崟缂栫爜',
+ prop: 'outBatchNo',
+ label: '鎵规鍙�',
isTrue: true,
isSearch: true,
searchInfoType: 'text',
},
{
minWidth: '140',
- prop: 'type',
+ prop: 'parNo',
+ label: '浜у搧缂栧彿',
+ isTrue: true,
+ isSearch: true,
+ searchInfoType: 'text',
+ },{
+ minWidth: '140',
+ prop: 'partName',
label: '浜у搧鍚嶇О',
isTrue: true,
isSearch: true,
searchInfoType: 'text',
},{
minWidth: '140',
- prop: 'oo',
- label: '浜у搧鍨嬪彿',
- isTrue: true,
- isSearch: true,
- searchInfoType: 'text',
- },{
- minWidth: '140',
- prop: 'materhhooial',
- label: '璐ㄩ噺杩芥函鍙�',
+ prop: 'specs',
+ label: '瑙勬牸鍨嬪彿',
isTrue: true,
isSearch: true,
searchInfoType: 'text',
},
{
minWidth: '140',
- prop: 'mateuurial',
- label: '瀹㈡埛鍚嶇О',
+ prop: 'unit',
+ label: '鍗曚綅',
isTrue: true,
isSearch: true,
searchInfoType: 'text',
},
{
minWidth: '140',
- prop: 'materoiial',
- label: '宸ヨ壓鏂囦欢缂栧彿',
- isTrue: true,
- isSearch: true,
- searchInfoType: 'text',
- },
- {
- minWidth: '140',
- prop: 'matperoial',
- label: '搴撲綅鍙�',
- isTrue: true,
- isSearch: true,
- searchInfoType: 'text',
- },
- {
- minWidth: '140',
- prop: 'materpial',
- label: '浜у搧鍚嶇О',
- isTrue: true,
- isSearch: true,
- searchInfoType: 'text',
- },
- {
- minWidth: '130',
- width: '150',
- prop: 'dealTime',
- label: '瀹℃牳鏃堕棿',
- sort: true,
- isTrue: true,
- isSearch: true,
- searchInfoType: 'datetimerange',
- // formatter: this.formatDateTime,
- },
- {
- minWidth: '140',
- prop: 'maial',
+ prop: 'number',
label: '鏁伴噺',
+ isTrue: true,
+ isSearch: true,
+ searchInfoType: 'text',
+ },
+ {
+ minWidth: '140',
+ prop: 'c莽reateTime',
+ label: '鍑哄簱鏃堕棿',
+ isTrue: true,
+ isSearch: true,
+ searchInfoType: 'text',
+ searchInfoType: 'datetimerange',
+ formatter: this.formatDateTime,
+ },
+ {
+ minWidth: '140',
+ prop: 'createUser',
+ label: '鍒涘缓浜�',
isTrue: true,
isSearch: true,
searchInfoType: 'text',
},
],
toolbar: [
- {
- text: '鑾峰彇IFS鎴愬搧搴�',
- type: 'primary',
- // fun: this.addOrUpdateHandle
- },
+
],
// operator: [],
// operatorConfig: {}
},
}
},
- medthods: {},
-// computed: {
-// ...mapGetters(['permissions'])
-// },
+ medthods: {
+ formatDateTime(row, column, cellValue) {
+ return cellValue ? fecha.format(new Date(cellValue), 'yyyy-MM-dd') : ''
+ },
+ },
components: {
ttable
},
}
-</script>
\ No newline at end of file
+</script>
diff --git a/src/views/warehouse/FinishedWarehousing/index.vue b/src/views/warehouse/FinishedWarehousing/index.vue
index 7fbd608..b49dc54 100644
--- a/src/views/warehouse/FinishedWarehousing/index.vue
+++ b/src/views/warehouse/FinishedWarehousing/index.vue
@@ -4,9 +4,9 @@
<ttable
:table="table"
:isShowHide="true"
+ :ajaxFun="ajaxFun"
:prelang="prelang"
:options="options"
- :dataListLoading="false"
ref="processconfiguration"
>
<template #toolbar></template>
@@ -24,6 +24,7 @@
return {
ajaxFun: productPage,
prelang: 'operation',
+ dataListLoading: false,
options: {
height: 300, // 榛樿楂樺害-涓轰簡琛ㄥご鍥哄畾
stripe: true, // 鏄惁涓烘枒椹汗 table
@@ -206,4 +207,4 @@
ttable
},
}
-</script>
\ No newline at end of file
+</script>
diff --git a/vue.config.js b/vue.config.js
index 2b66e9c..4f8c558 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -7,7 +7,7 @@
// const url = 'http://192.168.2.7:9999'
// const url = 'https://ztms-mes.chinaztt.cn/'
-const url = 'http://192.168.23.249:9999'
+const url = 'http://192.168.0.104:9999'
const localUrl = 'http://localhost:8089'
--
Gitblit v1.9.3