|
@@ -76,10 +76,10 @@
|
|
|
</el-input>
|
|
</el-input>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
- <!-- 序号:前端自己渲染行号 -->
|
|
|
|
|
- <template v-slot:rowIndex="{ $index }">{{
|
|
|
|
|
- (currentPage - 1) * currentLimit + $index + 1
|
|
|
|
|
- }}</template>
|
|
|
|
|
|
|
+ <!-- 序号:按层级单独计数(同层 1、2、3…,层级变了重新从 1 开始) -->
|
|
|
|
|
+ <template v-slot:rowIndex="{ row, $index }">
|
|
|
|
|
+ {{ levelSeqMap[row.id] != null ? levelSeqMap[row.id] : levelSeq(row, $index) }}
|
|
|
|
|
+ </template>
|
|
|
|
|
|
|
|
<!-- 总重:前端按 用量 × 单重 计算(用量/单重改了立即跟着变) -->
|
|
<!-- 总重:前端按 用量 × 单重 计算(用量/单重改了立即跟着变) -->
|
|
|
<template v-slot:totalWeight="{ row }">{{ totalWeightOf(row) }}</template>
|
|
<template v-slot:totalWeight="{ row }">{{ totalWeightOf(row) }}</template>
|
|
@@ -300,13 +300,17 @@
|
|
|
|
|
|
|
|
data() {
|
|
data() {
|
|
|
return {
|
|
return {
|
|
|
- // 当前分页位置:序号跨页连续(第 2 页从 21 开始,不重置)
|
|
|
|
|
|
|
+ // 当前分页位置
|
|
|
currentPage: 1,
|
|
currentPage: 1,
|
|
|
currentLimit: 20,
|
|
currentLimit: 20,
|
|
|
|
|
+ // 层级序号:rowId -> 该行在“同层级”里的序号(跨页连续)
|
|
|
|
|
+ levelSeqMap: {},
|
|
|
|
|
+ levelSeqKey: '',
|
|
|
produceTypeList,
|
|
produceTypeList,
|
|
|
clientEnvironmentId: this.$store.state.user.info.clientEnvironmentId,
|
|
clientEnvironmentId: this.$store.state.user.info.clientEnvironmentId,
|
|
|
// 是否启用新 columns 方案(true=新方案,false=老方案)
|
|
// 是否启用新 columns 方案(true=新方案,false=老方案)
|
|
|
- useNewColumns: false,
|
|
|
|
|
|
|
+ // 是否启用新 columns 方案(true=新方案,false=老方案);层级序号只在新方案生效
|
|
|
|
|
+ useNewColumns: true,
|
|
|
pagination: {
|
|
pagination: {
|
|
|
tableTotal: 0
|
|
tableTotal: 0
|
|
|
},
|
|
},
|
|
@@ -839,6 +843,53 @@
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
methods: {
|
|
methods: {
|
|
|
|
|
+ // 拉整棵树的清单,算出每行在“同层级”里的序号(跨页也连续)
|
|
|
|
|
+ async ensureLevelSeqMap(where) {
|
|
|
|
|
+ const attr = this.attributeData || {};
|
|
|
|
|
+ const key = [attr.id, attr.bomType, JSON.stringify(where || {})].join('|');
|
|
|
|
|
+ if (this.levelSeqKey === key) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ const res = await getBomPageCategoryId({
|
|
|
|
|
+ ...(where || {}),
|
|
|
|
|
+ pageNum: 1,
|
|
|
|
|
+ size: 100000,
|
|
|
|
|
+ id: attr.id,
|
|
|
|
|
+ bomType: attr.bomType
|
|
|
|
|
+ });
|
|
|
|
|
+ const map = {};
|
|
|
|
|
+ const counters = {};
|
|
|
|
|
+ ((res && res.list) || []).forEach((item) => {
|
|
|
|
|
+ const level = String(item.level == null ? '' : item.level);
|
|
|
|
|
+ counters[level] = (counters[level] || 0) + 1;
|
|
|
|
|
+ map[item.id] = counters[level];
|
|
|
|
|
+ });
|
|
|
|
|
+ this.levelSeqMap = map;
|
|
|
|
|
+ this.levelSeqKey = key;
|
|
|
|
|
+ } catch (e) {
|
|
|
|
|
+ // 取不到就退化成“当前页内按层级计数”
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+ // 兜底:当前页内按层级计数(同层 1、2、3…,层级变了重新从 1 开始)
|
|
|
|
|
+ // 例:层级 1、1、2、2 → 序号 1、2、1、2
|
|
|
|
|
+ levelSeq(row, index) {
|
|
|
|
|
+ const table = this.$refs.table;
|
|
|
|
|
+ const rows = (table && typeof table.getData === 'function' && table.getData()) || [];
|
|
|
|
|
+ const level = row ? String(row.level == null ? '' : row.level) : '';
|
|
|
|
|
+ let seq = 0;
|
|
|
|
|
+ const end = Math.min(index, rows.length - 1);
|
|
|
|
|
+ for (let i = 0; i <= end; i++) {
|
|
|
|
|
+ const current = rows[i];
|
|
|
|
|
+ const currentLevel = current ? String(current.level == null ? '' : current.level) : '';
|
|
|
|
|
+ if (currentLevel === level) {
|
|
|
|
|
+ seq += 1;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return seq;
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
// 总重 = 单台用量 × 单重(前端计算)
|
|
// 总重 = 单台用量 × 单重(前端计算)
|
|
|
totalWeightOf(row) {
|
|
totalWeightOf(row) {
|
|
|
const toNumber = (v) =>
|
|
const toNumber = (v) =>
|
|
@@ -902,18 +953,10 @@
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
// 根据系统参数 is_runtian 判断是否启用新 columns 方案
|
|
// 根据系统参数 is_runtian 判断是否启用新 columns 方案
|
|
|
- // 兼容常见返回:'1' / 1 / { value: 1 } / { paramValue: '1' } / true
|
|
|
|
|
|
|
+ // 是否启用新 columns 方案这里固定为 true(层级序号只在新方案生效),
|
|
|
|
|
+ // 不再根据系统参数 is_runtian 覆盖。
|
|
|
async getRuntianConfig() {
|
|
async getRuntianConfig() {
|
|
|
- try {
|
|
|
|
|
- const data = await parameterGetByCode({ code: 'is_runtian' });
|
|
|
|
|
- const val =
|
|
|
|
|
- typeof data === 'object' && data !== null
|
|
|
|
|
- ? data.value ?? data.paramValue ?? data.val
|
|
|
|
|
- : data;
|
|
|
|
|
- this.useNewColumns = val === '1' || val === 1 || val === true;
|
|
|
|
|
- } catch (e) {
|
|
|
|
|
- this.useNewColumns = false;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ this.useNewColumns = true;
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
rootCategoryLevelIdText(v) {
|
|
rootCategoryLevelIdText(v) {
|
|
@@ -1050,6 +1093,9 @@
|
|
|
bomType: this.attributeData.bomType
|
|
bomType: this.attributeData.bomType
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ // 序号按层级计数且跨页连续:拉一次整棵树的清单算出每行在同层级里的序号
|
|
|
|
|
+ await this.ensureLevelSeqMap(where);
|
|
|
|
|
+
|
|
|
if (this.isList) {
|
|
if (this.isList) {
|
|
|
data = this.listTow;
|
|
data = this.listTow;
|
|
|
}
|
|
}
|