| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- <script lang="ts" setup>
- import type { CaptchaPoint } from '@vben/common-ui';
- import { reactive, ref } from 'vue';
- import { Page, PointSelectionCaptcha } from '@vben/common-ui';
- import { Card, Input, InputNumber, message, Switch } from 'ant-design-vue';
- import { $t } from '#/locales';
- import { captchaImage, hintImage } from './base64';
- const selectedPoints = ref<CaptchaPoint[]>([]);
- const params = reactive({
- captchaImage,
- captchaImageUrl: '',
- height: undefined,
- hintImage,
- hintImageUrl: '',
- hintText: '唇,燕,碴,找',
- paddingX: undefined,
- paddingY: undefined,
- showConfirm: true,
- showHintImage: true,
- title: '',
- width: undefined,
- });
- const handleConfirm = (points: CaptchaPoint[], clear: () => void) => {
- message.success({
- content: `captcha points: ${JSON.stringify(points)}`,
- });
- clear();
- selectedPoints.value = [];
- };
- const handleRefresh = () => {
- selectedPoints.value = [];
- };
- const handleClick = (point: CaptchaPoint) => {
- selectedPoints.value.push(point);
- };
- </script>
- <template>
- <Page
- :description="$t('page.examples.captcha.pageDescription')"
- :title="$t('page.examples.captcha.pageTitle')"
- >
- <Card :title="$t('page.examples.captcha.basic')" class="mb-4">
- <div class="mb-3 flex items-center justify-start">
- <Input
- v-model:value="params.title"
- :placeholder="$t('page.examples.captcha.titlePlaceholder')"
- class="w-64"
- />
- <Input
- v-model:value="params.captchaImageUrl"
- :placeholder="$t('page.examples.captcha.captchaImageUrlPlaceholder')"
- class="ml-8 w-64"
- />
- <div class="ml-8 flex w-96 items-center">
- <Switch
- v-model:checked="params.showHintImage"
- :checked-children="$t('page.examples.captcha.hintImage')"
- :un-checked-children="$t('page.examples.captcha.hintText')"
- class="mr-4 w-40"
- />
- <Input
- v-show="params.showHintImage"
- v-model:value="params.hintImageUrl"
- :placeholder="$t('page.examples.captcha.hintImagePlaceholder')"
- />
- <Input
- v-show="!params.showHintImage"
- v-model:value="params.hintText"
- :placeholder="$t('page.examples.captcha.hintTextPlaceholder')"
- />
- </div>
- <Switch
- v-model:checked="params.showConfirm"
- :checked-children="$t('page.examples.captcha.showConfirm')"
- :un-checked-children="$t('page.examples.captcha.hideConfirm')"
- class="ml-8 w-28"
- />
- </div>
- <div class="mb-3 flex items-center justify-start">
- <div>
- <InputNumber
- v-model:value="params.width"
- :min="1"
- :placeholder="$t('page.examples.captcha.widthPlaceholder')"
- :precision="0"
- :step="1"
- class="w-64"
- >
- <template #addonAfter>px</template>
- </InputNumber>
- </div>
- <div class="ml-8">
- <InputNumber
- v-model:value="params.height"
- :min="1"
- :placeholder="$t('page.examples.captcha.heightPlaceholder')"
- :precision="0"
- :step="1"
- class="w-64"
- >
- <template #addonAfter>px</template>
- </InputNumber>
- </div>
- <div class="ml-8">
- <InputNumber
- v-model:value="params.paddingX"
- :min="1"
- :placeholder="$t('page.examples.captcha.paddingXPlaceholder')"
- :precision="0"
- :step="1"
- class="w-64"
- >
- <template #addonAfter>px</template>
- </InputNumber>
- </div>
- <div class="ml-8">
- <InputNumber
- v-model:value="params.paddingY"
- :min="1"
- :placeholder="$t('page.examples.captcha.paddingYPlaceholder')"
- :precision="0"
- :step="1"
- class="w-64"
- >
- <template #addonAfter>px</template>
- </InputNumber>
- </div>
- </div>
- <PointSelectionCaptcha
- :captcha-image="params.captchaImageUrl || params.captchaImage"
- :height="params.height || 220"
- :hint-image="
- params.showHintImage ? params.hintImageUrl || params.hintImage : ''
- "
- :hint-text="params.hintText"
- :padding-x="params.paddingX"
- :padding-y="params.paddingY"
- :show-confirm="params.showConfirm"
- :width="params.width || 300"
- class="float-left"
- @click="handleClick"
- @confirm="handleConfirm"
- @refresh="handleRefresh"
- >
- <template #title>
- {{ params.title || $t('page.examples.captcha.captchaCardTitle') }}
- </template>
- </PointSelectionCaptcha>
- <ol class="float-left p-5">
- <li v-for="point in selectedPoints" :key="point.i" class="flex">
- <span class="mr-3 w-16">{{
- $t('page.examples.captcha.index') + point.i
- }}</span>
- <span class="mr-3 w-52">{{
- $t('page.examples.captcha.timestamp') + point.t
- }}</span>
- <span class="mr-3 w-16">{{
- $t('page.examples.captcha.x') + point.x
- }}</span>
- <span class="mr-3 w-16">{{
- $t('page.examples.captcha.y') + point.y
- }}</span>
- </li>
- </ol>
- </Card>
- </Page>
- </template>
|