From eb21013ed92b622cbccb8087a0d62bddd1ce7204 Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期四, 09 十一月 2023 17:05:06 +0800
Subject: [PATCH] 1.工艺路线 新增 批量绑定产品功能
---
src/views/makeModel/processRoute.vue | 299 ++++++++++++++++++++++++++++++++++++++++++++++++-
src/api/makeModel.js | 21 +++
2 files changed, 311 insertions(+), 9 deletions(-)
diff --git a/src/api/makeModel.js b/src/api/makeModel.js
index 94a8989..00651ac 100644
--- a/src/api/makeModel.js
+++ b/src/api/makeModel.js
@@ -80,6 +80,15 @@
})
}
+// 宸ヨ壓璺嚎鍏宠仈浜у搧鏌ヨ
+export function RputeInventorySearch(data) {
+ return request({
+ url: 'ProductModel/RputeInventorySearch',
+ method: 'get',
+ params: data
+ })
+}
+
// 瀛樿揣妗f鏂板缂栬緫
export function AddUpdateInventoryFile(data) {
return request({
@@ -320,6 +329,7 @@
params: data
})
}
+
// 鐗╂枡娓呭崟鏂板/缂栬緫鎻愪氦
export function AddUpdateBoIventory(data) {
return request({
@@ -328,6 +338,7 @@
data
})
}
+
// 鐗╂枡娓呭崟鏂板鏃惰幏鍙栨渶澶х増鏈彿
export function MaterielDetailedVsion(data) {
return request({
@@ -336,6 +347,7 @@
params: data
})
}
+
// 鐗╂枡娓呭崟鍒犻櫎
export function DeleteBoIventory(data) {
return request({
@@ -344,3 +356,12 @@
params: data
})
}
+
+// 宸ヨ壓璺嚎鎵归噺鎸囧畾鐗╂枡淇濆瓨
+export function RouteBatchPartSave(data) {
+ return request({
+ url: 'ProductModel/RouteBatchPartSave',
+ method: 'post',
+ data
+ })
+}
diff --git a/src/views/makeModel/processRoute.vue b/src/views/makeModel/processRoute.vue
index 646808a..a2d6f46 100644
--- a/src/views/makeModel/processRoute.vue
+++ b/src/views/makeModel/processRoute.vue
@@ -45,7 +45,10 @@
<el-input v-model="form.createuser" style="width: 200px" placeholder="璇疯緭鍏�" />
</el-form-item>
</div>
- <div class="bodySearchReset" :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}">
+ <div
+ class="bodySearchReset"
+ :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"
+ >
<el-button v-waves type="primary" icon="el-icon-search" @click="search">鏌ヨ</el-button>
<el-button v-waves type="info" icon="el-icon-refresh" @click="reset">閲嶇疆</el-button>
</div>
@@ -102,7 +105,21 @@
:fixed="item.fixed?(item.fixed==='left'?'left':'right'):false"
>
<template slot-scope="{row}">
- <div v-if="!row[item.prop]">/</div>
+
+ <div v-if="item.prop==='isrolepart'">
+ <i
+ v-if="row[item.prop]!==''"
+ :style="{color:$store.state.settings.theme}"
+ class="el-icon-share"
+ @click="routeClick(row)"
+ />
+ <i
+ v-if="row[item.prop]===''"
+ style="color:rgb(180 ,181, 185)"
+ class="el-icon-share"
+ @click="routeClick(row)"
+ />
+ </div>
<div v-else-if="item.prop==='enable'">
<div v-if="row[item.prop]==='Y'">
<i class="el-icon-success" :style="{color:$store.state.settings.theme}" style="margin-right: 2px" />
@@ -113,7 +130,9 @@
鍚�
</div>
</div>
+ <div v-else-if="!row[item.prop]">/</div>
<div v-else>{{ row[item.prop] }}</div>
+
</template>
</el-table-column>
@@ -196,10 +215,20 @@
/>
</el-tooltip>
<el-tooltip v-del-tab-index class="item" effect="dark" content="鍒犻櫎" placement="top">
- <i :style="{color:$store.state.settings.theme}" class="el-icon-delete" style="margin-right:15px;" @click="del(row)" />
+ <i
+ :style="{color:$store.state.settings.theme}"
+ class="el-icon-delete"
+ style="margin-right:15px;"
+ @click="del(row)"
+ />
</el-tooltip>
<el-tooltip v-del-tab-index class="item" effect="dark" content="澶嶅埗" placement="top">
- <i :style="{color:$store.state.settings.theme}" class="el-icon-document-copy" style="cursor: pointer;color:#42b983" @click="copy('copy',row)" />
+ <i
+ :style="{color:$store.state.settings.theme}"
+ class="el-icon-document-copy"
+ style="cursor: pointer;color:#42b983"
+ @click="copy('copy',row)"
+ />
</el-tooltip>
</div>
</template>
@@ -396,18 +425,155 @@
</div>
</span>
</el-dialog>
+
+ <el-dialog
+ v-el-drag-dialog
+ title="宸ヨ壓璺嚎缁戝畾浜у搧"
+ :visible.sync="routerDialogVisible"
+ width="1200px"
+ :close-on-click-modal="false"
+ top="12vh"
+ class="userDialogVisible"
+ @closed="handleCloseRouter"
+ @close="handleCloseRouter"
+ >
+ <div class="bodyTopFormGroup" style="margin-bottom: 10px">
+ <el-form
+ ref="routerForm"
+ :model="routerForm"
+ label-width="100px"
+ inline
+ style="display: flex;"
+ >
+ <div class="elForm">
+ <el-form-item label="鐗╂枡缂栫爜" style=" display: flex;">
+ <el-input v-model="routerForm.partcode" placeholder="璇疯緭鍏�" style="width: 200px" />
+ </el-form-item>
+ <el-form-item label="鐗╂枡鍚嶇О" style=" display: flex;">
+ <el-input v-model="routerForm.partname" placeholder="璇疯緭鍏�" style="width: 200px" />
+ </el-form-item>
+ <el-form-item label="鐗╂枡瑙勬牸" style=" display: flex;">
+ <el-input v-model="routerForm.partspec" placeholder="璇疯緭鍏�" style="width: 200px" />
+ </el-form-item>
+ <el-form-item label="瀛樿揣绫诲瀷" style=" display: flex;">
+ <el-cascader
+ ref="cascader"
+ :options="stocktypeArr"
+ filterable
+ :props="defaultProps"
+ @change="val=>cascaderChange(val)"
+ />
+ </el-form-item>
+ </div>
+ <div
+ class="bodySearchReset"
+ :style="{marginLeft:$store.state.app.sidebar.opened? $store.state.settings.menuIsHorizontal?'15%':'3%':'10%'}"
+ >
+ <el-button v-waves type="primary" icon="el-icon-search" @click="getInventoryFileSelect">鏌ヨ</el-button>
+ <el-button v-waves type="info" icon="el-icon-refresh" @click="resetRouter">閲嶇疆</el-button>
+ </div>
+ </el-form>
+ </div>
+
+ <el-table
+ ref="multipleTableRef"
+ :data="routerTableData"
+ border
+ :row-class-name="tableRowClassName"
+ highlight-current-row
+ height="450"
+ :header-cell-style="this.$headerCellStyle"
+ :cell-style="this.$cellStyle"
+ :row-key="getRowKey"
+ @selection-change="handleSelectionChange"
+ >
+
+ <el-table-column
+ type="selection"
+ width="50"
+ :reserve-selection="true"
+ fixed
+ />
+ <!-- <el-table-column-->
+ <!-- prop="RowNum"-->
+ <!-- width="50"-->
+ <!-- label="搴忓彿"-->
+ <!-- />-->
+ <el-table-column
+ prop="partcode"
+ label="浜у搧缂栫爜"
+ />
+ <el-table-column
+ prop="partname"
+ label="浜у搧鍚嶇О"
+ />
+ <el-table-column
+ prop="partspec"
+ label="瑙勬牸鍨嬪彿"
+ >
+ <template slot-scope="{row}">
+ {{ row.partspec?row.partspec:'/' }}
+ </template>
+ </el-table-column>
+ <el-table-column
+ prop="stocktypename"
+ label="瀛樿揣绫诲瀷"
+ >
+ <template slot-scope="{row}">
+ {{ row.stocktypename?row.stocktypename:'/' }}
+ </template>
+ </el-table-column>
+
+ </el-table>
+
+ <!--鍒嗛〉-->
+ <!-- <pagination-->
+ <!-- :total="routerTotal"-->
+ <!-- :page.sync="routerForm.page"-->
+ <!-- :limit.sync="routerForm.rows"-->
+ <!-- align="right"-->
+ <!-- style="margin-top: 10px"-->
+ <!-- layout="total ,prev, pager, next,sizes"-->
+ <!-- popper-class="select_bottom"-->
+ <!-- @pagination="getInventoryFileSelect"-->
+ <!-- />-->
+
+ <span slot="footer" class="dialog-footer">
+ <div class="footerButton">
+ <el-button v-waves @click="routerDialogVisibleCancel">鍙� 娑�</el-button>
+ <el-button
+ v-waves
+ type="primary"
+ :loading="$store.state.app.buttonIsDisabled"
+ :disabled="$store.state.app.buttonIsDisabled"
+ @click="routerDialogVisibleConfirm"
+ >纭� 瀹�</el-button>
+ </div>
+ </span>
+
+ </el-dialog>
+
</div>
</template>
<script>
import Pagination from '@/components/Pagination'
-import { AddUpdateRoute, DeleteRoute, RouteSearch, StepSelect, ViewRoute } from '@/api/makeModel'
+import {
+ AddUpdateRoute,
+ DeleteRoute,
+ InventoryFileSelect, RouteBatchPartSave,
+ RouteSearch, RputeInventorySearch,
+ StepSelect,
+ StockTypeSelect,
+ ViewRoute
+} from '@/api/makeModel'
import { validateCode } from '@/utils/global'
import elDragDialog from '@/directive/el-drag-dialog'
import waves from '@/directive/waves'
import TableColumnSettings from '@/components/TableColumnSettings'
import { WorkShopSelect } from '@/api/deviceManager'
import { getCookie } from '@/utils/auth'
+import arrayToTree from 'array-to-tree'
export default {
name: 'GYLX',
@@ -506,9 +672,19 @@
{
minWidth: 110,
width: false,
+ prop: 'isrolepart',
+ label: '鍏宠仈浜у搧',
+ id: 9,
+ show: true,
+ fixed: false,
+ sortable: true
+ },
+ {
+ minWidth: 110,
+ width: false,
prop: 'lm_user',
label: '鍒涘缓浜哄憳',
- id: 9,
+ id: 10,
show: true,
fixed: false,
sortable: true
@@ -518,7 +694,7 @@
width: false,
prop: 'lm_date',
label: '鍒涘缓鏃堕棿',
- id: 10,
+ id: 11,
show: true,
fixed: false,
sortable: true
@@ -565,19 +741,118 @@
// Data: [
// { required: true, message: '璇疯缃伐鑹�', trigger: ['blur', 'change'] }
// ]
- }
+ },
+ routerDialogVisible: false,
+ routerForm: {
+ partcode: '', // 鐗╂枡缂栫爜
+ partname: '', // 鐗╂枡鍚嶇О
+ partspec: '', // 鐗╂枡瑙勬牸
+ stocktypecode: '', // 瀛樿揣绫诲瀷缂栫爜
+ materialtypecode: '', // 鐗╂枡绫诲瀷缂栫爜
+ storehousecode: '' // 鎵�灞炰粨搴撶紪鐮�
+ // prop: 'lm_date', // 鎺掑簭瀛楁
+ // order: 'desc', // 鎺掑簭瀛楁
+ // page: 1, // 绗嚑椤�
+ // rows: 20 // 姣忛〉澶氬皯鏉�
+ },
+ routerTableData: [],
+ routerTotal: 10,
+ stocktypeArr: [],
+ defaultProps: {
+ checkStrictly: true,
+ expandTrigger: 'hover',
+ value: 'code',
+ label: 'name'
+ },
+ multipleSelection: [],
+ selectedRouterCode: '',
+ selectedisrolepart: ''
}
},
created() {
this.getRouteSearch()
this.getWorkShopSelect()
+
+ // this.getInventoryFileSelect()
+ this.getStockTypeSelect()
},
mounted() {
window.addEventListener('resize', this.getHeight)
this.getHeight()
},
methods: {
+ handleCloseRouter() {
+ this.$refs.multipleTableRef.clearSelection()
+ },
+ async getInventoryFileSelect() {
+ const res = await RputeInventorySearch(this.routerForm)
+ this.routerTableData = res.data
+ this.routerTotal = res.count
+
+ this.$nextTick(() => {
+ this.routerTableData.forEach((item, index) => {
+ if (this.selectedisrolepart.split(',').includes(item.partcode)) {
+ this.$refs.multipleTableRef.toggleRowSelection(this.routerTableData[index], true)
+ }
+ })
+ })
+ },
+ async getStockTypeSelect() {
+ const { data: res } = await StockTypeSelect()
+ this.stocktypeArr = arrayToTree(res, {
+ parentProperty: 'iparent_id',
+ customID: 'code',
+ childrenProperty: 'children'
+ })
+ },
+ resetRouter() {
+ this.routerForm.partcode = ''
+ this.routerForm.partname = ''
+ this.routerForm.partspec = ''
+ this.routerForm.stocktypecode = ''
+ this.routerForm.materialtypecode = ''
+ this.routerForm.storehousecode = ''
+ this.$refs.cascader.checkedValue = ''
+ this.getInventoryFileSelect()
+ },
+ cascaderChange(val) {
+ this.routerForm.stocktypecode = val[val.length - 1]
+ },
+ routeClick(row) {
+ this.selectedRouterCode = row.code
+ this.selectedisrolepart = row.isrolepart
+ this.routerDialogVisible = true
+
+ this.getInventoryFileSelect()
+ },
+ getRowKey(row) {
+ return row.partcode
+ },
+ handleSelectionChange(val) {
+ this.multipleSelection = val
+ },
+ routerDialogVisibleCancel() {
+ this.routerDialogVisible = false
+ },
+ async routerDialogVisibleConfirm() {
+ const data = {
+ 'routecode': this.selectedRouterCode,
+ 'routepart': this.multipleSelection.length > 0 ? this.multipleSelection.map(i => i.partcode).join(',') : ''
+ }
+
+ this.$store.state.app.buttonIsDisabled = true
+ const res = await RouteBatchPartSave(data)
+ if (res.code === '200') {
+ this.routerDialogVisible = false
+ this.$message.success('缁戝畾鎴愬姛锛�')
+ await this.getRouteSearch()
+ this.$store.state.app.buttonIsDisabled = false
+ } else {
+ this.$message.error('缁戝畾澶辫触锛�')
+ }
+ },
+
// 鑾峰彇鎵�灞炶溅闂翠笅鎷�
async getWorkShopSelect() {
const { data: res } = await WorkShopSelect()
@@ -912,7 +1187,13 @@
this.$nextTick(() => {
res[0].Data.forEach((item, index) => {
this.dynamicTags.push(
- { seq: item.seq, stepname: item.stepname, stepcode: item.stepcode, editDisabled: true, effect: index === res[0].Data.length - 1 ? 'dark' : 'light' }
+ {
+ seq: item.seq,
+ stepname: item.stepname,
+ stepcode: item.stepcode,
+ editDisabled: true,
+ effect: index === res[0].Data.length - 1 ? 'dark' : 'light'
+ }
)
this.routeSelectedArr.push({
stepcode: item.stepcode,
--
Gitblit v1.9.3