feat: 单据收起汇总明细,CDN改新地址并升至1.1.18
This commit is contained in:
@@ -125,14 +125,14 @@ node scripts/upload-apk.js --file D:\path\你的.apk --target test
|
|||||||
|
|
||||||
| 参数 | 说明 |
|
| 参数 | 说明 |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `--target test` | 测试 CDN:`https://testhcscm.cdn.zzfzyc.com` |
|
| `--target test` | 测试 CDN:`https://zsfzcdn.yushangfangzhi.com` |
|
||||||
| `--target prod` | 正式 CDN:`https://hcscm.cdn.zzfzyc.com` |
|
| `--target prod` | 正式 CDN:`https://zsfzcdn.yushangfangzhi.com` |
|
||||||
| `--mode` | 默认 `zhoushang`。可选 `zhoushang`、`zhisheng`、`mes`、`cjt` |
|
| `--mode` | 默认 `zhoushang`。可选 `zhoushang`、`zhisheng`、`mes`、`cjt` |
|
||||||
| `--version` | 可选。不传则用 `src/manifest.json` 的 `versionName` |
|
| `--version` | 可选。不传则用 `src/manifest.json` 的 `versionName` |
|
||||||
|
|
||||||
场景值取对应 `.env.{mode}` 里的 `VUE_APP_UPGRADE_NAME`。保存路径为 `/version/{场景值}/{版本号}.apk`。版本包上传成功后,同一份安装包会再传到 `/version/{场景值}/latest.apk`。本分支默认场景是 `.env.zhoushang` 的 `erp_pda_zhoushang`,上传成功后会打印完整下载地址,例如:
|
场景值取对应 `.env.{mode}` 里的 `VUE_APP_UPGRADE_NAME`。保存路径为 `/version/{场景值}/{版本号}.apk`。版本包上传成功后,同一份安装包会再传到 `/version/{场景值}/latest.apk`。本分支默认场景是 `.env.zhoushang` 的 `erp_pda_zhoushang`,上传成功后会打印完整下载地址,例如:
|
||||||
|
|
||||||
```
|
```
|
||||||
https://testhcscm.cdn.zzfzyc.com/version/erp_pda_zhoushang/1.1.9.apk
|
https://zsfzcdn.yushangfangzhi.com/version/erp_pda_zhoushang/1.1.9.apk
|
||||||
https://testhcscm.cdn.zzfzyc.com/version/erp_pda_zhoushang/latest.apk
|
https://zsfzcdn.yushangfangzhi.com/version/erp_pda_zhoushang/latest.apk
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -24,8 +24,8 @@ const ROOT = path.resolve(__dirname, '..');
|
|||||||
const API_BASE = 'https://hcscmtest.zzfzyc.com/hcscm';
|
const API_BASE = 'https://hcscmtest.zzfzyc.com/hcscm';
|
||||||
const UPYUN_API = 'https://v0.api.upyun.com';
|
const UPYUN_API = 'https://v0.api.upyun.com';
|
||||||
const CDN_HOST = {
|
const CDN_HOST = {
|
||||||
test: 'https://testhcscm.cdn.zzfzyc.com',
|
test: 'https://zsfzcdn.yushangfangzhi.com',
|
||||||
prod: 'https://hcscm.cdn.zzfzyc.com',
|
prod: 'https://zsfzcdn.yushangfangzhi.com',
|
||||||
};
|
};
|
||||||
|
|
||||||
const MODE_ENV = {
|
const MODE_ENV = {
|
||||||
|
|||||||
@@ -1,36 +1,157 @@
|
|||||||
<template>
|
<template>
|
||||||
<view>
|
<view>
|
||||||
<view class="fabric-out-sectionTitle">{{ title }}</view>
|
<view class="summary-title">{{ title }}</view>
|
||||||
<slot name="before-list" />
|
<slot name="before-list" />
|
||||||
<view class="fabric-out-detailList">
|
<view class="summary-wrap">
|
||||||
<view
|
<scroll-view scroll-x class="summary-scroll">
|
||||||
v-for="row in list"
|
<view class="summary-table" :style="{ width: tableWidth }">
|
||||||
:key="row.group_key || row.id"
|
<view class="summary-row summary-head">
|
||||||
class="fabric-out-detailCard"
|
<view
|
||||||
>
|
v-for="col in columns"
|
||||||
<view class="fabric-out-detailRow" @click="$emit('fabric-info', row)">
|
:key="col.key"
|
||||||
<text>{{ row.grey_fabric_code }}#{{ row.grey_fabric_name }}</text>
|
class="summary-cell"
|
||||||
<u-icon name="arrow-right" size="32" color="#888" />
|
:style="cellStyle(col)"
|
||||||
|
>{{ col.label }}</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="!list.length" class="summary-empty">暂无出仓明细</view>
|
||||||
|
<view
|
||||||
|
v-for="row in list"
|
||||||
|
:key="row.group_key || row.id"
|
||||||
|
class="summary-row"
|
||||||
|
@click="$emit('fabric-info', row)"
|
||||||
|
>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[0])">{{ row.grey_fabric_code || '-' }}</view>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[1])">{{ row.grey_fabric_name || '-' }}</view>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[2])">{{ displayNum(row.roll) }}</view>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[3])">{{ displayNum(row.weight) }}</view>
|
||||||
|
<view
|
||||||
|
class="summary-cell summary-action"
|
||||||
|
:style="cellStyle(columns[4])"
|
||||||
|
@click.stop="$emit('fine-code', row)"
|
||||||
|
>细码</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="list.length" class="summary-row summary-total">
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[0])">合计</view>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[1])"></view>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[2])">{{ totalRoll }}</view>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[3])">{{ totalWeight }}</view>
|
||||||
|
<view class="summary-cell" :style="cellStyle(columns[4])"></view>
|
||||||
|
</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="fabric-out-detailMeta">
|
</scroll-view>
|
||||||
<text>匹数:{{ row.roll }}</text>
|
|
||||||
<text>重量:{{ row.weight }}KG</text>
|
|
||||||
<u-button type="primary" size="mini" @click="$emit('fine-code', row)">细码</u-button>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
const COLUMNS = [
|
||||||
|
{ key: 'grey_fabric_code', label: '坯布编号', width: 220 },
|
||||||
|
{ key: 'grey_fabric_name', label: '坯布名称', width: 260 },
|
||||||
|
{ key: 'roll', label: '匹数', width: 140 },
|
||||||
|
{ key: 'weight', label: '重量', width: 160 },
|
||||||
|
{ key: 'action', label: '操作', width: 140 },
|
||||||
|
];
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
props: {
|
props: {
|
||||||
list: { type: Array, default: () => [] },
|
list: { type: Array, default: () => [] },
|
||||||
title: { type: String, default: '出仓细码' },
|
title: { type: String, default: '出仓细码' },
|
||||||
},
|
},
|
||||||
|
computed: {
|
||||||
|
columns() {
|
||||||
|
return COLUMNS;
|
||||||
|
},
|
||||||
|
tableWidth() {
|
||||||
|
const total = COLUMNS.reduce((sum, col) => sum + col.width, 0);
|
||||||
|
return `${total}rpx`;
|
||||||
|
},
|
||||||
|
totalRoll() {
|
||||||
|
return this.sumField('roll');
|
||||||
|
},
|
||||||
|
totalWeight() {
|
||||||
|
return this.sumField('weight');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
cellStyle(col) {
|
||||||
|
return {
|
||||||
|
width: `${col.width}rpx`,
|
||||||
|
minWidth: `${col.width}rpx`,
|
||||||
|
maxWidth: `${col.width}rpx`,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
displayNum(val) {
|
||||||
|
if (val === 0) return '0';
|
||||||
|
return val != null && val !== '' ? val : '-';
|
||||||
|
},
|
||||||
|
sumField(key) {
|
||||||
|
const total = (this.list || []).reduce((sum, row) => sum + Number(row[key] || 0), 0);
|
||||||
|
return Number(total.toFixed(2));
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@import '@/pages/storefabric/storeFabricBusinessOutPage.scss';
|
@import '@/common/pda-typography.scss';
|
||||||
|
|
||||||
|
.summary-title {
|
||||||
|
font-size: $pda-font-body;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 24rpx 26rpx 12rpx;
|
||||||
|
border-left: 6rpx solid #007AFF;
|
||||||
|
margin: 20rpx 26rpx 0;
|
||||||
|
}
|
||||||
|
.summary-wrap {
|
||||||
|
margin: 0 26rpx 16rpx;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.summary-scroll {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.summary-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
border-bottom: 1rpx solid #f0f0f0;
|
||||||
|
}
|
||||||
|
.summary-row:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.summary-head {
|
||||||
|
background: #f7f8fa;
|
||||||
|
}
|
||||||
|
.summary-total {
|
||||||
|
background: #fff7e6;
|
||||||
|
}
|
||||||
|
.summary-cell {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
min-height: $pda-row-min-height;
|
||||||
|
padding: 12rpx 16rpx;
|
||||||
|
font-size: $pda-font-body;
|
||||||
|
color: #333;
|
||||||
|
border-right: 1rpx solid #f0f0f0;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
.summary-head .summary-cell,
|
||||||
|
.summary-total .summary-cell {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.summary-head .summary-cell {
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.summary-cell:last-child {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.summary-action {
|
||||||
|
color: #2979ff;
|
||||||
|
}
|
||||||
|
.summary-empty {
|
||||||
|
padding: 28rpx 16rpx;
|
||||||
|
font-size: $pda-font-placeholder;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
<template>
|
||||||
|
<view class="order-header-fold">
|
||||||
|
<view class="order-header-fold__bar" @click="toggle">
|
||||||
|
<text class="order-header-fold__title">单据信息</text>
|
||||||
|
<text v-if="value && summary" class="order-header-fold__summary">{{ summary }}</text>
|
||||||
|
<text class="order-header-fold__action">{{ value ? '展开' : '收起' }}</text>
|
||||||
|
</view>
|
||||||
|
<view v-show="!value">
|
||||||
|
<slot />
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
value: { type: Boolean, default: false },
|
||||||
|
summary: { type: String, default: '' },
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
toggle() {
|
||||||
|
this.$emit('input', !this.value);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import '@/common/pda-typography.scss';
|
||||||
|
|
||||||
|
.order-header-fold__bar {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
min-height: $pda-row-min-height;
|
||||||
|
margin: 16rpx 26rpx 0;
|
||||||
|
padding: 0 24rpx;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
}
|
||||||
|
.order-header-fold__title {
|
||||||
|
font-size: $pda-font-body;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #1a1a1a;
|
||||||
|
}
|
||||||
|
.order-header-fold__summary {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 16rpx;
|
||||||
|
font-size: $pda-font-action;
|
||||||
|
color: #666;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
.order-header-fold__action {
|
||||||
|
margin-left: auto;
|
||||||
|
padding-left: 16rpx;
|
||||||
|
font-size: $pda-font-action;
|
||||||
|
color: #2979ff;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,326 @@
|
|||||||
|
<template>
|
||||||
|
<view>
|
||||||
|
<view class="summary-title">{{ title }}</view>
|
||||||
|
<slot name="before-list" />
|
||||||
|
<view class="summary-wrap">
|
||||||
|
<scroll-view scroll-x class="summary-scroll">
|
||||||
|
<view class="summary-table" :style="{ width: tableWidth }">
|
||||||
|
<view class="summary-row summary-head">
|
||||||
|
<view
|
||||||
|
v-for="col in columns"
|
||||||
|
:key="col.key"
|
||||||
|
class="summary-cell"
|
||||||
|
:style="cellStyle(col)"
|
||||||
|
>{{ col.label }}</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="!rows.length" class="summary-empty">{{ emptyText }}</view>
|
||||||
|
<view
|
||||||
|
v-for="row in rows"
|
||||||
|
:key="row.group_key"
|
||||||
|
class="summary-row"
|
||||||
|
:class="{ 'summary-row--open': expandedKey === row.group_key }"
|
||||||
|
@click="toggleRow(row.group_key)"
|
||||||
|
>
|
||||||
|
<view
|
||||||
|
v-for="col in columns"
|
||||||
|
:key="col.key"
|
||||||
|
class="summary-cell"
|
||||||
|
:style="cellStyle(col)"
|
||||||
|
>{{ formatCell(row, col.key) }}</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="rows.length" class="summary-row summary-total">
|
||||||
|
<view
|
||||||
|
v-for="col in columns"
|
||||||
|
:key="col.key"
|
||||||
|
class="summary-cell"
|
||||||
|
:style="cellStyle(col)"
|
||||||
|
>{{ totalCell(col.key) }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
|
||||||
|
<view v-if="expandedRow" class="summary-fine">
|
||||||
|
<view class="summary-fineTitle">
|
||||||
|
细码({{ expandedRow.fine_codes.length }})
|
||||||
|
<text class="summary-fineHint">{{ expandedKey ? '点击行收起' : '' }}</text>
|
||||||
|
</view>
|
||||||
|
<view v-if="!expandedRow.fine_codes.length" class="summary-empty">暂无细码</view>
|
||||||
|
<scroll-view v-else scroll-x class="summary-scroll">
|
||||||
|
<view class="summary-table" :style="{ width: fineTableWidth }">
|
||||||
|
<view class="summary-row summary-head">
|
||||||
|
<view
|
||||||
|
v-for="col in fineCols"
|
||||||
|
:key="col.key"
|
||||||
|
class="summary-cell"
|
||||||
|
:style="cellStyle(col)"
|
||||||
|
>{{ col.label }}</view>
|
||||||
|
</view>
|
||||||
|
<view
|
||||||
|
v-for="(fc, fcIndex) in expandedRow.fine_codes"
|
||||||
|
:key="fc.id || fcIndex"
|
||||||
|
class="summary-row"
|
||||||
|
>
|
||||||
|
<view
|
||||||
|
v-for="col in fineCols"
|
||||||
|
:key="col.key"
|
||||||
|
class="summary-cell"
|
||||||
|
:class="{ 'summary-action': col.key === 'action' }"
|
||||||
|
:style="cellStyle(col)"
|
||||||
|
@click="onFineCellTap(col.key, fc)"
|
||||||
|
>{{ formatFineCell(fc, col.key) }}</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</scroll-view>
|
||||||
|
<view v-if="deletable && expandedRow.fine_codes.length" class="summary-tip">
|
||||||
|
点击「删除」移除对应细码
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
const SUMMARY_COLUMNS = [
|
||||||
|
{ label: '成品编号', key: 'product_code', width: 260 },
|
||||||
|
{ label: '色号', key: 'product_color_code', width: 220 },
|
||||||
|
{ label: '匹数', key: 'roll', width: 140 },
|
||||||
|
{ label: '数量', key: 'weight', width: 160 },
|
||||||
|
{ label: '染整单', key: 'quote_order_no', width: 260 },
|
||||||
|
{ label: '缸号', key: 'dye_factory_dyelot_number', width: 220 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const FINE_COLUMNS = [
|
||||||
|
{ label: '卷号', key: 'volume_number', width: 140 },
|
||||||
|
{ label: '外部卷号', key: 'extern_volume_number', width: 180 },
|
||||||
|
{ label: '匹数', key: 'roll', width: 120 },
|
||||||
|
{ label: '数量', key: 'weight', width: 150 },
|
||||||
|
{ label: '仓位', key: 'warehouse_bin_name', width: 180 },
|
||||||
|
{ label: '缸号', key: 'dye_factory_dyelot_number', width: 200 },
|
||||||
|
];
|
||||||
|
|
||||||
|
const TARE_COLUMNS = [
|
||||||
|
{ label: '纸筒重量', key: 'paper_tube_weight', width: 180 },
|
||||||
|
{ label: '包装重量', key: 'package_weight', width: 180 },
|
||||||
|
];
|
||||||
|
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
groups: { type: Array, default: () => [] },
|
||||||
|
title: { type: String, default: '明细' },
|
||||||
|
emptyText: { type: String, default: '暂无明细' },
|
||||||
|
rollKey: { type: String, default: 'in_roll' },
|
||||||
|
weightKey: { type: String, default: 'in_weight' },
|
||||||
|
deletable: { type: Boolean, default: false },
|
||||||
|
showTareColumns: { type: Boolean, default: false },
|
||||||
|
showBarCode: { type: Boolean, default: false },
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
expandedKey: '',
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
columns() {
|
||||||
|
return SUMMARY_COLUMNS;
|
||||||
|
},
|
||||||
|
rows() {
|
||||||
|
const rows = [];
|
||||||
|
(this.groups || []).forEach((product) => {
|
||||||
|
(product.colors || []).forEach((color) => {
|
||||||
|
rows.push({
|
||||||
|
group_key: color.group_key,
|
||||||
|
product_code: product.product_code || '',
|
||||||
|
product_name: product.product_name || '',
|
||||||
|
product_color_code: color.product_color_code || '',
|
||||||
|
product_color_name: color.product_color_name || '',
|
||||||
|
quote_order_no: color.quote_order_no || '',
|
||||||
|
dye_factory_dyelot_number: color.dye_factory_dyelot_number || '',
|
||||||
|
roll: color[this.rollKey],
|
||||||
|
weight: color[this.weightKey],
|
||||||
|
fine_codes: color.fine_codes || [],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return rows;
|
||||||
|
},
|
||||||
|
expandedRow() {
|
||||||
|
return this.rows.find((row) => row.group_key === this.expandedKey) || null;
|
||||||
|
},
|
||||||
|
fineCols() {
|
||||||
|
const cols = [...FINE_COLUMNS];
|
||||||
|
if (this.showBarCode) {
|
||||||
|
const idx = cols.findIndex((col) => col.key === 'weight');
|
||||||
|
cols.splice(idx + 1, 0, { label: '条码', key: 'bar_code', width: 280 });
|
||||||
|
}
|
||||||
|
if (this.showTareColumns) {
|
||||||
|
const idx = cols.findIndex((col) => col.key === 'weight');
|
||||||
|
cols.splice(idx + 1, 0, ...TARE_COLUMNS);
|
||||||
|
}
|
||||||
|
if (this.deletable) {
|
||||||
|
cols.push({ label: '操作', key: 'action', width: 120 });
|
||||||
|
}
|
||||||
|
return cols;
|
||||||
|
},
|
||||||
|
tableWidth() {
|
||||||
|
return this.sumWidth(this.columns);
|
||||||
|
},
|
||||||
|
fineTableWidth() {
|
||||||
|
return this.sumWidth(this.fineCols);
|
||||||
|
},
|
||||||
|
totalRoll() {
|
||||||
|
return this.sumField('roll');
|
||||||
|
},
|
||||||
|
totalWeight() {
|
||||||
|
return this.sumField('weight');
|
||||||
|
},
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
rows() {
|
||||||
|
if (this.expandedKey && !this.rows.some((row) => row.group_key === this.expandedKey)) {
|
||||||
|
this.expandedKey = '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
sumWidth(cols) {
|
||||||
|
const total = cols.reduce((sum, col) => sum + (col.width || 120), 0);
|
||||||
|
return `${total}rpx`;
|
||||||
|
},
|
||||||
|
sumField(key) {
|
||||||
|
const total = this.rows.reduce((sum, row) => sum + Number(row[key] || 0), 0);
|
||||||
|
return Number(total.toFixed(2));
|
||||||
|
},
|
||||||
|
cellStyle(col) {
|
||||||
|
return {
|
||||||
|
width: `${col.width}rpx`,
|
||||||
|
minWidth: `${col.width}rpx`,
|
||||||
|
maxWidth: `${col.width}rpx`,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
joinName(code, name) {
|
||||||
|
const main = code || '-';
|
||||||
|
return name ? `${main} ${name}` : main;
|
||||||
|
},
|
||||||
|
formatCell(row, key) {
|
||||||
|
if (key === 'product_code') return this.joinName(row.product_code, row.product_name);
|
||||||
|
if (key === 'product_color_code') return this.joinName(row.product_color_code, row.product_color_name);
|
||||||
|
if (key === 'roll' || key === 'weight') {
|
||||||
|
const val = row[key];
|
||||||
|
if (val === 0) return '0';
|
||||||
|
return val != null && val !== '' ? val : '-';
|
||||||
|
}
|
||||||
|
const val = row[key];
|
||||||
|
if (val === 0) return '0';
|
||||||
|
return val != null && val !== '' ? val : '-';
|
||||||
|
},
|
||||||
|
totalCell(key) {
|
||||||
|
if (key === 'product_code') return '合计';
|
||||||
|
if (key === 'roll') return this.totalRoll;
|
||||||
|
if (key === 'weight') return this.totalWeight;
|
||||||
|
return '';
|
||||||
|
},
|
||||||
|
toggleRow(key) {
|
||||||
|
this.expandedKey = this.expandedKey === key ? '' : key;
|
||||||
|
},
|
||||||
|
formatFineCell(fc, key) {
|
||||||
|
if (key === 'action') return '删除';
|
||||||
|
const val = fc[key];
|
||||||
|
if (val === 0) return '0';
|
||||||
|
return val != null && val !== '' ? val : '-';
|
||||||
|
},
|
||||||
|
onFineCellTap(key, fc) {
|
||||||
|
if (!this.deletable || key !== 'action') return;
|
||||||
|
this.$emit('delete', fc);
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import '@/common/pda-typography.scss';
|
||||||
|
|
||||||
|
.summary-title {
|
||||||
|
font-size: $pda-font-body;
|
||||||
|
font-weight: bold;
|
||||||
|
padding: 24rpx 26rpx 12rpx;
|
||||||
|
border-left: 6rpx solid #007AFF;
|
||||||
|
margin: 20rpx 26rpx 0;
|
||||||
|
}
|
||||||
|
.summary-wrap {
|
||||||
|
margin: 0 26rpx 16rpx;
|
||||||
|
background: #fff;
|
||||||
|
border-radius: 12rpx;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.summary-scroll {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.summary-table {
|
||||||
|
border-bottom: 1rpx solid #eee;
|
||||||
|
}
|
||||||
|
.summary-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: stretch;
|
||||||
|
border-bottom: 1rpx solid #f0f0f0;
|
||||||
|
}
|
||||||
|
.summary-row:last-child {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
.summary-head {
|
||||||
|
background: #f7f8fa;
|
||||||
|
}
|
||||||
|
.summary-row--open {
|
||||||
|
background: #f0f7ff;
|
||||||
|
}
|
||||||
|
.summary-total {
|
||||||
|
background: #fff7e6;
|
||||||
|
}
|
||||||
|
.summary-cell {
|
||||||
|
box-sizing: border-box;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
min-height: $pda-row-min-height;
|
||||||
|
padding: 12rpx 16rpx;
|
||||||
|
font-size: $pda-font-body;
|
||||||
|
color: #333;
|
||||||
|
border-right: 1rpx solid #f0f0f0;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
.summary-head .summary-cell {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.summary-total .summary-cell {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
.summary-cell:last-child {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
.summary-empty {
|
||||||
|
padding: 28rpx 16rpx;
|
||||||
|
font-size: $pda-font-placeholder;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
.summary-fine {
|
||||||
|
padding: 8rpx 0 16rpx;
|
||||||
|
}
|
||||||
|
.summary-fineTitle {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
padding: 12rpx 16rpx 8rpx;
|
||||||
|
font-size: $pda-font-action;
|
||||||
|
color: #2979ff;
|
||||||
|
}
|
||||||
|
.summary-fineHint {
|
||||||
|
color: #999;
|
||||||
|
font-size: $pda-font-popup-sub;
|
||||||
|
}
|
||||||
|
.summary-action {
|
||||||
|
color: #f5222d;
|
||||||
|
}
|
||||||
|
.summary-tip {
|
||||||
|
padding: 8rpx 16rpx 0;
|
||||||
|
font-size: $pda-font-popup-sub;
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -1,261 +1,35 @@
|
|||||||
<template>
|
<template>
|
||||||
<view>
|
<FineCodeSummaryTable
|
||||||
<view class="fabric-out-sectionTitle">{{ title }}</view>
|
:groups="groups"
|
||||||
<slot name="before-list" />
|
:title="title"
|
||||||
<view class="fabric-out-detailList">
|
:empty-text="emptyText"
|
||||||
<dataNull
|
roll-key="in_roll"
|
||||||
v-if="!groups.length"
|
weight-key="in_weight"
|
||||||
src="/src/static/img/chahua/gjNull.png"
|
:deletable="deletable"
|
||||||
title="暂无进仓明细"
|
:show-tare-columns="showTareColumns"
|
||||||
title1="扫码后将在此展示"
|
@delete="$emit('delete', $event)"
|
||||||
/>
|
>
|
||||||
<view
|
<slot name="before-list" slot="before-list" />
|
||||||
v-for="product in groups"
|
</FineCodeSummaryTable>
|
||||||
:key="product.group_key"
|
|
||||||
class="fabric-out-detailCard process-in-productCard"
|
|
||||||
>
|
|
||||||
<view class="process-in-productHead">
|
|
||||||
<text class="process-in-productTitle">
|
|
||||||
{{ product.product_code || '-' }}<text v-if="product.product_name" class="process-in-subText">{{ ' ' + product.product_name }}</text>
|
|
||||||
</text>
|
|
||||||
<text class="process-in-productSum">
|
|
||||||
匹数 {{ product.in_roll }} / 数量 {{ product.in_weight }}
|
|
||||||
</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view
|
|
||||||
v-for="color in product.colors"
|
|
||||||
:key="color.group_key"
|
|
||||||
class="process-in-colorBlock"
|
|
||||||
>
|
|
||||||
<view class="process-in-colorHead">
|
|
||||||
<text class="process-in-colorTitle">
|
|
||||||
色号 {{ color.product_color_code || '-' }}<text v-if="color.product_color_name" class="process-in-subText">{{ ' ' + color.product_color_name }}</text>
|
|
||||||
</text>
|
|
||||||
<text class="process-in-colorSum">
|
|
||||||
匹数 {{ color.in_roll }} / 数量 {{ color.in_weight }}
|
|
||||||
</text>
|
|
||||||
</view>
|
|
||||||
<view class="process-in-colorMeta">
|
|
||||||
<text>染整单:{{ color.quote_order_no || '-' }}</text>
|
|
||||||
<text>缸号:{{ color.dye_factory_dyelot_number || '-' }}</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="process-in-fcTitle">细码({{ color.fine_codes.length }})</view>
|
|
||||||
<view v-if="!color.fine_codes.length" class="process-in-fcEmpty">暂无细码</view>
|
|
||||||
<scroll-view v-else scroll-x class="process-in-fcScroll">
|
|
||||||
<view class="process-in-fcTable" :style="{ width: fineTableWidth }">
|
|
||||||
<view class="process-in-fcRow process-in-fcHead">
|
|
||||||
<view
|
|
||||||
v-for="col in fineColumns"
|
|
||||||
:key="col.key"
|
|
||||||
class="process-in-fcCell"
|
|
||||||
:style="cellStyle(col)"
|
|
||||||
>{{ col.label }}</view>
|
|
||||||
</view>
|
|
||||||
<view
|
|
||||||
v-for="(fc, fcIndex) in color.fine_codes"
|
|
||||||
:key="fc.id || fcIndex"
|
|
||||||
class="process-in-fcRow"
|
|
||||||
>
|
|
||||||
<view
|
|
||||||
v-for="col in fineColumns"
|
|
||||||
:key="col.key"
|
|
||||||
class="process-in-fcCell"
|
|
||||||
:class="{ 'process-in-fcAction': col.key === 'action' }"
|
|
||||||
:style="cellStyle(col)"
|
|
||||||
@click="onCellTap(col.key, fc)"
|
|
||||||
>{{ formatFineCell(fc, col.key) }}</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
<view v-if="deletable && color.fine_codes.length" class="process-in-fcTip">
|
|
||||||
勾选上方「删除」后扫码,或点击「删除」列移除细码
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import FineCodeSummaryTable from '@/components/storegoods/FineCodeSummaryTable.vue';
|
||||||
import { buildItemGroups } from '@/common/storeGoodsProcessIn';
|
import { buildItemGroups } from '@/common/storeGoodsProcessIn';
|
||||||
|
|
||||||
const FINE_COLUMNS = [
|
|
||||||
{ label: '卷号', key: 'volume_number', width: 110 },
|
|
||||||
{ label: '外部卷号', key: 'extern_volume_number', width: 140 },
|
|
||||||
{ label: '匹数', key: 'roll', width: 100 },
|
|
||||||
{ label: '数量', key: 'weight', width: 130 },
|
|
||||||
{ label: '仓位', key: 'warehouse_bin_name', width: 140 },
|
|
||||||
{ label: '缸号', key: 'dye_factory_dyelot_number', width: 160 },
|
|
||||||
];
|
|
||||||
|
|
||||||
const TARE_COLUMNS = [
|
|
||||||
{ label: '纸筒重量', key: 'paper_tube_weight', width: 140 },
|
|
||||||
{ label: '包装重量', key: 'package_weight', width: 140 },
|
|
||||||
];
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
components: { FineCodeSummaryTable },
|
||||||
props: {
|
props: {
|
||||||
list: { type: Array, default: () => [] },
|
list: { type: Array, default: () => [] },
|
||||||
title: { type: String, default: '进仓明细' },
|
title: { type: String, default: '进仓明细' },
|
||||||
|
emptyText: { type: String, default: '暂无进仓明细' },
|
||||||
deletable: { type: Boolean, default: false },
|
deletable: { type: Boolean, default: false },
|
||||||
/** 加工/采购进仓:细码行展示扫码时提交的纸筒、包装重量 */
|
|
||||||
showTareColumns: { type: Boolean, default: false },
|
showTareColumns: { type: Boolean, default: false },
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
groups() {
|
groups() {
|
||||||
return buildItemGroups(this.list);
|
return buildItemGroups(this.list);
|
||||||
},
|
},
|
||||||
fineColumns() {
|
|
||||||
const cols = [...FINE_COLUMNS];
|
|
||||||
if (this.showTareColumns) {
|
|
||||||
const idx = cols.findIndex((col) => col.key === 'weight');
|
|
||||||
cols.splice(idx + 1, 0, ...TARE_COLUMNS);
|
|
||||||
}
|
|
||||||
if (this.deletable) {
|
|
||||||
cols.push({ label: '操作', key: 'action', width: 100 });
|
|
||||||
}
|
|
||||||
return cols;
|
|
||||||
},
|
|
||||||
fineTableWidth() {
|
|
||||||
const total = this.fineColumns.reduce((sum, col) => sum + (col.width || 100), 0);
|
|
||||||
return `${total}rpx`;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
cellStyle(col) {
|
|
||||||
return {
|
|
||||||
width: `${col.width}rpx`,
|
|
||||||
minWidth: `${col.width}rpx`,
|
|
||||||
maxWidth: `${col.width}rpx`,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
formatFineCell(fc, key) {
|
|
||||||
if (key === 'action') return '删除';
|
|
||||||
const val = fc[key];
|
|
||||||
if (val === 0) return '0';
|
|
||||||
return val != null && val !== '' ? val : '-';
|
|
||||||
},
|
|
||||||
onCellTap(key, fc) {
|
|
||||||
if (!this.deletable || key !== 'action') return;
|
|
||||||
this.$emit('delete', fc);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
@import '@/pages/storefabric/storeFabricBusinessOutPage.scss';
|
|
||||||
|
|
||||||
.process-in-productCard {
|
|
||||||
padding: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.process-in-productHead {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 20rpx;
|
|
||||||
background: #f0f7ff;
|
|
||||||
border-bottom: 1rpx solid #e6f0ff;
|
|
||||||
}
|
|
||||||
.process-in-productTitle {
|
|
||||||
font-size: 32rpx;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #1a1a1a;
|
|
||||||
flex: 1;
|
|
||||||
padding-right: 16rpx;
|
|
||||||
}
|
|
||||||
.process-in-productSum,
|
|
||||||
.process-in-colorSum {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #666;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
.process-in-subText {
|
|
||||||
font-weight: normal;
|
|
||||||
color: #666;
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
.process-in-colorBlock {
|
|
||||||
padding: 16rpx 20rpx 20rpx;
|
|
||||||
border-bottom: 1rpx solid #f0f0f0;
|
|
||||||
}
|
|
||||||
.process-in-colorBlock:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
.process-in-colorHead {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 8rpx;
|
|
||||||
}
|
|
||||||
.process-in-colorTitle {
|
|
||||||
font-size: 30rpx;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #333;
|
|
||||||
flex: 1;
|
|
||||||
padding-right: 12rpx;
|
|
||||||
}
|
|
||||||
.process-in-colorMeta {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 16rpx 24rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #888;
|
|
||||||
margin-bottom: 12rpx;
|
|
||||||
}
|
|
||||||
.process-in-fcTitle {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #2979ff;
|
|
||||||
margin-bottom: 8rpx;
|
|
||||||
}
|
|
||||||
.process-in-fcEmpty {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #bbb;
|
|
||||||
padding: 8rpx 0;
|
|
||||||
}
|
|
||||||
.process-in-fcScroll {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.process-in-fcTable {
|
|
||||||
border: 1rpx solid #eee;
|
|
||||||
border-radius: 8rpx;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.process-in-fcRow {
|
|
||||||
display: flex;
|
|
||||||
align-items: stretch;
|
|
||||||
border-bottom: 1rpx solid #f0f0f0;
|
|
||||||
}
|
|
||||||
.process-in-fcRow:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
.process-in-fcHead {
|
|
||||||
background: #fafafa;
|
|
||||||
}
|
|
||||||
.process-in-fcCell {
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 14rpx 10rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #333;
|
|
||||||
border-right: 1rpx solid #f0f0f0;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
.process-in-fcHead .process-in-fcCell {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.process-in-fcCell:last-child {
|
|
||||||
border-right: none;
|
|
||||||
}
|
|
||||||
.process-in-fcAction {
|
|
||||||
color: #f5222d;
|
|
||||||
}
|
|
||||||
.process-in-fcTip {
|
|
||||||
margin-top: 8rpx;
|
|
||||||
font-size: 26rpx;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -1,97 +1,24 @@
|
|||||||
<template>
|
<template>
|
||||||
<view>
|
<FineCodeSummaryTable
|
||||||
<view class="fabric-out-sectionTitle">{{ title }}</view>
|
:groups="groups"
|
||||||
<slot name="before-list" />
|
:title="title"
|
||||||
<view class="fabric-out-detailList">
|
empty-text="暂无出仓明细"
|
||||||
<dataNull
|
roll-key="out_roll"
|
||||||
v-if="!groups.length"
|
weight-key="out_weight"
|
||||||
src="/src/static/img/chahua/gjNull.png"
|
:deletable="deletable"
|
||||||
title="暂无出仓明细"
|
show-bar-code
|
||||||
title1="扫码后将在此展示"
|
@delete="$emit('delete', $event)"
|
||||||
/>
|
>
|
||||||
<view
|
<slot name="before-list" slot="before-list" />
|
||||||
v-for="product in groups"
|
</FineCodeSummaryTable>
|
||||||
:key="product.group_key"
|
|
||||||
class="fabric-out-detailCard process-in-productCard"
|
|
||||||
>
|
|
||||||
<view class="process-in-productHead">
|
|
||||||
<text class="process-in-productTitle">
|
|
||||||
{{ product.product_code || '-' }}<text v-if="product.product_name" class="process-in-subText">{{ ' ' + product.product_name }}</text>
|
|
||||||
</text>
|
|
||||||
<text class="process-in-productSum">
|
|
||||||
匹数 {{ product.out_roll }} / 数量 {{ product.out_weight }}
|
|
||||||
</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view
|
|
||||||
v-for="color in product.colors"
|
|
||||||
:key="color.group_key"
|
|
||||||
class="process-in-colorBlock"
|
|
||||||
>
|
|
||||||
<view class="process-in-colorHead">
|
|
||||||
<text class="process-in-colorTitle">
|
|
||||||
色号 {{ color.product_color_code || '-' }}<text v-if="color.product_color_name" class="process-in-subText">{{ ' ' + color.product_color_name }}</text>
|
|
||||||
</text>
|
|
||||||
<text class="process-in-colorSum">
|
|
||||||
匹数 {{ color.out_roll }} / 数量 {{ color.out_weight }}
|
|
||||||
</text>
|
|
||||||
</view>
|
|
||||||
<view class="process-in-colorMeta">
|
|
||||||
<text>染整单:{{ color.quote_order_no || '-' }}</text>
|
|
||||||
<text>缸号:{{ color.dye_factory_dyelot_number || '-' }}</text>
|
|
||||||
</view>
|
|
||||||
|
|
||||||
<view class="process-in-fcTitle">细码({{ color.fine_codes.length }})</view>
|
|
||||||
<view v-if="!color.fine_codes.length" class="process-in-fcEmpty">暂无细码</view>
|
|
||||||
<scroll-view v-else scroll-x class="process-in-fcScroll">
|
|
||||||
<view class="process-in-fcTable" :style="{ width: fineTableWidth }">
|
|
||||||
<view class="process-in-fcRow process-in-fcHead">
|
|
||||||
<view
|
|
||||||
v-for="col in fineColumns"
|
|
||||||
:key="col.key"
|
|
||||||
class="process-in-fcCell"
|
|
||||||
:style="cellStyle(col)"
|
|
||||||
>{{ col.label }}</view>
|
|
||||||
</view>
|
|
||||||
<view
|
|
||||||
v-for="(fc, fcIndex) in color.fine_codes"
|
|
||||||
:key="fc.id || fcIndex"
|
|
||||||
class="process-in-fcRow"
|
|
||||||
>
|
|
||||||
<view
|
|
||||||
v-for="col in fineColumns"
|
|
||||||
:key="col.key"
|
|
||||||
class="process-in-fcCell"
|
|
||||||
:class="{ 'process-in-fcAction': col.key === 'action' }"
|
|
||||||
:style="cellStyle(col)"
|
|
||||||
@click="onCellTap(col.key, fc)"
|
|
||||||
>{{ formatFineCell(fc, col.key) }}</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</scroll-view>
|
|
||||||
<view v-if="deletable && color.fine_codes.length" class="process-in-fcTip">
|
|
||||||
勾选上方「删除」后扫码,或点击「删除」列移除细码
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</view>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import FineCodeSummaryTable from '@/components/storegoods/FineCodeSummaryTable.vue';
|
||||||
import { buildItemGroups } from '@/common/storeGoodsProcessOut';
|
import { buildItemGroups } from '@/common/storeGoodsProcessOut';
|
||||||
|
|
||||||
const FINE_COLUMNS = [
|
|
||||||
{ label: '卷号', key: 'volume_number', width: 110 },
|
|
||||||
{ label: '外部卷号', key: 'extern_volume_number', width: 140 },
|
|
||||||
{ label: '匹数', key: 'roll', width: 100 },
|
|
||||||
{ label: '数量', key: 'weight', width: 130 },
|
|
||||||
{ label: '条码', key: 'bar_code', width: 260 },
|
|
||||||
{ label: '仓位', key: 'warehouse_bin_name', width: 140 },
|
|
||||||
{ label: '缸号', key: 'dye_factory_dyelot_number', width: 160 },
|
|
||||||
];
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
components: { FineCodeSummaryTable },
|
||||||
props: {
|
props: {
|
||||||
list: { type: Array, default: () => [] },
|
list: { type: Array, default: () => [] },
|
||||||
title: { type: String, default: '出仓明细' },
|
title: { type: String, default: '出仓明细' },
|
||||||
@@ -101,148 +28,6 @@ export default {
|
|||||||
groups() {
|
groups() {
|
||||||
return buildItemGroups(this.list);
|
return buildItemGroups(this.list);
|
||||||
},
|
},
|
||||||
fineColumns() {
|
|
||||||
if (!this.deletable) return FINE_COLUMNS;
|
|
||||||
return [...FINE_COLUMNS, { label: '操作', key: 'action', width: 100 }];
|
|
||||||
},
|
|
||||||
fineTableWidth() {
|
|
||||||
const total = this.fineColumns.reduce((sum, col) => sum + (col.width || 100), 0);
|
|
||||||
return `${total}rpx`;
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
cellStyle(col) {
|
|
||||||
return {
|
|
||||||
width: `${col.width}rpx`,
|
|
||||||
minWidth: `${col.width}rpx`,
|
|
||||||
maxWidth: `${col.width}rpx`,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
formatFineCell(fc, key) {
|
|
||||||
if (key === 'action') return '删除';
|
|
||||||
const val = fc[key];
|
|
||||||
if (val === 0) return '0';
|
|
||||||
return val != null && val !== '' ? val : '-';
|
|
||||||
},
|
|
||||||
onCellTap(key, fc) {
|
|
||||||
if (!this.deletable || key !== 'action') return;
|
|
||||||
this.$emit('delete', fc);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
|
||||||
@import '@/pages/storefabric/storeFabricBusinessOutPage.scss';
|
|
||||||
|
|
||||||
.process-in-productCard {
|
|
||||||
padding: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.process-in-productHead {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: 20rpx;
|
|
||||||
background: #f0f7ff;
|
|
||||||
border-bottom: 1rpx solid #e6f0ff;
|
|
||||||
}
|
|
||||||
.process-in-productTitle {
|
|
||||||
font-size: 32rpx;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #1a1a1a;
|
|
||||||
flex: 1;
|
|
||||||
padding-right: 16rpx;
|
|
||||||
}
|
|
||||||
.process-in-productSum,
|
|
||||||
.process-in-colorSum {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #666;
|
|
||||||
flex-shrink: 0;
|
|
||||||
}
|
|
||||||
.process-in-subText {
|
|
||||||
font-weight: normal;
|
|
||||||
color: #666;
|
|
||||||
font-size: 28rpx;
|
|
||||||
}
|
|
||||||
.process-in-colorBlock {
|
|
||||||
padding: 16rpx 20rpx 20rpx;
|
|
||||||
border-bottom: 1rpx solid #f0f0f0;
|
|
||||||
}
|
|
||||||
.process-in-colorBlock:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
.process-in-colorHead {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 8rpx;
|
|
||||||
}
|
|
||||||
.process-in-colorTitle {
|
|
||||||
font-size: 30rpx;
|
|
||||||
font-weight: bold;
|
|
||||||
color: #333;
|
|
||||||
flex: 1;
|
|
||||||
padding-right: 12rpx;
|
|
||||||
}
|
|
||||||
.process-in-colorMeta {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 16rpx 24rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #888;
|
|
||||||
margin-bottom: 12rpx;
|
|
||||||
}
|
|
||||||
.process-in-fcTitle {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #2979ff;
|
|
||||||
margin-bottom: 8rpx;
|
|
||||||
}
|
|
||||||
.process-in-fcEmpty {
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #bbb;
|
|
||||||
padding: 8rpx 0;
|
|
||||||
}
|
|
||||||
.process-in-fcScroll {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
.process-in-fcTable {
|
|
||||||
border: 1rpx solid #eee;
|
|
||||||
border-radius: 8rpx;
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.process-in-fcRow {
|
|
||||||
display: flex;
|
|
||||||
align-items: stretch;
|
|
||||||
border-bottom: 1rpx solid #f0f0f0;
|
|
||||||
}
|
|
||||||
.process-in-fcRow:last-child {
|
|
||||||
border-bottom: none;
|
|
||||||
}
|
|
||||||
.process-in-fcHead {
|
|
||||||
background: #fafafa;
|
|
||||||
}
|
|
||||||
.process-in-fcCell {
|
|
||||||
box-sizing: border-box;
|
|
||||||
padding: 14rpx 10rpx;
|
|
||||||
font-size: 28rpx;
|
|
||||||
color: #333;
|
|
||||||
border-right: 1rpx solid #f0f0f0;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
.process-in-fcHead .process-in-fcCell {
|
|
||||||
font-weight: bold;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.process-in-fcCell:last-child {
|
|
||||||
border-right: none;
|
|
||||||
}
|
|
||||||
.process-in-fcAction {
|
|
||||||
color: #f5222d;
|
|
||||||
}
|
|
||||||
.process-in-fcTip {
|
|
||||||
margin-top: 8rpx;
|
|
||||||
font-size: 26rpx;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|||||||
+2
-2
@@ -2,8 +2,8 @@
|
|||||||
"name" : "浩拓ERP",
|
"name" : "浩拓ERP",
|
||||||
"appid" : "__UNI__F79F300",
|
"appid" : "__UNI__F79F300",
|
||||||
"description" : "浩拓ERP",
|
"description" : "浩拓ERP",
|
||||||
"versionName" : "1.1.17",
|
"versionName" : "1.1.18",
|
||||||
"versionCode" : 117,
|
"versionCode" : 118,
|
||||||
"transformPx" : false,
|
"transformPx" : false,
|
||||||
"app-plus" : {
|
"app-plus" : {
|
||||||
"optimization" : {
|
"optimization" : {
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
|
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
|
|
||||||
@@ -60,6 +62,8 @@
|
|||||||
|
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<FabricOutDetailList
|
<FabricOutDetailList
|
||||||
@@ -144,6 +148,8 @@ import FineCodePopup from '@/components/storefabric/FineCodePopup.vue';
|
|||||||
|
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
|
|
||||||
import FabricOutDetailList from '@/components/storefabric/FabricOutDetailList.vue';
|
import FabricOutDetailList from '@/components/storefabric/FabricOutDetailList.vue';
|
||||||
|
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
@@ -164,6 +170,8 @@ export default {
|
|||||||
|
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
|
||||||
|
OrderHeaderFold,
|
||||||
|
|
||||||
FabricOutDetailList,
|
FabricOutDetailList,
|
||||||
|
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -22,6 +23,7 @@
|
|||||||
<text class="mr26">单据备注</text>
|
<text class="mr26">单据备注</text>
|
||||||
<text>{{ form.remark || '-' }}</text>
|
<text>{{ form.remark || '-' }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<FabricOutDetailList
|
<FabricOutDetailList
|
||||||
:list="form.item_data"
|
:list="form.item_data"
|
||||||
@@ -62,6 +64,7 @@ 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 OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutDetailList from '@/components/storefabric/FabricOutDetailList.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';
|
||||||
@@ -72,12 +75,18 @@ export default {
|
|||||||
FabricInfoPopup,
|
FabricInfoPopup,
|
||||||
FineCodePopup,
|
FineCodePopup,
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutDetailList,
|
FabricOutDetailList,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutScanDetail,
|
FabricOutScanDetail,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
},
|
},
|
||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
headerCollapsed: true,
|
||||||
|
};
|
||||||
|
},
|
||||||
onLoad(e) {
|
onLoad(e) {
|
||||||
uni.setNavigationBarTitle({ title: '编辑坯布出仓单' });
|
uni.setNavigationBarTitle({ title: '编辑坯布出仓单' });
|
||||||
this.pageMode = 'edit';
|
this.pageMode = 'edit';
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export default {
|
|||||||
orderId: 0,
|
orderId: 0,
|
||||||
form: this.getEmptyForm(),
|
form: this.getEmptyForm(),
|
||||||
headerSaved: false,
|
headerSaved: false,
|
||||||
|
headerCollapsed: false,
|
||||||
selectShow: false,
|
selectShow: false,
|
||||||
selectList: [],
|
selectList: [],
|
||||||
selectType: '',
|
selectType: '',
|
||||||
@@ -183,6 +184,7 @@ export default {
|
|||||||
this.orderId = order.id;
|
this.orderId = order.id;
|
||||||
this.auditStatus = order.audit_status;
|
this.auditStatus = order.audit_status;
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.form = orderToFormFields(order);
|
this.form = orderToFormFields(order);
|
||||||
this.refreshScanDetailTotals(order);
|
this.refreshScanDetailTotals(order);
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
@@ -247,6 +249,7 @@ export default {
|
|||||||
const order = normalizeOrder(detail);
|
const order = normalizeOrder(detail);
|
||||||
this.applyOrder(order);
|
this.applyOrder(order);
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
this.showSuccess('保存成功,可以扫码', '保存成功', { voiceOnly: true });
|
this.showSuccess('保存成功,可以扫码', '保存成功', { voiceOnly: true });
|
||||||
this.registerOrderScanBroadcast();
|
this.registerOrderScanBroadcast();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="order.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
<view v-if="order.auditer_name" class="flex-white-plr26 ptb20 bdb_f5">
|
<view v-if="order.auditer_name" class="flex-white-plr26 ptb20 bdb_f5">
|
||||||
<text class="mr26">审核人</text><text>{{ order.auditer_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
<text class="mr26">审核人</text><text>{{ order.auditer_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<FabricOutDetailList
|
<FabricOutDetailList
|
||||||
:title="detailTitle"
|
:title="detailTitle"
|
||||||
@@ -45,6 +47,7 @@ import util from '@/common/util';
|
|||||||
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 OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutDetailList from '@/components/storefabric/FabricOutDetailList.vue';
|
import FabricOutDetailList from '@/components/storefabric/FabricOutDetailList.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import {
|
import {
|
||||||
@@ -56,9 +59,10 @@ import {
|
|||||||
} from '@/common/storeFabricBusinessOut';
|
} from '@/common/storeFabricBusinessOut';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { FabricInfoPopup, FineCodePopup, OrderStatusBar, FabricOutDetailList, FabricOutFooter },
|
components: { FabricInfoPopup, FineCodePopup, OrderStatusBar, OrderHeaderFold, FabricOutDetailList, FabricOutFooter },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
headerCollapsed: true,
|
||||||
orderId: 0,
|
orderId: 0,
|
||||||
order: {},
|
order: {},
|
||||||
billTypeName: (BILL_TYPES[0] || {}).label || '坯布其他出货单',
|
billTypeName: (BILL_TYPES[0] || {}).label || '坯布其他出货单',
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -62,6 +63,7 @@
|
|||||||
<view style="margin-bottom: 8rpx;"><text>单据备注</text></view>
|
<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" />
|
<u-input v-model="form.remark" :disabled="!headerEditable" type="textarea" :border="true" :height="100" :auto-height="true" />
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInBinBar
|
<ProcessInBinBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
@@ -114,6 +116,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsProcessInMixin.js';
|
import formMixin from './storeGoodsProcessInMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
||||||
@@ -123,6 +126,7 @@ import ProcessInBinBar from '@/components/storegoods/ProcessInBinBar.vue';
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessInScanDetail,
|
ProcessInScanDetail,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
<text class="mr26">单据备注</text>
|
<text class="mr26">单据备注</text>
|
||||||
<text>{{ form.remark || '-' }}</text>
|
<text>{{ form.remark || '-' }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInBinBar
|
<ProcessInBinBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
@@ -92,6 +94,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsProcessInMixin.js';
|
import formMixin from './storeGoodsProcessInMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
||||||
@@ -101,6 +104,7 @@ import ProcessInBinBar from '@/components/storegoods/ProcessInBinBar.vue';
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessInScanDetail,
|
ProcessInScanDetail,
|
||||||
@@ -110,6 +114,7 @@ export default {
|
|||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
headerCollapsed: true,
|
||||||
weightInputStyle: {
|
weightInputStyle: {
|
||||||
fontSize: '36rpx',
|
fontSize: '36rpx',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export default {
|
|||||||
orderId: 0,
|
orderId: 0,
|
||||||
form: this.getEmptyForm(),
|
form: this.getEmptyForm(),
|
||||||
headerSaved: false,
|
headerSaved: false,
|
||||||
|
headerCollapsed: false,
|
||||||
selectShow: false,
|
selectShow: false,
|
||||||
selectList: [],
|
selectList: [],
|
||||||
selectType: '',
|
selectType: '',
|
||||||
@@ -407,6 +408,7 @@ export default {
|
|||||||
this.orderId = order.id;
|
this.orderId = order.id;
|
||||||
this.auditStatus = order.audit_status;
|
this.auditStatus = order.audit_status;
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.form = orderToFormFields(order);
|
this.form = orderToFormFields(order);
|
||||||
this.clearWarehouseBin();
|
this.clearWarehouseBin();
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
@@ -494,6 +496,7 @@ export default {
|
|||||||
const order = normalizeOrder(detail);
|
const order = normalizeOrder(detail);
|
||||||
this.applyOrder(order, { keepWeights: true });
|
this.applyOrder(order, { keepWeights: true });
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.clearWarehouseBin();
|
this.clearWarehouseBin();
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
this.showSuccess('保存成功,请先扫描仓位', '保存成功', { voiceOnly: true });
|
this.showSuccess('保存成功,请先扫描仓位', '保存成功', { voiceOnly: true });
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="order.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -44,6 +45,7 @@
|
|||||||
<text class="mr26">审核人</text>
|
<text class="mr26">审核人</text>
|
||||||
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInDetailList
|
<ProcessInDetailList
|
||||||
:title="detailTitle"
|
:title="detailTitle"
|
||||||
@@ -58,6 +60,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import util from '@/common/util';
|
import util from '@/common/util';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInDetailList from '@/components/storegoods/ProcessInDetailList.vue';
|
import ProcessInDetailList from '@/components/storegoods/ProcessInDetailList.vue';
|
||||||
import {
|
import {
|
||||||
@@ -68,10 +71,11 @@ import {
|
|||||||
} from '@/common/storeGoodsProcessIn';
|
} from '@/common/storeGoodsProcessIn';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { OrderStatusBar, FabricOutFooter, ProcessInDetailList },
|
components: { OrderStatusBar, OrderHeaderFold, FabricOutFooter, ProcessInDetailList },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
orderId: 0,
|
orderId: 0,
|
||||||
|
headerCollapsed: true,
|
||||||
order: { item_data: [] },
|
order: { item_data: [] },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -31,6 +32,7 @@
|
|||||||
<view style="margin-bottom: 8rpx;"><text>单据备注</text></view>
|
<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" />
|
<u-input v-model="form.remark" :disabled="!headerEditable" type="textarea" :border="true" :height="100" :auto-height="true" />
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<FabricOutScanBar
|
<FabricOutScanBar
|
||||||
:can-scan="showQrScanBar"
|
:can-scan="showQrScanBar"
|
||||||
@@ -71,6 +73,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsProcessOutMixin.js';
|
import formMixin from './storeGoodsProcessOutMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessOutScanDetail from '@/components/storegoods/ProcessOutScanDetail.vue';
|
import ProcessOutScanDetail from '@/components/storegoods/ProcessOutScanDetail.vue';
|
||||||
@@ -79,6 +82,7 @@ import ProcessOutDetailList from '@/components/storegoods/ProcessOutDetailList.v
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessOutScanDetail,
|
ProcessOutScanDetail,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -22,6 +23,7 @@
|
|||||||
<text class="mr26">单据备注</text>
|
<text class="mr26">单据备注</text>
|
||||||
<text>{{ form.remark || '-' }}</text>
|
<text>{{ form.remark || '-' }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<FabricOutScanBar
|
<FabricOutScanBar
|
||||||
:can-scan="showQrScanBar"
|
:can-scan="showQrScanBar"
|
||||||
@@ -52,6 +54,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsProcessOutMixin.js';
|
import formMixin from './storeGoodsProcessOutMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessOutScanDetail from '@/components/storegoods/ProcessOutScanDetail.vue';
|
import ProcessOutScanDetail from '@/components/storegoods/ProcessOutScanDetail.vue';
|
||||||
@@ -60,12 +63,18 @@ import ProcessOutDetailList from '@/components/storegoods/ProcessOutDetailList.v
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessOutScanDetail,
|
ProcessOutScanDetail,
|
||||||
ProcessOutDetailList,
|
ProcessOutDetailList,
|
||||||
},
|
},
|
||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
headerCollapsed: true,
|
||||||
|
};
|
||||||
|
},
|
||||||
onLoad(e) {
|
onLoad(e) {
|
||||||
uni.setNavigationBarTitle({ title: '编辑加工出仓单' });
|
uni.setNavigationBarTitle({ title: '编辑加工出仓单' });
|
||||||
this.pageMode = 'edit';
|
this.pageMode = 'edit';
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ export default {
|
|||||||
orderId: 0,
|
orderId: 0,
|
||||||
form: this.getEmptyForm(),
|
form: this.getEmptyForm(),
|
||||||
headerSaved: false,
|
headerSaved: false,
|
||||||
|
headerCollapsed: false,
|
||||||
selectShow: false,
|
selectShow: false,
|
||||||
selectList: [],
|
selectList: [],
|
||||||
selectType: '',
|
selectType: '',
|
||||||
@@ -274,6 +275,7 @@ export default {
|
|||||||
this.orderId = order.id;
|
this.orderId = order.id;
|
||||||
this.auditStatus = order.audit_status;
|
this.auditStatus = order.audit_status;
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.form = orderToFormFields(order);
|
this.form = orderToFormFields(order);
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
if (this.canScan) this.registerOrderScanBroadcast();
|
if (this.canScan) this.registerOrderScanBroadcast();
|
||||||
@@ -366,6 +368,7 @@ export default {
|
|||||||
const order = normalizeOrder(detail);
|
const order = normalizeOrder(detail);
|
||||||
this.applyOrder(order);
|
this.applyOrder(order);
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
this.showSuccess('保存成功,请开始扫码', '保存成功', { voiceOnly: true });
|
this.showSuccess('保存成功,请开始扫码', '保存成功', { voiceOnly: true });
|
||||||
this.registerOrderScanBroadcast();
|
this.registerOrderScanBroadcast();
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="order.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -30,6 +31,7 @@
|
|||||||
<text class="mr26">审核人</text>
|
<text class="mr26">审核人</text>
|
||||||
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessOutDetailList
|
<ProcessOutDetailList
|
||||||
:title="detailTitle"
|
:title="detailTitle"
|
||||||
@@ -43,6 +45,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import util from '@/common/util';
|
import util from '@/common/util';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessOutDetailList from '@/components/storegoods/ProcessOutDetailList.vue';
|
import ProcessOutDetailList from '@/components/storegoods/ProcessOutDetailList.vue';
|
||||||
import {
|
import {
|
||||||
@@ -53,10 +56,11 @@ import {
|
|||||||
} from '@/common/storeGoodsProcessOut';
|
} from '@/common/storeGoodsProcessOut';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { OrderStatusBar, FabricOutFooter, ProcessOutDetailList },
|
components: { OrderStatusBar, OrderHeaderFold, FabricOutFooter, ProcessOutDetailList },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
orderId: 0,
|
orderId: 0,
|
||||||
|
headerCollapsed: true,
|
||||||
order: { item_data: [] },
|
order: { item_data: [] },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -28,6 +29,7 @@
|
|||||||
<view style="margin-bottom: 8rpx;"><text>单据备注</text></view>
|
<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" />
|
<u-input v-model="form.remark" :disabled="!headerEditable" type="textarea" :border="true" :height="100" :auto-height="true" />
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInBinBar
|
<ProcessInBinBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
@@ -79,6 +81,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsProcessReturnInMixin.js';
|
import formMixin from './storeGoodsProcessReturnInMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
||||||
@@ -88,6 +91,7 @@ import ProcessInBinBar from '@/components/storegoods/ProcessInBinBar.vue';
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessInScanDetail,
|
ProcessInScanDetail,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -22,6 +23,7 @@
|
|||||||
<text class="mr26">单据备注</text>
|
<text class="mr26">单据备注</text>
|
||||||
<text>{{ form.remark || '-' }}</text>
|
<text>{{ form.remark || '-' }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInBinBar
|
<ProcessInBinBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
@@ -63,6 +65,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsProcessReturnInMixin.js';
|
import formMixin from './storeGoodsProcessReturnInMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
||||||
@@ -72,6 +75,7 @@ import ProcessInBinBar from '@/components/storegoods/ProcessInBinBar.vue';
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessInScanDetail,
|
ProcessInScanDetail,
|
||||||
@@ -79,6 +83,11 @@ export default {
|
|||||||
ProcessInBinBar,
|
ProcessInBinBar,
|
||||||
},
|
},
|
||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
headerCollapsed: true,
|
||||||
|
};
|
||||||
|
},
|
||||||
onLoad(e) {
|
onLoad(e) {
|
||||||
uni.setNavigationBarTitle({ title: '编辑加工退货进仓单' });
|
uni.setNavigationBarTitle({ title: '编辑加工退货进仓单' });
|
||||||
this.pageMode = 'edit';
|
this.pageMode = 'edit';
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ export default {
|
|||||||
orderId: 0,
|
orderId: 0,
|
||||||
form: this.getEmptyForm(),
|
form: this.getEmptyForm(),
|
||||||
headerSaved: false,
|
headerSaved: false,
|
||||||
|
headerCollapsed: false,
|
||||||
selectShow: false,
|
selectShow: false,
|
||||||
selectList: [],
|
selectList: [],
|
||||||
selectType: '',
|
selectType: '',
|
||||||
@@ -345,6 +346,7 @@ export default {
|
|||||||
this.orderId = order.id;
|
this.orderId = order.id;
|
||||||
this.auditStatus = order.audit_status;
|
this.auditStatus = order.audit_status;
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.form = orderToFormFields(order);
|
this.form = orderToFormFields(order);
|
||||||
this.clearWarehouseBin();
|
this.clearWarehouseBin();
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
@@ -417,6 +419,7 @@ export default {
|
|||||||
const order = normalizeOrder(detail);
|
const order = normalizeOrder(detail);
|
||||||
this.applyOrder(order);
|
this.applyOrder(order);
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.clearWarehouseBin();
|
this.clearWarehouseBin();
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
this.showSuccess('保存成功,请先扫描仓位', '保存成功', { voiceOnly: true });
|
this.showSuccess('保存成功,请先扫描仓位', '保存成功', { voiceOnly: true });
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="order.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -30,6 +31,7 @@
|
|||||||
<text class="mr26">审核人</text>
|
<text class="mr26">审核人</text>
|
||||||
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInDetailList
|
<ProcessInDetailList
|
||||||
:title="detailTitle"
|
:title="detailTitle"
|
||||||
@@ -43,6 +45,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import util from '@/common/util';
|
import util from '@/common/util';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInDetailList from '@/components/storegoods/ProcessInDetailList.vue';
|
import ProcessInDetailList from '@/components/storegoods/ProcessInDetailList.vue';
|
||||||
import {
|
import {
|
||||||
@@ -53,10 +56,11 @@ import {
|
|||||||
} from '@/common/storeGoodsProcessReturnIn';
|
} from '@/common/storeGoodsProcessReturnIn';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { OrderStatusBar, FabricOutFooter, ProcessInDetailList },
|
components: { OrderStatusBar, OrderHeaderFold, FabricOutFooter, ProcessInDetailList },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
orderId: 0,
|
orderId: 0,
|
||||||
|
headerCollapsed: true,
|
||||||
order: { item_data: [] },
|
order: { item_data: [] },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -62,6 +63,7 @@
|
|||||||
<view style="margin-bottom: 8rpx;"><text>单据备注</text></view>
|
<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" />
|
<u-input v-model="form.remark" :disabled="!headerEditable" type="textarea" :border="true" :height="100" :auto-height="true" />
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInBinBar
|
<ProcessInBinBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
@@ -114,6 +116,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsPurchaseInMixin.js';
|
import formMixin from './storeGoodsPurchaseInMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
||||||
@@ -123,6 +126,7 @@ import ProcessInBinBar from '@/components/storegoods/ProcessInBinBar.vue';
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessInScanDetail,
|
ProcessInScanDetail,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="form.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
<OrderStatusBar class="fabric-out-mt32" :status="displayAuditStatus" :name="displayAuditStatusName" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -50,6 +51,7 @@
|
|||||||
<text class="mr26">单据备注</text>
|
<text class="mr26">单据备注</text>
|
||||||
<text>{{ form.remark || '-' }}</text>
|
<text>{{ form.remark || '-' }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInBinBar
|
<ProcessInBinBar
|
||||||
:can-scan="canScan"
|
:can-scan="canScan"
|
||||||
@@ -92,6 +94,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import formMixin from './storeGoodsPurchaseInMixin.js';
|
import formMixin from './storeGoodsPurchaseInMixin.js';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
import FabricOutScanBar from '@/components/storefabric/FabricOutScanBar.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
import ProcessInScanDetail from '@/components/storegoods/ProcessInScanDetail.vue';
|
||||||
@@ -101,6 +104,7 @@ import ProcessInBinBar from '@/components/storegoods/ProcessInBinBar.vue';
|
|||||||
export default {
|
export default {
|
||||||
components: {
|
components: {
|
||||||
OrderStatusBar,
|
OrderStatusBar,
|
||||||
|
OrderHeaderFold,
|
||||||
FabricOutScanBar,
|
FabricOutScanBar,
|
||||||
FabricOutFooter,
|
FabricOutFooter,
|
||||||
ProcessInScanDetail,
|
ProcessInScanDetail,
|
||||||
@@ -110,6 +114,7 @@ export default {
|
|||||||
mixins: [formMixin],
|
mixins: [formMixin],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
headerCollapsed: true,
|
||||||
weightInputStyle: {
|
weightInputStyle: {
|
||||||
fontSize: '36rpx',
|
fontSize: '36rpx',
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ export default {
|
|||||||
orderId: 0,
|
orderId: 0,
|
||||||
form: this.getEmptyForm(),
|
form: this.getEmptyForm(),
|
||||||
headerSaved: false,
|
headerSaved: false,
|
||||||
|
headerCollapsed: false,
|
||||||
selectShow: false,
|
selectShow: false,
|
||||||
selectList: [],
|
selectList: [],
|
||||||
selectType: '',
|
selectType: '',
|
||||||
@@ -411,6 +412,7 @@ export default {
|
|||||||
this.orderId = order.id;
|
this.orderId = order.id;
|
||||||
this.auditStatus = order.audit_status;
|
this.auditStatus = order.audit_status;
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.form = orderToFormFields(order);
|
this.form = orderToFormFields(order);
|
||||||
this.clearWarehouseBin();
|
this.clearWarehouseBin();
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
@@ -499,6 +501,7 @@ export default {
|
|||||||
const order = normalizeOrder(detail);
|
const order = normalizeOrder(detail);
|
||||||
this.applyOrder(order, { keepWeights: true });
|
this.applyOrder(order, { keepWeights: true });
|
||||||
this.headerSaved = true;
|
this.headerSaved = true;
|
||||||
|
this.headerCollapsed = true;
|
||||||
this.clearWarehouseBin();
|
this.clearWarehouseBin();
|
||||||
this.syncCanScanFromStatus(order.audit_status);
|
this.syncCanScanFromStatus(order.audit_status);
|
||||||
this.showSuccess('保存成功,请先扫描仓位', '保存成功', { voiceOnly: true });
|
this.showSuccess('保存成功,请先扫描仓位', '保存成功', { voiceOnly: true });
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<view class="fabric-out-page">
|
<view class="fabric-out-page">
|
||||||
|
<OrderHeaderFold v-model="headerCollapsed" :summary="order.order_no">
|
||||||
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
<OrderStatusBar class="fabric-out-mt32" :status="order.audit_status" :name="order.audit_status_name" />
|
||||||
|
|
||||||
<view class="flex-white-plr26 ptb10 bdb_f5">
|
<view class="flex-white-plr26 ptb10 bdb_f5">
|
||||||
@@ -44,6 +45,7 @@
|
|||||||
<text class="mr26">审核人</text>
|
<text class="mr26">审核人</text>
|
||||||
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
<text>{{ order.auditor_name }} {{ formatTime(order.audit_time, 'YYYY-MM-DD') }}</text>
|
||||||
</view>
|
</view>
|
||||||
|
</OrderHeaderFold>
|
||||||
|
|
||||||
<ProcessInDetailList
|
<ProcessInDetailList
|
||||||
:title="detailTitle"
|
:title="detailTitle"
|
||||||
@@ -58,6 +60,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import util from '@/common/util';
|
import util from '@/common/util';
|
||||||
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
import OrderStatusBar from '@/components/storefabric/OrderStatusBar.vue';
|
||||||
|
import OrderHeaderFold from '@/components/storefabric/OrderHeaderFold.vue';
|
||||||
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
import FabricOutFooter from '@/components/storefabric/FabricOutFooter.vue';
|
||||||
import ProcessInDetailList from '@/components/storegoods/ProcessInDetailList.vue';
|
import ProcessInDetailList from '@/components/storegoods/ProcessInDetailList.vue';
|
||||||
import {
|
import {
|
||||||
@@ -68,10 +71,11 @@ import {
|
|||||||
} from '@/common/storeGoodsPurchaseIn';
|
} from '@/common/storeGoodsPurchaseIn';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
components: { OrderStatusBar, FabricOutFooter, ProcessInDetailList },
|
components: { OrderStatusBar, OrderHeaderFold, FabricOutFooter, ProcessInDetailList },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
orderId: 0,
|
orderId: 0,
|
||||||
|
headerCollapsed: true,
|
||||||
order: { item_data: [] },
|
order: { item_data: [] },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -111,7 +111,6 @@
|
|||||||
<view class="version-info">
|
<view class="version-info">
|
||||||
<text class="version-text">版本: {{ appVersion }}</text>
|
<text class="version-text">版本: {{ appVersion }}</text>
|
||||||
<text class="env-text" v-if="envName">({{ envName }})</text>
|
<text class="env-text" v-if="envName">({{ envName }})</text>
|
||||||
<text class="check-upgrade-btn" @click="checkUpgrade">{{ checkingUpgrade ? '检查中...' : '检查更新' }}</text>
|
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
</template>
|
</template>
|
||||||
@@ -139,7 +138,6 @@ export default {
|
|||||||
password: ""
|
password: ""
|
||||||
},
|
},
|
||||||
showApiUrlPicker: false,
|
showApiUrlPicker: false,
|
||||||
checkingUpgrade: false,
|
|
||||||
// 登录默认正式环境,本地已选过的地址仍会在 onShow 里恢复
|
// 登录默认正式环境,本地已选过的地址仍会在 onShow 里恢复
|
||||||
selectedApiUrl: (config.devApiUrlOptions.find(item => item.label === '正式环境') || {}).value || config.productionApiUrl,
|
selectedApiUrl: (config.devApiUrlOptions.find(item => item.label === '正式环境') || {}).value || config.productionApiUrl,
|
||||||
customApiUrl: 'http://192.168.1.66:50002/hcscm/pda/v1',
|
customApiUrl: 'http://192.168.1.66:50002/hcscm/pda/v1',
|
||||||
@@ -433,19 +431,8 @@ export default {
|
|||||||
autoCheckUpgrade() {
|
autoCheckUpgrade() {
|
||||||
this.runUpgradeCheck({ silentWhenLatest: true });
|
this.runUpgradeCheck({ silentWhenLatest: true });
|
||||||
},
|
},
|
||||||
// 手动检查版本更新
|
|
||||||
checkUpgrade() {
|
|
||||||
if (this.checkingUpgrade) return;
|
|
||||||
// #ifndef APP-PLUS
|
|
||||||
this.$u.toast('小程序端或H5端已是最新版,无需检查更新!');
|
|
||||||
// #endif
|
|
||||||
// #ifdef APP-PLUS
|
|
||||||
this.runUpgradeCheck({ silentWhenLatest: false });
|
|
||||||
// #endif
|
|
||||||
},
|
|
||||||
runUpgradeCheck({ silentWhenLatest }) {
|
runUpgradeCheck({ silentWhenLatest }) {
|
||||||
const self = this;
|
const self = this;
|
||||||
this.checkingUpgrade = true;
|
|
||||||
app_upgrade(async () => {
|
app_upgrade(async () => {
|
||||||
try {
|
try {
|
||||||
const appInfo = await new Promise((resolve) => {
|
const appInfo = await new Promise((resolve) => {
|
||||||
@@ -474,8 +461,6 @@ export default {
|
|||||||
self.$u.toast('检查更新失败,请稍后重试');
|
self.$u.toast('检查更新失败,请稍后重试');
|
||||||
}
|
}
|
||||||
return { status: 0 };
|
return { status: 0 };
|
||||||
} finally {
|
|
||||||
self.checkingUpgrade = false;
|
|
||||||
}
|
}
|
||||||
}, 1);
|
}, 1);
|
||||||
},
|
},
|
||||||
@@ -639,15 +624,6 @@ export default {
|
|||||||
color: #5473e8;
|
color: #5473e8;
|
||||||
margin-left: 10rpx;
|
margin-left: 10rpx;
|
||||||
}
|
}
|
||||||
|
|
||||||
.check-upgrade-btn {
|
|
||||||
font-size: 34rpx;
|
|
||||||
color: #5473e8;
|
|
||||||
margin-left: 24rpx;
|
|
||||||
padding: 16rpx 8rpx;
|
|
||||||
min-height: 64rpx;
|
|
||||||
line-height: 64rpx;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.login-env-picker {
|
.login-env-picker {
|
||||||
|
|||||||
Reference in New Issue
Block a user