| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- <template>
- <IeModal title="分配卡" confirmText="确认分配" ref="modalRef" width="500px" @beforeClose="handleBeforeClose"
- @confirm="handleConfirm">
- <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
- <el-form-item label="平台机构" prop="deptId" required>
- <ie-institution-select v-model="form.deptId" class="w-[350px]!" />
- </el-form-item>
- <el-form-item label="卡类型" prop="cardType">
- <ie-select v-model="form.cardType" :options="card_type" class="w-[350px]!" clearable />
- </el-form-item>
- <el-form-item label="卡号段" prop="cardNoRange" required>
- <div class="flex items-center gap-x-3">
- <el-input v-model="form.begin" type="text" maxlength="8" v-number class="w-[160px]!" placeholder="请输入开始卡号" />
- <span class="text-gray-500">-</span>
- <el-input v-model="form.end" type="text" maxlength="8" v-number class="w-[160px]!" placeholder="请输入结束卡号" />
- </div>
- </el-form-item>
- <el-form-item label="代理商" prop="agentId" required>
- <ie-agent-select v-model="form.agentId" :deptId="form.deptId" class="w-[350px]!" filterable />
- </el-form-item>
- <el-form-item label="省份" prop="provinceId">
- <ie-select v-model="area.selected" v-model:selectedItem="area.selectedItem" :options="area.list"
- label-key="areaName" value-key="areaId" class="w-[350px]!" />
- </el-form-item>
- <el-form-item label="学校" prop="schoolId">
- <ie-select v-model="selectedSchool" :options="schoolList" label-key="name" value-key="id" filterable
- class="w-[350px]!" />
- </el-form-item>
- <el-form-item label="考生类型" prop="assignExamType">
- <ie-select v-model="selectedExamType" :options="examTypeList" label-key="dictLabel" value-key="dictValue"
- class="w-[350px]!" />
- </el-form-item>
- <el-form-item v-if="form.cardType === '9'" label="有效期" prop="days">
- <el-input-number v-model="form.days" :min="1" :max="10000" :step="1" :precision="0" class="w-full!">
- <template #suffix>天</template>
- </el-input-number>
- </el-form-item>
- </el-form>
- </IeModal>
- </template>
- <script setup>
- import useSchool from '@/hooks/useSchool';
- import IeModal from '@/components/IeModal/index.vue';
- import IeSelect from '@/components/IeSelect/index.vue';
- import IeAgentSelect from '@/components/IeAgentSelect/index.vue';
- import IeInstitutionSelect from '@/components/IeInstitutionSelect/index.vue';
- import { assignCard } from '@/api/dz/cards';
- import { getCurrentInstance, watchEffect } from 'vue';
- const { proxy } = getCurrentInstance();
- const {
- card_type,
- exam_type,
- } = proxy.useDict("card_type", "exam_type");
- const {
- init,
- reset,
- area,
- schoolList,
- selectedSchool,
- examTypeList,
- selectedExamType
- } = useSchool({ autoLoad: false, loadExamType: true, loadClass: false });
- const modalRef = ref(null);
- const formRef = ref(null);
- const defaultForm = {
- deptId: null,
- agentId: null,
- cardType: '',
- count: 1,
- assignExamType: '',
- days: 1,
- };
- const form = ref({ ...defaultForm })
- // 自定义验证
- const validateCardNoRange = (rule, value, callback) => {
- if (!form.value.begin || !form.value.end) {
- callback(new Error('请输入卡号段'))
- } else if (Number(form.value.begin) > Number(form.value.end)) {
- callback(new Error('开始卡号不能大于结束卡号'))
- } else {
- callback()
- }
- }
- watchEffect(() => {
- form.value.cardNoRange = `${form.value.begin}-${form.value.end}`;
- // form.value.provinceId = area.selected;
- form.value.location = area.selectedItem?.shortName;
- form.value.schoolId = selectedSchool.value;
- form.value.assignExamType = selectedExamType.value;
- });
- const rules = ref({
- deptId: [
- { required: true, message: '请选择平台机构', trigger: 'change' },
- ],
- cardType: [
- { required: true, message: '请选择卡类型', trigger: 'change' },
- ],
- cardNoRange: [
- { validator: validateCardNoRange, trigger: ['blur', 'change'] },
- ],
- agentId: [
- { required: true, message: '请选择代理商', trigger: 'change' },
- ],
- days: [
- { required: true, message: '请输入有效期', trigger: 'change' },
- ],
- })
- const handleBeforeClose = () => {
- form.value = { ...defaultForm };
- reset();
- }
- const open = () => {
- init();
- form.value = { ...defaultForm };
- modalRef.value.open()
- }
- const close = () => {
- modalRef.value.close()
- }
- const emit = defineEmits(['refresh'])
- const handleConfirm = () => {
- formRef.value.validate(async (valid) => {
- if (valid) {
- let { cardType, agentId, begin, end, location, assignExamType, schoolId, days } = form.value;
- modalRef.value.showLoading()
- if (cardType !== '9') {
- days = undefined;
- }
- assignCard(cardType, agentId, begin, end, location, assignExamType, schoolId, days).then(res => {
- proxy.$modal.msgSuccess('分配卡成功')
- close();
- setTimeout(() => {
- emit('refresh')
- }, 300);
- }).finally(() => {
- modalRef.value.hideLoading()
- });
- }
- })
- }
- defineExpose({
- open,
- close
- })
- </script>
- <style lang="scss" scoped></style>
|