|
@@ -59,7 +59,7 @@
|
|
|
<view class="section" v-if="outputData.length > 0">
|
|
|
|
|
|
<div style="display: flex;justify-content: space-between;" >
|
|
|
- <text class="section-title">输出, 计算时间 {{}} ms </text>
|
|
|
+ <text class="section-title">输出, 计算时间 {{ time }} ms </text>
|
|
|
<span>差额: {{ powerDifference }}</span>
|
|
|
</div>
|
|
|
|
|
@@ -70,13 +70,13 @@
|
|
|
|
|
|
|
|
|
<el-table-column label="目标角色">
|
|
|
- <el-table-column label="性别" min-width="60px" prop="targetGender" />
|
|
|
- <el-table-column label="势力" min-width="60px" prop="targetPower" />
|
|
|
+ <el-table-column label="公" min-width="60px" prop="targetMale" />
|
|
|
+ <el-table-column label="母" min-width="60px" prop="targetFemale" />
|
|
|
</el-table-column>
|
|
|
|
|
|
<el-table-column label="备选角色">
|
|
|
- <el-table-column label="性别" min-width="60px" prop="backupGender" />
|
|
|
- <el-table-column label="势力" min-width="60px" prop="backupPower" />
|
|
|
+ <el-table-column label="公" min-width="60px" prop="backupMale" />
|
|
|
+ <el-table-column label="母" min-width="60px" prop="backupFemale" />
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
</view>
|
|
@@ -114,6 +114,7 @@ import { ElMessage } from "element-plus"
|
|
|
|
|
|
const gender = ref("")
|
|
|
const powers = ref("")
|
|
|
+const time = ref("")
|
|
|
|
|
|
const malePowers = ref('')
|
|
|
const feMalePowers = ref('')
|
|
@@ -122,130 +123,7 @@ const role = ref("")
|
|
|
const type = ref('')
|
|
|
|
|
|
const mockData = [
|
|
|
- {
|
|
|
- "backupFemale": "180",
|
|
|
- "backupMale": "174",
|
|
|
- "targetFemale": "121",
|
|
|
- "targetMale": "153"
|
|
|
- },
|
|
|
- {
|
|
|
- "backupFemale": "165",
|
|
|
- "backupMale": "152",
|
|
|
- "targetFemale": "118",
|
|
|
- "targetMale": "91"
|
|
|
- },
|
|
|
- {
|
|
|
- "backupFemale": "158",
|
|
|
- "backupMale": "147",
|
|
|
- "targetFemale": "115",
|
|
|
- "targetMale": "77"
|
|
|
- },
|
|
|
- {
|
|
|
- "backupFemale": "154",
|
|
|
- "backupMale": "102",
|
|
|
- "targetFemale": "86",
|
|
|
- "targetMale": "138"
|
|
|
- },
|
|
|
- {
|
|
|
- "backupFemale": "152",
|
|
|
- "backupMale": "101",
|
|
|
- "targetFemale": "84",
|
|
|
- "targetMale": "90"
|
|
|
- },
|
|
|
- {
|
|
|
- "backupFemale": "151",
|
|
|
- "backupMale": "98",
|
|
|
- "targetFemale": "84",
|
|
|
- "targetMale": "80"
|
|
|
- },
|
|
|
- {
|
|
|
- "backupFemale": "150",
|
|
|
- "backupMale": "98",
|
|
|
- "targetMale": "60",
|
|
|
- "targetFemale": "59"
|
|
|
- },
|
|
|
- {
|
|
|
- "backupFemale": "150",
|
|
|
- "backupMale": "97",
|
|
|
- "targetMale": "54",
|
|
|
- "targetFemale": "53"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": "52",
|
|
|
- "targetFemale": "51",
|
|
|
- "backupMale": "62",
|
|
|
- "backupFemale": "102"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": "52",
|
|
|
- "backupMale": "60",
|
|
|
- "backupFemale": "101"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": "52",
|
|
|
- "backupMale": "58",
|
|
|
- "backupFemale": "101"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": "19",
|
|
|
- "backupFemale": "93"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "61"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "30"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "30"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "29"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "29"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "29"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "27"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "10"
|
|
|
- },
|
|
|
- {
|
|
|
- "targetMale": null,
|
|
|
- "targetFemale": null,
|
|
|
- "backupMale": null,
|
|
|
- "backupFemale": "10"
|
|
|
- }
|
|
|
+
|
|
|
]
|
|
|
|
|
|
const inputData = ref(mockData);
|
|
@@ -266,6 +144,7 @@ function editRow(_gender, _role) {
|
|
|
|
|
|
|
|
|
function switchRoles(){
|
|
|
+ outputData.value = []
|
|
|
// const cloneInputData = inputData.value.map(item => ({ ...item }))
|
|
|
const backups = inputData.value.map(item => ({ male: item.backupMale, female: item.backupFemale }))
|
|
|
const targets = inputData.value.map(item => ({ male: item.targetMale, female: item.targetFemale }))
|
|
@@ -407,6 +286,9 @@ function getCombinations(arr, num) {
|
|
|
|
|
|
|
|
|
function calculateBestMatch() {
|
|
|
+ let startTime = new Date().getTime()
|
|
|
+ let endTime = null
|
|
|
+
|
|
|
outputData.value = []
|
|
|
|
|
|
const targetData = []
|
|
@@ -433,6 +315,21 @@ function calculateBestMatch() {
|
|
|
// const targetFemale = [86, 84, 84];
|
|
|
// const backupMale = [153, 91, 77];
|
|
|
// const backupFemale = [121, 118, 115];
|
|
|
+ if(targetFemale.length + targetFemale.length > 20){
|
|
|
+ ElMessage.warning('目标角色公数据与母数据的和不能超过20条')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if(backupMale.length > 20){
|
|
|
+ ElMessage.warning('备选角色的公数据不能超过20条')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if(backupFemale.length > 20){
|
|
|
+ ElMessage.warning('备选角色的母数据不能超过20条')
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
if (targetFemale.length > backupMale.length && backupMale.length !== 0){
|
|
|
ElMessage.warning('备选角色的公数据长度必须大于或等于目标角色的母数据')
|
|
@@ -522,32 +419,42 @@ function calculateBestMatch() {
|
|
|
|
|
|
bestfemaleCombination && targetMale.forEach((_, index) => {
|
|
|
outputData.value.push({
|
|
|
- targetGender: '公',
|
|
|
- targetPower: targetMale[index],
|
|
|
- backupGender: '母',
|
|
|
- backupPower: bestfemaleCombination[index]
|
|
|
+ targetMale: targetMale[index],
|
|
|
+ targetFemale: null,
|
|
|
+ backupMale: null,
|
|
|
+ backupFemale: bestfemaleCombination[index]
|
|
|
})
|
|
|
})
|
|
|
-
|
|
|
- bestMaleCombination && targetFemale.forEach((_, index) => {
|
|
|
- outputData.value.push({
|
|
|
- targetGender: '母',
|
|
|
- targetPower: targetFemale[index],
|
|
|
- backupGender: '公',
|
|
|
- backupPower: bestMaleCombination[index]
|
|
|
- })
|
|
|
- })
|
|
|
-
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+ const ml = targetMale.length
|
|
|
+ const fl = targetFemale.length
|
|
|
+
|
|
|
+ for(let index = 0; index < fl; index ++){
|
|
|
+ if(outputData.value[index]){
|
|
|
+ outputData.value[index].targetFemale = targetFemale[index]
|
|
|
+ outputData.value[index].backupMale = bestMaleCombination[index]
|
|
|
+ } else {
|
|
|
+ outputData.value.push({
|
|
|
+ targetMale: null,
|
|
|
+ targetFemale: targetFemale[index],
|
|
|
+ backupMale: bestMaleCombination[index],
|
|
|
+ backupFemale: null
|
|
|
+ })
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
outputData.value.push({
|
|
|
- targetGender: '',
|
|
|
- targetPower: outputData.value.reduce((prev, current) => prev + current.targetPower,0),
|
|
|
- backupGender: '',
|
|
|
- backupPower: outputData.value.reduce((prev, current) => prev + current.backupPower, 0),
|
|
|
+ targetMale: outputData.value.reduce((prev, current) => prev + current.targetMale,0),
|
|
|
+ targetFemale: outputData.value.reduce((prev, current) => prev + current.targetFemale,0),
|
|
|
+ backupMale: outputData.value.reduce((prev, current) => prev + current.backupMale,0),
|
|
|
+ backupFemale: outputData.value.reduce((prev, current) => prev + current.backupFemale,0)
|
|
|
})
|
|
|
|
|
|
powerDifference.value = minDifference
|
|
|
+ endTime = new Date().getTime()
|
|
|
+ time.value = endTime - startTime
|
|
|
}
|
|
|
</script>
|
|
|
|