Files
pk-lab-xhs/pages/test/test.js
T
codex-bot 350aae797f
Verify mini program and deploy preview / verify-deploy (push) Failing after 34s
feat: launch PK testing application
2026-09-18 21:50:25 +08:00

69 lines
2.5 KiB
JavaScript

var api = require('../../utils/api');
var bracket = require('../../utils/bracket');
Page({
data: { loading: true, error: '', test: null, left: null, right: null, round: 1, progress: 0, completed: 0, totalDecisions: 0 },
onLoad: function (options) {
this.slug = options.slug;
this.load();
},
load: function () {
var self = this;
api.request('/api/v1/tests/' + this.slug).then(function (test) {
self.test = test;
self.state = bracket.create(test.candidates);
self.totalDecisions = test.candidates.length - 1;
self.refreshPair();
self.setData({ loading: false, test: test, totalDecisions: self.totalDecisions });
}).catch(function (error) { self.setData({ loading: false, error: error.message || '加载失败' }); });
},
refreshPair: function () {
var pair = bracket.current(this.state);
this.setData({
left: pair && pair[0],
right: pair && pair[1],
round: this.state.round,
completed: this.state.decisions.length,
progress: Math.round(this.state.decisions.length / this.totalDecisions * 100)
});
},
choose: function (event) {
if (this.choosing) return;
this.choosing = true;
var side = event.currentTarget.dataset.side;
var winner = side === 'left' ? this.data.left : this.data.right;
var finished = bracket.choose(this.state, winner);
if (finished) this.complete();
else {
this.refreshPair();
this.choosing = false;
}
},
complete: function () {
var self = this;
var champion = this.state.pool[0];
var finalDecision = this.state.decisions[this.state.decisions.length - 1];
var runnerUpId = finalDecision.left_id === champion.id ? finalDecision.right_id : finalDecision.left_id;
this.setData({ progress: 100, submitting: true });
api.ensureLogin().then(function () {
return api.request('/api/v1/tests/' + self.slug + '/runs', {
method: 'POST',
data: {
app_key: 'hub',
champion_id: champion.id,
runner_up_id: runnerUpId,
ranking_ids: bracket.ranking(self.state),
decisions: self.state.decisions
}
});
}).then(function (result) {
xhs.setStorageSync('pk_last_result', result);
xhs.redirectTo({ url: '/pages/result/result?id=' + result.id });
}).catch(function (error) {
self.choosing = false;
self.setData({ submitting: false });
xhs.showModal({ title: '结果保存失败', content: error.message || '请检查网络后重试', showCancel: false });
});
}
});