From 492411a8891687156f7d9fda103f144f23eb1bf6 Mon Sep 17 00:00:00 2001
From: 小小儁爺 <1694218219@qq.com>
Date: 星期四, 22 一月 2026 14:29:57 +0800
Subject: [PATCH] 1.存货绑定工艺路线弹出框显示默认选中的2.gantt研究

---
 src/views/qualityManager/qualityPlaning.vue |  432 +++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 398 insertions(+), 34 deletions(-)

diff --git a/src/views/qualityManager/qualityPlaning.vue b/src/views/qualityManager/qualityPlaning.vue
index 2979426..6185285 100644
--- a/src/views/qualityManager/qualityPlaning.vue
+++ b/src/views/qualityManager/qualityPlaning.vue
@@ -268,7 +268,7 @@
       :visible.sync="dialogVisible"
       width="1260px"
       :close-on-click-modal="false"
-      top="5vh"
+      top="2vh"
       @closed="handleClose"
       @close="handleClose"
     >
@@ -334,30 +334,48 @@
           prop="suitpart"
           :label="dialogForm.suitobject==='P'?'閫傜敤鐗╂枡':'閫傜敤鐗╂枡绫诲埆'"
         >
-          <el-select
-            v-model="dialogForm.suitpart"
-            style="width: 200px"
-            multiple
-            filterable
-            collapse-tags
-            placeholder="璇烽�夋嫨"
-            :popper-append-to-body="false"
-          >
-            <el-option
-              v-for="item in PartSelectArr"
-              v-if="dialogForm.suitobject==='P'"
-              :key="item.partcode"
-              :label="item.partcode +' / '+ item.partname"
-              :value="item.partcode"
-            />
-            <el-option
-              v-for="item in StockTypeSelectArr"
-              v-if="dialogForm.suitobject==='PY'"
-              :key="item.code"
-              :label="item.code+' / '+item.name"
-              :value="item.code"
-            />
-          </el-select>
+          <el-button
+            v-if="dialogForm.suitobject==='P'"
+            v-waves
+            type="primary"
+            icon="el-icon-circle-plus-outline"
+            @click="selectSuitpart"
+          >閫夋嫨鐗╂枡</el-button>
+          <el-button
+            v-if="dialogForm.suitobject==='PY'"
+            v-waves
+            type="primary"
+            icon="el-icon-circle-plus-outline"
+            @click="selectSuitpart"
+          >閫夋嫨鐗╂枡绫诲埆</el-button>
+          <div>
+            宸查�夋嫨{{ dialogForm.suitpart.length }}涓獅{ dialogForm.suitobject==='P'?'鐗╂枡':'鐗╂枡绫诲埆' }}
+          </div>
+
+          <!--          <el-select-->
+          <!--            v-model="dialogForm.suitpart"-->
+          <!--            style="width: 200px"-->
+          <!--            multiple-->
+          <!--            filterable-->
+          <!--            collapse-tags-->
+          <!--            placeholder="璇烽�夋嫨"-->
+          <!--            :popper-append-to-body="false"-->
+          <!--          >-->
+          <!--            <el-option-->
+          <!--              v-for="item in PartSelectArr"-->
+          <!--              v-if="dialogForm.suitobject==='P'"-->
+          <!--              :key="item.partcode"-->
+          <!--              :label="item.partcode +' / '+ item.partname"-->
+          <!--              :value="item.partcode"-->
+          <!--            />-->
+          <!--            <el-option-->
+          <!--              v-for="item in StockTypeSelectArr"-->
+          <!--              v-if="dialogForm.suitobject==='PY'"-->
+          <!--              :key="item.code"-->
+          <!--              :label="item.code+' / '+item.name"-->
+          <!--              :value="item.code"-->
+          <!--            />-->
+          <!--          </el-select>-->
         </el-form-item>
         <br>
         <el-form-item
@@ -697,6 +715,194 @@
       </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 v-if="dialogForm.suitobject==='P'" 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="partcode"
+              @select="handleSelectionChange"
+              @select-all="handleAllChange"
+            >
+
+              <el-table-column
+                type="selection"
+                width="50"
+                :reserve-selection="true"
+                fixed
+              />
+              <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="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>
+      <div v-if="dialogForm.suitobject==='PY'">
+        <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"
+          show-checkbox
+          :default-checked-keys="dialogForm.suitpart"
+        />
+      </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>
 
@@ -711,8 +917,9 @@
   QualityInspectionSearch, QualityInspectionSeeEdit, QualityStepCheckItemSelect
 } from '@/api/QualityManagement'
 import TableColumnSettings from '@/components/TableColumnSettings'
-import { PartSelect, TMaterielClassTree } from '@/api/ProductModel'
+import { PartSelect, TMaterielClassTree, TMaterielData } from '@/api/ProductModel'
 import { StepData } from '@/api/GeneralBasicData'
+import arrayToTree from 'array-to-tree'
 
 export default {
   name: 'QualityPlaning',
@@ -919,7 +1126,33 @@
       CheckItemSelectArr: [], // 妫�楠岄」鐩�
       StepSelectArr: [], // 宸ュ簭鍚嶇О涓嬫媺鎵�鏈�
 
-      isCancel: true// 鏄惁鍙彇娑�
+      isCancel: true, // 鏄惁鍙彇娑�
+
+      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
 
     }
   },
@@ -949,9 +1182,10 @@
         if (res.code === '200') {
           // this.getUomSelect()
           this.getStepCheckItemSelect()
-          this.getPartSelect()
-          this.getStockTypeSelect()
+          // this.getPartSelect()
+          // this.getStockTypeSelect()
           this.getStepSelect()
+          this.getTMaterielClassTree()
         }
       })
     },
@@ -1093,23 +1327,153 @@
     },
     // 鐗╂枡涓嬫媺
     async getPartSelect() {
-      const { data: res } = await PartSelect()
-      this.PartSelectArr = res
+      // const { data: res } = await PartSelect()
+      // this.PartSelectArr = res
     },
     // 鐗╂枡绫诲埆涓嬫媺
     async getStockTypeSelect() {
-      const { data: res } = await TMaterielClassTree()
-      this.StockTypeSelectArr = res
+      // const { data: res } = await TMaterielClassTree()
+      // this.StockTypeSelectArr = res
     },
 
     // 閫傜敤瀵硅薄鍊兼敼鍙樻槸
     suitobjectChange() {
       this.dialogForm.suitpart = []
     },
+    /*
+    * 閫夋嫨鐗╂枡鎴栬�呯墿鏂欑被鍒脊鍑烘
+    * */
+    //
+    selectSuitpart() {
+      this.dialogVisibleSuitobject = true
+
+      if (this.dialogForm.suitobject === 'P') { // 鐗╂枡
+        this.$nextTick(() => {
+          this.$refs.treeLeftRef.setCurrentKey('-1')
+          this.getTMaterielData(this.$refs.treeLeftRef.getCurrentNode())
+        })
+      } else { // //鐗╂枡绫诲埆
+        // this.$refs.treeLeftRef.setCurrentKey('-1')
+      }
+    },
+
+    handleCloseSuitobject() {
+      this.suitobjectForm = {
+        inventoryclasscode: '',
+        partcode: '',
+        partname: '',
+        partspec: '',
+        page: 1,
+        rows: 20,
+        prop: 'lm_date', // 鎺掑簭瀛楁
+        order: 'desc' // 鎺掑簭瀛楁
+      }
+    },
+
+    dialogVisibleCancelSuitobject() {
+      this.dialogVisibleSuitobject = false
+    },
+
+    dialogVisibleConfirmSuitobject() {
+      // console.log(this.$refs.treeLeftRef.getCheckedKeys())
+      if (this.dialogForm.suitobject === 'P') { // 鐗╂枡
+
+      } else { // //鐗╂枡绫诲埆
+        this.dialogForm.suitpart = this.$refs.treeLeftRef.getCheckedKeys()
+      }
+      this.dialogVisibleSuitobject = false
+    },
+
+    // 杩欓噷鏄仛鍗曢」閫夋嫨涓庡崟椤瑰弽閫夌殑 閫夋嫨锛氭墦鍕炬垨鍙栨秷
+    handleSelectionChange(selected, row) {
+      if (selected.length > 0) {
+        if (selected.map(i => i.partcode).includes(row.partcode)) { // 璇存槑鏄柊澧�
+          this.dialogForm.suitpart.push(row.partcode)
+        } else { // 璇存槑鏄彇娑�
+          this.dialogForm.suitpart = this.dialogForm.suitpart.filter(i => i !== row.partcode)
+        }
+      }
+    },
+    // 鍏ㄩ�夈�佸彇娑堝叏閫夛紙鍘熺悊鍚屼笂闈㈢殑鍗曢�夛級
+    handleAllChange(selected) {
+      console.log(selected)
+
+      if (selected.length > 0) { // 浠h〃浠庝笉鍏ㄩ�夊埌鍏ㄩ��
+        this.dialogForm.suitpart = [...new Set([...this.dialogForm.suitpart, ...selected.map(i => i.partcode)])]
+      } else { // 浠h〃浠庡叏閫夊埌 鍏ㄤ笉閫�
+        this.dialogForm.suitpart = this.dialogForm.suitpart.filter(item => !this.suitobjectTableData.map(i => i.partcode).includes(item))
+      }
+    },
+
+    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'
+      })
+      // this.$nextTick(() => {
+      //   this.$refs.treeLeftRef.setCurrentKey('-1')
+      //   console.log(this.$refs.treeLeftRef.getCurrentNode())
+      //   this.getTMaterielData(this.$refs.treeLeftRef.getCurrentNode())
+      // })
+    },
+
+    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
+
+      const selectedKeys = this.dialogForm.suitpart
+      this.$refs.tableDataRef3.clearSelection() // 娓呯┖褰撳墠閫夋嫨锛岄伩鍏嶉噸澶嶉�夋嫨闂
+      this.suitobjectTableData.forEach(row => {
+        if (selectedKeys.includes(row.partcode)) {
+          this.$refs.tableDataRef3.toggleRowSelection(row, true)
+        }
+      })
+
+      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 getStepCheckItemSelect() {
       const { data: res } = await QualityStepCheckItemSelect()
-
+      this.CheckItemSelectArr = []
       res.forEach(i => {
         this.CheckItemSelectArr.push({
           code: i.code,

--
Gitblit v1.9.3