cuilei
2025-05-12 5458ac7c681ea32708229ca312dc7d8446720dc7
工具管理-货架标签信息管理页面
已添加3个文件
560 ■■■■■ 文件已修改
src/views/tms/GoodsShelvesMarkList.vue 284 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/GoodsShelvesMarkForm.vue 216 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/modules/GoodsShelvesMarkModal.vue 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/tms/GoodsShelvesMarkList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,284 @@
<template>
  <a-card :bordered="false">
    <!-- æŸ¥è¯¢åŒºåŸŸ -->
    <div class="table-page-search-wrapper">
      <a-form layout="inline" @keyup.enter.native="searchQuery">
        <a-row :gutter="24">
          <a-col
            :md="5"
            :sm="8"
          >
            <a-form-item label="仓库编号">
              <a-select
                show-search
                :filter-option="filterOption"
                placeholder="请输入仓库编号"
                v-model="queryParam.warehouseId"
                :options="warehouseOptions"
                @change="warehouseChange"
              ></a-select>
            </a-form-item>
          </a-col>
          <a-col
            :md="5"
            :sm="8"
          >
            <a-form-item label="货架编号">
              <a-select
                show-search
                :filter-option="filterOption"
                placeholder="请输入货架编号"
                v-model="queryParam.goodsShelves"
                :options="goodsShelvesOptions"
                @change="goodsShelvesChange"
              ></a-select>
            </a-form-item>
          </a-col>
          <a-col
            :md="5"
            :sm="8"
          >
            <a-form-item label="层数">
              <a-select
                show-search
                :filter-option="filterOption"
                placeholder="请输入层数"
                v-model="queryParam.storey"
                :options="storeyOptions"
              ></a-select>
            </a-form-item>
          </a-col>
          <a-col :md="4" :sm="4">
            <a-space>
              <a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
              <a-button type="primary" @click="searchReset" icon="reload">重置</a-button>
            </a-space>
          </a-col>
        </a-row>
      </a-form>
    </div>
    <!-- æŸ¥è¯¢åŒºåŸŸ-END -->
    <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
    <div class="table-operator">
      <a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<!--      <a-button type="primary" icon="download" @click="handleExportXls('tms_goods_shelves_mark')">导出</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="null"
        class="j-table-force-nowrap"
        @change="handleTableChange">
        <span slot="action" slot-scope="text, record">
          <a @click="handleDetail(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="handleEdit(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>
    <goods-shelves-mark-modal ref="modalForm" @ok="modalFormOk"></goods-shelves-mark-modal>
  </a-card>
</template>
<script>
  import '@/assets/less/TableExpand.less'
  import { mixinDevice } from '@/utils/mixin'
  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
  import GoodsShelvesMarkModal from './modules/GoodsShelvesMarkModal'
  import { getAction } from '../../api/manage'
  export default {
    name: 'GoodsShelvesMarkList',
    mixins:[JeecgListMixin, mixinDevice],
    components: {
      GoodsShelvesMarkModal
    },
    data () {
      return {
        description: 'tms_goods_shelves_mark',
        // è¡¨å¤´
        columns: [
          {
            title: '#',
            dataIndex: '',
            key:'rowIndex',
            width:60,
            align:"center",
            customRender:function (t,r,index) {
              return parseInt(index)+1;
            }
          },
          {
            title:'仓库编号',
            align:"center",
            dataIndex: 'warehouseId',
            customRender:function (text,r) {
              return r.warehouseNum + '/' + r.warehouseName
            }
          },
          {
            title:'货架编号',
            align:"center",
            dataIndex: 'goodsShelves',
            customRender:function (text,r) {
              return r.goodsShelves + '/' + r.shelfName
            }
          },
          {
            title:'层数',
            align:"center",
            dataIndex: 'storey'
          },
          {
            title:'品种(存放刀具品种信息)',
            align:"center",
            dataIndex: 'variety'
          },
          {
            title:'创建人',
            align:"center",
            dataIndex: 'createBy'
          },
          {
            title:'创建时间',
            align:"center",
            dataIndex: 'createTime'
          },
          {
            title: '操作',
            dataIndex: 'action',
            align:"center",
            fixed:"right",
            width:147,
            scopedSlots: { customRender: 'action' }
          }
        ],
        url: {
          list: "/tms/goodsShelvesMark/list",
          queryWarehouseDictList: '/tms/warehouse/queryWarehouseDictList',
          queryGoodsShelvesDictList: '/tms/goodsShelves/queryGoodsShelvesDictList',
          queryGoodsShelvesStoreyDictList: '/tms/goodsShelves/queryGoodsShelvesStoreyDictList',
          delete: "/tms/goodsShelvesMark/delete",
          deleteBatch: "/tms/goodsShelvesMark/deleteBatch",
          exportXlsUrl: "/tms/goodsShelvesMark/exportXls",
          importExcelUrl: "tms/goodsShelvesMark/importExcel",
        },
        warehouseId: '',
        warehouseOptions: [],
        goodsShelvesOptions: [],
        storeyOptions: [],
        dictOptions:{},
        superFieldList:[],
      }
    },
    created() {
      this.getSuperFieldList();
      getAction(this.url.queryWarehouseDictList, null).then((res)=>{
        if(res.success){
          this.warehouseOptions = res.result
        }
      })
    },
    computed: {
      importExcelUrl: function(){
        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
      },
    },
    methods: {
      searchReset() {
        this.queryParam = {}
        this.warehouseId = ''
        this.goodsShelvesOptions = []
        this.storeyOptions = []
        this.loadData(1);
      },
      warehouseChange(warehouseId) {
        this.goodsShelvesOptions = []
        this.storeyOptions = []
        this.warehouseId = warehouseId
        getAction(this.url.queryGoodsShelvesDictList, {warehouseId: warehouseId}).then(res => {
          if (res.success) {
            this.goodsShelvesOptions = res.result
          }
        })
      },
      goodsShelvesChange(shelfNumber) {
        this.storeyOptions = []
        getAction(this.url.queryGoodsShelvesStoreyDictList, {
          warehouseId: this.warehouseId,
          shelfNumber: shelfNumber
        }).then(res => {
          if (res.success) {
            this.storeyOptions = res.result
          }
        })
      },
      filterOption(input, option) {
        return (
          option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
        );
      },
      initDictConfig(){
      },
      getSuperFieldList(){
        let fieldList=[];
        fieldList.push({type:'string',value:'warehouseId',text:'仓库编号',dictCode:''})
        fieldList.push({type:'string',value:'goodsShelves',text:'货架编号',dictCode:''})
        fieldList.push({type:'string',value:'storey',text:'层数信息',dictCode:''})
        fieldList.push({type:'string',value:'variety',text:'品种-标注存放刀具品种信息',dictCode:''})
        fieldList.push({type:'string',value:'createBy',text:'创建人',dictCode:''})
        fieldList.push({type:'date',value:'createTime',text:'创建时间'})
        this.superFieldList = fieldList
      }
    }
  }
</script>
<style scoped>
  @import '~@assets/less/common.less';
</style>
src/views/tms/modules/GoodsShelvesMarkForm.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,216 @@
<template>
  <a-spin :spinning="confirmLoading">
    <j-form-container :disabled="formDisabled">
      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
        <a-row>
          <a-col :span="24">
            <a-form-model-item label="仓库编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="warehouseId">
              <a-select :disabled="editDisabled" show-search :filterOption="filterOption" :options="warehouseOptions" @change="warehouseChange" v-model="model.warehouseId" placeholder="请输入仓库编号"  ></a-select>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="货架编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="goodsShelves">
              <a-select :disabled="editDisabled" show-search :filterOption="filterOption" :options="goodsShelvesOptions" @change="goodsShelvesChange" v-model="model.goodsShelves" placeholder="请输入货架编号"  ></a-select>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="层数信息" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storey">
              <a-select :disabled="editDisabled" show-search :filterOption="filterOption" :options="storeyOptions" v-model="model.storey" placeholder="请输入层数信息"  ></a-select>
            </a-form-model-item>
          </a-col>
          <a-col :span="24">
            <a-form-model-item label="品种(存放刀具品种信息)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="variety">
              <a-input v-model="model.variety" placeholder="请输入品种(存放刀具品种信息)"  ></a-input>
            </a-form-model-item>
          </a-col>
        </a-row>
      </a-form-model>
    </j-form-container>
  </a-spin>
</template>
<script>
  import { httpAction, getAction } from '@/api/manage'
  import { validateDuplicateValue } from '@/utils/util'
  export default {
    name: 'GoodsShelvesMarkForm',
    components: {
    },
    props: {
      //表单禁用
      disabled: {
        type: Boolean,
        default: false,
        required: false
      },
      title: {
        type: String,
        default: '',
        required: false
      },
    },
    data () {
      return {
        model:{
         },
        labelCol: {
          xs: { span: 24 },
          sm: { span: 5 },
        },
        wrapperCol: {
          xs: { span: 24 },
          sm: { span: 16 },
        },
        confirmLoading: false,
        validatorRules: {
          warehouseId: [
            { required: true, message: '请选择仓库!'},
          ],
          goodsShelves: [
            { required: true, message: '请选择货架!'},
          ],
          storey: [
            { required: true, message: '请选择层!'},
            { validator: this.validateDuplicate }
          ],
          variety: [
            { required: true, message: '请输入品种信息!'}
          ]
        },
        url: {
          add: "/tms/goodsShelvesMark/add",
          queryWarehouseDictList: '/tms/warehouse/queryWarehouseDictList',
          queryGoodsShelvesDictList: '/tms/goodsShelves/queryGoodsShelvesDictList',
          queryGoodsShelvesStoreyDictList: '/tms/goodsShelves/queryGoodsShelvesStoreyDictList',
          edit: "/tms/goodsShelvesMark/edit",
          queryById: "/tms/goodsShelvesMark/queryById",
          duplicateCheckSelect: '/tms/goodsShelvesMark/duplicateCheckSelect'
        },
        editDisabled: false,
        warehouseOptions: [],
        goodsShelvesOptions: [],
        storeyOptions: []
      }
    },
    computed: {
      formDisabled(){
        return this.disabled
      },
    },
    created () {
       //备份model原始值
      this.modelDefault = JSON.parse(JSON.stringify(this.model));
    },
    methods: {
      validateDuplicate(rule, value, callback) {
        getAction(this.url.duplicateCheckSelect, {
          warehouseId: this.model.warehouseId,
          goodsShelves: this.model.goodsShelves,
          storey: this.model.storey,
        }).then(res => {
          if (res.success) {
            if (this.title === '新增' && res.result.length > 0) {
              callback(new Error('该货架所在层标签信息已存在!'))
            }
            if (this.title === '编辑' && res.result.length > 0) {
              const result = res.result.filter(item => item.id !== this.model.id)
              if (result.length > 0) {
                callback(new Error('该货架所在层标签信息已存在!'))
              } else {
                callback()
              }
            }
            callback()
          } else {
            callback(new Error(res.message))
          }
        })
      },
      warehouseChange(warehouseId) {
        this.goodsShelvesOptions = []
        this.storeyOptions = []
        this.warehouseId = warehouseId
        getAction(this.url.queryGoodsShelvesDictList, {warehouseId: warehouseId}).then(res => {
          if (res.success) {
            this.goodsShelvesOptions = res.result
          }
        })
      },
      goodsShelvesChange(shelfNumber) {
        this.storeyOptions = []
        getAction(this.url.queryGoodsShelvesStoreyDictList, {
          warehouseId: this.warehouseId,
          shelfNumber: shelfNumber
        }).then(res => {
          if (res.success) {
            this.storeyOptions = res.result
          }
        })
      },
      filterOption(input, option) {
        return (
          option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
        );
      },
      add () {
        this.edit(this.modelDefault);
      },
      edit (record) {
        getAction(this.url.queryWarehouseDictList, null).then((res)=>{
          if(res.success){
            this.warehouseOptions = res.result
          }
        })
        getAction(this.url.queryGoodsShelvesDictList, { warehouseId: record.warehouseId }).then(res => {
          if (res.success) {
            this.goodsShelvesOptions = res.result
          }
        })
        getAction(this.url.queryGoodsShelvesStoreyDictList,  { warehouseId: record.warehouseId, shelfNumber: record.goodsShelves }).then(res => {
          if (res.success) {
            this.storeyOptions = res.result
          }
        })
        if (this.title === '新增' || this.title === '详情') {
          this.editDisabled = false
        }
        if (this.title === '编辑') {
          this.editDisabled = true
        }
        this.model = Object.assign({}, record);
        this.visible = true;
      },
      submitForm () {
        const that = this;
        // è§¦å‘表单验证
        this.$refs.form.validate(valid => {
          if (valid) {
            that.confirmLoading = true;
            let httpurl = '';
            let method = '';
            if(!this.model.id){
              httpurl+=this.url.add;
              method = 'post';
            }else{
              httpurl+=this.url.edit;
               method = 'put';
            }
            httpAction(httpurl,this.model,method).then((res)=>{
              if(res.success){
                that.$message.success(res.message);
                that.$emit('ok');
              }else{
                that.$message.warning(res.message);
              }
            }).finally(() => {
              that.confirmLoading = false;
            })
          }
        })
      },
    }
  }
</script>
src/views/tms/modules/GoodsShelvesMarkModal.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
<template>
  <j-modal
    :title="title"
    :width="width"
    :visible="visible"
    switchFullscreen
    @ok="handleOk"
    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
    @cancel="handleCancel"
    cancelText="关闭">
    <goods-shelves-mark-form ref="realForm" @ok="submitCallback" :title="title" :disabled="disableSubmit"></goods-shelves-mark-form>
  </j-modal>
</template>
<script>
  import GoodsShelvesMarkForm from './GoodsShelvesMarkForm'
  export default {
    name: 'GoodsShelvesMarkModal',
    components: {
      GoodsShelvesMarkForm
    },
    data () {
      return {
        title:'',
        width:896,
        visible: false,
        disableSubmit: false
      }
    },
    methods: {
      add () {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.add();
        })
      },
      edit (record) {
        this.visible=true
        this.$nextTick(()=>{
          this.$refs.realForm.edit(record);
        })
      },
      close () {
        this.$emit('close');
        this.visible = false;
      },
      handleOk () {
        this.$refs.realForm.submitForm();
      },
      submitCallback(){
        this.$emit('ok');
        this.visible = false;
      },
      handleCancel () {
        this.close()
      }
    }
  }
</script>