From 709fa95bc62e339ec74d8d8084b7380a62a8474f Mon Sep 17 00:00:00 2001
From: 小小儁爺 <1694218219@qq.com>
Date: 星期二, 28 四月 2026 17:06:35 +0800
Subject: [PATCH] 1.sop工艺 变成批量绑定
---
src/views/sopManager/sopRoute.vue | 512 ++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 473 insertions(+), 39 deletions(-)
diff --git a/src/views/sopManager/sopRoute.vue b/src/views/sopManager/sopRoute.vue
index 327c0f1..a75ea20 100644
--- a/src/views/sopManager/sopRoute.vue
+++ b/src/views/sopManager/sopRoute.vue
@@ -184,29 +184,43 @@
v-el-drag-dialog
title="鏂囦欢涓婁紶"
:visible.sync="dialogVisible"
- width="800px"
+ width="1000px"
:close-on-click-modal="false"
- top="15vh"
+ top="5vh"
@closed="handleClose"
@close="handleClose"
>
<el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
- <el-form-item label="浜у搧淇℃伅" prop="partcode">
- <el-select
- v-model="dialogForm.partcode"
+ <el-form-item label="浜у搧淇℃伅">
+ <el-button
+ v-waves
+ type="primary"
style="width: 200px"
- placeholder="璇烽�夋嫨"
- filterable
- :popper-append-to-body="false"
- @change="partcodeChange"
- >
- <el-option
- v-for="item in partcodeArr"
- :key="item.partcode"
- :label="item.partname+' / '+item.partcode"
- :value="item.partcode"
- />
- </el-select>
+ icon="el-icon-circle-plus-outline"
+ @click="selectSuitpart"
+ >閫夋嫨鐗╂枡
+ </el-button>
+ <div v-if="multipleSelection.length>0">
+ 宸查�夋嫨{{ multipleSelection.length }}涓墿鏂�
+ </div>
+ <!-- <div v-if="dialogForm.partcode.toString().trim().length>0">-->
+ <!-- 宸查�夋嫨{{ dialogForm.partcode }} {{ dialogForm.partname }}-->
+ <!-- </div>-->
+ <!-- <el-select-->
+ <!-- v-model="dialogForm.partcode"-->
+ <!-- style="width: 200px"-->
+ <!-- placeholder="璇烽�夋嫨"-->
+ <!-- filterable-->
+ <!-- :popper-append-to-body="false"-->
+ <!-- @change="partcodeChange"-->
+ <!-- >-->
+ <!-- <el-option-->
+ <!-- v-for="item in partcodeArr"-->
+ <!-- :key="item.partcode"-->
+ <!-- :label="item.partname+' / '+item.partcode"-->
+ <!-- :value="item.partcode"-->
+ <!-- />-->
+ <!-- </el-select>-->
</el-form-item>
<el-form-item
v-if="mesSetting.route"
@@ -236,6 +250,7 @@
style="width: 200px"
placeholder="璇烽�夋嫨"
filterable
+ multiple
collapse-tags
:popper-append-to-body="false"
@change="stepcodeChange"
@@ -265,9 +280,6 @@
/>
</el-select>
</el-form-item>
- <el-form-item label="鐗堟湰鍙�">
- <el-input v-model="dialogForm.fileversion" disabled style="width: 200px" />
- </el-form-item>
<el-form-item label="鏂囦欢涓婁紶" prop="Files">
<div style="width: 200px;">
<el-upload
@@ -279,9 +291,8 @@
:on-exceed="handleExceed"
:auto-upload="false"
:multiple="false"
- accept=".mp4,.pdf,.png,.jpeg,.jpg,.svg,.txt,.xlsx,.xls"
>
- <!-- accept=".mp4,.pdf"-->
+ <!-- accept=".mp4,.pdf,.png,.jpeg,.jpg"-->
<el-button
v-waves
type="primary"
@@ -291,6 +302,60 @@
</el-button>
</el-upload>
</div>
+ </el-form-item>
+ <el-form-item label-width="120" label="瀵瑰簲鐗堟湰鍙�">
+ <el-table
+ :data="versionList"
+ border
+ style="width: 800px"
+ :header-cell-style="this.$headerCellStyle"
+ :cell-style="this.$cellStyle"
+ height="300"
+ >
+ <el-table-column
+ type="index"
+ label="搴忓彿"
+ width="60"
+ align="center"
+ />
+ <el-table-column
+ prop="materielcode"
+ label="鐗╂枡缂栫爜"
+
+ show-tooltip-when-overflow
+ />
+ <el-table-column
+ prop="materielname"
+ label="鐗╂枡鍚嶇О"
+
+ show-tooltip-when-overflow
+ />
+ <el-table-column
+ prop="materielspec"
+ label="瑙勬牸鍨嬪彿"
+
+ show-tooltip-when-overflow
+ />
+ <el-table-column
+ prop="stepcode"
+ label="宸ュ簭缂栫爜"
+ width="100"
+ align="center"
+ />
+ <el-table-column
+ prop="stepname"
+ label="宸ュ簭鍚嶇О"
+ width="100"
+ align="center"
+ />
+ <el-table-column
+ prop="file_version"
+ label="鐗堟湰鍙�"
+ width="100"
+ align="center"
+ />
+ </el-table>
+
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
@@ -307,16 +372,212 @@
</span>
</el-dialog>
+ <!--閫夋嫨鐗╂枡-->
+ <el-dialog
+ v-el-drag-dialog
+ :title="dialogForm.suitobject==='P'?'閫夋嫨鐗╂枡':'閫夋嫨鐗╂枡绫诲埆'"
+ :visible.sync="dialogVisibleSuitobject"
+ width="1460px"
+ :close-on-click-modal="false"
+ top="5vh"
+ @closed="handleCloseSuitobject"
+ @close="handleCloseSuitobject"
+ >
+
+ <div style="display: flex">
+ <div style="width: 300px;margin-right: 20px;background:#fff">
+
+ <div style="margin: 20px 10px 0 10px;display: flex;justify-content: space-between;">
+ <div style="display: flex;">
+ <div
+ style="width: 5px;height: 100%;border-radius: 5px;"
+ :style="{background:$store.state.settings.theme}"
+ />
+ <div style="margin-left: 8px;">瀛樿揣妗f</div>
+ </div>
+ </div>
+
+ <el-tree
+ ref="treeLeftRef"
+ style="padding: 10px;overflow: auto;height: 600px;"
+ :data="treeLeft"
+ node-key="code"
+ highlight-current
+ :props="defaultPropsLeft"
+ :default-expand-all="true"
+ :expand-on-click-node="false"
+ @node-click="getTMaterielData"
+ />
+ </div>
+ <div
+ style=" width:calc(100% - 300px);"
+ >
+ <div class="bodyTopFormGroup">
+ <el-form
+ ref="suitobjectForm"
+ :model="suitobjectForm"
+ label-width="80px"
+ inline
+ style="display: flex;"
+ >
+ <div class="elForm">
+ <el-form-item label="瀛樿揣缂栫爜" style=" display: flex;">
+ <el-input
+ v-model="suitobjectForm.partcode"
+ placeholder="璇疯緭鍏�"
+ :style="{minWidth:'100px',width:150+'px'}"
+ />
+ </el-form-item>
+ <el-form-item label="瀛樿揣鍚嶇О" style=" display: flex;">
+ <el-input
+ v-model="suitobjectForm.partname"
+ placeholder="璇疯緭鍏�"
+ :style="{minWidth:'100px',width:150+'px'}"
+ />
+ </el-form-item>
+ <el-form-item label="瀛樿揣瑙勬牸" style=" display: flex;">
+ <el-input
+ v-model="suitobjectForm.partspec"
+ placeholder="璇疯緭鍏�"
+ :style="{minWidth:'100px',width:150+'px'}"
+ />
+ </el-form-item>
+
+ </div>
+ <div class="bodySearchReset">
+ <el-button
+ v-waves
+ type="primary"
+ icon="el-icon-search"
+ @click="getTMaterielData($refs.treeLeftRef.getCurrentNode())"
+ >鏌ヨ
+ </el-button>
+ <el-button
+ v-waves
+ type="info"
+ icon="el-icon-refresh"
+ @click="resetSuitobject"
+ >閲嶇疆
+ </el-button>
+ </div>
+ </el-form>
+ </div>
+
+ <div class="elTableDiv">
+ <el-table
+ ref="tableDataRef3"
+ class="tableFixed"
+ :data="suitobjectTableData"
+ height="520"
+ border
+ row-class-name="custom-row"
+ highlight-current-row
+ :header-cell-style="this.$headerCellStyle"
+ :cell-style="this.$cellStyle"
+ :row-key="getRowKey"
+ @select-all="handleSelectionAllChange"
+ @select="handleSelectionChange"
+ >
+ <!-- @row-click="rowClick2"-->
+ <el-table-column
+ width="50"
+ type="selection"
+ :reserve-selection="true"
+ fixed
+ >
+ <!-- <template slot-scope="{row}">-->
+ <!-- <el-radio-->
+ <!-- v-model="dialogForm.partcode"-->
+ <!-- :label="row.partcode"-->
+ <!-- style="color: transparent;padding-left: 10px;"-->
+ <!-- />-->
+ <!-- </template>-->
+ </el-table-column>
+ <el-table-column
+ prop="rowNum"
+ width="70"
+ fixed
+ label="搴忓彿"
+ />
+ <el-table-column
+ prop="partcode"
+ label="瀛樿揣缂栫爜"
+ />
+ <el-table-column
+ prop="partname"
+ label="瀛樿揣鍚嶇О"
+ show-tooltip-when-overflow
+ min-width="200"
+ />
+ <el-table-column
+ prop="partspec"
+ label="瑙勬牸鍨嬪彿"
+ >
+ <template slot-scope="{row}">
+ {{ row.partspec ? row.partspec : '/' }}
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="is_retdproc"
+ label="鏄惁缁戝畾宸ヨ壓"
+ >
+ <template slot-scope="{row}">
+ <el-tag v-if="row.is_retdproc==='Y'" size="small" type="success">宸茬粦瀹�</el-tag>
+ <el-tag v-else size="small" type="danger">鏈粦瀹�</el-tag>
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="idinventoryclassname"
+ label="鎵�灞炵被鍒�"
+ />
+ </el-table>
+ </div>
+
+ <!--鍒嗛〉-->
+ <pagination
+ :total="suitobjectTotal"
+ :page.sync="suitobjectForm.page"
+ :limit.sync="suitobjectForm.rows"
+ align="right"
+ layout="total,prev, pager, next,sizes,jumper"
+ popper-class="select_bottom"
+ @pagination="getTMaterielData($refs.treeLeftRef.getCurrentNode())"
+ />
+
+ </div>
+ </div>
+
+ <span slot="footer" class="dialog-footer">
+ <div class="footerButton">
+ <el-button v-waves @click="dialogVisibleCancelSuitobject">杩� 鍥�</el-button>
+ <el-button
+ v-waves
+ :loading="$store.state.app.buttonIsDisabled"
+ :disabled="$store.state.app.buttonIsDisabled"
+ type="primary"
+ @click="dialogVisibleConfirmSuitobject"
+ >纭� 璁�</el-button>
+ </div>
+ </span>
+ </el-dialog>
+
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
-import { ProcessSopAddSeave, ProcessSopDeleteSeave, ProcessSopSearch, ProcessSopMaxVersion } from '@/api/SopManager'
+import {
+ ProcessSopAddSeave,
+ ProcessSopDeleteSeave,
+ ProcessSopSearch,
+ ProcessSopMaxVersion,
+ ProcessSopPartSelectRpute
+} from '@/api/SopManager'
import waves from '@/directive/waves'
import elDragDialog from '@/directive/el-drag-dialog'
-import { PartSelect } from '@/api/ProductModel'
+import { PartSelect, TMaterielClassTree, TMaterielData } from '@/api/ProductModel'
import { PartSelectRpute, RouteSelectStep } from '@/api/basicSettings'
+import arrayToTree from 'array-to-tree'
export default {
name: 'SopRoute',
@@ -333,8 +594,8 @@
form: {
check: 'N', // 鏄惁閫変腑鏈�楂樼増鏈�
search: '', // 鎼滅储鍏抽敭瀛�
- prop: 'lm_date', // 鎺掑簭瀛楁
- order: 'desc', // 鎺掑簭瀛楁
+ prop: 'materielcode,routecode,stepcode', // 鎺掑簭瀛楁
+ order: 'asc', // 鎺掑簭瀛楁
page: 1, // 绗嚑椤�
rows: 20 // 姣忛〉澶氬皯鏉�
},
@@ -345,8 +606,10 @@
dialogVisible: false,
dialogForm: {
partcode: '', // 璁惧绫诲瀷缂栫爜
+ partname: '', //
+
route: '', // 鐗╂枡缂栫爜
- stepcode: '',
+ stepcode: [],
defilename: '',
filetypecode: '', // 鏂囦欢绫诲瀷缂栫爜
Files: '', // 鏂囦欢
@@ -378,7 +641,35 @@
{ code: 'P002', name: '妫�楠屾寚瀵间功' },
{ code: 'P003', name: '鍥剧焊' }
],
- mesSetting: JSON.parse(localStorage.getItem('mesSetting'))
+ mesSetting: JSON.parse(localStorage.getItem('mesSetting')),
+
+ dialogVisibleSuitobject: false,
+ treeLeft: [
+ {
+ code: '-1',
+ name: '鍏ㄩ儴'
+ }
+ ], // 宸︿晶鏍�
+ treeLeftArr: [],
+ defaultPropsLeft: {
+ children: 'children',
+ label: 'name'
+ },
+
+ suitobjectTableData: [],
+ suitobjectForm: {
+ inventoryclasscode: '',
+ partcode: '',
+ partname: '',
+ partspec: '',
+ page: 1,
+ rows: 20,
+ prop: 'lm_date', // 鎺掑簭瀛楁
+ order: 'desc' // 鎺掑簭瀛楁
+ },
+ suitobjectTotal: 0,
+ multipleSelection: [],
+ versionList: []
}
},
@@ -387,17 +678,127 @@
window.addEventListener('resize', this.getHeight)
this.getHeight()
this.getProcessSopSearch()
- this.getPartSelect()
+ // this.getPartSelect()
+ this.getTMaterielClassTree()
},
created() {
this.getProcessSopSearch()
- this.getPartSelect()
+ // this.getPartSelect()
+ this.getTMaterielClassTree()
},
mounted() {
window.addEventListener('resize', this.getHeight)
this.getHeight()
},
methods: {
+ getRowKey(row) {
+ return row.partcode
+ },
+ handleSelectionAllChange(val) {
+ this.multipleSelection = JSON.parse(JSON.stringify(val))
+ },
+ handleSelectionChange(val, row) {
+ const arrAll = JSON.parse(JSON.stringify(val))
+ if (this.multipleSelection.filter((item) => item.partcode === row.partcode).length === 0) {
+ this.multipleSelection = arrAll
+ } else {
+ this.multipleSelection = arrAll.filter((item) => item.partcode !== row.partcode)
+ }
+ },
+ selectSuitpart() {
+ this.dialogVisibleSuitobject = true
+ this.$nextTick(() => {
+ this.$refs.treeLeftRef.setCurrentKey('-1')
+ this.getTMaterielData(this.$refs.treeLeftRef.getCurrentNode())
+ })
+ },
+ handleCloseSuitobject() {
+ this.suitobjectForm = {
+ inventoryclasscode: '',
+ partcode: '',
+ partname: '',
+ partspec: '',
+ page: 1,
+ rows: 20,
+ prop: 'lm_date', // 鎺掑簭瀛楁
+ order: 'desc' // 鎺掑簭瀛楁
+ }
+ },
+ dialogVisibleCancelSuitobject() {
+ this.dialogVisibleSuitobject = false
+ },
+
+ async dialogVisibleConfirmSuitobject() {
+ const { data: res } = await ProcessSopPartSelectRpute(this.multipleSelection.map(i => i.partcode))
+ // await this.partcodeChange(this.dialogForm.partcode)
+ if (this.mesSetting.route) {
+ this.routeArr = res
+ } else {
+ this.stepcodeArr = res
+ }
+ this.dialogForm.route = ''
+ this.dialogForm.stepcode = []
+ this.dialogVisibleSuitobject = false
+
+ this.versionList = []
+ // await this.stepcodeChange()
+ },
+
+ rowClick2(row, event, column) {
+ this.dialogForm.partcode = row.partcode
+ this.dialogForm.partname = this.suitobjectTableData.find(i => i.partcode === row.partcode).partname
+ // this.dialogForm.partspec = this.partcodeArr.find(i => i.partcode === row.partcode).partspec
+ },
+
+ resetSuitobject() {
+ this.suitobjectForm.inventoryclasscode = ''
+ this.suitobjectForm.partcode = ''
+ this.suitobjectForm.partname = ''
+ this.suitobjectForm.partspec = ''
+ this.$refs.treeLeftRef.setCurrentKey('-1')
+ this.getTMaterielData(this.$refs.treeLeftRef.getCurrentNode())
+ },
+ async getTMaterielClassTree() {
+ const res = await TMaterielClassTree()
+ res.data.forEach(i => {
+ i.idparent = i.idparent ? i.idparent : '-1'
+ })
+ this.treeLeftArr = res.data
+ this.treeLeftArr.forEach(e => {
+ e.name = e.code + ' ' + e.name
+ })
+ this.treeLeft = arrayToTree(this.treeLeft.concat(res.data), {
+ parentProperty: 'idparent',
+ customID: 'code',
+ childrenProperty: 'children'
+ })
+ },
+ async getTMaterielData(node) {
+ const result = this.getChildrenCodeMethod(node, [])
+ if (result.includes('-1')) {
+ result.shift()
+ }
+ this.suitobjectForm.inventoryclasscode = result.join(',')
+ const res = await TMaterielData(this.suitobjectForm)
+
+ this.suitobjectTableData = res.data
+ this.suitobjectTotal = res.count
+
+ this.$nextTick(() => {
+ this.$refs.tableDataRef3.doLayout()
+ })
+ },
+ // 閫掑綊鍙栧瓙闆嗙殑鎵�鏈塩ode
+ getChildrenCodeMethod(node, result) {
+ result.push(node.code)
+ if (node.children && node.children.length > 0) {
+ node.children.forEach(i => {
+ this.getChildrenCodeMethod(i, result)
+ })
+ }
+ return result
+ },
+
async getPartSelect() {
const { data: res } = await PartSelect()
this.partcodeArr = res
@@ -442,7 +843,7 @@
this.stepcodeArr = res
}
this.dialogForm.route = ''
- this.dialogForm.stepcode = ''
+ this.dialogForm.stepcode = []
await this.stepcodeChange()
},
async routeChange() {
@@ -452,19 +853,20 @@
}
const { data: res } = await RouteSelectStep(data)
this.stepcodeArr = res
- this.dialogForm.stepcode = ''
+ this.dialogForm.stepcode = []
await this.stepcodeChange()
},
async stepcodeChange() {
- if (this.dialogForm.partcode && this.dialogForm.stepcode && this.dialogForm.filetypecode) {
+ if (this.multipleSelection && this.dialogForm.filetypecode) {
const data = {
- partcode: this.dialogForm.partcode,
+ // partcode: this.dialogForm.partcode,
+ partcode: this.multipleSelection.map(i => i.partcode),
routecode: this.dialogForm.route,
stepcode: this.dialogForm.stepcode,
filetypecode: this.dialogForm.filetypecode
}
const { data: res } = await ProcessSopMaxVersion(data)
- this.dialogForm.fileversion = res
+ this.versionList = res
}
},
@@ -517,8 +919,11 @@
this.dialogForm.fileversion = ''
this.dialogForm.stepcode = ''
this.dialogForm.Files = ''
+ this.multipleSelection = []
+ this.versionList = []
this.$refs.uploadFileRef.clearFiles()
this.$refs.dialogForm.clearValidate()
+ this.$refs.tableDataRef3.clearSelection()
},
// 瀵硅瘽妗嗗彇娑�
dialogVisibleCancel() {
@@ -539,13 +944,34 @@
this.$refs.dialogForm.validate(valid => {
if (valid) {
+ if (this.multipleSelection.length === 0) {
+ return this.$message.info('璇峰厛閫夋嫨浜у搧锛�')
+ }
+
+ // const sopPartVersionList = []
+ // this.versionList.forEach(i => {
+ // sopPartVersionList.push({
+ // PartCode: i.materielcode,
+ // Routecode: this.dialogForm.route,
+ // StepCode: i.stepcode,
+ // Version: i.file_version
+ // })
+ // })
+
const formData = new FormData()
- formData.append('partcode', this.dialogForm.partcode)
- formData.append('routecode', this.dialogForm.route)
- formData.append('stepcode', this.dialogForm.stepcode)
+ this.versionList.forEach((i, index) => {
+ formData.append(`sopPartVersionList[${index}].PartCode`, i.materielcode)
+ formData.append(`sopPartVersionList[${index}].Routecode`, this.dialogForm.route)
+ formData.append(`sopPartVersionList[${index}].StepCode`, i.stepcode)
+ formData.append(`sopPartVersionList[${index}].Version`, i.file_version)
+ })
+ // formData.append('sopPartVersionList', JSON.stringify(sopPartVersionList).toString())
+ // formData.append('partcode', this.dialogForm.partcode)
+ // formData.append('routecode', this.dialogForm.route)
+ // formData.append('stepcode', this.dialogForm.stepcode)
formData.append('filename', this.$refs.uploadFileRef.uploadFiles[0].name)
formData.append('filetypecode', this.dialogForm.filetypecode)
- formData.append('version', this.dialogForm.fileversion)
+ // formData.append('version', this.dialogForm.fileversion)
formData.append('file', this.$refs.uploadFileRef.uploadFiles[0].raw)
// for (var [key, value] of formData) {
// console.log(key, value)
@@ -580,8 +1006,16 @@
}
</script>
+<style lang="scss" scoped>
+.elTableDiv {
+ ::v-deep .el-radio__label {
+ display: none !important;
+ }
+}
+</style>
<style>
.el-table .custom-row {
background: #f8f8fa;
}
+
</style>
--
Gitblit v1.9.3