<template>
|
<div class="bid-task-adder">
|
<h2>测试数据添加器</h2>
|
|
<!-- 历史记录选择 -->
|
<HistorySelector
|
v-if="history.length > 0"
|
v-model="selectedHistoryItem"
|
:history-items="history"
|
@selected="handleSelected"
|
/>
|
|
|
<form @submit.prevent="addBidTask">
|
<div class="form-group">
|
<label for="goodsId">商品ID</label>
|
<input
|
id="goodsId"
|
v-model="formData.goodsId"
|
type="text"
|
required
|
placeholder="例如:T000001"
|
/>
|
</div>
|
|
<div class="form-group">
|
<label for="bid">出价</label>
|
<input
|
id="bid"
|
v-model="formData.bid"
|
type="text"
|
required
|
placeholder="例如:600.00"
|
/>
|
</div>
|
|
<div class="form-group">
|
<label for="taskType">任务类型</label>
|
<select id="taskType" v-model.number="formData.taskType" required>
|
<option value="0">0 - 竞拍</option>
|
<option value="1">1 - 一口价购买</option>
|
</select>
|
</div>
|
|
<div class="form-group">
|
<label for="taskName">取名</label>
|
<input
|
id="taskName"
|
v-model="formData.name"
|
type="text"
|
/>
|
</div>
|
|
<button type="submit" :disabled="isLoading">
|
{{ isLoading ? '提交中...' : '添加出价任务' }}
|
</button>
|
<button @click="clearHistory">清除历史记录</button>
|
</form>
|
|
<div v-if="response" class="response">
|
<h3>响应结果</h3>
|
<pre>{{ JSON.stringify(response, null, 2) }}</pre>
|
</div>
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import './App.scss'
|
import {onMounted, reactive, ref} from 'vue';
|
import {BidFormData, Db} from "/src-com";
|
import HistorySelector from './components/HistorySelector.vue';
|
import {copyObject} from "gs-base";
|
import {Delete} from "gs-idb-pro";
|
|
|
interface ResponseData {
|
code: number;
|
message: string;
|
data: any;
|
}
|
|
const formData = reactive<BidFormData>({
|
goodsId: '',
|
bid: '',
|
taskType: 0,
|
params: {}
|
});
|
|
const paramsJson = ref('');
|
const isLoading = ref(false);
|
const response = ref<ResponseData | null>(null);
|
const history = ref<BidFormData[]>([]);
|
const selectedHistoryItem = ref<BidFormData | null>(null);
|
|
onMounted(async () => {
|
history.value = await Db.bidTaskAddedHistory.all();
|
// 如果有历史记录,设置最后一条为默认值
|
if (history.value.length > 0) {
|
const lastItem = history.value[history.value.length - 1];
|
loadHistoryDataFromItem(lastItem);
|
}
|
});
|
|
function handleSelected(e) {
|
loadHistoryDataFromItem(e);
|
}
|
|
// 从历史数据项加载数据到表单
|
const loadHistoryDataFromItem = (item: BidFormData) => {
|
formData.goodsId = item.goodsId;
|
formData.bid = item.bid;
|
formData.taskType = item.taskType;
|
formData.name = item.name;
|
formData.params = item.params || {};
|
paramsJson.value = JSON.stringify(formData.params, null, 2);
|
};
|
|
// 清除历史记录
|
const clearHistory = async () => {
|
try {
|
await Db.bidTaskAddedHistory.cursor(() => ({modify: Delete}))
|
history.value = [];
|
} catch (e: any) {
|
console.log(e)
|
}
|
}
|
|
|
const addBidTask = async () => {
|
try {
|
// 解析params JSON
|
if (paramsJson.value) {
|
formData.params = JSON.parse(paramsJson.value);
|
} else {
|
formData.params = {};
|
}
|
try {
|
const obj = copyObject(formData)
|
await Db.bidTaskAddedHistory.add(obj);
|
history.value.push(obj)
|
} catch (e: any) {
|
console.log(e, formData)
|
}
|
|
isLoading.value = true;
|
response.value = null;
|
|
const res = await fetch('https://adminapi.wakuwaku.asia/api/task/addBid', {
|
method: 'POST',
|
headers: {
|
'Content-Type': 'application/json'
|
},
|
body: JSON.stringify(formData)
|
});
|
|
const result = await res.json();
|
response.value = result;
|
|
if (result.code === 200) {
|
// 重置表单
|
formData.goodsId = '';
|
formData.bid = '';
|
formData.taskType = 0;
|
paramsJson.value = '';
|
}
|
} catch (error) {
|
response.value = {
|
code: 500,
|
message: `请求失败:${error instanceof Error ? error.message : String(error)}`,
|
data: null
|
};
|
} finally {
|
isLoading.value = false;
|
}
|
};
|
</script>
|