cuilei
5 小时以前 1b8399357869093ce21b285a921525651c46b2c3
Merge remote-tracking branch 'origin/master'
已添加2个文件
已修改15个文件
已删除2个文件
2070 ■■■■ 文件已修改
public/index.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/layouts/TabLayout.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/page/GlobalFooter.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/tools/Logo.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/base/PrinterConfigList.vue 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/base/modules/printerConfig/PrinterConfigModel.vue 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/base/modules/warehouse/WarehouseModel.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/cms/CuttingInboundList.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/cms/CuttingInventoryList.vue 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/cms/modules/CuttingInboundModal.vue 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/LswMateriaView.vue 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/LswMaterialInboundList.vue 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/LswMaterialInventoryList.vue 276 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/LswMaterialOutboundList.vue 275 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/modules/LswMaterialInboundForm.vue 185 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/modules/LswMaterialInboundModal.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/modules/LswMaterialOutboundForm.vue 191 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/lsw/modules/LswMaterialOutboundModal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/Login.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/index.html
@@ -5,7 +5,7 @@
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>MDC智慧车间</title>
  <title>双林轴承智慧车间</title>
  <link rel="icon" href="<%= BASE_URL %>logo.png">
  <script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script>
  <style>
@@ -249,7 +249,7 @@
    <div id="loader"></div>
    <div class="loader-section section-left"></div>
    <div class="loader-section section-right"></div>
    <div class="load_title">正在加载MDC智慧车间,请耐心等待
    <div class="load_title">正在加载系统,请耐心等待
    </div>
  </div>
src/components/layouts/TabLayout.vue
@@ -183,7 +183,7 @@
       * @param title è¦ä¿®æ”¹çš„æ–°æ ‡é¢˜
       */
      changeTitle(title) {
        let projectTitle = "MDC智慧车间"
        let projectTitle = "双林轴承智慧车间"
        // é¦–页特殊处理
        if (this.$route.path === indexKey) {
          document.title = projectTitle
src/components/page/GlobalFooter.vue
@@ -3,7 +3,7 @@
    <div class="copyright">
      Copyright
      <a-icon type="copyright"/>
      2024 <span>2015-2025 çµç§€æ™ºèƒ½</span>
      2025 <span>2015-2025 çµç§€æ™ºèƒ½</span>
    </div>
  </div>
</template>
src/components/tools/Logo.vue
@@ -21,7 +21,7 @@
    props: {
      title: {
        type: String,
        default: 'MDC智慧车间',
        default: 'MES智慧车间',
        required: false
      },
      showTitle: {
src/views/base/PrinterConfigList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,328 @@
<template>
  <a-card
    :bordered="false"
  >
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form
        layout="inline"
        @keyup.enter.native="searchQuery"
      >
        <a-row :gutter="30">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="打印机IP">
              <j-input
                placeholder="请输入打印机IP检索"
                v-model="queryParam.printerIp "
              ></j-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button
        @click="handleAdd"
        type="primary"
        icon="plus"
      >新增
      </a-button>
    </div>
    <!-- table区域-begin -->
    <div>
      <a-table
        ref="table"
        size="middle"
        bordered
        rowKey="id"
        filterMultiple="filterMultiple"
        :columns="columns"
        :rowClassName="tableRowClass"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        @change="handleTableChange"
      >
        <!--状态栏个性展示-->
        <span
          slot="status"
          slot-scope="text,record"
        >
          <a-badge
            v-if="record.printerStatus==1"
            status="success"
          />
          <span
            v-if="record.printerStatus==1"
            class="success"
          >启用</span>
          <a-badge
            v-if="record.printerStatus==0"
            status="error"
          />
          <span
            v-if="record.printerStatus==0"
            class="error"
          >禁用</span>
        </span>
        <span
          slot="action"
          slot-scope="text, record"
        >
          <a
            href="javascript:;"
            @click="handleEdit(record)"
          >编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多
              <a-icon type="down" />
            </a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
               <a-menu-item v-if="record.printerStatus == 0">
                <a-popconfirm
                  title="确定启用吗?"
                  @confirm="() => handleActive(record.id)"
                >
                  <a>启用</a>
                </a-popconfirm>
              </a-menu-item>
              <a-menu-item v-if="record.printerStatus == 1">
                <a-popconfirm
                  title="确定禁用吗?"
                  @confirm="() => handleActive(record.id)"
                >
                  <a>禁用</a>
                </a-popconfirm>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm
                  title="确定删除吗?"
                  @confirm="() => handleDelete(record.id)"
                >
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
    <!-- table区域-end -->
    <!-- è¡¨å•区域 -->
    <printer-config-model
      ref="modalForm"
      @ok="modalFormOk"
    ></printer-config-model>
  </a-card>
</template>
<script>
//按需引入 ç»„ä»¶
import PrinterConfigModel from './modules/printerConfig/PrinterConfigModel'
import { getAction, requestPut } from '@/api/manage'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import JEllipsis from '@/components/jeecg/JEllipsis'
import JInput from '@/components/jeecg/JInput'
export default {
  name: 'PrinterConfigList',
  mixins: [JeecgListMixin],
  components: {
    PrinterConfigModel,
    JEllipsis,
    JInput
  },
  data() {
    return {
      dataSource: [],
      /* åˆ†é¡µå‚æ•° */
      ipagination: {
        current: 1,
        pageSize: 10,
        pageSizeOptions: ['10', '20', '30'],
        showTotal: (total, range) => {
          return range[0] + '-' + range[1] + ' å…±' + total + '条'
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0
      },
      /* æŽ’序参数 */
      isorter:{
        column: 'printerIp',
        order: 'asc',
      },
      // è¡¨å¤´
      columns: [
        {
          title: '#',
          dataIndex: '',
          key: 'rowIndex',
          width: 60,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
          }
        },
        {
          title: '打印机IP',
          align: 'center',
          dataIndex: 'printerIp'
        },
        {
          title: '打印机名称',
          align: 'center',
          dataIndex: 'printerName'
        },
        {
          title: '打印机端口',
          align: 'center',
          dataIndex: 'portNumber'
        },
        {
          title: '打印机型号',
          align: 'center',
          dataIndex: 'printerModel'
        },
        {
          width: 100,
          title: '状态',
          align: 'center',
          scopedSlots: {
            customRender: 'status'
          },
          dataIndex: 'printerStatus'
        },
        {
          width: 150,
          title: '操作',
          dataIndex: 'action',
          align: 'center',
          scopedSlots: { customRender: 'action' }
        }
      ],
      url: {
        list: '/base/printerConfig/list',
        delete: '/base/printerConfig/delete',
        active: '/base/printerConfig/active'
      }
    }
  },
  mounted() {
  },
  methods: {
    loadData(arg) {
      if (arg === 1) {
        this.ipagination.current = 1
      }
      var params = this.getQueryParams()//查询条件
      this.loading = true
      getAction(this.url.list, params).then((res) => {
        if (res.success) {
          this.dataSource = res.result.records
          this.ipagination.total = res.result.total
        }
        if (res.code === 510) {
          this.$message.warning(res.message)
        }
        this.loading = false
      })
    },
    //禁用状态样式
    tableRowClass(record, index) {
      if (record.printerStatus != '1') {
        return 'frozenRowClass'
      }
      return ''
    },
    //启用禁用
    handleActive(id) {
      if (!this.url.active) {
        this.$message.error('请设置url.active!')
        return
      }
      let that = this
      requestPut(that.url.active, {}, { id: id }).then((res) => {
        if (res.success) {
          that.$message.success(res.message)
          that.loadData()
        } else {
          that.$message.warning(res.message)
        }
      })
    }
  }
}
</script>
<style lang="less" scoped>
@import '~@assets/less/common.less';
.frozenRowClass {
  color: #c9c9c9;
}
.success {
  color: green;
}
.error {
  color: red;
}
.fontweight {
  font-weight: bold;
}
.ant-card-body .table-operator {
  margin-bottom: 18px;
}
.ant-table-tbody .ant-table-row td {
  padding-top: 15px;
  padding-bottom: 15px;
}
.anty-row-operator button {
  margin: 0 5px;
}
/deep/ .ant-btn-danger {
  background-color: #ffffff;
}
.ant-modal-cust-warp {
  height: 100%;
}
.ant-modal-cust-warp .ant-modal-body {
  height: calc(100% - 110px) !important;
  overflow-y: auto;
}
.ant-modal-cust-warp .ant-modal-content {
  height: 90% !important;
  overflow-y: hidden;
}
</style>
src/views/base/modules/printerConfig/PrinterConfigModel.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,249 @@
<template>
  <a-modal
    :title="title"
    :width="800"
    :visible="visible"
    :confirmLoading="confirmLoading"
    :maskClosable="false"
    :okButtonProps="{ props: {disabled: disableSubmit} }"
    @ok="handleOk"
    @cancel="handleCancel"
    cancelText="关闭"
  >
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="打印机IP"
            >
              <a-input
                :disabled="disableSubmit"
                allow-clear
                placeholder="请输入打印机IP"
                v-decorator="['printerIp', validatorRules.printerIp]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="打印机名称"
            >
              <a-input
                :disabled="disableSubmit"
                allow-clear
                placeholder="请输入打印机端口"
                v-decorator="['printerName', validatorRules.printerName]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="打印机端口"
            >
              <a-input
                :disabled="disableSubmit"
                allow-clear
                placeholder="请输入打印机端口"
                v-decorator="['portNumber', validatorRules.portNumber]"
              />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row :gutter="24">
          <a-col :span="24">
            <a-form-item
              :labelCol="labelCol"
              :wrapperCol="wrapperCol"
              label="打印机型号"
            >
              <a-input
                :disabled="disableSubmit"
                allow-clear
                placeholder="请输入打印机型号"
                v-decorator="['printerModel', validatorRules.printerModel]"
              />
            </a-form-item>
          </a-col>
        </a-row>
      </a-form>
    </a-spin>
  </a-modal>
</template>
<script>
import { httpAction } from '@/api/manage'
import pick from 'lodash.pick'
import { duplicateCheck } from '@/api/api' //重复校验
export default {
  name: 'PrinterConfigModel',
  components: {},
  data() {
    return {
      title: '操作',
      visible: false,
      disableSubmit: false,
      model: {},
      treeData: [],
      labelCol: {
        xs: { span: 24 },
        sm: { span: 5 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 16 }
      },
      confirmLoading: false,
      form: this.$form.createForm(this),
      validatorRules: {
        printerIp: {
          rules: [
            { required: true, message: '请输入打印机IP' },
            { min: 2, max: 30, message: '长度在 2 åˆ° 30 ä¸ªå­—符', trigger: 'blur' },
          ]
        },
        printerName: {
          rules: [
            { required: true, message: '请输入打印机名称' },
            { min: 2, max: 30, message: '长度在 2 åˆ° 30 ä¸ªå­—符', trigger: 'blur' },
          ]
        },
        portNumber: {
          rules: [
            { required: true, message: '请输入打印机端口' },
            { min: 0, max: 64, message: '长度不超过 64 ä¸ªå­—符', trigger: 'blur' },
            { validator: this.validateName }
          ]
        },
        printerModel: {
          rules: [
            { required: true, message: '请输入打印机型号' },
            { min: 0, max: 64, message: '长度不超过 64 ä¸ªå­—符', trigger: 'blur' }
          ]
        }
      },
      url: {
        add: '/base/printerConfig/add',
        edit: '/base/printerConfig/edit'
      },
      nextFactoryOptions: []
    }
  },
  created() {
  },
  methods: {
    add() {
      this.edit({})
    },
    edit(record) {
      this.form.resetFields()
      this.model = Object.assign({}, record)
      this.warehouseId = record.id
      this.visible = true
      this.$nextTick(() => {
        this.form.setFieldsValue(
          pick(this.model, 'printerIp','printerName', 'portNumber', 'printerModel')
        )
      })
    },
    close() {
      this.$emit('close')
      this.visible = false
    },
    handleOk() {
      console.log('表单值:', this.form.getFieldsValue())
      const that = this
      // è§¦å‘表单验证
      this.form.validateFields((err, values) => {
        if (!err) {
          that.confirmLoading = true
          let httpurl = ''
          let method = ''
          if (!this.model.id) {
            httpurl += this.url.add
            method = 'post'
          } else {
            httpurl += this.url.edit
            method = 'put'
          }
          let formData = Object.assign(this.model, values)
          httpAction(httpurl, formData, method).then((res) => {
            if (res.success) {
              that.$message.success(res.message)
              that.$emit('ok')
            } else {
              that.$message.warning(res.message)
            }
          }).finally(() => {
            that.confirmLoading = false
            that.close()
          })
        }
      })
    },
    handleCancel() {
      this.close()
    },
    //验证 åç§°
    validateName(rule, value, callback) {
      var params = {
        tableName: 'base_printer_config',
        fieldName: 'port_number',
        fieldVal: value,
        //数据库中存在字段del_flag并使用该字段作为未删除策略,真删除:false å‡åˆ é™¤ï¼štrue
        delFlag: 'true'
      }
      duplicateCheck(params).then((res) => {
        if (res.success) {
          callback()
        } else {
          callback('打印机端口已存在!')
        }
      })
    },
    // å…³é—­å¼¹çª—时清除表单校验
    removeValidate() {
      if (this.$refs.form) this.$refs.form.clearValidate()
    }
  }
}
</script>
<style scoped>
.ant-btn {
  padding: 0 10px;
  margin-left: 3px;
}
.ant-form-item-control {
  line-height: 0px;
}
/** ä¸»è¡¨å•行间距 */
.ant-form .ant-form-item {
  margin-bottom: 10px;
}
/** Tab页面行间距 */
.ant-tabs-content .ant-form-item {
  margin-bottom: 0px;
}
</style>
src/views/base/modules/warehouse/WarehouseModel.vue
@@ -55,6 +55,7 @@
            >
              <j-dict-select-tag :disabled="disableSubmit" type="list" placeholder="请选择产线"
                                 v-model="model.factoryId"
                                 v-decorator="['factoryId', validatorRules.factoryId ]"
                                 dictCode="base_factory,factory_name,id,del_flag='0' and factory_category='3'" />
            </a-form-item>
          </a-col>
@@ -105,6 +106,11 @@
            { min: 0, max: 64, message: '长度不超过 64 ä¸ªå­—符', trigger: 'blur' },
            { validator: this.validateName }
          ]
        },
        factoryId: {
          rules: [
            { required: true, message: '请选择产线' },
          ]
        }
      },
      url: {
src/views/cms/CuttingInboundList.vue
@@ -68,7 +68,7 @@
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
      <a-button @click="handleAdd" type="primary" icon="plus">新刀入库</a-button>
      <a-button type="primary" icon="download" @click="handleExportXls('刀具入库单')">导出</a-button>
      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
        <a-button type="primary" icon="import">导入</a-button>
src/views/cms/CuttingInventoryList.vue
@@ -2,41 +2,41 @@
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
<!--      <a-form layout="inline" @keyup.enter.native="searchQuery">-->
<!--        <a-row :gutter="24">-->
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
<!--          <a-col :md="6" :sm="8">-->
<!--            <a-form-item label="刀具编码">-->
<!--              <a-input placeholder="请输入刀具编码" v-model="queryParam.cuttingId" />-->
<!--            </a-form-item>-->
<!--          </a-col>-->
<!--          <a-col :md="6" :sm="8">-->
<!--              <a-form-item label="刀具条码">-->
<!--                <a-input placeholder="请输入刀具条码" v-model="queryParam.cuttingBarcode" />-->
<!--              </a-form-item>-->
<!--            </a-col>-->
<!--            <a-col-->
<!--            :md="6"-->
<!--            :sm="8"-->
<!--          >-->
<!--            <span-->
<!--              style="float: left;overflow: hidden;"-->
<!--              class="table-page-search-submitButtons"-->
<!--            >-->
<!--              <a-button-->
<!--                type="primary"-->
<!--                @click="searchQuery"-->
<!--                icon="search"-->
<!--              >查询</a-button>-->
<!--              <a-button-->
<!--                type="primary"-->
<!--                @click="searchReset"-->
<!--                icon="reload"-->
<!--                style="margin-left: 8px"-->
<!--              >重置</a-button>-->
<!--            </span>-->
<!--          </a-col>-->
<!--        </a-row>-->
<!--      </a-form>-->
          <a-col :md="6" :sm="8">
              <a-form-item label="刀具条码">
                <a-input placeholder="请输入刀具条码" v-model="queryParam.cuttingBarcode" />
              </a-form-item>
            </a-col>
            <a-col
            :md="6"
            :sm="8"
          >
            <span
              style="float: left;overflow: hidden;"
              class="table-page-search-submitButtons"
            >
              <a-button
                type="primary"
                @click="searchQuery"
                icon="search"
              >查询</a-button>
              <a-button
                type="primary"
                @click="searchReset"
                icon="reload"
                style="margin-left: 8px"
              >重置</a-button>
            </span>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
@@ -220,9 +220,27 @@
            align: "center",
          },
          {
            title: '数量',
            title: '总数',
            dataIndex: 'cuttingIdNumber',
            align: "center"
            align: "center",
            customRender: (text, record, index) => {
              const obj = {
                children: text,
                attrs: {}
              };
              // åªåœ¨ç¬¬ä¸€è¡Œæ˜¾ç¤ºæ€»æ•°é‡ï¼Œå…¶ä»–行显示空
              if (record.rowSpan !== undefined && record.rowSpan > 0) {
                obj.children = text;
                obj.attrs.rowSpan = record.rowSpan;
              } else if (record.rowSpan === 0) {
                obj.children = '';
                obj.attrs.rowSpan = 0;
              } else {
                obj.children = text;
                obj.attrs.rowSpan = 1;
              }
              return obj;
            }
          }
        ],
        url: {
@@ -475,7 +493,8 @@
        }
        return result;
      }
      },
    }
  }
</script>
src/views/cms/modules/CuttingInboundModal.vue
@@ -3,7 +3,7 @@
    <a-spin :spinning="confirmLoading">
      <a-form :form="form">
        <a-row style="width: 100%">
           <a-col :span="24 / 2">
          <a-col :span="24 / 2">
            <a-form-item label="入库人" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-search-select-tag
                :disabled="disableSubmit"
@@ -26,12 +26,13 @@
        <a-row style="width: 100%">
          <a-col :span="24">
            <a-form-item label="入库说明" :labelCol="{span:3}" :wrapperCol="{span:21}">
              <a-textarea :disabled="disableSubmit" placeholder="请输入入库说明" v-decorator="['receiveComment', validatorRules.receiveComment]" />
              <a-textarea :disabled="disableSubmit" placeholder="请输入入库说明"
                          v-decorator="['receiveComment', validatorRules.receiveComment]" />
            </a-form-item>
          </a-col>
        </a-row>
        <a-row style="width: 100%">
           <a-col :span="24 / 2">
          <a-col :span="24 / 2">
            <a-form-item label="确认人" :labelCol="labelCol" :wrapperCol="wrapperCol">
              <j-search-select-tag
                :disabled="disableSubmit"
@@ -54,7 +55,8 @@
        <a-row style="width: 100%">
          <a-col :span="24">
            <a-form-item label="确认意见" :labelCol="{span:3}" :wrapperCol="{span:21}">
              <a-textarea :disabled="disableSubmit" placeholder="请输入确认意见" v-decorator="['confirmComment', validatorRules.confirmComment]" />
              <a-textarea :disabled="disableSubmit" placeholder="请输入确认意见"
                          v-decorator="['confirmComment', validatorRules.confirmComment]" />
            </a-form-item>
          </a-col>
        </a-row>
@@ -103,27 +105,28 @@
<script>
  import pick from 'lodash.pick'
  import JSelectToolingModal from './JSelectToolingModal'
  import moment from 'moment'
  import { getAction, postAction, requestPut } from '@/api/manage'
  import JDictSelectTag from '@/components/dict/JDictSelectTag'
  import JSearchSelectTag from '@/components/dict/JSearchSelectTag'
  import JMultiSelectTag from '@/components/dict/JMultiSelectTag'
  import { filterObj } from '@/utils/util'
  import store from '@/store/'
  export default {
    name: 'CuttingInboundModal',
    components: {
import pick from 'lodash.pick'
import JSelectToolingModal from './JSelectToolingModal'
import moment from 'moment'
import { getAction, postAction, requestPut } from '@/api/manage'
import JDictSelectTag from '@/components/dict/JDictSelectTag'
import JSearchSelectTag from '@/components/dict/JSearchSelectTag'
import JMultiSelectTag from '@/components/dict/JMultiSelectTag'
import { filterObj } from '@/utils/util'
import store from '@/store/'
export default {
  name: 'CuttingInboundModal',
  components: {
    JSelectToolingModal,
    JMultiSelectTag,
    JDictSelectTag,
    store,
    moment,
    moment
  },
    data () {
      return {
         /* åˆ†é¡µå‚æ•° */
  data() {
    return {
      /* åˆ†é¡µå‚æ•° */
      ipagination: {
        current: 1,
        pageSize: 10,
@@ -133,27 +136,26 @@
        },
        showQuickJumper: true,
        showSizeChanger: true,
        total: 0,
        total: 0
      },
      title:'新增',
         visible: false,
         selectedRowKeys: {},
      title: '新增',
      visible: false,
      selectedRowKeys: {},
      model: {},
      labelCol: {
        xs: { span: 24 },
        sm: { span: 6 },
        sm: { span: 6 }
      },
      wrapperCol: {
        xs: { span: 24 },
        sm: { span: 18 },
        sm: { span: 18 }
      },
      confirmLoading: false,
      loading: false,
      form: this.$form.createForm(this),
      dataSource: [],
      param: {},
      validatorRules: {
      },
      validatorRules: {},
      columns: [
        {
          title: '#',
@@ -161,52 +163,52 @@
          key: 'rowIndex',
          width: 50,
          align: 'center',
          customRender: function (t, r, index) {
          customRender: function(t, r, index) {
            return parseInt(index) + 1
          },
          }
        },
        {
          title: '刀具编码',
          align: 'center',
          dataIndex: 'cuttingCode',
          width: 150,
          width: 150
        },
        {
          title: '刀具名称',
          align: 'center',
          dataIndex: 'cuttingName',
          dataIndex: 'cuttingName'
        },
        {
          title: '入库数量',
          align: 'center',
          dataIndex: 'receiveNumber',
          scopedSlots: { customRender: 'receiveNumber' },
          scopedSlots: { customRender: 'receiveNumber' }
        },
        {
          title: '操作',
          dataIndex: 'action',
          align: 'center',
          scopedSlots: { customRender: 'action' },
        },
          scopedSlots: { customRender: 'action' }
        }
      ],
      url: {
        add: '/cms/cuttingInbound/add',
        detailList: '/cms/cuttingInbound/detailList',
        detailList: '/cms/cuttingInbound/detailList'
      },
      orderId:'',
      disableSubmit:false
      }
    },
    methods: {
      modalFormOk(){
      orderId: '',
      disableSubmit: false
    }
  },
  methods: {
    modalFormOk() {
      },
       getQueryParams() {
    },
    getQueryParams() {
      this.param.pageNo = this.ipagination.current
      this.param.pageSize = this.ipagination.pageSize
      return filterObj(this.param)
    },
      add() {
    add() {
      let receiver = store.getters.userInfo.id
      let receiveTime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
      this.edit({ receiver: receiver, receiveTime: receiveTime })
@@ -228,7 +230,7 @@
        )
      })
    },
     handleDelete(record, index) {
    handleDelete(record, index) {
      this.dataSource.splice(index, 1)
    },
    handleChange(value, key, column, index) {
@@ -240,7 +242,7 @@
        this.dataSource = temp
      }
    },
    selectTooling: function () {
    selectTooling: function() {
      let ids = []
      for (let i = 0; i < this.dataSource.length; i++) {
        ids.push(this.dataSource[i].cuttingId)
@@ -266,7 +268,7 @@
        return
      }
      // æ ¡éªŒå…¥åº“数量是否填写
      for(let i=0; i<this.dataSource.length; i++) {
      for (let i = 0; i < this.dataSource.length; i++) {
        if (!this.dataSource[i].receiveNumber || this.dataSource[i].receiveNumber <= 0) {
          this.$message.error(`必须填写入库数量`)
          return
@@ -303,9 +305,9 @@
      this.dataSource = []
      this.visible = false
      this.disableSubmit = false
    },
    },
    mounted() {
    }
  },
  mounted() {
    this.$bus.$on('selectionRows', (data) => {
      //getCurrSelected äº‹ä»¶ æŽ¥æ”¶ç»„件传递的参数
      for (let i = 0; i < data.length; i++) {
@@ -316,6 +318,6 @@
        })
      }
    })
  },
  }
}
</script>
src/views/lsw/LswMateriaView.vue
@@ -40,8 +40,7 @@
        </a-row>
      </a-form>
    </div>
    <!--    <a-button @click="handleAdd" type="primary" icon="plus">新增物料信息-测试</a-button>-->
    <a-spin :spinning="confirmLoading">
    <a-spin :spinning="loading">
      <div>
        <!-- ä¸»è¡¨å•区域 -->
        <a-table
@@ -55,6 +54,7 @@
          :pagination="ipagination"
          :loading="loading"
          :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio'}"
          :customRow="customTableRow"
          @change="handleTableChange">
          <!--状态栏个性展示-->
          <span
@@ -118,24 +118,9 @@
        </a-table>
      </div>
      <!-- å­è¡¨å•区域 -->
      <a-tabs v-model="activeKey" @change="handleChangeTabs">
        <a-tab-pane tab="库存明细" :key="refKeys[0]" :forceRender="true">
          <div style="display: flex; align-items: center; margin-bottom: 10px;">
            <a-tag color="green" style="font-weight: bold;">
              åº“存总量:{{ totalInventoryQuantity }}
            </a-tag>
          </div>
          <j-vxe-table
            keep-source
            :ref="refKeys[0]"
            :loading="lswMaterialInventoryTable.loading"
            :columns="lswMaterialInventoryTable.columns"
            :dataSource="lswMaterialInventoryTable.dataSource"
            :maxHeight="300"
            :rowNumber="true"
            :rowSelection="true"
            :toolbar="false"
          />
      <a-tabs v-model="activeKey">
        <a-tab-pane tab="库存明细" key="lswMaterialInventory" :forceRender="true">
          <lsw-material-inventory-list ref="lswMaterialInventory" />
        </a-tab-pane>
      </a-tabs>
    </a-spin>
@@ -146,18 +131,16 @@
<script>
import { getAction } from '@/api/manage'
import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
import { JVXETypes } from '@/components/jeecg/JVxeTable'
import JFormContainer from '@/components/jeecg/JFormContainer'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import LswMaterialModal from '@views/lsw/modules/LswMaterialModal.vue'
import LswMaterialInventoryList from './LswMaterialInventoryList.vue'
export default {
  name: 'LswMaterialForm',
  mixins: [JVxeTableModelMixin, JeecgListMixin],
  name: 'LswMaterialView',
  mixins: [JeecgListMixin],
  components: {
    LswMaterialModal,
    JFormContainer
    LswMaterialInventoryList
  },
  data() {
    return {
@@ -175,8 +158,6 @@
      validatorRules: {},
      selectedRowKeys: [], // åˆå§‹åŒ–为空数组(单选时存储单个key)
      selectedRowData: null,
      refKeys: ['lswMaterialInventory'],
      tableKeys: ['lswMaterialInventory'],
      activeKey: 'lswMaterialInventory',
      columns: [
        {
@@ -226,63 +207,12 @@
          scopedSlots: { customRender: 'action' }
        }
      ],
      // ç‰©æ–™åº“存信息
      lswMaterialInventoryTable: {
        loading: false,
        dataSource: [],
        columns: [
          {
            title: '批次号',
            key: 'batchNumber',
            type: JVXETypes.input,
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '库存类型',
            key: 'inventoryCategory',
            type: JVXETypes.input,
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '数量',
            key: 'quantity',
            type: JVXETypes.input,
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '库存地',
            key: 'warehouseName',
            type: JVXETypes.input,
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          },
          {
            title: '库存状态',
            key: 'inventoryStatus',
            type: JVXETypes.input,
            width: '200px',
            placeholder: '请输入${title}',
            defaultValue: ''
          }
        ]
      },
      url: {
        //searchlikeQuery
        list: '/lsw/lswMaterial/list',
        edit: '/lsw/lswMaterial/edit',
        active: '/lsw/lswMaterial/active',
        inactive: '/lsw/lswMaterial/inactive',
        queryById: '/lsw/lswMaterial/queryById',
        lswMaterialInventory: {
          list: '/lsw/lswMaterial/queryLswMaterialInventoryByMainId'
        }
      }
    }
  },
@@ -298,15 +228,6 @@
    formDisabled() {
      return this.disabled
    },
    totalInventoryQuantity() {
      if (!this.lswMaterialInventoryTable.dataSource || this.lswMaterialInventoryTable.dataSource.length === 0) {
        return '0'
      }
      return this.lswMaterialInventoryTable.dataSource.reduce((sum, item) => {
        const quantity = Number(item.quantity) || 0
        return sum + quantity
      }, 0)
    },
  },
  created() {
  },
@@ -319,17 +240,19 @@
      return ''
    },
    async onSelectChange(selectedRowKeys) {
      this.lswMaterialInventoryTable.loading = true
      // å•选模式下,selectedRowKeys æ˜¯æ•°ç»„,但长度最多为1
      console.log('点击了---->')
      this.selectedRowKeys = selectedRowKeys
      this.lswMaterialInventoryTable.dataSource = []
      // èŽ·å–é€‰ä¸­è¡Œçš„å®Œæ•´æ•°æ®
      if (selectedRowKeys.length > 0) {
        const selectedId = selectedRowKeys[0] // é€‰ä¸­è¡Œçš„id
        const lswMaterialInventoryResult = await getAction(this.url.lswMaterialInventory.list, { 'id': selectedId })
        this.lswMaterialInventoryTable.dataSource = lswMaterialInventoryResult.result
        this.lswMaterialInventoryTable.loading = false
      if (selectedRowKeys.length === 1) {
        //加载库存信息
        this.$refs.lswMaterialInventory.queryParam.materialId = this.selectedRowKeys[0]
        this.$refs.lswMaterialInventory.loadData(1)
        this.$refs.lswMaterialInventory.statisticsInventory(this.selectedRowKeys[0])
      }else {
        //库存信息清空
        this.$refs.lswMaterialInventory.queryParam.materialId = 'null'
        this.$refs.lswMaterialInventory.loadData(1)
        this.$refs.lswMaterialInventory.statisticsInventory('null')
      }
    },
    handleActive(record) {
@@ -346,8 +269,24 @@
          that.$message.warning(res.message)
        }
      })
    }
    },
    /**
     * è‡ªå®šä¹‰è¡¨æ ¼è¡Œ
     * @param record è¡¨æ ¼è¡Œä¿¡æ¯
     * @returns {{style: {cursor: string}, on: {click: *}}} æ ·å¼å¯¹è±¡ä¸Žäº‹ä»¶æ–¹æ³•
     */
    customTableRow(record) {
      return {
        style: {
          cursor: 'pointer'
        },
        on: {
          click: () => {
            this.onSelectChange([record.id])
          }
        }
      }
    },
  }
}
</script>
src/views/lsw/LswMaterialInboundList.vue
@@ -5,24 +5,41 @@
      <a-form layout="inline" @keyup.enter.native="searchQuery" >
        <a-row :gutter="24">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="线边库">
              <j-dict-select-tag placeholder="请选择线边库" v-model="queryParam.warehouseId"
                                 dictCode="base_line_side_warehouse,warehouse_name,id,del_flag=0 and warehouse_status='1'"></j-dict-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="入库类型">
              <j-dict-select-tag placeholder="请选择入库类型" v-model="queryParam.inboundCategory" dictCode="material_inbound_category"></j-dict-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="物料编码">
              <j-input placeholder="请输入物料编码" v-model="queryParam.materialNumber"></j-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="物料名称">
              <j-input placeholder="请输入物料名称" v-model="queryParam.materialName"></j-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="批次号">
              <j-input placeholder="请输入批次号" v-model="queryParam.batchNumber"></j-input>
            </a-form-item>
          </a-col>
          <template v-if="toggleSearchStatus">
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="物料名称">
                <j-input placeholder="请输入物料名称" v-model="queryParam.materialName"></j-input>
              </a-form-item>
            </a-col>
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="批次号">
                <j-input placeholder="请输入批次号" v-model="queryParam.batchNumber"></j-input>
              </a-form-item>
            </a-col>
          </template>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
              <a @click="handleToggleSearch" style="margin-left: 8px">
                {{ toggleSearchStatus ? '收起' : '展开' }}
                <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/>
              </a>
            </span>
          </a-col>
        </a-row>
@@ -32,22 +49,16 @@
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
        </a-menu>
        <a-button style="margin-left: 8px"> æ‰¹é‡æ“ä½œ <a-icon type="down" /></a-button>
      </a-dropdown>
      <a-button @click="handleAdd('HEAT_TREATMENT_INBOUND')" type="primary" icon="plus">热处理外协入库</a-button>
      <a-button @click="handleAdd('SMALL_INNER_RING')" type="primary" icon="plus">小内圈外协入库</a-button>
      <a-button @click="handleAdd('MATERIAL_INNER_TRANSFER')" type="primary" icon="plus">内部调拨</a-button>
    </div>
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
      <a-table
        ref="table"
        size="middle"
@@ -61,46 +72,6 @@
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <template slot="htmlSlot" slot-scope="text">
          <div v-html="text"></div>
        </template>
        <template slot="imgSlot" slot-scope="text,record">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
        </template>
        <template slot="fileSlot" slot-scope="text">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
          <a-button
            v-else
            :ghost="true"
            type="primary"
            icon="download"
            size="small"
            @click="downloadFile(text)">
            ä¸‹è½½
          </a-button>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
@@ -137,12 +108,17 @@
            }
          },
          {
            title:'产线',
            title:'来源编码',
            align:"center",
            dataIndex: 'factoryId_dictText'
            dataIndex: 'originalCode'
          },
          {
            title:'库存地',
            title:'来源名称',
            align:"center",
            dataIndex: 'originalName'
          },
          {
            title:'线边库',
            align:"center",
            dataIndex: 'warehouseId_dictText'
          },
@@ -167,60 +143,36 @@
            dataIndex: 'quantity'
          },
          {
            title:'接收人',
            title:'入库类型',
            align:"center",
            dataIndex: 'receiver'
            dataIndex: 'inboundCategory_dictText'
          },
          {
            title:'接收时间',
            title:'入库人',
            align:"center",
            dataIndex: 'receiver_dictText'
          },
          {
            title:'入库时间',
            align:"center",
            dataIndex: 'receiveTime'
          },
          // {
          //   title: '操作',
          //   dataIndex: 'action',
          //   align:"center",
          //   fixed:"right",
          //   width:147,
          //   scopedSlots: { customRender: 'action' }
          // }
        ],
        url: {
          list: "/lswmaterialinbound/lswMaterialInbound/list",
          delete: "/lswmaterialinbound/lswMaterialInbound/delete",
          deleteBatch: "/lswmaterialinbound/lswMaterialInbound/deleteBatch",
          exportXlsUrl: "/lswmaterialinbound/lswMaterialInbound/exportXls",
          importExcelUrl: "lswmaterialinbound/lswMaterialInbound/importExcel",
          list: "/lsw/materialInbound/list",
        },
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
    this.getSuperFieldList();
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      },
    },
    methods: {
      initDictConfig(){
      handleAdd(inboundCategory) {
        this.$refs.modalForm.add(inboundCategory);
        this.$refs.modalForm.title = "新增";
        this.$refs.modalForm.disableSubmit = false;
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'int',value:'delFlag',text:'删除标记',dictCode:''})
        fieldList.push({type:'string',value:'factoryId',text:'产线ID',dictCode:''})
        fieldList.push({type:'string',value:'warehouseId',text:'库存地ID',dictCode:''})
        fieldList.push({type:'string',value:'materialNumber',text:'物料编码',dictCode:''})
        fieldList.push({type:'string',value:'materialName',text:'物料名称',dictCode:''})
        fieldList.push({type:'string',value:'batchNumber',text:'批次号',dictCode:''})
        fieldList.push({type:'int',value:'quantity',text:'入库数量',dictCode:''})
        fieldList.push({type:'string',value:'receiver',text:'接收人',dictCode:''})
        fieldList.push({type:'datetime',value:'receiveTime',text:'接收时间'})
        this.superFieldList = fieldList
      }
    }
  }
</script>
src/views/lsw/LswMaterialInventoryList.vue
@@ -1,201 +1,109 @@
<template>
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
        </a-row>
      </a-form>
    <div style="display: flex; align-items: center; margin-bottom: 10px;">
      <a-tag color="blue" style="font-weight: bold; font-size: large;">
        åº“存统计:{{ inventoryStatisticsInfo}}
      </a-tag>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
      <a-button type="primary" icon="download" @click="handleExportXls('物料库存信息')">导出</a-button>
      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
        <a-button type="primary" icon="import">导入</a-button>
      </a-upload>
      <!-- é«˜çº§æŸ¥è¯¢åŒºåŸŸ -->
      <j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
        </a-menu>
        <a-button style="margin-left: 8px"> æ‰¹é‡æ“ä½œ <a-icon type="down" /></a-button>
      </a-dropdown>
    </div>
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
      <a-table
        ref="table"
        size="middle"
        :scroll="{x:true}"
        bordered
        rowKey="id"
        :columns="columns"
        :dataSource="dataSource"
        :pagination="ipagination"
        :loading="loading"
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <template slot="htmlSlot" slot-scope="text">
          <div v-html="text"></div>
        </template>
        <template slot="imgSlot" slot-scope="text,record">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
        </template>
        <template slot="fileSlot" slot-scope="text">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
          <a-button
            v-else
            :ghost="true"
            type="primary"
            icon="download"
            size="small"
            @click="downloadFile(text)">
            ä¸‹è½½
          </a-button>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
    <lsw-material-inventory-modal ref="modalForm" @ok="modalFormOk"></lsw-material-inventory-modal>
    <a-table
      ref="table"
      size="middle"
      :scroll="{x:true}"
      bordered
      rowKey="id"
      :columns="columns"
      :dataSource="dataSource"
      :pagination="ipagination"
      :loading="loading"
      :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
      class="j-table-force-nowrap"
      @change="handleTableChange">
    </a-table>
  </a-card>
</template>
<script>
  import '@/assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import LswMaterialInventoryModal from './modules/LswMaterialInventoryModal'
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import LswMaterialInventoryModal from './modules/LswMaterialInventoryModal'
import { getAction } from '@api/manage'
  export default {
    name: 'LswMaterialInventoryList',
    mixins:[JeecgListMixin, mixinDevice],
    components: {
      LswMaterialInventoryModal
    },
    data () {
      return {
        description: '物料库存信息管理页面',
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
          {
            title:'物料ID',
            align:"center",
            dataIndex: 'materialId'
          },
          {
            title:'批次号',
            align:"center",
            dataIndex: 'batchNumber'
          },
          {
            title:'库存类型',
            align:"center",
            dataIndex: 'inventoryCategory'
          },
          {
            title:'数量',
            align:"center",
            dataIndex: 'quantity'
          },
          {
            title:'库存地ID',
            align:"center",
            dataIndex: 'warehouseId'
          },
          {
            title:'库存状态',
            align:"center",
            dataIndex: 'inventoryStatus'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
export default {
  name: 'LswMaterialInventoryList',
  mixins: [JeecgListMixin, mixinDevice],
  components: {
    LswMaterialInventoryModal
  },
  data() {
    return {
      description: '物料库存信息管理页面',
      inventoryStatisticsInfo: "0",
      // è¡¨å¤´
      columns: [
        {
          title: '#',
          dataIndex: '',
          key: 'rowIndex',
          width: 60,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
          }
        ],
        url: {
          list: "/lswmaterialinventory/lswMaterialInventory/list",
          delete: "/lswmaterialinventory/lswMaterialInventory/delete",
          deleteBatch: "/lswmaterialinventory/lswMaterialInventory/deleteBatch",
          exportXlsUrl: "/lswmaterialinventory/lswMaterialInventory/exportXls",
          importExcelUrl: "lswmaterialinventory/lswMaterialInventory/importExcel",
        },
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
    this.getSuperFieldList();
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
        {
          title: '批次号',
          align: 'center',
          dataIndex: 'batchNumber'
        },
        {
          title: '库存类型',
          align: 'center',
          dataIndex: 'inventoryCategory_dictText'
        },
        {
          title: '数量',
          align: 'center',
          dataIndex: 'quantity'
        },
        {
          title: '库存地',
          align: 'center',
          dataIndex: 'warehouseId_dictText'
        },
        {
          title: '库存状态',
          align: 'center',
          dataIndex: 'inventoryStatus_dictText'
        },
        {
          title: '热处理标记',
          align: 'center',
          dataIndex: 'warehouseId_dictText'
        },
      ],
      url: {
        list: '/lsw/materialInventory/list',
        statistics: '/lsw/materialInventory/statisticsInventory',
      },
    },
    methods: {
      initDictConfig(){
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'string',value:'materialId',text:'物料ID',dictCode:''})
        fieldList.push({type:'string',value:'batchNumber',text:'批次号',dictCode:''})
        fieldList.push({type:'string',value:'inventoryCategory',text:'库存类型',dictCode:''})
        fieldList.push({type:'string',value:'quantity',text:'数量',dictCode:''})
        fieldList.push({type:'string',value:'warehouseId',text:'库存地ID',dictCode:''})
        fieldList.push({type:'string',value:'inventoryStatus',text:'库存状态',dictCode:''})
        this.superFieldList = fieldList
      }
    }
  },
  created() {
  },
  computed: {
  },
  methods: {
    statisticsInventory(materialId) {
      getAction(this.url.statistics, {materialId : materialId}).then(res => {
        if(res.success) {
          this.inventoryStatisticsInfo = res.result;
        }
      })
    }
  }
}
</script>
<style scoped>
  @import '~@assets/less/common.less';
@import '~@assets/less/common.less';
</style>
src/views/lsw/LswMaterialOutboundList.vue
@@ -5,24 +5,42 @@
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="线边库">
              <j-dict-select-tag placeholder="请选择线边库" v-model="queryParam.warehouseId"
                                 dictCode="base_line_side_warehouse,warehouse_name,id,del_flag=0 and warehouse_status='1'"></j-dict-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="出库类型">
              <j-dict-select-tag placeholder="请选择出库类型" v-model="queryParam.outboundCategory"
                                 dictCode="material_outbound_category"></j-dict-select-tag>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="物料编码">
              <j-input placeholder="请输入物料编码" v-model="queryParam.materialNumber"></j-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="物料名称">
              <j-input placeholder="请输入物料名称" v-model="queryParam.materialName"></j-input>
            </a-form-item>
          </a-col>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <a-form-item label="批次号">
              <j-input placeholder="请输入批次号" v-model="queryParam.batchNumber"></j-input>
            </a-form-item>
          </a-col>
          <template v-if="toggleSearchStatus">
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="物料名称">
                <j-input placeholder="请输入物料名称" v-model="queryParam.materialName"></j-input>
              </a-form-item>
            </a-col>
            <a-col :xl="6" :lg="7" :md="8" :sm="24">
              <a-form-item label="批次号">
                <j-input placeholder="请输入批次号" v-model="queryParam.batchNumber"></j-input>
              </a-form-item>
            </a-col>
          </template>
          <a-col :xl="6" :lg="7" :md="8" :sm="24">
            <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
              <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
               <a @click="handleToggleSearch" style="margin-left: 8px">
                {{ toggleSearchStatus ? '收起' : '展开' }}
                <a-icon :type="toggleSearchStatus ? 'up' : 'down'" />
              </a>
            </span>
          </a-col>
        </a-row>
@@ -30,21 +48,11 @@
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
      <a-dropdown v-if="selectedRowKeys.length > 0">
        <a-menu slot="overlay">
          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
        </a-menu>
        <a-button style="margin-left: 8px"> æ‰¹é‡æ“ä½œ <a-icon type="down" /></a-button>
      </a-dropdown>
    </div>
    <!-- table区域-begin -->
    <div>
      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <i class="anticon anticon-info-circle ant-alert-icon"></i> å·²é€‰æ‹© <a
        style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
        <a style="margin-left: 24px" @click="onClearSelected">清空</a>
      </div>
@@ -61,169 +69,88 @@
        :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <template slot="htmlSlot" slot-scope="text">
          <div v-html="text"></div>
        </template>
        <template slot="imgSlot" slot-scope="text,record">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
          <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
        </template>
        <template slot="fileSlot" slot-scope="text">
          <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
          <a-button
            v-else
            :ghost="true"
            type="primary"
            icon="download"
            size="small"
            @click="downloadFile(text)">
            ä¸‹è½½
          </a-button>
        </template>
        <span slot="action" slot-scope="text, record">
          <a @click="handleEdit(record)">编辑</a>
          <a-divider type="vertical" />
          <a-dropdown>
            <a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
            <a-menu slot="overlay">
              <a-menu-item>
                <a @click="handleDetail(record)">详情</a>
              </a-menu-item>
              <a-menu-item>
                <a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
                  <a>删除</a>
                </a-popconfirm>
              </a-menu-item>
            </a-menu>
          </a-dropdown>
        </span>
      </a-table>
    </div>
    <lsw-material-outbound-modal ref="modalForm" @ok="modalFormOk"></lsw-material-outbound-modal>
  </a-card>
</template>
<script>
  import '@/assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import LswMaterialOutboundModal from './modules/LswMaterialOutboundModal'
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  export default {
    name: 'LswMaterialOutboundList',
    mixins:[JeecgListMixin, mixinDevice],
    components: {
      LswMaterialOutboundModal
    },
    data () {
      return {
        description: '物料出库单管理页面',
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
          {
            title:'物料编码',
            align:"center",
            dataIndex: 'materialNumber'
          },
          {
            title:'物料名称',
            align:"center",
            dataIndex: 'materialName'
          },
          {
            title:'产线',
            align:"center",
            dataIndex: 'factoryId_dictText'
          },
          {
            title:'批次号',
            align:"center",
            dataIndex: 'batchNumber'
          },
          {
            title:'出库人',
            align:"center",
            dataIndex: 'outboundStaff'
          },
          {
            title:'出库时间',
            align:"center",
            dataIndex: 'outboundTime'
          },
          {
            title:'出库数量',
            align:"center",
            dataIndex: 'quantity'
          },
          {
            title:'工单',
            align:"center",
            dataIndex: 'workOrderId'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
export default {
  name: 'LswMaterialOutboundList',
  mixins: [JeecgListMixin, mixinDevice],
  components: {},
  data() {
    return {
      description: '物料出库单管理页面',
      // è¡¨å¤´
      columns: [
        {
          title: '#',
          dataIndex: '',
          key: 'rowIndex',
          width: 60,
          align: 'center',
          customRender: function(t, r, index) {
            return parseInt(index) + 1
          }
        ],
        url: {
          list: "/lswmaterialoutbound/lswMaterialOutbound/list",
          delete: "/lswmaterialoutbound/lswMaterialOutbound/delete",
          deleteBatch: "/lswmaterialoutbound/lswMaterialOutbound/deleteBatch",
          exportXlsUrl: "/lswmaterialoutbound/lswMaterialOutbound/exportXls",
          importExcelUrl: "lswmaterialoutbound/lswMaterialOutbound/importExcel",
        },
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
    this.getSuperFieldList();
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      },
    },
    methods: {
      initDictConfig(){
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'int',value:'delFlag',text:'删除标记',dictCode:''})
        fieldList.push({type:'string',value:'materialNumber',text:'物料编码',dictCode:''})
        fieldList.push({type:'string',value:'materialName',text:'物料名称',dictCode:''})
        fieldList.push({type:'string',value:'factoryId',text:'产线ID',dictCode:''})
        fieldList.push({type:'string',value:'batchNumber',text:'批次号',dictCode:''})
        fieldList.push({type:'string',value:'outboundStaff',text:'出库人',dictCode:''})
        fieldList.push({type:'datetime',value:'outboundTime',text:'出库时间'})
        fieldList.push({type:'string',value:'quantity',text:'出库数量',dictCode:''})
        fieldList.push({type:'string',value:'workOrderId',text:'工单ID',dictCode:''})
        this.superFieldList = fieldList
        {
          title: '线边库',
          align: 'center',
          dataIndex: 'warehouseId_dictText'
        },
        {
          title: '物料编码',
          align: 'center',
          dataIndex: 'materialNumber'
        },
        {
          title: '物料名称',
          align: 'center',
          dataIndex: 'materialName'
        },
        {
          title: '批次号',
          align: 'center',
          dataIndex: 'batchNumber'
        },
        {
          title: '出库类型',
          align: 'center',
          dataIndex: 'outboundCategory_dictText'
        },
        {
          title: '出库人',
          align: 'center',
          dataIndex: 'outboundStaff_dictText'
        },
        {
          title: '出库时间',
          align: 'center',
          dataIndex: 'outboundTime'
        },
        {
          title: '出库数量',
          align: 'center',
          dataIndex: 'quantity'
        }
      ],
      url: {
        list: '/lsw/materialOutbound/list'
      }
    }
  }
  },
  created() {
  },
  computed: {},
  methods: {}
}
</script>
<style scoped>
  @import '~@assets/less/common.less';
@import '~@assets/less/common.less';
</style>
src/views/lsw/modules/LswMaterialInboundForm.vue
@@ -3,40 +3,34 @@
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <a-row>
          <a-form-model-item label="产线" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="factoryId">
            <a-row :gutter="24">
              <a-col :span="24">
                <a-form-item
                  :labelCol="labelCol"
                  :wrapperCol="wrapperCol"
                  label=""
                >
                  <j-select-factory
                    :disabled="disabled"
                    v-model="model.factoryId"
                    :multi="true"
                    @back="backFactoryInfo"
                    :backProduction="true"
                    :treeProductOpera="true"
                  ></j-select-factory>
                </a-form-item>
              </a-col>
            </a-row>
          </a-form-model-item>
          <a-col :span="12">
            <a-form-model-item label="库存地" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="warehouseId">
              <j-search-select-tag v-model="model.warehouseId" placeholder="请选择库存地"
                                   dict="base_line_side_warehouse,warehouse_name,id"></j-search-select-tag>
            <a-form-model-item label="来源编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="originalCode"
                               v-if="model.inboundCategory !== 'MATERIAL_INNER_TRANSFER'">
              <a-input v-model="model.originalCode" placeholder="请输入来源编码"></a-input>
            </a-form-model-item>
            <a-form-model-item label="来源线边库" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="originalCode"
                               v-else>
              <j-search-select-tag v-model="model.originalCode" placeholder="请选择线边库"
                                   :dict-options="originalCodeDictOptions"
                                   @change="originalCodeSelectChange"></j-search-select-tag>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="来源名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="originalName">
              <a-input v-model="model.originalName" placeholder="请输入来源名称"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="线边库" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="warehouseId">
              <j-search-select-tag v-model="model.warehouseId" placeholder="请选择线边库"
                                   :dict-options="warehouseDictOptions"
                                   @change="warehouseSelectChange"></j-search-select-tag>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="物料编码" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialNumber">
              <a-input v-model="model.materialNumber" placeholder="请输入物料编码"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName">
              <a-input v-model="model.materialName" placeholder="请输入物料名称"></a-input>
              <j-search-select-tag :dict-options="materialDictOptions" v-model="model.materialNumber"
                                   placeholder="请选择物料编码" @change="materialSelectChange"></j-search-select-tag>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
@@ -49,15 +43,21 @@
              <a-input-number v-model="model.quantity" placeholder="请输入入库数量" style="width: 100%" />
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
    <j-form-container disabled>
      <a-form-model ref="form1" :model="model" slot="detail">
        <a-row>
          <a-col :span="12">
            <a-form-model-item label="接收人" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiver">
              <j-select-user-by-dep v-model="model.receiver" placeholder="请输入接收人"></j-select-user-by-dep>
            <a-form-model-item label="物料名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="materialName">
              <a-input v-model="model.materialName"></a-input>
            </a-form-model-item>
          </a-col>
          <a-col :span="12">
            <a-form-model-item label="接收时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiveTime">
              <j-date placeholder="请选择接收时间" v-model="model.receiveTime" :show-time="true"
                      date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
            <a-form-model-item label="入库类型" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="inboundCategory">
              <j-search-select-tag v-model="model.inboundCategory"
                                   dict="material_inbound_category"></j-search-select-tag>
            </a-form-model-item>
          </a-col>
        </a-row>
@@ -68,22 +68,11 @@
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
import JDate from '@/components/jeecg/JDate'
import pick from 'lodash.pick'
import moment from 'moment'
import { duplicateCheck } from '@/api/api'//重复校验
import JTreeDict from '@/components/jeecg/JTreeDict'//分类字典树形下拉组件
import JSelectFactory from '../../../../src/components/jeecgbiz/JSelectFactory.vue'
import { getAction, httpAction } from '@/api/manage'
export default {
  name: 'LswMaterialInboundForm',
  components: {
    JDate,
    JTreeDict,
    JSelectFactory
  },
  components: {},
  props: {
    //表单禁用
    disabled: {
@@ -104,12 +93,17 @@
        sm: { span: 16 }
      },
      confirmLoading: false,
      warehouseDictOptions: [],
      materialDictOptions: [],
      validatorRules: {
        factoryId: [
          { required: true, message: '产线是必选项', trigger: 'change' }
        originalCode: [
          { required: true, message: '来源编码是必选项', trigger: 'change' }
        ],
        originalName: [
          { required: true, message: '来源名称是必选项', trigger: 'change' }
        ],
        warehouseId: [
          { required: true, message: '库存地是必选项', trigger: 'change' }
          { required: true, message: '线边库是必选项', trigger: 'change' }
        ],
        materialNumber: [
          { required: true, message: '物料编码是必选项', trigger: 'change' }
@@ -122,24 +116,27 @@
        ],
        quantity: [
          { required: true, message: '入库数量是必选项', trigger: 'change' }
        ],
        receiver: [
          { required: true, message: '接收人是必选项', trigger: 'change' }
        ],
        receiveTime: [
          { required: true, message: '接收时间是必选项', trigger: 'change' }
        ]
      },
      url: {
        add: '/lswmaterialinbound/lswMaterialInbound/add',
        edit: '/lswmaterialinbound/lswMaterialInbound/edit',
        queryById: '/lswmaterialinbound/lswMaterialInbound/queryById'
        add: '/lsw/materialInbound/add',
        edit: '/lsw/materialInbound/edit',
        queryById: '/lsw/materialInbound/queryById',
        queryByProductionType: '/base/lineSideWarehouse/queryByProductionType',
        queryByMaterialCategory: '/lsw/lswMaterial/queryByMaterialCategory'
      }
    }
  },
  computed: {
    formDisabled() {
      return this.disabled
    },
    originalCodeDictOptions() {
      return this.warehouseDictOptions.map(warehouse => ({
        ...warehouse,
        value: warehouse.warehouseCode,
        text: warehouse.warehouseName + '(' + warehouse.warehouseCode + ')'
      }))
    }
  },
  created() {
@@ -147,14 +144,20 @@
    this.modelDefault = JSON.parse(JSON.stringify(this.model))
  },
  methods: {
    backFactoryInfo(info) {
      this.model.factoryIds = this.model.factoryId
      this.nextFactoryOptions = info.map((item, index, arr) => {
        let c = { label: item.text, value: item.value + '' }
        return c
      })
    },
    add() {
    add(inboundCategory) {
      this.warehouseDictOptions = []
      this.materialDictOptions = []
      if (inboundCategory === 'HEAT_TREATMENT_INBOUND') {
        this.loadWarehouseDictOptions('OUTERFLANGE,INNERFLANGE')
        this.loadMaterialDictOptions('BLANK')
      } else if (inboundCategory === 'SMALL_INNER_RING') {
        this.loadWarehouseDictOptions('ASSEMBLE')
        this.loadMaterialDictOptions('SMALL_INNER_RING')
      } else if (inboundCategory === 'MATERIAL_INNER_TRANSFER') {
        this.loadWarehouseDictOptions('ASSEMBLE,OUTERFLANGE,INNERFLANG,HEATTREATMENT')
        this.loadMaterialDictOptions('OUTER_FLANGE,INNER_FLANGE,STEEL_BALL,BLANK,COMPONENTS')
      }
      this.modelDefault.inboundCategory = inboundCategory
      this.edit(this.modelDefault)
    },
    edit(record) {
@@ -189,6 +192,54 @@
        }
      })
    },
    loadWarehouseDictOptions(productionType) {
      let params = { productionType: productionType }
      getAction(this.url.queryByProductionType, params).then(res => {
        if (res.success) {
          this.warehouseDictOptions = res.result.map(warehouse => ({
            ...warehouse,
            value: warehouse.id,
            text: warehouse.warehouseName + '(' + warehouse.warehouseCode + ')'
          }))
        }
      })
    },
    loadMaterialDictOptions(materialCategory) {
      let params = { materialCategory: materialCategory }
      getAction(this.url.queryByMaterialCategory, params).then(res => {
        if (res.success) {
          this.materialDictOptions = res.result.map(material => ({
            ...material,
            value: material.materialNumber,
            text: material.materialNumber + '(' + material.materialName + ')'
          }))
        }
      })
    },
    warehouseSelectChange(value) {
      let warehouse = this.warehouseDictOptions.find(option => option.value === value)
      if (warehouse) {
        this.model.factoryId = warehouse.factoryId
      } else {
        this.model.factoryId = undefined
      }
    },
    materialSelectChange(value) {
      let material = this.materialDictOptions.find(option => option.value === value)
      if (material) {
        this.model.materialName = material.materialName
      } else {
        this.model.materialName = undefined
      }
    },
    originalCodeSelectChange(value) {
      let warehouse = this.originalCodeDictOptions.find(option => option.value === value)
      if (warehouse) {
        this.model.originalName = warehouse.warehouseName
      } else {
        this.model.originalName = undefined
      }
    }
  }
}
src/views/lsw/modules/LswMaterialInboundModal.vue
@@ -29,10 +29,10 @@
      }
    },
    methods: {
      add () {
      add (inboundCategory) {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.add();
          this.$refs.realForm.add(inboundCategory);
        })
      },
      edit (record) {
src/views/lsw/modules/LswMaterialOutboundForm.vue
ÎļþÒÑɾ³ý
src/views/lsw/modules/LswMaterialOutboundModal.vue
ÎļþÒÑɾ³ý
src/views/user/Login.vue
@@ -6,7 +6,7 @@
        <div class="header">
          <a href="/">
            <img src="~@/assets/lxzn.png" class="logo" alt="logo">
            <span class="title">MDC智慧车间</span>
            <span class="title">双林轴承智慧车间</span>
          </a>
        </div>
      </div>
@@ -62,10 +62,6 @@
          >确定
          </a-button>
        </a-form-item>
        <a-form-model-item style="color: red;font-size: 0.8vw">
          å¯†çº§ï¼šå†…部&nbsp;&nbsp;&nbsp;&nbsp;警告:本系统禁止存储、处理、传输涉密信息
        </a-form-model-item>
      </a-form-model>
    </div>