| | |
| | | <template> |
| | | <el-container> |
| | | <el-header class="m-header" style="height: auto"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="6"> |
| | | <el-date-picker |
| | | v-model="datevalue" |
| | | type="daterange" |
| | | unlink-panels |
| | | range-separator="到" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | :shortcuts="shortcuts" |
| | | :size="size" |
| | | format="YYYY/MM/DD" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="2"> |
| | | <el-button |
| | | id="select" |
| | | type="primary" |
| | | :icon="Search" |
| | | @click="autoAddRow">查询 |
| | | </el-button> |
| | | |
| | | </el-col> |
| | | |
| | | </el-row> |
| | | <el-header class="m-header"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="6"> |
| | | <el-date-picker |
| | | v-model="datevalue" |
| | | type="daterange" |
| | | unlink-panels |
| | | range-separator="到" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | :shortcuts="shortcuts" |
| | | :size="size" |
| | | format="YYYY/MM/DD" |
| | | value-format="YYYY-MM-DD" |
| | | /> |
| | | </el-col> |
| | | <el-col :span="2" :offset="1"> |
| | | <el-button |
| | | id="select" |
| | | type="primary" |
| | | :icon="Search" |
| | | @click="autoAddRow">查询 |
| | | </el-button> |
| | | </el-col> |
| | | </el-row> |
| | | </el-header> |
| | | <el-main style="padding-top: 5px"> |
| | | <el-table :data="tableData" style="width: 100%" height="620" border show-summary sum-text=" " |
| | | empty-text="暂无数据"> |
| | | <el-table-column fixed="left" prop="rIndex" label="" width="50" align="center"></el-table-column> |
| | | <vxe-grid |
| | | max-height="600" |
| | | @filter-change="filterChanged" |
| | | class="mytable-scrollbar" |
| | | ref="xGrid" |
| | | v-bind="gridOptions" |
| | | @="gridEvents" |
| | | > |
| | | |
| | | <el-table-column fixed="left" label="操作" width="120"> |
| | | <template #default="scope"> |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | size="small" |
| | | @click.prevent="deleteRow(scope.$index)" |
| | | > |
| | | 删除 |
| | | </el-button> |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | size="small" |
| | | @click.prevent="deleteRow(scope.$index)" |
| | | > |
| | | 标记 |
| | | </el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- @toolbar-button-click="toolbarButtonClickEvent"--> |
| | | <!-- 下拉显示所有信息插槽--> |
| | | <template #content="{ row}"> |
| | | <ul class="expand-wrapper"> |
| | | <li v-for="(item,key,index) in row"> |
| | | <span style="font-weight: bold">{{ key + ': ' }}</span> |
| | | <span>{{ item }}</span> |
| | | </li> |
| | | </ul> |
| | | </template> |
| | | |
| | | <!--左边固定显示的插槽--> |
| | | <template #button_slot="{ row }"> |
| | | <el-button @click="getTableRow(row,'edit')" link type="primary" size="small">编辑</el-button> |
| | | <!-- <el-button @click="getTableRow(row,'delete')" link type="primary" size="small">删除</el-button>--> |
| | | <!-- <el-button @click="cellClickEvent" link type="primary" size="small">详情</el-button>--> |
| | | </template> |
| | | |
| | | |
| | | <el-table-column prop="name" label="库存组织" width="150"/> |
| | | <el-table-column prop="wlNumber" label="物料编码" width="150"/> |
| | | <el-table-column prop="state" label="物料名称" width="120"/> |
| | | <el-table-column prop="city" label="产地" width="120"/> |
| | | <el-table-column prop="kcNumber" label="库存编号" width="150"/> |
| | | <el-table-column prop="width" sortable label="宽度" width="120"/> |
| | | <el-table-column prop="height" sortable label="高度" width="120"/> |
| | | <el-table-column prop="thick" sortable label="厚度" width="120"/> |
| | | <el-table-column prop="zip" label="主单位" width="120"/> |
| | | <el-table-column prop="number" label="安全库存" width="120"/> |
| | | <el-table-column prop="number" sortable label="库存数" width="120"/> |
| | | <el-table-column prop="number" label="可用库存" width="120" show-summary="ture"/> |
| | | <el-table-column prop="number" label="未领数量" width="120"/> |
| | | <el-table-column prop="zip" sortable label="总面积" width="120"/> |
| | | <el-table-column prop="zip" label="单片面积" width="120"/> |
| | | <el-table-column prop="date" label="生产日期" width="120"/> |
| | | <el-table-column prop="date" label="保质期" width="120"/> |
| | | <el-table-column prop="zip" label="库存编号" width="120"/> |
| | | <el-table-column prop="zip" label="库区" width="120"/> |
| | | <el-table-column prop="zip" label="库位" width="120"/> |
| | | <el-table-column prop="zip" label="积压库存" width="120"/> |
| | | <el-table-column prop="zip" label="备注" width="120"/> |
| | | <template #num1_filter="{ column, $panel }"> |
| | | <div> |
| | | <div v-for="(option, index) in column.filters" :key="index"> |
| | | <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | </vxe-grid> |
| | | |
| | | |
| | | </el-table> |
| | | </el-main> |
| | | </el-container> |
| | | </template> |
| | |
| | | |
| | | <script setup> |
| | | |
| | | import {ref} from 'vue' |
| | | import dayjs from 'dayjs' |
| | | import {ref} from "vue"; |
| | | import {reactive} from "vue"; |
| | | import {useRouter} from 'vue-router' |
| | | import {Search} from "@element-plus/icons-vue"; |
| | | import dayjs from "dayjs"; |
| | | import {VXETable} from "vxe-table"; |
| | | let router = useRouter() |
| | | |
| | | const now = new Date() |
| | | //组件接收参数 |
| | | const gridOptions = reactive({ |
| | | border: "full",//表格加边框 |
| | | keepSource: true,//保持源数据 |
| | | align: 'center',//文字居中 |
| | | stripe: true,//斑马纹 |
| | | rowConfig: {isCurrent: true, isHover: true, height: 50},//鼠标移动或选择高亮 |
| | | id: 'CustomerList', |
| | | showFooter: true,//显示脚 |
| | | printConfig: {}, |
| | | importConfig: {}, |
| | | exportConfig: {}, |
| | | scrollY: {enabled: true},//开启虚拟滚动 |
| | | showOverflow: true, |
| | | columnConfig: { |
| | | resizable: true, |
| | | useKey: true |
| | | }, |
| | | filterConfig: { //筛选配置项 |
| | | remote: true |
| | | }, |
| | | customConfig: { |
| | | storage: true |
| | | }, |
| | | editConfig: { |
| | | trigger: 'click', |
| | | mode: 'row', |
| | | showStatus: true |
| | | }, |
| | | columns: [ |
| | | /* {title: '操作', width: '8%', slots: {default: 'button_slot'}, fixed: "left"},*/ |
| | | {type: 'seq', fixed: "left", title: ' ', width: 50}, |
| | | /*{ type: 'checkbox',fixed:"left", title: '', width: 50 },*/ |
| | | {type: 'expand', title:'详情', fixed: "left", slots: {content: 'content'}, width: 50}, |
| | | {field: 'cgdh', width: '10%', title: '库存组织', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'cgzt', width: '10%', title: '物料编码', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'gys', width: '10%',title: '物料名称', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'wlbh', width: '10%',title: '产地', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'wlmc', width: '10%', title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'w', width: '8%',title: '宽度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'g', width: '8%',title: '高度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'h', width: '8%',title: '厚度', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'xh', width: '8%',title: '主单位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'dw', width: '8%',title: '安全库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '6', width: '12%',title: '库存数', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'sl', width: '8%',title: '可用库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'sl', width: '12%',title: '未领数量', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'je', width: '8%',title: '总面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'je', width: '12%',title: '单片面积', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '6', width: '8%',title: '生产日期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'sl', width: '8%',title: '保质期', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'yl', width: '10%',title: '库存编号', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'yl', width: '10%',title: '库区', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'cgzt', width: '10%',title: '库位', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: 'xsdh', width: '10%',title: '积压库存', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true}, |
| | | {field: '6', width: '10%',title: '备注', filters: [{data: ''}], slots: {filter: 'num1_filter'}, sortable: true} |
| | | ],//表头参数 |
| | | toolbarConfig: { |
| | | buttons: [{type:'text'},{type:'text',name:'原片月结报表'}], |
| | | import: false, |
| | | export: true, |
| | | print: true, |
| | | zoom: true, |
| | | custom: true, |
| | | style: 'paddling-left:10px' |
| | | },//表头按钮 |
| | | data: [ |
| | | {},{},{},{},{},{},{},{},{},{},{}, |
| | | |
| | | const tableData = ref([ |
| | | ],//table body实际数据 |
| | | mergeFooterItems: [ |
| | | {row: 0, col: 0, rowspan: 1, colspan: 2} |
| | | ],//合并脚 |
| | | footerMethod({columns, data}) {//页脚函数 |
| | | return [ |
| | | columns.map((column, columnIndex) => { |
| | | if (columnIndex === 0) { |
| | | return '合计:' |
| | | } |
| | | /* if (props.tableProp.footList.includes(column.field)) { |
| | | return sumNum(data, column.field) |
| | | }*/ |
| | | return '' |
| | | }) |
| | | ] |
| | | }, |
| | | }) |
| | | |
| | | ]) |
| | | |
| | | const autoAddRow = () => { |
| | | for (let i = 0; i < 10; i++) { |
| | | const randomKCInt = Math.floor(Math.random() * 9999) + 10000; |
| | | const randomInt = Math.floor(Math.random() * 999) + 1000; |
| | | const randomZZInt = Math.floor(Math.random() * 99) + 100; |
| | | const randomSumInt = Math.floor(Math.random() * 99) + 10; |
| | | const kcThick = i % 3 === 0 ? 5 : i % 4 === 0 ? 6 : i % 5 === 0 ? 8 : 10; |
| | | now.setDate(now.getDate() + 1) |
| | | tableData.value.push({ |
| | | date: dayjs(now).format('YYYY-MM-DD'), |
| | | name: '物料组织' + randomZZInt, |
| | | state: '物料' + randomSumInt, |
| | | city: '产地' + (randomSumInt * 6), |
| | | address: 'No. 189, Grove St, Los Angeles', |
| | | zip: 'CA 90036', |
| | | number: 666 + 66 * i, |
| | | width: '3660', |
| | | height: '2440', |
| | | rIndex: tableData.value.length + 1, |
| | | wlNumber: 'NGWL1000' + randomInt, |
| | | kcNumber: 'NGKC100' + randomKCInt, |
| | | thick: kcThick |
| | | }) |
| | | |
| | | |
| | | const getTableRow = (row, type) => { |
| | | switch (type) { |
| | | case 'edit' : { |
| | | //alert('我接收到子组件传送的编辑信息') |
| | | router.push({path: '/main/purchaseOrder/CreatePurchaseOrder', query: {id: row.id}}) |
| | | break |
| | | } |
| | | case 'delete': { |
| | | |
| | | |
| | | |
| | | alert('我接收到子组件传送的删除信息'+row.id) |
| | | break |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | const xGrid = ref() |
| | | const gridEvents = { |
| | | toolbarButtonClick({code}) { |
| | | const $grid = xGrid.value |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'Add': {//新增 |
| | | router.push({path: '/main/purchaseOrder/CreatePurchaseOrder'}) |
| | | break |
| | | } |
| | | case 'Storage': {//入库 |
| | | if ($grid.getCheckboxRecords().length === 0) { |
| | | openAlert({type: 'message', content: '请选择至少一条数据', status: 'warning'}) |
| | | //VXETable.modal.message( '请选择一条数据!') |
| | | return |
| | | } else { |
| | | const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认入库?'); |
| | | //openAlert({type:'alert', content: '成功入库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' }) |
| | | //VXETable.modal.message( '请选择一条数据!') |
| | | return |
| | | } |
| | | break |
| | | } |
| | | case 'Return': {//退库 |
| | | if ($grid.getCheckboxRecords().length === 0) { |
| | | openAlert({type: 'message', content: '请选择至少一条数据', status: 'warning'}) |
| | | //VXETable.modal.message( '请选择一条数据!') |
| | | return |
| | | } else { |
| | | /* async ()=>{ |
| | | const type = await.VXETable.modal.confirm('您选择了'+$grid.getCheckboxRecords().length+'条数据!,是否确认退库?'); |
| | | }*/ |
| | | const type = VXETable.modal.confirm('您选择了' + $grid.getCheckboxRecords().length + '条数据!,是否确认退库?'); |
| | | |
| | | |
| | | /* if(VXETable.modal.confirm('您选择了'+$grid.getCheckboxRecords().length+'条数据!,是否确认退库?' )){ |
| | | //openAlert({type:'message', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success',lockView: false, mask: false }) |
| | | |
| | | |
| | | }*/ |
| | | |
| | | /* if(type==='confirm'){ |
| | | openAlert({type:'message', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' }) |
| | | } |
| | | |
| | | */ |
| | | //openAlert({type:'alert', content: '成功退库'+$grid.getCheckboxRecords().length+'条数据!', status: 'success' }) |
| | | //VXETable.modal.message( '请选择一条数据!') |
| | | return |
| | | } |
| | | break |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | toolbarToolClick({code}) { |
| | | const $grid = xGrid.value |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'myPrint': { |
| | | $grid.print() |
| | | break |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | } |
| | | |
| | | const openAlert = (options) => { |
| | | if(options.type==='message'){ |
| | | VXETable.modal.message(options) |
| | | }else{ |
| | | VXETable.modal.alert(options) |
| | | } |
| | | |
| | | } |
| | | |
| | | </script> |
| | | |
| | | |
| | | <style scoped> |
| | | .el-row { |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .el-row:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .el-col { |
| | | border-radius: 4px; |
| | | } |
| | | |
| | | .m-header { |
| | | height: 32px; |
| | | } |
| | | |
| | | #main { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | |
| | | #div-title { |
| | | height: 5%; |
| | | width: 100%; |
| | | padding-left: 20px; |
| | | } |
| | | |
| | | #main-body { |
| | | width: 100%; |
| | | height: 64%; |
| | | margin-top: 1%; |
| | | height: auto |
| | | } |
| | | </style> |