feat(t215): add admin order authorization

This commit is contained in:
QiuSW
2026-07-28 12:50:42 +08:00
parent 16c2ea410a
commit 827afc7257
24 changed files with 2688 additions and 113 deletions
@@ -73,6 +73,108 @@
</aside>
</div>
{{if .Task.Candidates}}
<section class="content-section authorization-section" aria-labelledby="authorization-heading">
<div class="section-heading-row">
<div>
<h2 id="authorization-heading">候选确认与下单授权</h2>
<p class="section-note">选择只会授权设备创建一笔待付款订单,不授权付款。</p>
</div>
<span class="candidate-count">{{len .Task.Candidates}} 个候选</span>
</div>
{{if .Task.CanAuthorizeOrder}}
<form class="authorization-form" method="post"
action="/tasks/{{pathPart .Task.ID}}/order-authorizations">
<input type="hidden" name="csrf_token" value="{{.CSRFToken}}">
<input type="hidden" name="authorization_key" value="{{.AuthorizationKey}}">
<input type="hidden" name="expected_task_version" value="{{.Task.Version}}">
<input type="hidden" name="supersedes_authorization_id"
value="{{.Task.ActiveAuthorizationID}}">
<fieldset class="candidate-fieldset">
<legend>选择要采购的商品</legend>
<div class="authorization-candidates">
{{range .Task.Candidates}}
<label class="authorization-candidate">
<span class="candidate-choice">
<input type="radio" name="candidate_key" value="{{.CandidateKey}}" required>
<span>候选 {{.Ordinal}}</span>
</span>
<strong>{{.Title}}</strong>
<span>规格:{{if .SKUText}}{{.SKUText}}{{else}}未读取{{end}}</span>
<span>组合价格:{{if .PriceText}}{{.PriceText}}{{else}}未读取{{end}}</span>
<code class="candidate-key">{{.CandidateKey}}</code>
{{if .EvidenceURLs}}
<span class="candidate-evidence">
{{range .EvidenceURLs}}<img src="{{.}}" alt="候选受控证据截图">{{end}}
</span>
{{end}}
</label>
{{end}}
</div>
</fieldset>
<div class="authorization-reasons">
<label>
<span>所选候选理由</span>
<select name="selected_reason_code" required>
<option value="">请选择</option>
<option value="SKU_MATCH">SKU 匹配</option>
<option value="IMAGE_MATCH">图片匹配</option>
{{if .Task.MaxBudget}}<option value="PRICE_ACCEPTABLE">价格可接受</option>{{end}}
<option value="EVIDENCE_SUFFICIENT">证据充分</option>
</select>
</label>
<label>
<span>其余候选拒绝理由</span>
<select name="rejected_reason_code" required>
<option value="">请选择</option>
<option value="NOT_BEST_MATCH">不是最佳匹配</option>
<option value="SKU_MISMATCH">SKU 不匹配</option>
<option value="IMAGE_MISMATCH">图片不匹配</option>
{{if .Task.MaxBudget}}<option value="PRICE_TOO_HIGH">价格过高</option>{{end}}
<option value="OUT_OF_STOCK">无库存</option>
<option value="EVIDENCE_INSUFFICIENT">证据不足</option>
</select>
</label>
<label class="authorization-note">
<span>授权备注(可选)</span>
<textarea name="authorization_note" rows="3" maxlength="200"></textarea>
</label>
</div>
<label class="authorization-confirm">
<input type="checkbox" required>
<span>我确认商品、SKU、数量和证据;系统只创建待付款订单,付款由人员在拼多多完成。</span>
</label>
<button class="button primary" type="submit">
{{if .Task.ActiveAuthorizationID}}改选并创建新授权{{else}}确认商品并授权下单{{end}}
</button>
</form>
{{else}}
<p class="authorization-unavailable" role="status">
当前候选不能创建或修改授权,请查看下方授权状态或刷新任务。
</p>
{{end}}
{{if .Task.OrderAuthorizations}}
<h3>授权历史</h3>
<ol class="authorization-history">
{{range .Task.OrderAuthorizations}}
<li>
<strong>版本 {{.Version}} · {{.Status}}</strong>
<span>候选 {{.CandidateKey}}</span>
<span>规格 {{if .CandidateSKUText}}{{.CandidateSKUText}}{{else}}未读取{{end}} ·
数量 {{.Quantity}} · 价格 {{if .CandidatePriceText}}{{.CandidatePriceText}}{{else}}未读取{{end}}</span>
<time datetime="{{machineTime .CreatedAt}}">{{displayTime .CreatedAt}}</time>
</li>
{{end}}
</ol>
{{end}}
</section>
{{end}}
{{with .Task.ExecutionReport}}
<section class="content-section execution-audit" aria-labelledby="execution-audit-heading">
<h2 id="execution-audit-heading">执行审计</h2>