feat: 更新出仓扫码页并升至1.1.18
This commit is contained in:
@@ -125,7 +125,8 @@ export function getFineCodeDisplayWeight(fineCode) {
|
|||||||
*/
|
*/
|
||||||
export function normalizeOrder(order) {
|
export function normalizeOrder(order) {
|
||||||
if (!order) return null;
|
if (!order) return null;
|
||||||
const itemData = groupItemData((order.item_data || []).map((item) => normalizeItem(item)));
|
const normalizedItems = (order.item_data || []).map((item) => normalizeItem(item));
|
||||||
|
const itemData = groupItemData(normalizedItems);
|
||||||
return {
|
return {
|
||||||
id: order.id,
|
id: order.id,
|
||||||
order_no: order.order_no || '',
|
order_no: order.order_no || '',
|
||||||
@@ -149,10 +150,52 @@ export function normalizeOrder(order) {
|
|||||||
total_roll: formatRoll(order.total_roll),
|
total_roll: formatRoll(order.total_roll),
|
||||||
total_weight: formatWeightKg(order.total_weight),
|
total_weight: formatWeightKg(order.total_weight),
|
||||||
item_data: itemData,
|
item_data: itemData,
|
||||||
|
summary_rows: buildSummaryRows(normalizedItems),
|
||||||
_raw: order,
|
_raw: order,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 扫码区下方汇总表列(与出仓明细表一致,可横向滑动) */
|
||||||
|
export const SUMMARY_TABLE_COLUMNS = [
|
||||||
|
{ label: '坯布编号', key: 'grey_fabric_code', width: 200 },
|
||||||
|
{ label: '坯布名称', key: 'grey_fabric_name', width: 240 },
|
||||||
|
{ label: '纱批', key: 'yarn_batch', width: 180 },
|
||||||
|
{ label: '机台号', key: 'machine_number', width: 160 },
|
||||||
|
{ label: '条数', key: 'roll', width: 140 },
|
||||||
|
{ label: '重量', key: 'weight', width: 160 },
|
||||||
|
];
|
||||||
|
|
||||||
|
/** 汇总行归类:坯布编号 + 名称 + 纱批 + 机台号 */
|
||||||
|
export function getSummaryGroupKey(item) {
|
||||||
|
return [
|
||||||
|
item.grey_fabric_code || '',
|
||||||
|
item.grey_fabric_name || '',
|
||||||
|
item.yarn_batch || '',
|
||||||
|
item.machine_number || '',
|
||||||
|
].join('|');
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 按坯布、纱批、机台号汇总条数和重量,供扫码区表格展示 */
|
||||||
|
export function buildSummaryRows(items) {
|
||||||
|
const grouped = new Map();
|
||||||
|
(items || []).forEach((item) => {
|
||||||
|
const groupKey = getSummaryGroupKey(item);
|
||||||
|
const existing = grouped.get(groupKey);
|
||||||
|
if (!existing) {
|
||||||
|
grouped.set(groupKey, {
|
||||||
|
...item,
|
||||||
|
group_key: groupKey,
|
||||||
|
fine_codes: [...(item.fine_codes || [])],
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
existing.fine_codes.push(...(item.fine_codes || []));
|
||||||
|
existing.roll = Number((Number(existing.roll || 0) + Number(item.roll || 0)).toFixed(2));
|
||||||
|
existing.weight = Number((Number(existing.weight || 0) + Number(item.weight || 0)).toFixed(2));
|
||||||
|
});
|
||||||
|
return Array.from(grouped.values());
|
||||||
|
}
|
||||||
|
|
||||||
/** 扫码详情区汇总维度(勾选后随扫码请求把对应 lock 字段传给后端) */
|
/** 扫码详情区汇总维度(勾选后随扫码请求把对应 lock 字段传给后端) */
|
||||||
export const SCAN_GROUP_OPTIONS = [
|
export const SCAN_GROUP_OPTIONS = [
|
||||||
{ key: 'produce_order_no', label: '合同' },
|
{ key: 'produce_order_no', label: '合同' },
|
||||||
@@ -441,6 +484,7 @@ export function orderToFormFields(order) {
|
|||||||
delivery_time: order.delivery_time,
|
delivery_time: order.delivery_time,
|
||||||
remark: order.remark,
|
remark: order.remark,
|
||||||
item_data: order.item_data,
|
item_data: order.item_data,
|
||||||
|
summary_rows: order.summary_rows || [],
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,73 @@
|
|||||||
|
<template>
|
||||||
|
<view class="fabric-out-summary">
|
||||||
|
<scroll-view scroll-x class="fabric-out-summaryScroll">
|
||||||
|
<wyb-table
|
||||||
|
:headers="headers"
|
||||||
|
:contents="contents"
|
||||||
|
:width="tableWidth"
|
||||||
|
height="auto"
|
||||||
|
:font-size="[36, 36]"
|
||||||
|
:min-height="[100, 100]"
|
||||||
|
:padding="[16, 12]"
|
||||||
|
:first-line-fixed="false"
|
||||||
|
empty-string=""
|
||||||
|
@onCellClick="$emit('cell-click', $event)"
|
||||||
|
/>
|
||||||
|
</scroll-view>
|
||||||
|
<view v-if="!contents.length" class="fabric-out-summaryEmpty">暂无数据~~</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import wybTable from '@/components/wyb-table/wyb-table.vue';
|
||||||
|
import { SUMMARY_TABLE_COLUMNS } from '@/common/storeFabricBusinessOut';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: { wybTable },
|
||||||
|
props: {
|
||||||
|
rows: { type: Array, default: () => [] },
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
headers() {
|
||||||
|
return SUMMARY_TABLE_COLUMNS;
|
||||||
|
},
|
||||||
|
tableWidth() {
|
||||||
|
const total = this.headers.reduce((sum, col) => sum + (col.width || 160), 0);
|
||||||
|
return `${total}rpx`;
|
||||||
|
},
|
||||||
|
contents() {
|
||||||
|
return (this.rows || []).map((row) => ({
|
||||||
|
...row,
|
||||||
|
grey_fabric_code: row.grey_fabric_code || '',
|
||||||
|
grey_fabric_name: row.grey_fabric_name || '',
|
||||||
|
yarn_batch: row.yarn_batch || '',
|
||||||
|
machine_number: row.machine_number || '',
|
||||||
|
roll: row.roll != null && row.roll !== '' ? String(row.roll) : '0',
|
||||||
|
weight: row.weight != null && row.weight !== '' ? String(row.weight) : '0',
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.fabric-out-summary {
|
||||||
|
background: #fff;
|
||||||
|
margin-top: 16rpx;
|
||||||
|
}
|
||||||
|
.fabric-out-summaryScroll {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.fabric-out-summary ::v-deep .wyb-table-scroll-view {
|
||||||
|
height: auto !important;
|
||||||
|
overflow-x: auto;
|
||||||
|
overflow-y: visible;
|
||||||
|
}
|
||||||
|
.fabric-out-summaryEmpty {
|
||||||
|
text-align: center;
|
||||||
|
color: #999;
|
||||||
|
font-size: 36rpx;
|
||||||
|
line-height: 100rpx;
|
||||||
|
background: #fff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
+2
-2
@@ -2,8 +2,8 @@
|
|||||||
"name" : "浩拓织厂",
|
"name" : "浩拓织厂",
|
||||||
"appid" : "__UNI__F79F300",
|
"appid" : "__UNI__F79F300",
|
||||||
"description" : "周尚-浩拓织厂",
|
"description" : "周尚-浩拓织厂",
|
||||||
"versionName" : "1.1.17",
|
"versionName" : "1.1.18",
|
||||||
"versionCode" : 117,
|
"versionCode" : 118,
|
||||||
"transformPx" : false,
|
"transformPx" : false,
|
||||||
"app-plus" : {
|
"app-plus" : {
|
||||||
"optimization" : {
|
"optimization" : {
|
||||||
|
|||||||
@@ -1,79 +1,48 @@
|
|||||||
<template>
|
<template>
|
||||||
|
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<view v-if="showHeaderToggle" class="fabric-out-headerBar" @click="toggleHeader">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<view class="fabric-out-headerBarMain">
|
||||||
|
<text class="fabric-out-headerBarTitle">单据信息</text>
|
||||||
|
<text v-if="form.order_no" class="fabric-out-headerBarSub">{{ form.order_no }}</text>
|
||||||
|
</view>
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="fabric-out-headerBarAction">
|
||||||
|
<text>{{ headerExpanded ? '收起' : '展开' }}</text>
|
||||||
<text class="mr26">出仓单号</text>
|
<u-icon class="fabric-out-headerBarIcon" :name="headerExpanded ? 'arrow-up' : 'arrow-down'" size="32" color="#2979ff"></u-icon>
|
||||||
|
|
||||||
<u-input disabled placeholder="保存后自动生成" v-model="form.order_no" />
|
|
||||||
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb20 bdb_f5">
|
|
||||||
|
|
||||||
<text class="mr26">出仓类型</text>
|
|
||||||
|
|
||||||
<view>{{ getBillTypeName() }}</view>
|
|
||||||
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view @click="pickerSelectFun('接收单位')" class="flex-white-plr26 ptb20 bdb_f5">
|
|
||||||
|
|
||||||
<text class="mr26">接收单位<text class="redXingh">*</text></text>
|
|
||||||
|
|
||||||
<view :class="form.business_unit_name ? '' : 'cBlack'">
|
|
||||||
|
|
||||||
{{ form.business_unit_name || '请选择' }}
|
|
||||||
|
|
||||||
<u-icon v-if="headerEditable" class="ml26" name="arrow-right" size="40" color="#888888"></u-icon>
|
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<view v-show="headerExpanded">
|
||||||
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
<view class="flex-white-plr26 ptb20 bdb_f5">
|
<text class="mr26">出仓单号</text>
|
||||||
|
<u-input disabled placeholder="保存后自动生成" v-model="form.order_no" />
|
||||||
<text class="mr26">{{ dateLabel }}<text class="redXingh">*</text></text>
|
</view>
|
||||||
|
<view class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
<picker mode="date" :value="form.delivery_time" :disabled="!headerEditable" @change="bindDateChange">
|
<text class="mr26">出仓类型</text>
|
||||||
|
<view>{{ getBillTypeName() }}</view>
|
||||||
<view>{{ form.delivery_time }}</view>
|
</view>
|
||||||
|
<view @click="pickerSelectFun('接收单位')" class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
</picker>
|
<text class="mr26">接收单位<text class="redXingh">*</text></text>
|
||||||
|
<view :class="form.business_unit_name ? '' : 'cBlack'">
|
||||||
|
{{ form.business_unit_name || '请选择' }}
|
||||||
|
<u-icon v-if="headerEditable" class="ml26" name="arrow-right" size="40" color="#888888"></u-icon>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
|
<text class="mr26">{{ dateLabel }}<text class="redXingh">*</text></text>
|
||||||
|
<picker mode="date" :value="form.delivery_time" :disabled="!headerEditable" @change="bindDateChange">
|
||||||
|
<view>{{ form.delivery_time }}</view>
|
||||||
|
</picker>
|
||||||
|
</view>
|
||||||
|
<view class="flex-white-plr26-column ptb20 mt32">
|
||||||
|
<view style="margin-bottom: 8rpx;"><text>单据备注</text></view>
|
||||||
|
<u-input v-model="form.remark" :disabled="!headerEditable" type="textarea" :border="true" :height="100" :auto-height="true" />
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<view v-if="showScanSection">
|
||||||
|
|
||||||
<view class="flex-white-plr26-column ptb20 mt32">
|
|
||||||
|
|
||||||
<view style="margin-bottom: 8rpx;"><text>单据备注</text></view>
|
|
||||||
|
|
||||||
<u-input v-model="form.remark" :disabled="!headerEditable" type="textarea" :border="true" :height="100" :auto-height="true" />
|
|
||||||
|
|
||||||
</view>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<FabricOutDetailList
|
|
||||||
|
|
||||||
:list="form.item_data"
|
|
||||||
|
|
||||||
@fabric-info="openFabricInfo"
|
|
||||||
|
|
||||||
@fine-code="openFineCode"
|
|
||||||
|
|
||||||
>
|
|
||||||
|
|
||||||
<FabricOutScanBar
|
<FabricOutScanBar
|
||||||
slot="before-list"
|
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
:value="QRBarCode"
|
:value="QRBarCode"
|
||||||
:delete-mode="BarCodeDelStatus"
|
:delete-mode="BarCodeDelStatus"
|
||||||
@@ -85,42 +54,29 @@
|
|||||||
@phone-scan="handlePhoneScan"
|
@phone-scan="handlePhoneScan"
|
||||||
@delete-mode-change="BarCodeDelChange"
|
@delete-mode-change="BarCodeDelChange"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<FabricOutScanDetail
|
<FabricOutScanDetail
|
||||||
slot="before-list"
|
|
||||||
:detail="scanDetail"
|
:detail="scanDetail"
|
||||||
:group-keys="scanGroupKeys"
|
:group-keys="scanGroupKeys"
|
||||||
@group-change="scanGroupKeys = $event"
|
@group-change="scanGroupKeys = $event"
|
||||||
/>
|
/>
|
||||||
|
<FabricOutSummaryTable
|
||||||
</FabricOutDetailList>
|
:rows="form.summary_rows"
|
||||||
|
@cell-click="onSummaryCellClick"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
|
||||||
<FabricOutFooter
|
<FabricOutFooter
|
||||||
|
|
||||||
v-if="!headerSaved"
|
v-if="!headerSaved"
|
||||||
|
|
||||||
:buttons="[{ label: '提交保存', action: 'save' }]"
|
:buttons="[{ label: '提交保存', action: 'save' }]"
|
||||||
|
|
||||||
single
|
single
|
||||||
|
|
||||||
@action="submitSave"
|
@action="submitSave"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<FabricOutFooter
|
<FabricOutFooter
|
||||||
|
|
||||||
v-else
|
v-else
|
||||||
|
|
||||||
:buttons="statusActionButtons"
|
:buttons="statusActionButtons"
|
||||||
|
|
||||||
@action="handleStatusAction"
|
@action="handleStatusAction"
|
||||||
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<search-select-popup
|
<search-select-popup
|
||||||
:show.sync="selectShow"
|
:show.sync="selectShow"
|
||||||
title="选择接收单位"
|
title="选择接收单位"
|
||||||
@@ -128,88 +84,46 @@
|
|||||||
:list="selectList"
|
:list="selectList"
|
||||||
@confirm="selectConfirmFun"
|
@confirm="selectConfirmFun"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<FabricInfoPopup :show.sync="fabricInfoShow" :data="currentFabricInfo" />
|
<FabricInfoPopup :show.sync="fabricInfoShow" :data="currentFabricInfo" />
|
||||||
|
|
||||||
<FineCodePopup :show.sync="fineCodeShow" :list="currentFineCodes" :readonly="false" @delete="onDeleteFineCode" />
|
<FineCodePopup :show.sync="fineCodeShow" :list="currentFineCodes" :readonly="false" @delete="onDeleteFineCode" />
|
||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
import formMixin from './storeFabricBusinessOutMixin.js';
|
import formMixin from './storeFabricBusinessOutMixin.js';
|
||||||
|
|
||||||
import FabricInfoPopup from '@/components/storefabric/FabricInfoPopup.vue';
|
import FabricInfoPopup from '@/components/storefabric/FabricInfoPopup.vue';
|
||||||
|
|
||||||
import FineCodePopup from '@/components/storefabric/FineCodePopup.vue';
|
import FineCodePopup from '@/components/storefabric/FineCodePopup.vue';
|
||||||
|
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
|
||||||
import FabricOutDetailList from '@/components/storefabric/FabricOutDetailList.vue';
|
|
||||||
|
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
|
|
||||||
import FabricOutScanDetail from '@/components/storefabric/FabricOutScanDetail.vue';
|
import FabricOutScanDetail from '@/components/storefabric/FabricOutScanDetail.vue';
|
||||||
|
import FabricOutSummaryTable from '@/components/storefabric/FabricOutSummaryTable.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
|
|
||||||
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
|
||||||
components: {
|
components: {
|
||||||
|
|
||||||
FabricInfoPopup,
|
FabricInfoPopup,
|
||||||
|
|
||||||
FineCodePopup,
|
FineCodePopup,
|
||||||
|
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
|
||||||
FabricOutDetailList,
|
|
||||||
|
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
|
|
||||||
FabricOutScanDetail,
|
FabricOutScanDetail,
|
||||||
|
FabricOutSummaryTable,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
|
|
||||||
SearchSelectPopup,
|
SearchSelectPopup,
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
|
|
||||||
onLoad() {
|
onLoad() {
|
||||||
|
|
||||||
uni.setNavigationBarTitle({ title: '新增坯布出仓单' });
|
uni.setNavigationBarTitle({ title: '新增坯布出仓单' });
|
||||||
|
|
||||||
this.pageMode = 'add';
|
this.pageMode = 'add';
|
||||||
|
|
||||||
this.loadBaseDropdowns();
|
this.loadBaseDropdowns();
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
|
||||||
@import '@/pages/storefabric/storeFabricBusinessOutPage.scss';
|
@import '@/pages/storefabric/storeFabricBusinessOutPage.scss';
|
||||||
|
|
||||||
page {
|
page {
|
||||||
background-color: #F8F8F8;
|
background-color: #F8F8F8;
|
||||||
padding-bottom: 260rpx;
|
padding-bottom: 260rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +1,42 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<view v-if="showHeaderToggle" class="fabric-out-headerBar" @click="toggleHeader">
|
||||||
|
<view class="fabric-out-headerBarMain">
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<text class="fabric-out-headerBarTitle">单据信息</text>
|
||||||
<text class="mr26">出仓单号</text>
|
<text v-if="form.order_no" class="fabric-out-headerBarSub">{{ form.order_no }}</text>
|
||||||
<text>{{ form.order_no }}</text>
|
</view>
|
||||||
</view>
|
<view class="fabric-out-headerBarAction">
|
||||||
<view class="flex-white-plr26 ptb20 bdb_f5">
|
<text>{{ headerExpanded ? '收起' : '展开' }}</text>
|
||||||
<text class="mr26">出仓类型</text>
|
<u-icon class="fabric-out-headerBarIcon" :name="headerExpanded ? 'arrow-up' : 'arrow-down'" size="32" color="#2979ff"></u-icon>
|
||||||
<text>{{ getBillTypeName() }}</text>
|
</view>
|
||||||
</view>
|
|
||||||
<view class="flex-white-plr26 ptb20 bdb_f5">
|
|
||||||
<text class="mr26">接收单位</text>
|
|
||||||
<text>{{ form.business_unit_name || '-' }}</text>
|
|
||||||
</view>
|
|
||||||
<view class="flex-white-plr26 ptb20 bdb_f5">
|
|
||||||
<text class="mr26">{{ dateLabel }}</text>
|
|
||||||
<text>{{ form.delivery_time }}</text>
|
|
||||||
</view>
|
|
||||||
<view class="flex-white-plr26 ptb20 bdb_f5">
|
|
||||||
<text class="mr26">单据备注</text>
|
|
||||||
<text>{{ form.remark || '-' }}</text>
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<FabricOutDetailList
|
<view v-show="headerExpanded">
|
||||||
:list="form.item_data"
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
@fabric-info="openFabricInfo"
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@fine-code="openFineCode"
|
<text class="mr26">出仓单号</text>
|
||||||
>
|
<text>{{ form.order_no }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
|
<text class="mr26">出仓类型</text>
|
||||||
|
<text>{{ getBillTypeName() }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
|
<text class="mr26">接收单位</text>
|
||||||
|
<text>{{ form.business_unit_name || '-' }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
|
<text class="mr26">{{ dateLabel }}</text>
|
||||||
|
<text>{{ form.delivery_time }}</text>
|
||||||
|
</view>
|
||||||
|
<view class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
|
<text class="mr26">单据备注</text>
|
||||||
|
<text>{{ form.remark || '-' }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
|
||||||
|
<view v-if="showScanSection">
|
||||||
<FabricOutScanBar
|
<FabricOutScanBar
|
||||||
slot="before-list"
|
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
:value="QRBarCode"
|
:value="QRBarCode"
|
||||||
:delete-mode="BarCodeDelStatus"
|
:delete-mode="BarCodeDelStatus"
|
||||||
@@ -41,12 +48,15 @@
|
|||||||
@delete-mode-change="BarCodeDelChange"
|
@delete-mode-change="BarCodeDelChange"
|
||||||
/>
|
/>
|
||||||
<FabricOutScanDetail
|
<FabricOutScanDetail
|
||||||
slot="before-list"
|
|
||||||
:detail="scanDetail"
|
:detail="scanDetail"
|
||||||
:group-keys="scanGroupKeys"
|
:group-keys="scanGroupKeys"
|
||||||
@group-change="scanGroupKeys = $event"
|
@group-change="scanGroupKeys = $event"
|
||||||
/>
|
/>
|
||||||
</FabricOutDetailList>
|
<FabricOutSummaryTable
|
||||||
|
:rows="form.summary_rows"
|
||||||
|
@cell-click="onSummaryCellClick"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
|
||||||
<FabricOutFooter :buttons="statusActionButtons" @action="handleStatusAction" />
|
<FabricOutFooter :buttons="statusActionButtons" @action="handleStatusAction" />
|
||||||
|
|
||||||
@@ -67,9 +77,9 @@ import formMixin from './storeFabricBusinessOutMixin.js';
|
|||||||
import FabricInfoPopup from '@/components/storefabric/FabricInfoPopup.vue';
|
import FabricInfoPopup from '@/components/storefabric/FabricInfoPopup.vue';
|
||||||
import FineCodePopup from '@/components/storefabric/FineCodePopup.vue';
|
import FineCodePopup from '@/components/storefabric/FineCodePopup.vue';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
import FabricOutDetailList from '@/components/storefabric/FabricOutDetailList.vue';
|
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutScanDetail from '@/components/storefabric/FabricOutScanDetail.vue';
|
import FabricOutScanDetail from '@/components/storefabric/FabricOutScanDetail.vue';
|
||||||
|
import FabricOutSummaryTable from '@/components/storefabric/FabricOutSummaryTable.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
import SearchSelectPopup from '@/components/storefabric/SearchSelectPopup.vue';
|
||||||
|
|
||||||
@@ -78,16 +88,23 @@ export default {
|
|||||||
FabricInfoPopup,
|
FabricInfoPopup,
|
||||||
FineCodePopup,
|
FineCodePopup,
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
FabricOutDetailList,
|
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutScanDetail,
|
FabricOutScanDetail,
|
||||||
|
FabricOutSummaryTable,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
SearchSelectPopup,
|
SearchSelectPopup,
|
||||||
},
|
},
|
||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
pageMode: 'edit',
|
||||||
|
headerExpanded: false,
|
||||||
|
};
|
||||||
|
},
|
||||||
onLoad(e) {
|
onLoad(e) {
|
||||||
uni.setNavigationBarTitle({ title: '编辑坯布出仓单' });
|
uni.setNavigationBarTitle({ title: '编辑坯布出仓单' });
|
||||||
this.pageMode = 'edit';
|
this.pageMode = 'edit';
|
||||||
|
this.headerExpanded = false;
|
||||||
if (e.id) {
|
if (e.id) {
|
||||||
this.loadOrder(Number(e.id), { rejectIfLocked: true });
|
this.loadOrder(Number(e.id), { rejectIfLocked: true });
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
* 业务说明:
|
* 业务说明:
|
||||||
* 1. 后端当前仅提供「坯布其他出货单」一种类型的接口,故出仓类型固定为 other,
|
* 1. 后端当前仅提供「坯布其他出货单」一种类型的接口,故出仓类型固定为 other,
|
||||||
* 表头保留接收单位(business_unit) / 出货日期 / 备注 等字段。
|
* 表头保留接收单位(business_unit) / 出货日期 / 备注 等字段。
|
||||||
* 2. 用户先填写表头并「提交保存」(addGfmOtherDeliveryOrder),拿到出仓单 id 后即可扫码;
|
* 2. 用户先填写表头并「提交保存」(addGfmOtherDeliveryOrder),拿到出仓单 id 后才显示扫码区和汇总表;
|
||||||
* 扫码新增/删除细码走 updateGfmOtherDeliveryOrder;勾选锁定维度时附带 *_lock 字段,操作后用返回的最新详情刷新。
|
* 扫码新增/删除细码走 updateGfmOtherDeliveryOrder;勾选锁定维度时附带 *_lock 字段,操作后用返回的最新详情刷新。
|
||||||
* 3. 后端没有「修改表头」接口,保存成功或编辑进入后表头变为只读,仅可扫码维护细码。
|
* 3. 后端没有「修改表头」接口,保存成功或编辑进入后表头变为只读,并默认收起,仅可扫码维护细码。
|
||||||
*/
|
*/
|
||||||
import util from '@/common/util';
|
import util from '@/common/util';
|
||||||
import scanMixin from '@/common/scanMixin.js';
|
import scanMixin from '@/common/scanMixin.js';
|
||||||
@@ -42,6 +42,8 @@ export default {
|
|||||||
orderId: 0,
|
orderId: 0,
|
||||||
form: this.getEmptyForm(),
|
form: this.getEmptyForm(),
|
||||||
headerSaved: false,
|
headerSaved: false,
|
||||||
|
// 新增未保存时展开表头;保存后及编辑进入时收起
|
||||||
|
headerExpanded: true,
|
||||||
selectShow: false,
|
selectShow: false,
|
||||||
selectList: [],
|
selectList: [],
|
||||||
selectType: '',
|
selectType: '',
|
||||||
@@ -75,6 +77,14 @@ export default {
|
|||||||
headerEditable() {
|
headerEditable() {
|
||||||
return this.pageMode === 'add' && !this.headerSaved;
|
return this.pageMode === 'add' && !this.headerSaved;
|
||||||
},
|
},
|
||||||
|
/** 已保存或编辑页才提供收起/展开 */
|
||||||
|
showHeaderToggle() {
|
||||||
|
return this.pageMode === 'edit' || this.headerSaved;
|
||||||
|
},
|
||||||
|
/** 未保存只填表头;保存后才出现扫码区与汇总表 */
|
||||||
|
showScanSection() {
|
||||||
|
return this.headerSaved;
|
||||||
|
},
|
||||||
dateLabel() {
|
dateLabel() {
|
||||||
return '出货日期';
|
return '出货日期';
|
||||||
},
|
},
|
||||||
@@ -151,8 +161,13 @@ export default {
|
|||||||
delivery_time: this.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
|
delivery_time: this.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
|
||||||
remark: '',
|
remark: '',
|
||||||
item_data: [],
|
item_data: [],
|
||||||
|
summary_rows: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
toggleHeader() {
|
||||||
|
if (!this.showHeaderToggle) return;
|
||||||
|
this.headerExpanded = !this.headerExpanded;
|
||||||
|
},
|
||||||
loadOrder(id, options = {}) {
|
loadOrder(id, options = {}) {
|
||||||
const { rejectIfLocked = false } = options;
|
const { rejectIfLocked = false } = options;
|
||||||
return this.$u.api.gfmOtherDeliveryOrder.detail({ id })
|
return this.$u.api.gfmOtherDeliveryOrder.detail({ id })
|
||||||
@@ -242,6 +257,7 @@ export default {
|
|||||||
const order = normalizeOrder(detail);
|
const order = normalizeOrder(detail);
|
||||||
this.applyOrder(order);
|
this.applyOrder(order);
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerExpanded = false;
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
this.showSuccess('保存成功,可以扫码', '提交成功');
|
this.showSuccess('保存成功,可以扫码', '提交成功');
|
||||||
this.registerOrderScanBroadcast();
|
this.registerOrderScanBroadcast();
|
||||||
@@ -325,11 +341,13 @@ export default {
|
|||||||
uni.hideLoading();
|
uni.hideLoading();
|
||||||
const order = normalizeOrder(detail);
|
const order = normalizeOrder(detail);
|
||||||
this.form.item_data = order.item_data;
|
this.form.item_data = order.item_data;
|
||||||
|
this.form.summary_rows = order.summary_rows || [];
|
||||||
this.auditStatus = order.audit_status;
|
this.auditStatus = order.audit_status;
|
||||||
this.applyScanDetail(scanCode, order, scanType);
|
this.applyScanDetail(scanCode, order, scanType);
|
||||||
if (refreshFineCodes) {
|
if (refreshFineCodes) {
|
||||||
const row = order.item_data.find((i) => (i.group_key || String(i.id)) === this.currentGroupKey);
|
const rows = order.summary_rows || [];
|
||||||
this.currentFineCodes = row ? [...row.fine_codes] : [];
|
const row = rows.find((i) => i.group_key === this.currentGroupKey);
|
||||||
|
this.currentFineCodes = row ? [...(row.fine_codes || [])] : [];
|
||||||
}
|
}
|
||||||
this.BillDataMessage = scanType === 2 ? '删除成功' : '扫码出仓成功';
|
this.BillDataMessage = scanType === 2 ? '删除成功' : '扫码出仓成功';
|
||||||
this.QRBarCode = '';
|
this.QRBarCode = '';
|
||||||
@@ -351,6 +369,15 @@ export default {
|
|||||||
this.currentFineCodes = [...(row.fine_codes || [])];
|
this.currentFineCodes = [...(row.fine_codes || [])];
|
||||||
this.fineCodeShow = true;
|
this.fineCodeShow = true;
|
||||||
},
|
},
|
||||||
|
onSummaryCellClick(event) {
|
||||||
|
const row = event && event.lineData;
|
||||||
|
if (!row) return;
|
||||||
|
if (event.key === 'grey_fabric_code' || event.key === 'grey_fabric_name') {
|
||||||
|
this.openFabricInfo(row);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.openFineCode(row);
|
||||||
|
},
|
||||||
onDeleteFineCode(fineCode) {
|
onDeleteFineCode(fineCode) {
|
||||||
if (this.isReadonly || !this.canScan) return;
|
if (this.isReadonly || !this.canScan) return;
|
||||||
const scanCode = getFineCodeScanCode(fineCode);
|
const scanCode = getFineCodeScanCode(fineCode);
|
||||||
|
|||||||
@@ -6,6 +6,47 @@
|
|||||||
.fabric-out-mt32 {
|
.fabric-out-mt32 {
|
||||||
margin-top: 32rpx;
|
margin-top: 32rpx;
|
||||||
}
|
}
|
||||||
|
.fabric-out-headerBar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
min-height: 100rpx;
|
||||||
|
padding: 16rpx 26rpx;
|
||||||
|
background: #fff;
|
||||||
|
border-bottom: 1rpx solid #f5f5f5;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.fabric-out-headerBarMain {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
min-width: 0;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
.fabric-out-headerBarTitle {
|
||||||
|
font-size: 40rpx;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
.fabric-out-headerBarSub {
|
||||||
|
margin-left: 16rpx;
|
||||||
|
font-size: 36rpx;
|
||||||
|
color: #666;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.fabric-out-headerBarAction {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-shrink: 0;
|
||||||
|
margin-left: 16rpx;
|
||||||
|
font-size: 36rpx;
|
||||||
|
color: #2979ff;
|
||||||
|
}
|
||||||
|
.fabric-out-headerBarIcon {
|
||||||
|
margin-left: 8rpx;
|
||||||
|
}
|
||||||
.fabric-out-page .flex-white-plr26,
|
.fabric-out-page .flex-white-plr26,
|
||||||
.fabric-out-page .flex-white-plr26-column,
|
.fabric-out-page .flex-white-plr26-column,
|
||||||
.fabric-out-page .flex-white-plr26 text,
|
.fabric-out-page .flex-white-plr26 text,
|
||||||
|
|||||||
Reference in New Issue
Block a user