|
@@ -0,0 +1,122 @@
|
|
|
+<template>
|
|
|
+ <div class="part-box">
|
|
|
+ <a-form ref="formRef" :model="formData" :rules="rules" auto-label-width>
|
|
|
+ <a-form-item field="semesterId" label="学期">
|
|
|
+ <!-- <SelectSemester v-model="formData.semesterId" placeholder="请选择" /> -->
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item field="examId" label="考试">
|
|
|
+ <!-- <SelectExam v-model="formData.examId" placeholder="请选择" /> -->
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item field="extType" label="文件类型">
|
|
|
+ <a-radio-group v-model="formData.extType">
|
|
|
+ <a-radio
|
|
|
+ v-for="(option, index) in extOptions"
|
|
|
+ :key="index"
|
|
|
+ :value="option.value"
|
|
|
+ >{{ option.label }}</a-radio
|
|
|
+ >
|
|
|
+ </a-radio-group>
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item field="pictureType" label="图片类型">
|
|
|
+ <a-checkbox-group v-model="formData.pictureType">
|
|
|
+ <a-checkbox
|
|
|
+ v-for="(option, index) in pictureOptions"
|
|
|
+ :key="index"
|
|
|
+ :value="option.value"
|
|
|
+ >{{ option.label }}</a-checkbox
|
|
|
+ >
|
|
|
+ </a-checkbox-group>
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item field="outputDir" label="保存目录">
|
|
|
+ <a-input-search
|
|
|
+ v-model.trim="formData.outputDir"
|
|
|
+ :style="{ width: '400px' }"
|
|
|
+ search-button
|
|
|
+ button-text="选择"
|
|
|
+ @search="toSelectDir"
|
|
|
+ >
|
|
|
+ </a-input-search>
|
|
|
+ </a-form-item>
|
|
|
+ <a-form-item>
|
|
|
+ <a-button type="primary">开始</a-button>
|
|
|
+ </a-form-item>
|
|
|
+ </a-form>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup lang="ts">
|
|
|
+ import { ref, reactive } from 'vue';
|
|
|
+ import type { FormInstance } from '@arco-design/web-vue/es/form';
|
|
|
+ import { FormRules } from '@/types/global';
|
|
|
+ import useDictOption from '@/hooks/dict-option';
|
|
|
+ import { ExtTypeEnum, PictureTypeEnum } from '@/constants/enumerate';
|
|
|
+
|
|
|
+ defineOptions({
|
|
|
+ name: 'TrackExport',
|
|
|
+ });
|
|
|
+
|
|
|
+ const { optionList: extOptions } = useDictOption('EXT_TYPE');
|
|
|
+ const { optionList: pictureOptions } = useDictOption('PICTURE_TYPE');
|
|
|
+
|
|
|
+ const defaultFormData = {
|
|
|
+ semesterId: '',
|
|
|
+ examId: '',
|
|
|
+ extType: 'img' as ExtTypeEnum,
|
|
|
+ pictureType: ['track'] as PictureTypeEnum[],
|
|
|
+ outputDir: '',
|
|
|
+ };
|
|
|
+
|
|
|
+ interface FormDataType {
|
|
|
+ semesterId: string;
|
|
|
+ examId: string;
|
|
|
+ extType: ExtTypeEnum;
|
|
|
+ pictureType: PictureTypeEnum[];
|
|
|
+ outputDir: string;
|
|
|
+ }
|
|
|
+
|
|
|
+ const formRef = ref<FormInstance>();
|
|
|
+ const formData = reactive<FormDataType>({ ...defaultFormData });
|
|
|
+ const rules: FormRules<keyof FormDataType> = {
|
|
|
+ semesterId: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择学期',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ examId: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择考试',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ extType: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择文件类型',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ pictureType: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择图片类型',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ outputDir: [
|
|
|
+ {
|
|
|
+ required: true,
|
|
|
+ message: '请选择保存目录',
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ };
|
|
|
+
|
|
|
+ async function toSelectDir() {
|
|
|
+ const result = await window.electron.dialogSelectFile({
|
|
|
+ title: '选择保存目录',
|
|
|
+ properties: ['openDirectory'],
|
|
|
+ });
|
|
|
+
|
|
|
+ if (result.canceled) return;
|
|
|
+
|
|
|
+ formData.outputDir = result.filePaths[0];
|
|
|
+ }
|
|
|
+</script>
|