feat(sip): 新增项目产品信息备份与恢复功能
- 添加 ProjectProductInfoBakService 接口定义备份和恢复方法 - 实现 ProjectProductInfoBakServiceImpl 类逻辑 - 提供 saveBakData 方法用于保存备份数据 - 提供 restoreData 方法用于恢复指定版本的数据 - 在恢复前校验备份数据是否存在dev_1.0.0
parent
2a9cf42a06
commit
d74613d83f
|
|
@ -72,8 +72,8 @@ export default {
|
||||||
title: process.env.VUE_APP_TITLE,
|
title: process.env.VUE_APP_TITLE,
|
||||||
codeUrl: "",
|
codeUrl: "",
|
||||||
loginForm: {
|
loginForm: {
|
||||||
username: "admin",
|
username: "",
|
||||||
password: "admin@123",
|
password: "",
|
||||||
rememberMe: false,
|
rememberMe: false,
|
||||||
code: ""
|
code: ""
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="目录单价(¥)" width="120" prop="cataloguePrice">
|
<el-table-column label="目录单价(¥)" width="120" prop="cataloguePrice">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-input v-model="scope.row.cataloguePriceFormat" readonly size="small"></el-input>
|
<el-input v-model="scope.row.cataloguePriceFormat" :readonly="!isCataloguePriceEditable(scope.row)" size="small" @blur="handleCataloguePriceChange(scope.row)"></el-input>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="指导折扣(%)" width="100" prop="guidanceDiscount">
|
<el-table-column label="指导折扣(%)" width="100" prop="guidanceDiscount">
|
||||||
|
|
@ -114,7 +114,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="目录单价(¥)" width="120" prop="cataloguePrice">
|
<el-table-column label="目录单价(¥)" width="120" prop="cataloguePrice">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-input v-model="scope.row.cataloguePriceFormat" readonly size="small"></el-input>
|
<el-input v-model="scope.row.cataloguePriceFormat" :readonly="!isCataloguePriceEditable(scope.row)" size="small" @blur="handleCataloguePriceChange(scope.row)"></el-input>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="指导折扣(%)" width="100" prop="guidanceDiscount">
|
<el-table-column label="指导折扣(%)" width="100" prop="guidanceDiscount">
|
||||||
|
|
@ -195,7 +195,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="目录单价(¥)" width="120" prop="cataloguePrice">
|
<el-table-column label="目录单价(¥)" width="120" prop="cataloguePrice">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-input v-model="scope.row.cataloguePriceFormat" readonly size="small"></el-input>
|
<el-input v-model="scope.row.cataloguePriceFormat" :readonly="!isCataloguePriceEditable(scope.row)" size="small" @blur="handleCataloguePriceChange(scope.row)"></el-input>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="指导折扣(%)" width="100" prop="guidanceDiscount">
|
<el-table-column label="指导折扣(%)" width="100" prop="guidanceDiscount">
|
||||||
|
|
@ -286,7 +286,8 @@ export default {
|
||||||
selectProductVisible: false,
|
selectProductVisible: false,
|
||||||
currentProductType: '1', // 1:软件 2:硬件 11,22,99:服务
|
currentProductType: '1', // 1:软件 2:硬件 11,22,99:服务
|
||||||
currentEditType: '', // software, hardware, maintenance
|
currentEditType: '', // software, hardware, maintenance
|
||||||
currentEditIndex: -1
|
currentEditIndex: -1,
|
||||||
|
editableProductBomCodes: ['8813A3YA','8813A3YB','8813A7U4','8813A7U2']
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|
@ -527,6 +528,21 @@ export default {
|
||||||
hardwareProjectProductInfoList: this.hardwareList,
|
hardwareProjectProductInfoList: this.hardwareList,
|
||||||
maintenanceProjectProductInfoList: this.maintenanceList
|
maintenanceProjectProductInfoList: this.maintenanceList
|
||||||
};
|
};
|
||||||
|
},
|
||||||
|
isCataloguePriceEditable(row) {
|
||||||
|
return !this.isActionDisabled && this.editableProductBomCodes.includes(row.productBomCode);
|
||||||
|
},
|
||||||
|
handleCataloguePriceChange(row) {
|
||||||
|
let cataloguePrice = parseFloat(String(row.cataloguePriceFormat).replace(/,/g, ''));
|
||||||
|
if (isNaN(cataloguePrice)) {
|
||||||
|
cataloguePrice = 0;
|
||||||
|
}
|
||||||
|
row.cataloguePrice = this.preciseCurrencyRound(cataloguePrice, 2);
|
||||||
|
row.cataloguePriceFormat = this.formatAmount(row.cataloguePrice);
|
||||||
|
|
||||||
|
// Recalculate based on new catalogue price
|
||||||
|
this.calculateRow(row);
|
||||||
|
this.emitChange();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -377,8 +377,8 @@ public class InventoryDeliveryServiceImpl implements IInventoryDeliveryService {
|
||||||
serviceInfo.setServiceLevel(productInfo.getProductBomCode());
|
serviceInfo.setServiceLevel(productInfo.getProductBomCode());
|
||||||
serviceInfo.setServiceDescribe(productInfo.getProductDesc());
|
serviceInfo.setServiceDescribe(productInfo.getProductDesc());
|
||||||
serviceInfo.setServiceStartTime(startTime);
|
serviceInfo.setServiceStartTime(startTime);
|
||||||
serviceInfo.setServiceEndTime(DateUtils.addYears(startTime, year));
|
|
||||||
startTime = DateUtils.addYears(startTime, year);
|
startTime = DateUtils.addYears(startTime, year);
|
||||||
|
serviceInfo.setServiceEndTime(DateUtils.addDays(startTime, -1));
|
||||||
serviceInfoList.add(serviceInfo);
|
serviceInfoList.add(serviceInfo);
|
||||||
return startTime;
|
return startTime;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue