初始化仓库备份

This commit is contained in:
2025-03-21 09:20:29 +08:00
commit c35f4f8a99
235 changed files with 37389 additions and 0 deletions

View 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>

View 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>

View 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>

View 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>