初始化仓库备份
This commit is contained in:
187
src/views/materialReceiptNotice/ceshi.vue
Normal file
187
src/views/materialReceiptNotice/ceshi.vue
Normal file
@@ -0,0 +1,187 @@
|
||||
<template>
|
||||
<div class="purchase-delivery-page">
|
||||
<!-- 标题 -->
|
||||
<h2 class="page-title">采购送货单</h2>
|
||||
|
||||
<!-- 上方两列区域(含二维码和基本信息) -->
|
||||
<table class="header-table">
|
||||
<tr>
|
||||
<!-- 左侧列 -->
|
||||
<td class="qr-col">
|
||||
<!-- 如果有二维码图片,可替换为实际图片地址 -->
|
||||
<img
|
||||
class="qr-image"
|
||||
:src="qrCodeLeft"
|
||||
alt="二维码"
|
||||
/>
|
||||
</td>
|
||||
<td class="info-col">
|
||||
<div>
|
||||
<label>收料通知单编号(送货单号):</label>
|
||||
<span>{{ receivingNoticeNumberLeft }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<label>供应商名称:</label>
|
||||
<span>{{ supplierNameLeft }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<label>送货日期:</label>
|
||||
<span>{{ deliveryDateLeft }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<label>发票号:</label>
|
||||
<span>{{ invoiceNumberLeft }}</span>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
<!-- 右侧列 -->
|
||||
<td class="qr-col">
|
||||
<img
|
||||
class="qr-image"
|
||||
:src="qrCodeRight"
|
||||
alt="二维码"
|
||||
/>
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- 明细表格 -->
|
||||
<table class="detail-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>PO号</th>
|
||||
<th>物料代码</th>
|
||||
<th>物料名称</th>
|
||||
<th>单位</th>
|
||||
<th>PO数量</th>
|
||||
<th>实收数量</th>
|
||||
<th>美金单价</th>
|
||||
<th>供应商批号</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr v-for="(row, index) in tableData" :key="index">
|
||||
<td>{{ index + 1 }}</td>
|
||||
<td>{{ row.poNumber }}</td>
|
||||
<td>{{ row.materialCode }}</td>
|
||||
<td>{{ row.materialName }}</td>
|
||||
<td>{{ row.unit }}</td>
|
||||
<td>{{ row.poQuantity }}</td>
|
||||
<td>{{ row.receivedQuantity }}</td>
|
||||
<td>{{ row.usdPrice }}</td>
|
||||
<td>{{ row.supplierBatchNumber }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
|
||||
// ---------------------
|
||||
// 示例数据,根据实际情况替换
|
||||
// ---------------------
|
||||
|
||||
// 左侧二维码与信息
|
||||
const qrCodeLeft = ref('https://via.placeholder.com/100?text=QR-Left')
|
||||
const receivingNoticeNumberLeft = ref('RN-LEFT-123')
|
||||
const supplierNameLeft = ref('供应商A')
|
||||
const deliveryDateLeft = ref('2025-03-20')
|
||||
const invoiceNumberLeft = ref('INV-LEFT-001')
|
||||
|
||||
// 右侧二维码与信息
|
||||
const qrCodeRight = ref('https://via.placeholder.com/100?text=QR-Right')
|
||||
|
||||
// 明细数据
|
||||
const tableData = ref([
|
||||
{
|
||||
poNumber: 'PO-001',
|
||||
materialCode: 'M-001',
|
||||
materialName: '物料名称1',
|
||||
unit: 'PCS',
|
||||
poQuantity: 100,
|
||||
receivedQuantity: 95,
|
||||
usdPrice: 1.25,
|
||||
supplierBatchNumber: 'BATCH-001'
|
||||
},
|
||||
{
|
||||
poNumber: 'PO-002',
|
||||
materialCode: 'M-002',
|
||||
materialName: '物料名称2',
|
||||
unit: 'PCS',
|
||||
poQuantity: 200,
|
||||
receivedQuantity: 190,
|
||||
usdPrice: 0.75,
|
||||
supplierBatchNumber: 'BATCH-002'
|
||||
}
|
||||
])
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.purchase-delivery-page {
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
|
||||
/* 标题样式 */
|
||||
.page-title {
|
||||
text-align: center;
|
||||
padding: 1em 0;
|
||||
border: 1px solid #ccc;
|
||||
background-color: #DEEAF6;
|
||||
}
|
||||
|
||||
/* 头部表格 */
|
||||
.header-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.header-table td {
|
||||
border: 1px solid #ccc;
|
||||
vertical-align: top;
|
||||
padding: 8px;
|
||||
/* 可根据需要调整宽度分配 */
|
||||
width: 30%;
|
||||
}
|
||||
|
||||
.qr-col {
|
||||
text-align: center;
|
||||
height: 200px;
|
||||
width: 33.33%;
|
||||
}
|
||||
.info-col>*{
|
||||
margin-top: 20px;
|
||||
}
|
||||
.qr-image {
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.info-col label {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 明细表格 */
|
||||
.detail-table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.detail-table th,
|
||||
.detail-table td {
|
||||
border: 1px solid #ccc;
|
||||
padding: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.detail-table th {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
</style>
|
||||
115
src/views/materialReceiptNotice/index.vue
Normal file
115
src/views/materialReceiptNotice/index.vue
Normal file
@@ -0,0 +1,115 @@
|
||||
<template>
|
||||
<div class="system-user-container layout-padding">
|
||||
<el-card class="layout-padding-auto" shadow="hover">
|
||||
<avue-crud ref="crudRef" :data="state.data" :option="state.option" v-model:page="state.page">
|
||||
<template #menu>
|
||||
<div class="btnList">
|
||||
<el-button type="text" icon="el-icon-pie-chart" @click="toPurchaseDetails">查看详情</el-button>
|
||||
<el-button type="text" icon="el-icon-pie-chart" @click="state.selectedDataShow = true">查看单据</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</avue-crud>
|
||||
</el-card>
|
||||
<selectedData :showes="state.selectedDataShow"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, onMounted } from 'vue';
|
||||
import { useRouter } from 'vue-router'
|
||||
import selectedData from './selectedData.vue'
|
||||
const router = useRouter()
|
||||
|
||||
// 定义变量内容
|
||||
const state = reactive({
|
||||
page: {
|
||||
total: 1000,
|
||||
currentPage: 1,
|
||||
pageSize: 10,
|
||||
},
|
||||
option: {
|
||||
index: false,
|
||||
menuWidth: 150,
|
||||
border: true,
|
||||
delBtn: false,
|
||||
editBtn: false,
|
||||
align: 'center',
|
||||
searchLabelWidth:100,
|
||||
searchMenuSpan:6,
|
||||
addBtn:false,
|
||||
column: [
|
||||
{ label: '单据编号', prop: 'FBillNo', width: 200,search: true },
|
||||
{ label: '供应商代码', prop: 'FSupplierId', width: 200,search: true },
|
||||
{ label: '供应商名称', prop: 'FSupplyName', width: 200,search: true },
|
||||
{ label: '采购员', prop: 'FPurchaserId', width: 200,search: true },
|
||||
{ label: '收料组织', prop: 'FStockOrgId', width: 200,search: true },
|
||||
{ label: '单据类型', prop: 'FBillTypeID', width: 200,search: true },
|
||||
{ label: '制单人', prop: 'FCreatorId', width: 200,search: true },
|
||||
{ label: '单据状态', prop: 'FDocumentStatus', width: 200,search: true },
|
||||
{ label: '收料日期', prop: 'FDate', width: 200,search: true,type: 'datetime', searchSpan: 12,searchRange: true,},
|
||||
{ label: '备注', prop: 'FRemarks', width: 200 },
|
||||
],
|
||||
},
|
||||
data: [
|
||||
{
|
||||
FBillNo: '005828',
|
||||
FSupplierId: '005828',
|
||||
FSupplyName: '美塞斯',
|
||||
FPurchaserId: '采购甲',
|
||||
FStockOrgId: '不知道',
|
||||
FBillTypeID:'111',
|
||||
FCreatorId: '制单人甲',
|
||||
FDate: '2050/10/31',
|
||||
FDocumentStatus: '已验收',
|
||||
FRemarks: '数据是假的',
|
||||
},
|
||||
|
||||
],
|
||||
selectedDataShow:false
|
||||
});
|
||||
const toPurchaseDetails = () => {
|
||||
router.push({
|
||||
path: '/materialReceiptNoticePurchaseDetails',
|
||||
})
|
||||
}
|
||||
// 页面加载时
|
||||
onMounted(() => {
|
||||
for (let i = 0; i < 9; i++){
|
||||
state.data.push({
|
||||
FBillNo: '005828',
|
||||
FSupplierId: '005828',
|
||||
FSupplyName: '美塞斯',
|
||||
FPurchaserId: '采购甲',
|
||||
FStockOrgId: '不知道',
|
||||
FBillTypeID:'111',
|
||||
FCreatorId: '制单人甲',
|
||||
FDate: '2050/10/31',
|
||||
FDocumentStatus: '已验收',
|
||||
FRemarks: '数据是假的',
|
||||
},)
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.system-user-container {
|
||||
:deep(.el-card__body) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
|
||||
.el-table {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
:deep(.el-col){
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
.btnList{
|
||||
:deep(.el-button){
|
||||
margin-left: 0!important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
128
src/views/materialReceiptNotice/purchaseDetails.vue
Normal file
128
src/views/materialReceiptNotice/purchaseDetails.vue
Normal file
@@ -0,0 +1,128 @@
|
||||
<template>
|
||||
<div class="system-user-container layout-padding">
|
||||
<el-card class="layout-padding-auto" shadow="hover">
|
||||
<avue-crud ref="crudRef" :data="state.data" :option="state.option" v-model:page="state.page" @selection-change="selectionChange"/>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {reactive, onMounted,nextTick } from 'vue';
|
||||
// 定义变量内容
|
||||
const state = reactive({
|
||||
page: {
|
||||
total: 1000,
|
||||
currentPage: 1,
|
||||
pageSize: 10,
|
||||
},
|
||||
option: {
|
||||
tip: false,
|
||||
selection: true,
|
||||
index: true,
|
||||
menu: false,
|
||||
menuWidth: 150,
|
||||
border: true,
|
||||
delBtn: false,
|
||||
editBtn: false,
|
||||
align: 'center',
|
||||
searchLabelWidth: 100,
|
||||
searchMenuSpan: 6,
|
||||
addBtn: false,
|
||||
column: [
|
||||
{ label: '物料编码', prop: 'FMaterialId', width: 200, search: true },
|
||||
{ label: '物料名称', prop: 'FMaterialName', width: 200, search: true },
|
||||
{ label: '规格型号', prop: 'FModel', width: 200, search: true },
|
||||
{ label: '收料单位', prop: 'FUnitId', width: 200, search: true },
|
||||
{ label: '实到数量', prop: 'FActlandQty', width: 200, search: true },
|
||||
{ label: '交货数量', prop: 'FActReceiveQty', width: 200, search: true },
|
||||
{ label: '供应商批号', prop: 'FSupplyLot', width: 200, search: true },
|
||||
{ label: '合格数量', prop: 'FReceiveQty', width: 200, search: true },
|
||||
{ label: '批号', prop: 'FLot', width: 200, search: true },
|
||||
{ label: '备注', prop: 'FNote', width: 200 },
|
||||
{ label: '源单单号', prop: 'FSrcBillNo', width: 200, search: true },
|
||||
],
|
||||
},
|
||||
data: [
|
||||
{
|
||||
FMaterialId: '004785',
|
||||
FMaterialName: '我也不知道是什么东西',
|
||||
FModel: '这是什么型号',
|
||||
FUnitId: '美塞斯',
|
||||
FActlandQty:'10',
|
||||
FActReceiveQty:'10',
|
||||
FSupplyLot:'004758',
|
||||
FReceiveQty:'10',
|
||||
FLot:'004785',
|
||||
FNote:'不知道',
|
||||
FSrcBillNo:'004785'
|
||||
},
|
||||
],
|
||||
selectedData:[],
|
||||
selectedDataShow:false
|
||||
});
|
||||
const selectionChange = (list:any) => {
|
||||
nextTick( () => {
|
||||
state.selectedData = JSON.parse(JSON.stringify(list))
|
||||
})
|
||||
|
||||
}
|
||||
const selectedDataShowFun = () => {
|
||||
// = state.selectionList
|
||||
state.selectedDataShow = !state.selectedDataShow
|
||||
}
|
||||
// 页面加载时
|
||||
onMounted(() => {
|
||||
for (let i = 0; i < 9; i++){
|
||||
state.data.push({
|
||||
FMaterialId: '004785',
|
||||
FMaterialName: '我也不知道是什么东西',
|
||||
FModel: '这是什么型号',
|
||||
FUnitId: '美塞斯',
|
||||
FActlandQty:'10',
|
||||
FActReceiveQty:'10',
|
||||
FSupplyLot:'004758',
|
||||
FReceiveQty:'10',
|
||||
FLot:'004785',
|
||||
FNote:'不知道',
|
||||
FSrcBillNo:'004785'
|
||||
})
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.system-user-container {
|
||||
:deep(.el-card__body) {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
|
||||
.el-table {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.el-col) {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
:deep(.avue-crud__header) {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.menu-left {
|
||||
width: 340px;
|
||||
height: 40px;
|
||||
background-color: rgba(64, 159, 255, 0.18);
|
||||
border-radius: 8px;
|
||||
border: 2px solid #d9ecff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 16px;
|
||||
justify-content: space-between;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
32
src/views/materialReceiptNotice/selectedData.vue
Normal file
32
src/views/materialReceiptNotice/selectedData.vue
Normal file
@@ -0,0 +1,32 @@
|
||||
<template>
|
||||
<el-dialog :model-value="props.showes" width="70%" >
|
||||
<ceshi></ceshi>
|
||||
<div class="btnList">
|
||||
<el-button type="primary">打印</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
import {defineProps, reactive} from 'vue';
|
||||
import ceshi from './ceshi.vue'
|
||||
const props = defineProps({
|
||||
listData:{
|
||||
type: Array,
|
||||
default: () => []
|
||||
},
|
||||
showes:{
|
||||
type: Boolean,
|
||||
default: true
|
||||
}
|
||||
});
|
||||
const state = reactive({
|
||||
dialogVisible: true,
|
||||
});
|
||||
</script>
|
||||
<style scoped lang="scss">
|
||||
.btnList{
|
||||
margin-top: 26px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user