Browse Source

没开发好的加开发中标志

master
han\hanst 4 months ago
parent
commit
0637ebe803
  1. 382
      src/views/main.vue
  2. 40
      src/views/modules/other-transaction/index.vue
  3. 49
      src/views/modules/other-transaction/other-inbound.vue
  4. 30
      src/views/modules/recv/inspectionResults.vue
  5. 12
      src/views/modules/recv/qualifiedStorage.vue
  6. 57
      src/views/modules/recv/recv.vue

382
src/views/main.vue

@ -45,19 +45,19 @@
</div>
<div class="menu-text">采购入库</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('productionreturn')">
<div class="menu-icon production-return">
<van-icon name="revoke" size="24" />
</div>
<div class="menu-text">生产退仓</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('productionInboundProduction')">
<div class="menu-item disabled" @click="handleDisabledFeature('productionInboundProduction')">
<div class="menu-icon production-inbound">
<van-icon name="cart" size="24" />
</div>
<div class="menu-text">生产入库</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('salereturn')">
<div class="menu-item disabled" @click="handleDisabledFeature('productionreturn')">
<div class="menu-icon production-return">
<van-icon name="revoke" size="24" />
</div>
<div class="menu-text">生产退料</div>
</div>
<div class="menu-item disabled" @click="handleDisabledFeature('salereturn')">
<div class="menu-icon sales-return">
<van-icon name="revoke" size="24" />
</div>
@ -73,11 +73,11 @@
<span class="section-title">拣货出库</span>
</div>
<div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('purchaseReturn')">
<div class="menu-icon purchase-return">
<van-icon name="shopping-cart-o" size="24" />
<div class="menu-item" @click="navigateWithWarehouseCheck('otherinout')">
<div class="menu-icon other">
<van-icon name="exchange" size="24" />
</div>
<div class="menu-text">采购退</div>
<div class="menu-text">其他出入</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('productionissue')">
<div class="menu-icon production-issue">
@ -99,13 +99,13 @@
</div>
</div>
<div class="button-grid" style="margin-top: 8px;">
<div class="menu-item" @click="navigateWithWarehouseCheck('saleshipping')">
<div class="menu-item disabled" @click="handleDisabledFeature('saleshipping')">
<div class="menu-icon sales-delivery">
<van-icon name="logistics" size="24" />
</div>
<div class="menu-text">销售出库</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('transportation')">
<div class="menu-item disabled" @click="handleDisabledFeature('transportation')">
<div class="menu-icon transport">
<van-icon name="guide-o" size="24" />
</div>
@ -113,7 +113,27 @@
</div>
</div>
</div>
<div class="section">
<div class="section-header">
<span class="bullet"></span>
<span class="section-title">立库操作</span>
</div>
<div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('callOut')">
<div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" />
</div>
<div class="menu-text">Call料</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletPacking')">
<div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" />
</div>
<div class="menu-text">立库打托</div>
</div>
</div>
</div>
<!-- 库内管理 -->
<div class="section">
<div class="section-header">
@ -121,54 +141,28 @@
<span class="section-title">库内管理</span>
</div>
<div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('attributechange')">
<!-- <div class="menu-item disabled" @click="handleDisabledFeature('attributechange')">
<div class="menu-icon attribute">
<van-icon name="setting-o" size="24" />
</div>
<div class="menu-text">属性变动</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('stocktaking')">
</div>-->
<div class="menu-item disabled" @click="handleDisabledFeature('stocktaking')">
<div class="menu-icon inventory">
<van-icon name="records" size="24" />
</div>
<div class="menu-text">库内盘点</div>
<div class="menu-text">盘点</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('otherinout')">
<div class="menu-icon other">
<van-icon name="exchange" size="24" />
</div>
<div class="menu-text">其他出入库</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('handlingunit')">
<div class="menu-item disabled" @click="handleDisabledFeature('handlingunit')">
<div class="menu-icon hu">
<van-icon name="cluster-o" size="24" />
</div>
<div class="menu-text">单元管理</div>
<div class="menu-text">HU管理</div>
</div>
</div>
</div>
<div class="section">
<div class="section-header">
<span class="bullet"></span>
<span class="section-title">立库操作</span>
</div>
<div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('callOut')">
<div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" />
</div>
<div class="menu-text">Call料</div>
</div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletPacking')">
<div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" />
</div>
<div class="menu-text">立库打托</div>
</div>
</div>
</div>
</div>
</div>
</template>
@ -254,6 +248,14 @@ export default {
this.getWarehouseList();
},
methods: {
//
handleDisabledFeature(featureName) {
this.$message({
type: 'warning',
message: `开发中,敬请期待...`,
duration: 8000 // 5
});
},
//
handleDocumentClick(event) {
//
@ -386,24 +388,101 @@ export default {
display: flex;
justify-content: space-between;
align-items: center;
padding: 4px 20px;
padding: 8px 16px;
background: #17B3A3;
color: white;
height: 35px;
min-height: 35px;
max-height: 35px;
height: 40px;
min-height: 40px;
max-height: 40px;
}
.header-left {
/* 仓库选择器样式 */
.warehouse-selector {
position: relative;
display: flex;
align-items: center;
font-size: 16px;
font-weight: bold;
cursor: pointer;
padding: 0;
user-select: none;
}
.header-left .el-icon-arrow-down {
margin-left: 8px;
.warehouse-text {
color: white;
font-size: 16px;
font-weight: 500;
margin-right: 8px;
}
.warehouse-selector .el-icon-arrow-down {
color: white;
font-size: 14px;
transition: transform 0.2s ease;
}
.warehouse-selector .el-icon-arrow-down.rotate {
transform: rotate(180deg);
}
/* 下拉框样式 */
.warehouse-dropdown {
position: absolute;
top: 100%;
left: 0;
min-width: 120px;
background: white;
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
z-index: 9999;
margin-top: 4px;
overflow: hidden;
border: 1px solid #e0e0e0;
}
.dropdown-item {
padding: 12px 16px;
cursor: pointer;
font-size: 14px;
color: #333;
transition: background-color 0.2s ease;
}
.dropdown-item:hover {
background: #f5f5f5;
}
.dropdown-item.active {
//background: #17B3A3;
color: #17B3A3;
}
.dropdown-item.loading {
text-align: center;
color: #666;
cursor: default;
}
.dropdown-item.loading:hover {
background: white;
}
.dropdown-item.loading i {
margin-right: 6px;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.dropdown-item.empty {
text-align: center;
color: #999;
cursor: default;
}
.dropdown-item.empty:hover {
background: white;
}
.logout-button {
@ -462,18 +541,6 @@ export default {
white-space: nowrap;
}
.logout-button {
padding: 5px 10px;
font-size: 12px;
min-width: 50px;
border-radius: 14px;
}
.logout-button i {
margin-right: 4px;
font-size: 12px;
}
/* 内容区域 */
.content-area {
flex: 1;
@ -518,17 +585,41 @@ export default {
.menu-item {
background: white;
border-radius: 12px;
padding: 12px 6px;
padding: 12px 6px 10px;
text-align: center;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
transition: transform 0.2s;
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 80px;
}
.menu-item:active {
transform: scale(0.95);
}
.menu-item.disabled {
opacity: 0.6;
position: relative;
}
.menu-item.disabled::after {
content: '开发中';
position: absolute;
top: 6px;
right: 6px;
background: #ff9500;
color: white;
font-size: 8px;
padding: 2px 4px;
border-radius: 6px;
font-weight: bold;
z-index: 1;
}
.menu-icon {
width: 40px;
height: 40px;
@ -536,8 +627,9 @@ export default {
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 6px;
margin: 0 auto 8px;
color: white;
flex-shrink: 0;
}
.menu-icon.purchase {
@ -600,21 +692,38 @@ export default {
font-size: 11px;
color: #333;
font-weight: bold;
line-height: 1.2;
margin-top: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 100%;
}
/* 响应式设计 */
@media screen and (max-width: 480px) {
.header-bar {
padding: 12px 15px;
padding: 8px 12px;
}
.header-left {
font-size: 16px;
.warehouse-text {
font-size: 14px;
}
.logout-button {
padding: 6px 12px;
font-size: 13px;
padding: 5px 10px;
font-size: 12px;
min-width: 50px;
border-radius: 14px;
}
.logout-button i {
margin-right: 4px;
font-size: 12px;
}
.warehouse-dropdown {
min-width: 120px;
}
.content-area {
@ -622,7 +731,7 @@ export default {
}
.section-header {
padding: 6px 10px;
padding: 2px 10px;
}
.section-title {
@ -635,11 +744,28 @@ export default {
}
.menu-item {
padding: 10px 4px;
padding: 8px 4px 6px;
min-height: 70px;
}
.menu-icon {
width: 35px;
height: 35px;
margin-bottom: 6px;
}
.menu-text {
font-size: 10px;
line-height: 1.1;
margin-top: 2px;
}
.menu-item.disabled::after {
top: 4px;
right: 4px;
font-size: 7px;
padding: 1px 3px;
border-radius: 4px;
}
}
@ -647,100 +773,26 @@ export default {
.button-grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media screen and (min-width: 768px) {
.button-grid {
grid-template-columns: repeat(4, 1fr);
.menu-item {
padding: 10px 5px 8px;
min-height: 75px;
}
}
/* 仓库选择器样式 */
.warehouse-selector {
position: relative;
display: flex;
align-items: center;
cursor: pointer;
padding: 0;
user-select: none;
}
.warehouse-text {
color: white;
font-size: 16px;
font-weight: 500;
margin-right: 8px;
}
.warehouse-selector .el-icon-arrow-down {
color: white;
font-size: 14px;
transition: transform 0.2s ease;
}
.warehouse-selector .el-icon-arrow-down.rotate {
transform: rotate(180deg);
}
/* 下拉框样式 */
.warehouse-dropdown {
position: absolute;
top: 100%;
left: 0;
min-width: 120px;
background: white;
border-radius: 4px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
z-index: 9999;
margin-top: 4px;
overflow: hidden;
border: 1px solid #e0e0e0;
}
.dropdown-item {
padding: 12px 16px;
cursor: pointer;
font-size: 14px;
color: #333;
transition: background-color 0.2s ease;
}
.dropdown-item:hover {
background: #f5f5f5;
}
.dropdown-item.active {
//background: #17B3A3;
color: #17B3A3;
}
.dropdown-item.loading {
text-align: center;
color: #666;
cursor: default;
}
.dropdown-item.loading:hover {
background: white;
}
.dropdown-item.loading i {
margin-right: 6px;
animation: spin 1s linear infinite;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.menu-icon {
width: 38px;
height: 38px;
margin-bottom: 7px;
}
.dropdown-item.empty {
text-align: center;
color: #999;
cursor: default;
.menu-text {
font-size: 10.5px;
}
}
.dropdown-item.empty:hover {
background: white;
@media screen and (min-width: 768px) {
.button-grid {
grid-template-columns: repeat(4, 1fr);
}
}
</style>

40
src/views/modules/other-transaction/index.vue

@ -32,17 +32,17 @@ export default {
return {
buttons: [
{
icon: "scan",
label: "库",
iconClass: "purchase",
to: "productionPicking",
disabled: true,
icon: "add-o",
label: "其它入库",
iconClass: "other-inbound",
to: "other-inbound",
disabled: false,
},
{
icon: "records",
label: "Receive from Transit",
iconClass: "qualified",
to: "receiveFromTransit",
icon: "minus",
label: "其它出库",
iconClass: "other-outbound",
to: "other-outbound",
disabled: false,
},
{
@ -53,26 +53,26 @@ export default {
disabled: false,
},
{
icon: "add-o",
label: "其它入库",
iconClass: "other-inbound",
to: "other-inbound",
icon: "records",
label: "Receive from Transit",
iconClass: "qualified",
to: "receiveFromTransit",
disabled: false,
},
{
icon: "minus",
label: "其它出库",
iconClass: "other-outbound",
to: "other-outbound",
disabled: false,
icon: "scan",
label: "库",
iconClass: "purchase",
to: "productionPicking",
disabled: true,
},
{
/* {
icon: "records",
label: "单独CALL料",
iconClass: "qualified",
to: "productionPicking",
disabled: false,
},
},*/
],
};
},

49
src/views/modules/other-transaction/other-inbound.vue

@ -45,7 +45,9 @@
<el-input
v-model="inboundForm.targetLocationId"
placeholder="请输入目标库位"
size="small">
size="small"
@keyup.enter.native="handleLocationScan"
ref="locationInput">
</el-input>
</div>
</div>
@ -156,6 +158,51 @@ export default {
this.scanCode = '';
},
//
handleLocationScan() {
if (!this.inboundForm.targetLocationId.trim()) {
return;
}
//
if (this.$refs.locationInput) {
this.$refs.locationInput.blur();
}
//
this.$nextTick(() => {
// 1
const bottomActions = document.querySelector('.bottom-actions');
if (bottomActions) {
bottomActions.scrollIntoView({
behavior: 'smooth',
block: 'end'
});
return;
}
// 2
const scrollContainer = document.querySelector('.pda-container > div[style*="overflow-y"]') ||
document.querySelector('.pda-container > div:nth-child(2)');
if (scrollContainer) {
scrollContainer.scrollTo({
top: scrollContainer.scrollHeight,
behavior: 'smooth'
});
return;
}
// 3 -
setTimeout(() => {
window.scrollTo({
top: document.documentElement.scrollHeight,
behavior: 'smooth'
});
}, 100);
});
},
//
validateAndAddLabel(unitId) {
const params = {

30
src/views/modules/recv/inspectionResults.vue

@ -156,9 +156,21 @@ export default {
} else {
this.$message.error(data.msg || "查询失败");
}
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
}).catch(error => {
this.$message.error("查询失败");
console.error(error);
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
});
this.scanCode = '';
@ -180,6 +192,12 @@ export default {
if (exists) {
this.$message.warning('该HandlingUnit已扫描,请勿重复扫描');
this.scanCode = '';
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
return;
}
@ -197,9 +215,21 @@ export default {
} else {
this.$message.error(data.msg || 'HandlingUnit不存在或查询失败');
}
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
}).catch(error => {
this.$message.error("扫描失败");
console.error(error);
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
});
this.scanCode = '';

12
src/views/modules/recv/qualifiedStorage.vue

@ -247,9 +247,21 @@ export default {
} else {
this.$message.error(data.msg || "查询失败");
}
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
}).catch(error => {
this.$message.error("查询失败");
console.error(error);
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
});
},

57
src/views/modules/recv/recv.vue

@ -67,15 +67,18 @@
</el-col>
<el-col :span="12">
<el-form-item label=" ">
<el-button type="text" @click.stop="handlingUnitStep" :disabled="recvItem.needHandlingUnit !== 'Y'"
<!-- <el-button type="text" @click.stop="handlingUnitStep" :disabled="recvItem.needHandlingUnit !== 'Y'"
:class="{ 'disabled-button': recvItem.needHandlingUnit !== 'Y' }"
style="font-size: 16px" size="small">包装记录</el-button>-->
<el-button type="text" @click.stop="handlingUnitStep"
style="font-size: 16px" size="small">包装记录</el-button>
</el-form-item>
</el-col>
<el-col :span="12"><el-form-item label="制造日期">
<el-date-picker v-model="recvItem.manufactureDate"
type="date" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
placeholder="选择制造日期" style="width: 100%" />
placeholder="选择制造日期" style="width: 100%"
:editable="false" />
</el-form-item></el-col>
<el-col :span="12"><el-form-item label="供应商批次">
<el-input v-model="recvItem.supplierBatchNo" placeholder="请输入供应商批次" />
@ -85,7 +88,8 @@
</el-form-item></el-col>
<el-col :span="12"><el-form-item label="到达日期">
<el-date-picker v-model="recvItem.arrivalDate" type="date" format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择到达日期" style="width: 100%" />
value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择到达日期" style="width: 100%"
:editable="false" />
</el-form-item></el-col>
<el-col :span="12"><el-form-item label="库位"><el-input v-model="recvItem.locationNo" placeholder="请输入库位" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="批号"><el-input v-model="recvItem.batchNo" placeholder="请输入批号" /></el-form-item></el-col>
@ -108,8 +112,9 @@
<el-col :span="8" style="margin-top: 24px"><el-form-item>
<el-button type="text" @click="createHandlingUnit" style="font-size: 16px">创建</el-button></el-form-item></el-col>
<el-table :data="handlingUnit" :row-style="{ height: '30px' }" style="width: 94%; margin-left: 10px;" highlight-current-row>
<el-table-column prop="code" label="Unit ID" />
<el-table-column prop="qty" label="数量" width="60" />
<el-table-column prop="code" label="序号" />
<el-table-column prop="packageQty" label="包装数" width="80" />
<el-table-column prop="perQty" label="单包装数量" width="100" />
<el-table-column label="操作">
<template slot-scope="scope">
<a @click="removeItem(scope.$index)">删除</a>
@ -185,6 +190,12 @@ export default {
} else {
this.$message.error(data.msg || '操作失败');
}
//
this.$nextTick(() => {
if (this.$refs.scanCodeRef) {
this.$refs.scanCodeRef.blur();
}
});
});
},
async recvLine(row) {
@ -252,10 +263,14 @@ export default {
return this.$message.warning("请填写有效的包装信息");
}
const qty = parseFloat(perQty) * parseInt(packageQty);
const code = 'H' + String(this.handlingUnit.length + 1).padStart(3, '0');
const code = String(this.handlingUnit.length + 1);
const newItem = { ...this.hanlingItem, qty, code };
this.handlingUnit.push(newItem);
localStorage.setItem(this.huKey, JSON.stringify(this.handlingUnit));
// HU
this.hanlingItem.perQty = '';
this.hanlingItem.packageQty = '';
},
removeItem(index) {
this.handlingUnit.splice(index, 1);
@ -365,11 +380,39 @@ export default {
console.error('服务器打印失败:', error)
this.$message.error(`打印失败: ${error.message || error}`)
}
},
//
blurAllInputs() {
//
const inputs = document.querySelectorAll('input, textarea, select, [contenteditable="true"]');
inputs.forEach(input => {
if (input === document.activeElement) {
input.blur();
}
});
}
},
mounted() {
this.$nextTick(() => this.$refs.scanCodeRef.focus());
}
//
this.handleTouchMove = () => {
this.blurAllInputs();
};
//
document.addEventListener('touchmove', this.handleTouchMove, { passive: true });
//
document.addEventListener('scroll', this.handleTouchMove, { passive: true });
},
beforeDestroy() {
//
if (this.handleTouchMove) {
document.removeEventListener('touchmove', this.handleTouchMove);
document.removeEventListener('scroll', this.handleTouchMove);
}
},
};
</script>

Loading…
Cancel
Save