|
|
@@ -13,8 +13,8 @@
|
|
|
<ElCard v-for="(item, i) in items" :key="item.id" shadow="never" class="mb-4">
|
|
|
<ElForm :model="item" :rules="rules" inline ref="form" class="flex items-center">
|
|
|
<ElFormItem>
|
|
|
- <ElIcon class="drag-icon cursor-move" size="large">
|
|
|
- <ArrowsDownUp />
|
|
|
+ <ElIcon class="drag-icon cursor-move !text-neutral-500" size="large">
|
|
|
+ <Menu2 />
|
|
|
</ElIcon>
|
|
|
</ElFormItem>
|
|
|
<ElFormItem prop="type">
|
|
|
@@ -22,50 +22,54 @@
|
|
|
<ElOption v-for="key in TaskType" :key="key" :label="TaskType[key]" :value="key" />
|
|
|
</ElSelect>
|
|
|
</ElFormItem>
|
|
|
- <ElFormItem prop="amountType">
|
|
|
- <ElRadioGroup v-model="item.amountType">
|
|
|
- <ElRadio label="amount">随机金额</ElRadio>
|
|
|
- <ElRadio label="percent">随机百分比</ElRadio>
|
|
|
- </ElRadioGroup>
|
|
|
- </ElFormItem>
|
|
|
- <ElFormItem prop="amount" v-if="item.amountType === 'amount'">
|
|
|
- <ElInputNumber
|
|
|
- :controls="false"
|
|
|
- v-model="item.amount.min"
|
|
|
- class="!w-24"
|
|
|
- placeholder="最小金额"
|
|
|
- >
|
|
|
- </ElInputNumber>
|
|
|
- <div class="pl-2 pr-2">-</div>
|
|
|
- <ElInputNumber
|
|
|
- :controls="false"
|
|
|
- v-model="item.amount.max"
|
|
|
- class="!w-24"
|
|
|
- placeholder="最大金额"
|
|
|
- >
|
|
|
- </ElInputNumber>
|
|
|
- </ElFormItem>
|
|
|
- <ElFormItem prop="percent" v-else>
|
|
|
- <ElInputNumber
|
|
|
- :controls="false"
|
|
|
- v-model="item.percent.min"
|
|
|
- class="!w-24"
|
|
|
- placeholder="最小百分比"
|
|
|
- :min="1"
|
|
|
- :max="100"
|
|
|
- >
|
|
|
- </ElInputNumber>
|
|
|
- <div class="pl-2 pr-2">-</div>
|
|
|
- <ElInputNumber
|
|
|
- :controls="false"
|
|
|
- v-model="item.percent.max"
|
|
|
- class="!w-24"
|
|
|
- placeholder="最大百分比"
|
|
|
- :min="1"
|
|
|
- :max="100"
|
|
|
- >
|
|
|
- </ElInputNumber>
|
|
|
- </ElFormItem>
|
|
|
+
|
|
|
+ <template v-if="item.type !== 'removeLiquidity' && item.type !== 'mint'">
|
|
|
+ <ElFormItem prop="amountType">
|
|
|
+ <ElRadioGroup v-model="item.amountType">
|
|
|
+ <ElRadio label="amount">随机金额</ElRadio>
|
|
|
+ <ElRadio label="percent">随机百分比</ElRadio>
|
|
|
+ </ElRadioGroup>
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="amount" v-if="item.amountType === 'amount'">
|
|
|
+ <ElInputNumber
|
|
|
+ :controls="false"
|
|
|
+ v-model="item.amount.min"
|
|
|
+ class="!w-24"
|
|
|
+ placeholder="最小金额"
|
|
|
+ >
|
|
|
+ </ElInputNumber>
|
|
|
+ <div class="pl-2 pr-2">-</div>
|
|
|
+ <ElInputNumber
|
|
|
+ :controls="false"
|
|
|
+ v-model="item.amount.max"
|
|
|
+ class="!w-24"
|
|
|
+ placeholder="最大金额"
|
|
|
+ >
|
|
|
+ </ElInputNumber>
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="percent" v-else>
|
|
|
+ <ElInputNumber
|
|
|
+ :controls="false"
|
|
|
+ v-model="item.percent.min"
|
|
|
+ class="!w-24"
|
|
|
+ placeholder="最小百分比"
|
|
|
+ :min="1"
|
|
|
+ :max="100"
|
|
|
+ >
|
|
|
+ </ElInputNumber>
|
|
|
+ <div class="pl-2 pr-2">-</div>
|
|
|
+ <ElInputNumber
|
|
|
+ :controls="false"
|
|
|
+ v-model="item.percent.max"
|
|
|
+ class="!w-24"
|
|
|
+ placeholder="最大百分比"
|
|
|
+ :min="1"
|
|
|
+ :max="100"
|
|
|
+ >
|
|
|
+ </ElInputNumber>
|
|
|
+ </ElFormItem>
|
|
|
+ </template>
|
|
|
+
|
|
|
<div class="flex-1"></div>
|
|
|
<ElFormItem class="">
|
|
|
<ElButton :icon="TrashX" type="danger" @click="removeItem(i)">删除</ElButton>
|
|
|
@@ -74,30 +78,34 @@
|
|
|
</ElCard>
|
|
|
</VueDraggable>
|
|
|
|
|
|
- <ElButton @click="addItem">添加</ElButton>
|
|
|
- <div class="text-xs mt-4 flex items-center">
|
|
|
- <div class="mr-2">随机延迟</div>
|
|
|
- <ElInputNumber
|
|
|
- :controls="false"
|
|
|
- v-model="delay.min"
|
|
|
- class="!w-24"
|
|
|
- placeholder="最小"
|
|
|
- :min="1"
|
|
|
- :max="100"
|
|
|
- >
|
|
|
- </ElInputNumber>
|
|
|
- <div class="pl-2 pr-2">-</div>
|
|
|
- <ElInputNumber
|
|
|
- :controls="false"
|
|
|
- v-model="delay.max"
|
|
|
- class="!w-24"
|
|
|
- placeholder="最大"
|
|
|
- :min="1"
|
|
|
- :max="100"
|
|
|
- >
|
|
|
- </ElInputNumber>
|
|
|
- <div class="ml-2">秒</div>
|
|
|
- </div>
|
|
|
+ <ElButton @click="addItem" :icon="Plus" type="primary" plain>添加</ElButton>
|
|
|
+ <ElForm class="mt-4" :model="data" ref="form1" :rules="rules1" inline label-position="right">
|
|
|
+ <ElFormItem prop="startTime" label="开始时间">
|
|
|
+ <ElDatePicker class="ml-2" type="datetime" v-model="data.startTime" placeholder="请选择" />
|
|
|
+ </ElFormItem>
|
|
|
+ <ElFormItem prop="delay" label="随机延迟">
|
|
|
+ <ElInputNumber
|
|
|
+ :controls="false"
|
|
|
+ v-model="data.delay.min"
|
|
|
+ class="!w-24"
|
|
|
+ placeholder="最小"
|
|
|
+ :min="1"
|
|
|
+ :max="100"
|
|
|
+ >
|
|
|
+ </ElInputNumber>
|
|
|
+ <div class="pl-2 pr-2">-</div>
|
|
|
+ <ElInputNumber
|
|
|
+ :controls="false"
|
|
|
+ v-model="data.delay.max"
|
|
|
+ class="!w-24"
|
|
|
+ placeholder="最大"
|
|
|
+ :min="1"
|
|
|
+ :max="100"
|
|
|
+ >
|
|
|
+ </ElInputNumber>
|
|
|
+ <div class="ml-2">秒</div>
|
|
|
+ </ElFormItem>
|
|
|
+ </ElForm>
|
|
|
<template #footer>
|
|
|
<ElButton @click="onClose">取消</ElButton>
|
|
|
<ElButton type="primary" @click="createTask" :loading="creatingTask">确定</ElButton>
|
|
|
@@ -108,19 +116,24 @@
|
|
|
<script setup>
|
|
|
import { ref } from 'vue'
|
|
|
import { TaskType } from '@/enums'
|
|
|
-import { TrashX, ArrowsDownUp, Menu2 } from '@vicons/tabler'
|
|
|
+import { TrashX, ArrowsDownUp, Menu2, Plus } from '@vicons/tabler'
|
|
|
import { VueDraggable } from 'vue-draggable-plus'
|
|
|
import { ElMessage } from 'element-plus'
|
|
|
import { http } from '@/plugins/http'
|
|
|
+import { useStorage } from '@vueuse/core'
|
|
|
|
|
|
const props = defineProps(['modelValue', 'accounts'])
|
|
|
const emit = defineEmits(['update:modelValue', 'createTask'])
|
|
|
const creatingTask = ref(false)
|
|
|
const form = ref(null)
|
|
|
+const form1 = ref(null)
|
|
|
const items = ref([])
|
|
|
-const delay = ref({
|
|
|
- min: 5,
|
|
|
- max: 10
|
|
|
+const data = ref({
|
|
|
+ startTime: null,
|
|
|
+ delay: {
|
|
|
+ min: 5,
|
|
|
+ max: 10
|
|
|
+ }
|
|
|
})
|
|
|
const rules = {
|
|
|
type: [{ required: true, message: '请选择任务类型', trigger: 'blur' }],
|
|
|
@@ -154,6 +167,23 @@ const rules = {
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
+const rules1 = {
|
|
|
+ startTime: [{ required: true, message: '请选择开始时间', trigger: 'blur' }],
|
|
|
+ delay: [
|
|
|
+ {
|
|
|
+ validator: (rule, value, callback) => {
|
|
|
+ if (value.min === null || value.max === null) {
|
|
|
+ return callback(new Error('请输入最小延迟和最大延迟'))
|
|
|
+ }
|
|
|
+ if (value.min > value.max) {
|
|
|
+ return callback(new Error('最小延迟不能大于最大延迟'))
|
|
|
+ }
|
|
|
+ callback()
|
|
|
+ },
|
|
|
+ trigger: 'blur'
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
function onClose() {
|
|
|
emit('update:modelValue', false)
|
|
|
}
|
|
|
@@ -193,9 +223,15 @@ async function createTask() {
|
|
|
if (!valid) {
|
|
|
return
|
|
|
}
|
|
|
+ await form1.value.validate()
|
|
|
creatingTask.value = true
|
|
|
try {
|
|
|
- await http.put('/tasks')
|
|
|
+ await http.put('/tasks', {
|
|
|
+ accounts: props.accounts.map((item) => item.id),
|
|
|
+ items: items.value.map((i) => ({ ...i })),
|
|
|
+ startTime: data.value.startTime,
|
|
|
+ delay: data.value.delay
|
|
|
+ })
|
|
|
creatingTask.value = false
|
|
|
emit('update:modelValue', false)
|
|
|
ElMessage.success('创建成功')
|