小小儁爺
2024-08-08 d20654ba067e5c0621d4d7d95915cbe47a10fe87
src/views/makeModel/processRoute.vue
@@ -16,6 +16,22 @@
          style="display: flex;"
        >
          <div class="elForm">
            <el-form-item label="所属车间" style=" display: flex;">
              <el-select
                v-model="form.WorkShop"
                :popper-append-to-body="false"
                style="width: 200px"
                placeholder="请选择"
              >
                <!--                @focus="getWareHouseSelect"-->
                <el-option
                  v-for="item in WorkShopArr"
                  :key="item.code"
                  :label="item.name"
                  :value="item.code"
                />
              </el-select>
            </el-form-item>
            <el-form-item label="工艺路线编码" style=" display: flex;">
              <el-input v-model="form.routecode" placeholder="请输入" style="width: 200px" />
            </el-form-item>
@@ -25,18 +41,35 @@
            <el-form-item label="工艺描述" style=" display: flex;">
              <el-input v-model="form.description" placeholder="请输入" style="width: 200px" />
            </el-form-item>
            <el-form-item label="创建人员" style=" display: flex;">
            <el-form-item v-if="isExpandForm" label="创建人员" style=" display: flex;">
              <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>
        </el-form>
        <div
          class="bodyTopFormExpand"
        />
        >
          <svg-icon
            v-show="mouseHoverType==='mouseout'"
            style="cursor: pointer"
            :icon-class="!isExpandForm?'doubleDown3':'doubleUp3'"
            @mouseenter="mouseHoverType=$event.type"
          />
          <svg-icon
            v-show="mouseHoverType==='mouseenter'"
            style="cursor: pointer"
            :icon-class="!isExpandForm?'doubleDown':'doubleUp'"
            @click="isExpandForm=!isExpandForm"
            @mouseout="mouseHoverType=$event.type"
          />
        </div>
      </div>
      <div class="elTableDiv">
@@ -49,10 +82,10 @@
          :key="tableTimeStampKey"
          class="tableFixed"
          :data="tableData"
          :height="tableHeight"
          :height="isExpandForm?tableHeight:(tableHeight+40)+'px'"
          border
          :row-class-name="tableRowClassName"
          :style="{width: 100+'%',height:tableHeight+'px',}"
          :style="{width: 100+'%',height:isExpandForm?tableHeight:(tableHeight+40)+'px',}"
          highlight-current-row
          :header-cell-style="this.$headerCellStyle"
          :cell-style="this.$cellStyle"
@@ -72,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" />
@@ -83,7 +130,9 @@
                  否
                </div>
              </div>
              <div v-else-if="!row[item.prop]">/</div>
              <div v-else>{{ row[item.prop] }}</div>
            </template>
          </el-table-column>
@@ -166,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>
@@ -182,7 +241,7 @@
        :page.sync="form.page"
        :limit.sync="form.rows"
        align="right"
        layout="total,prev, pager, next,sizes"
        layout="total,prev, pager, next,sizes,jumper"
        popper-class="select_bottom"
        @pagination="getRouteSearch"
      />
@@ -234,10 +293,37 @@
            />
          </el-form-item>
        </div>
        <div style="display: flex">
          <el-form-item prop="wkshopcode" label="所属车间" style="margin-right: 20px">
            <el-select
              v-model="dialogForm.wkshopcode"
              filterable
              :disabled="operation==='edit'"
              :popper-append-to-body="false"
              style="width: 220px"
              placeholder="请选择"
              @change="getStepSelectArr"
            >
              <el-option
                v-for="item in WorkShopArr"
                :key="item.code"
                :label="item.name"
                :value="item.code"
              />
            </el-select>
          </el-form-item>
        </div>
        <el-form-item label="工艺设置" prop="Data" style="margin-top: 30px">
          <div class="settingDiv">
            <!--   实现工艺设置动态添加-->
            <div v-for="(tag,index) in dynamicTags" :key="tag.seq" style="display: flex;align-items: center">
            <!--            v-if="false"-->
            <div
              v-for="(tag,index) in dynamicTags"
              :key="tag.seq"
              style="display: flex;align-items: center"
            >
              <div style="display: flex;align-items: center;position: relative;">
                <div
                  class="orderNumber"
@@ -339,19 +425,158 @@
        </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',
  name: 'ProcessRoute',
  components: {
    Pagination, TableColumnSettings
  },
@@ -359,12 +584,15 @@
  data() {
    return {
      isIpad: false,
      mouseHoverType: 'mouseout',
      isExpandForm: false,
      mainHeight: 0,
      tableHeight: 0,
      form: {
        routecode: '', // 工艺路线编码
        routename: '', // 工艺路线名称
        description: '', // 工艺路线描述
        WorkShop: this.$store.state.settings.orgType !== 'W' ? '' : getCookie('stu_torgcode'), // 所属车间
        createuser: '', // 创建人员
        prop: 'lm_date', // 排序字段
        order: 'desc', // 排序字段
@@ -375,6 +603,7 @@
        { label: '是', value: 'Y' },
        { label: '否', value: 'N' }
      ],
      WorkShopArr: [], // 所属车间数组
      total: 10,
      tableData: [],
      tableColumnSettingsArray: [
@@ -423,9 +652,39 @@
        {
          minWidth: 110,
          width: false,
          prop: 'org_code',
          label: '所属车间编码',
          id: 7,
          show: false,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'org_name',
          label: '所属车间',
          id: 8,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'isrolepart',
          label: '关联产品',
          id: 9,
          show: true,
          fixed: false,
          sortable: true
        },
        {
          minWidth: 110,
          width: false,
          prop: 'lm_user',
          label: '创建人员',
          id: 7,
          id: 10,
          show: true,
          fixed: false,
          sortable: true
@@ -435,7 +694,7 @@
          width: false,
          prop: 'lm_date',
          label: '创建时间',
          id: 8,
          id: 11,
          show: true,
          fixed: false,
          sortable: true
@@ -449,6 +708,7 @@
        name: '',
        enable: 'Y',
        description: '',
        wkshopcode: this.$store.state.settings.orgType !== 'W' ? '' : getCookie('stu_torgcode'), // 所属车间
        Data: []
      },
      dynamicTags: [// 工艺设置数组
@@ -474,22 +734,130 @@
        ],
        enable: [
          { required: true, message: '请选择使用状态', trigger: ['blur', 'change'] }
        ],
        wkshopcode: [
          { required: true, message: '请选择所属车间', trigger: ['blur', 'change'] }
        ]
        // 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()
      this.WorkShopArr = res
    },
    tableColumnUpdate(val, isCopyTrue) {
      if (isCopyTrue) {
        this.tableColumnSettingsArray = val
@@ -515,8 +883,9 @@
    },
    // 工艺设置 下拉获取所有
    async getStepSelectArr() {
      const { data: res } = await StepSelect()
      const { data: res } = await StepSelect({ WorkShop: this.dialogForm.wkshopcode })
      this.routeArr = res
      console.log('执行了!')
    },
    // 处理下拉选择
    handleSelect(item, tag) {
@@ -585,6 +954,13 @@
    },
    // tag点击修改按钮
    tagEdit(tag) {
      if (!this.dialogForm.wkshopcode) {
        return this.$message.info('请先选择所属车间!')
      }
      if (this.routeArr.length === 0) {
        return this.$message.info('该车间未设置工序!')
      }
      this.autocompleteValue = ''
      this.dynamicTags.forEach(item => {
        item.stepname = item.stepname.trim()
@@ -731,6 +1107,7 @@
      this.form.routename = ''
      this.form.description = ''
      this.form.createuser = ''
      this.form.WorkShop = this.$store.state.settings.orgType !== 'W' ? '' : getCookie('stu_torgcode') // 所属车间
      this.getRouteSearch()
    },
@@ -738,7 +1115,10 @@
    add(operation) {
      this.operation = operation
      this.dialogVisible = true
      // if (this.$store.state.settings.orgType === 'W') {
      this.getStepSelectArr()
      // }
    },
    // 工艺路线预览
    async edit(operation, row) {
@@ -753,6 +1133,8 @@
        this.dialogForm.name = res[0].name
        this.dialogForm.enable = res[0].enable
        this.dialogForm.description = res[0].description
        this.dialogForm.wkshopcode = res[0].wkshopcode
        // this.dialogForm.Data = row.description
        res[0].Data.forEach(item => {
          this.dynamicTags.push(
@@ -786,19 +1168,32 @@
      this.operation = operation
      this.dialogVisible = true
      await this.getStepSelectArr()
      // if (this.$store.state.settings.orgType === 'W') {
      // }
      const { data: res } = await ViewRoute({ routecode: row.code })
      // 待改
      this.dynamicTags = []
      this.routeSelectedArr = []
      this.dialogForm.code = res[0].code
      this.dialogForm.name = res[0].name
      this.dialogForm.enable = res[0].enable
      this.dialogForm.description = res[0].description
      this.dialogForm.wkshopcode = res[0].wkshopcode
      await this.getStepSelectArr()
      this.$nextTick(() => {
        this.dialogForm.code = res[0].code
        this.dialogForm.name = res[0].name
        this.dialogForm.enable = res[0].enable
        this.dialogForm.description = res[0].description
        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,
@@ -818,6 +1213,7 @@
      this.dialogForm.name = ''
      this.dialogForm.enable = 'Y'
      this.dialogForm.description = ''
      this.dialogForm.wkshopcode = this.$store.state.settings.orgType !== 'W' ? '' : getCookie('stu_torgcode') // 所属车间
      this.dialogForm.Data = []
      this.dynamicTags = [
@@ -859,6 +1255,7 @@
            name: this.dialogForm.name,
            enable: this.dialogForm.enable,
            description: this.dialogForm.description,
            wkshopcode: this.dialogForm.wkshopcode,
            Data: Data
          }
@@ -879,7 +1276,7 @@
    getHeight() {
      this.$nextTick(() => {
        this.mainHeight = window.innerHeight - 85
        this.tableHeight = this.mainHeight - 195
        this.tableHeight = this.mainHeight - 255
        if (window.innerHeight < 769) {
          this.tableHeight = this.tableHeight - 40
        }