| | |
| | | </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 |
| | |
| | | :pagination="ipagination" |
| | | :loading="loading" |
| | | :rowSelection="{ selectedRowKeys: selectedRowKeys, onChange: onSelectChange, type: 'radio'}" |
| | | :customRow="customTableRow" |
| | | @change="handleTableChange"> |
| | | <!--状态栏个性展示--> |
| | | <span |
| | |
| | | </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> |
| | |
| | | <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 { |
| | |
| | | validatorRules: {}, |
| | | selectedRowKeys: [], // 初始化为空数组(单选时存储单个key) |
| | | selectedRowData: null, |
| | | refKeys: ['lswMaterialInventory'], |
| | | tableKeys: ['lswMaterialInventory'], |
| | | activeKey: 'lswMaterialInventory', |
| | | columns: [ |
| | | { |
| | |
| | | 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' |
| | | } |
| | | } |
| | | } |
| | | }, |
| | |
| | | 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() { |
| | | }, |
| | |
| | | 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) { |
| | |
| | | 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> |
| | |
| | | <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' |
| | | }, |
| | | ], |
| | | 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> |