|
@@ -0,0 +1,187 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="part-box" :style="{ minHeight: '300px' }">
|
|
|
|
+ <a-form ref="formRef" :model="formData" :rules="rules" auto-label-width>
|
|
|
|
+ <a-form-item field="name" label="预约任务名称">
|
|
|
|
+ <a-input
|
|
|
|
+ v-model.trim="formData.name"
|
|
|
|
+ placeholder="请输入"
|
|
|
|
+ allow-clear
|
|
|
|
+ ></a-input>
|
|
|
|
+ </a-form-item>
|
|
|
|
+ <a-form-item field="allowApplyDays" label="开放预约限制">
|
|
|
|
+ <span>考前</span>
|
|
|
|
+ <a-input-number
|
|
|
|
+ v-model="formData.allowApplyDays"
|
|
|
|
+ :style="{ width: '120px', margin: '0 10px' }"
|
|
|
|
+ placeholder="请输入"
|
|
|
|
+ mode="button"
|
|
|
|
+ :min="1"
|
|
|
|
+ :max="999"
|
|
|
|
+ :step="1"
|
|
|
|
+ />
|
|
|
|
+ <span>天,禁止考生自主预约</span>
|
|
|
|
+ </a-form-item>
|
|
|
|
+ <a-form-item field="allowApplyCancelDays" label="取消预约限制">
|
|
|
|
+ <span>考前</span>
|
|
|
|
+ <a-input-number
|
|
|
|
+ v-model="formData.allowApplyCancelDays"
|
|
|
|
+ :style="{ width: '120px', margin: '0 10px' }"
|
|
|
|
+ placeholder="请输入"
|
|
|
|
+ mode="button"
|
|
|
|
+ :min="1"
|
|
|
|
+ :max="999"
|
|
|
|
+ :step="1"
|
|
|
|
+ />
|
|
|
|
+ <span>天,禁止考生自主预约</span>
|
|
|
|
+ </a-form-item>
|
|
|
|
+ <a-form-item field="selfApplyStartTime" label="第一阶段开启时间">
|
|
|
|
+ <select-range-datetime
|
|
|
|
+ v-model="formData"
|
|
|
|
+ :keys="{
|
|
|
|
+ startTime: 'selfApplyStartTime',
|
|
|
|
+ endTime: 'selfApplyEndTime',
|
|
|
|
+ }"
|
|
|
|
+ >
|
|
|
|
+ </select-range-datetime>
|
|
|
|
+ <template #extra>
|
|
|
|
+ <div>本阶段考生只能预约所属教学点下的考点</div>
|
|
|
|
+ </template>
|
|
|
|
+ </a-form-item>
|
|
|
|
+ <a-form-item field="openApplyStartTime" label="第三阶段开启时间">
|
|
|
|
+ <select-range-datetime
|
|
|
|
+ v-model="formData"
|
|
|
|
+ :keys="{
|
|
|
|
+ startTime: 'openApplyStartTime',
|
|
|
|
+ endTime: 'openApplyEndTime',
|
|
|
|
+ }"
|
|
|
|
+ >
|
|
|
|
+ </select-range-datetime>
|
|
|
|
+ <template #extra>
|
|
|
|
+ <div>本阶段考生可以预约其他教学点下的考点</div>
|
|
|
|
+ </template>
|
|
|
|
+ </a-form-item>
|
|
|
|
+ </a-form>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class="align-right">
|
|
|
|
+ <a-button @click="close">取消</a-button>
|
|
|
|
+ <a-button type="primary" :disabled="loading" @click="confirm"
|
|
|
|
+ >确认</a-button
|
|
|
|
+ >
|
|
|
|
+ </div>
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script setup lang="ts">
|
|
|
|
+ import { onMounted, reactive, ref } from 'vue';
|
|
|
|
+ import { Message } from '@arco-design/web-vue';
|
|
|
|
+ import { updateTaskRule } from '@/api/order';
|
|
|
|
+ import useLoading from '@/hooks/loading';
|
|
|
|
+ import type { FormInstance, FieldRule } from '@arco-design/web-vue/es/form';
|
|
|
|
+ import { objAssign, objModifyAssign } from '@/utils/utils';
|
|
|
|
+ import { TaskItem } from '@/api/types/order';
|
|
|
|
+
|
|
|
|
+ defineOptions({
|
|
|
|
+ name: 'RuleForm',
|
|
|
|
+ });
|
|
|
|
+ const props = defineProps<{
|
|
|
|
+ rowData: TaskItem;
|
|
|
|
+ }>();
|
|
|
|
+ const emit = defineEmits(['cancel', 'modified']);
|
|
|
|
+
|
|
|
|
+ const defaultFormData = {
|
|
|
|
+ id: '',
|
|
|
|
+ name: '',
|
|
|
|
+ allowApplyDays: 1,
|
|
|
|
+ allowApplyCancelDays: 1,
|
|
|
|
+ selfApplyStartTime: null,
|
|
|
|
+ selfApplyEndTime: null,
|
|
|
|
+ openApplyStartTime: null,
|
|
|
|
+ openApplyEndTime: null,
|
|
|
|
+ };
|
|
|
|
+ type FormDataType = typeof defaultFormData;
|
|
|
|
+
|
|
|
|
+ const formRef = ref<FormInstance>();
|
|
|
|
+ const formData = reactive<FormDataType>({ ...defaultFormData });
|
|
|
|
+ const rules: Partial<Record<keyof FormDataType, FieldRule[]>> = {
|
|
|
|
+ name: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请输入名称',
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ max: 50,
|
|
|
|
+ message: '名称不能超过50',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ allowApplyDays: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请输入开放预约限制时间',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ allowApplyCancelDays: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请输入取消预约限制时间',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ selfApplyStartTime: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请选择自主预约时间',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ openApplyStartTime: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ message: '请选择开放预约时间',
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ validator: (value, callback) => {
|
|
|
|
+ if (
|
|
|
|
+ formData.openApplyStartTime &&
|
|
|
|
+ formData.selfApplyEndTime &&
|
|
|
|
+ formData.openApplyStartTime < formData.selfApplyEndTime
|
|
|
|
+ ) {
|
|
|
|
+ return callback('第三阶段开启时间不得早于第一阶段开启时间');
|
|
|
|
+ }
|
|
|
|
+ return callback();
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ function close() {
|
|
|
|
+ emit('cancel');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* confirm */
|
|
|
|
+ const { loading, setLoading } = useLoading();
|
|
|
|
+ async function confirm() {
|
|
|
|
+ const err = await formRef.value?.validate();
|
|
|
|
+ if (err) return;
|
|
|
|
+
|
|
|
|
+ setLoading(true);
|
|
|
|
+ const datas = objAssign(formData, {});
|
|
|
|
+ let res = true;
|
|
|
|
+ await updateTaskRule(datas).catch(() => {
|
|
|
|
+ res = false;
|
|
|
|
+ });
|
|
|
|
+ setLoading(false);
|
|
|
|
+ if (!res) return;
|
|
|
|
+ Message.success('修改成功!');
|
|
|
|
+ objModifyAssign(props.rowData, formData);
|
|
|
|
+ emit('modified');
|
|
|
|
+ }
|
|
|
|
+ /* init modal */
|
|
|
|
+ function modalBeforeOpen() {
|
|
|
|
+ if (props.rowData.id) {
|
|
|
|
+ objModifyAssign(formData, props.rowData);
|
|
|
|
+ } else {
|
|
|
|
+ objModifyAssign(formData, defaultFormData);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ onMounted(() => {
|
|
|
|
+ modalBeforeOpen();
|
|
|
|
+ });
|
|
|
|
+</script>
|