Merge branch 'main' into shen

pull/1/head
Dragon 1 year ago
commit 25e5f5f898

8
components.d.ts vendored

@ -17,18 +17,14 @@ declare module 'vue' {
NCollapse: typeof import('naive-ui')['NCollapse'] NCollapse: typeof import('naive-ui')['NCollapse']
NCollapseItem: typeof import('naive-ui')['NCollapseItem'] NCollapseItem: typeof import('naive-ui')['NCollapseItem']
NConfigProvider: typeof import('naive-ui')['NConfigProvider'] NConfigProvider: typeof import('naive-ui')['NConfigProvider']
NDataTable: typeof import('naive-ui')['NDataTable']
NDatePicker: typeof import('naive-ui')['NDatePicker'] NDatePicker: typeof import('naive-ui')['NDatePicker']
NDialogProvider: typeof import('naive-ui')['NDialogProvider'] NDialogProvider: typeof import('naive-ui')['NDialogProvider']
NDivider: typeof import('naive-ui')['NDivider'] NDivider: typeof import('naive-ui')['NDivider']
NDropdown: typeof import('naive-ui')['NDropdown'] NDropdown: typeof import('naive-ui')['NDropdown']
NEmpty: typeof import('naive-ui')['NEmpty']
NForm: typeof import('naive-ui')['NForm'] NForm: typeof import('naive-ui')['NForm']
NFormItem: typeof import('naive-ui')['NFormItem'] NFormItem: typeof import('naive-ui')['NFormItem']
NGi: typeof import('naive-ui')['NGi']
NGrid: typeof import('naive-ui')['NGrid'] NGrid: typeof import('naive-ui')['NGrid']
NGridItem: typeof import('naive-ui')['NGridItem'] NGridItem: typeof import('naive-ui')['NGridItem']
NIcon: typeof import('naive-ui')['NIcon']
NImage: typeof import('naive-ui')['NImage'] NImage: typeof import('naive-ui')['NImage']
NInput: typeof import('naive-ui')['NInput'] NInput: typeof import('naive-ui')['NInput']
NMessageProvider: typeof import('naive-ui')['NMessageProvider'] NMessageProvider: typeof import('naive-ui')['NMessageProvider']
@ -43,11 +39,7 @@ declare module 'vue' {
NSpace: typeof import('naive-ui')['NSpace'] NSpace: typeof import('naive-ui')['NSpace']
NSpin: typeof import('naive-ui')['NSpin'] NSpin: typeof import('naive-ui')['NSpin']
NSwitch: typeof import('naive-ui')['NSwitch'] NSwitch: typeof import('naive-ui')['NSwitch']
NTabPane: typeof import('naive-ui')['NTabPane']
NTabs: typeof import('naive-ui')['NTabs']
NTag: typeof import('naive-ui')['NTag'] NTag: typeof import('naive-ui')['NTag']
NTimeline: typeof import('naive-ui')['NTimeline']
NTimelineItem: typeof import('naive-ui')['NTimelineItem']
NTooltip: typeof import('naive-ui')['NTooltip'] NTooltip: typeof import('naive-ui')['NTooltip']
NUpload: typeof import('naive-ui')['NUpload'] NUpload: typeof import('naive-ui')['NUpload']
NUploadDragger: typeof import('naive-ui')['NUploadDragger'] NUploadDragger: typeof import('naive-ui')['NUploadDragger']

@ -1,9 +1,9 @@
import { pickBy } from 'lodash-es'
import { http } from '@/utils/http/axios'
import type { CheckParam, PageParam, QueryPictureParam, UploadParam } from '/#/api'
import { ContentTypeEnum } from '@/enums/httpEnum' import { ContentTypeEnum } from '@/enums/httpEnum'
import { notEmpty } from '@/utils' import { notEmpty } from '@/utils'
import { formatToDate2 } from '@/utils/dateUtil' import { formatToDate2 } from '@/utils/dateUtil'
import { http } from '@/utils/http/axios'
import { pickBy } from 'lodash-es'
import type { CheckParam, PageParam, QueryPictureParam, UploadParam } from '/#/api'
/** /**
* *
@ -103,6 +103,104 @@ export async function oneClickCheck(params: Partial<CheckParam> = { search_histo
}) })
} }
/**
*
* @param note
* @returns
*/
export async function oneClickCheckTaskPackage(params: Partial<CheckParam> = { search_history: '0' }) {
const notEmptyParams = pickBy(params, notEmpty)
Object.keys(notEmptyParams).forEach((key) => {
const val = notEmptyParams[key]
if (Array.isArray(val))
notEmptyParams[key] = val.join(',')
})
return http.request({
url: `/ocr/checkDuplicate/openCheckDuplicate`,
method: 'get',
params: notEmptyParams,
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @param note
* @returns
*/
export async function getLastCheckNo() {
return http.request({
url: `/ocr/checkDuplicate/getLastCheckNo`,
method: 'get',
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @param note
* @returns
*/
export async function getCheckDuplicateStatus(checkDuplicateNo) {
return http.request({
url: `/ocr/checkDuplicate/getCheckDuplicateStatus`,
method: 'get',
params: { checkDuplicateNo },
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
* @param
* @returns
*/
export async function createPackage(params) {
return http.request({
url: `/ocr/ocrTaskPackage/createPackage`,
method: 'post',
params
})
}
/**
*
* @param
* @returns
*/
export async function queryPageListByCheckNo(params: any): Promise<any> {
const notEmptyParams = pickBy(params, notEmpty)
Object.keys(notEmptyParams).forEach((key) => {
const val = notEmptyParams[key]
if (key === 'izyear') {
const start = formatToDate2(val[0])
const end = formatToDate2(val[1])
notEmptyParams[key] = `${start}-${end}`
}
if (Array.isArray(notEmptyParams[key]))
notEmptyParams[key] = val.join(',')
})
const res = await http.request({
url: `/ocr/checkDuplicate/queryPageListByCheckNo`,
method: 'get',
params: notEmptyParams,
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
const { data: { records, pages, total } } = res
return {
pageCount: pages,
data: records,
total,
}
}
/** /**
* *
* @param params * @param params

@ -304,7 +304,7 @@ onMounted(() => {
:title="allCount" class="dragcardStyle" :segmented="{ content: true, footer: true }" size="small" :title="allCount" class="dragcardStyle" :segmented="{ content: true, footer: true }" size="small"
:bordered="false" :bordered="false"
> >
<div> <div class="input_wrap">
<n-input placeholder="搜索关键词" @input="leftInputHandler"> <n-input placeholder="搜索关键词" @input="leftInputHandler">
<template #suffix> <template #suffix>
<SvgIcon size="14px" name="magnifying-1-color999" /> <SvgIcon size="14px" name="magnifying-1-color999" />
@ -340,7 +340,7 @@ onMounted(() => {
<template #header-extra> <template #header-extra>
<span class="textbtnStyle" @click="clearDragSource"></span> <span class="textbtnStyle" @click="clearDragSource"></span>
</template> </template>
<div> <div class="input_wrap">
<n-input placeholder="搜索关键词" @input="rightInputHandler"> <n-input placeholder="搜索关键词" @input="rightInputHandler">
<template #suffix> <template #suffix>
<SvgIcon size="14px" name="magnifying-1-color999" /> <SvgIcon size="14px" name="magnifying-1-color999" />
@ -395,6 +395,13 @@ onMounted(() => {
&-footer { &-footer {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
.n-button--info-type{
background: #507AFD !important;
}
.n-button--default-type{
background: #CAD2DD !important;
color: #333333;
}
} }
&-info { &-info {
@ -464,7 +471,25 @@ onMounted(() => {
font-weight: bolder !important; font-weight: bolder !important;
} }
::v-deep(.n-scrollbar){ ::v-deep(.n-scrollbar){
border-top: none !important; border-left: 1px solid #cad2dd !important;
border-right: 1px solid #cad2dd !important;
border-bottom: 1px solid #E8E8E8 !important;
border-top: 1px solid #E8E8E8 !important;
}
::v-deep(.n-card__content){
padding: 20px 24px 0 24px !important;
}
::v-deep(.n-card__footer){
padding: 0 24px 16px 24px !important;
}
::v-deep(.n-input .n-input-wrapper){
height: 44px !important;
border: 1px solid #cad2dd !important;
border-bottom: none !important;
// margin-bottom: -3px;
.n-input__input input{
height: 44px !important;
}
} }
</style> </style>

@ -1,5 +1,5 @@
<script lang="ts" setup> <script lang="ts" setup>
import { getPictureList, oneClickCheck } from '@/api/home/main' import { createPackage, getCheckDuplicateStatus, getLastCheckNo, getPictureList, oneClickCheckTaskPackage, queryPageListByCheckNo } from '@/api/home/main'
import avatar from '@/assets/images/avatar.jpg' import avatar from '@/assets/images/avatar.jpg'
import { timeOptions, viewOptions } from '@/config/home' import { timeOptions, viewOptions } from '@/config/home'
import { useWindowSizeFn } from '@/hooks/event/useWindowSizeFn' import { useWindowSizeFn } from '@/hooks/event/useWindowSizeFn'
@ -9,8 +9,9 @@ import { hideDownload } from '@/utils/image'
import emitter from '@/utils/mitt' import emitter from '@/utils/mitt'
import { getImgUrl } from '@/utils/urlUtils' import { getImgUrl } from '@/utils/urlUtils'
import { useInfiniteScroll } from '@vueuse/core' import { useInfiniteScroll } from '@vueuse/core'
import dayjs from 'dayjs'
import imagesloaded from 'imagesloaded' import imagesloaded from 'imagesloaded'
import { debounce } from 'lodash-es' import { cloneDeep, debounce } from 'lodash-es'
import Masonry from 'masonry-layout' import Masonry from 'masonry-layout'
import { useMessage } from 'naive-ui' import { useMessage } from 'naive-ui'
import { computed, nextTick, onMounted, onUnmounted, onUpdated, reactive, ref, unref, watch } from 'vue' import { computed, nextTick, onMounted, onUnmounted, onUpdated, reactive, ref, unref, watch } from 'vue'
@ -41,6 +42,10 @@ const sortBy: PictureSortParam = {
orderbyvalue: "pictureResult", orderbyvalue: "pictureResult",
}; };
const imageRef = ref<ComponentElRef | null>() const imageRef = ref<ComponentElRef | null>()
const checkDuplicateNo = ref('')
const checkTaskStatus = ref(null) // 1. 2. 3.
const isRefresh = ref(true) //
let canloadMore = true let canloadMore = true
let filterId = null let filterId = null
@ -132,7 +137,16 @@ async function featchList() {
const asideParams = unref(configStore.getAsideValue) const asideParams = unref(configStore.getAsideValue)
const params = filterId ? { userSearchId: filterId } : asideParams const params = filterId ? { userSearchId: filterId } : asideParams
const result = await getPictureList({ ...pagination, ...contentParams, ...params, ...sortBy }) let result = {
pageCount: 0,
data: [],
total: 0,
}
if (checkTaskStatus.value === 2 && isRefresh) {
result = await queryPageListByCheckNo({ ...pagination, ...contentParams, ...params, ...sortBy, checkDuplicateNo: checkDuplicateNo.value })
} else {
result = await getPictureList({ ...pagination, ...contentParams, ...params, ...sortBy })
}
const { data, pageCount, total } = result const { data, pageCount, total } = result
totalCount.value = total totalCount.value = total
canloadMore = pageCount >= pagination.pageNo && pageCount > 0 canloadMore = pageCount >= pagination.pageNo && pageCount > 0
@ -180,8 +194,40 @@ const gridHeight = computed(() => {
}) })
async function oneCheck() { async function oneCheck() {
const modal = packageModalRef.value as any const asideVal = cloneDeep(configStore.getAsideValue)
modal.showModal() asideVal.izyear = dayjs(asideVal.izyear[0]).format("YYYY/MM/DD") + '-' + dayjs(asideVal.izyear[1]).format("YYYY/MM/DD")
delete asideVal.izsimilarity
if (checkDuplicateNo.value) {
getCheckDuplicateStatus(checkDuplicateNo.value).then((res) => {
if (res.code === "OK") {
checkTaskStatus.value = res.data.status // 1. 2.
if (isRefresh.value === false) {
const modal = packageModalRef.value as any
modal.showModal()
return
}
if (checkTaskStatus.value === 2 && isRefresh) {
isRefresh.value = false
message.success('任务执行完毕,正在刷新数据...');
reset()
loadMore()
} else if (checkTaskStatus.value === 1) {
message.success("请等待,查重任务正在创建中...");
return
}
}
})
return
}
message.success("请等待,查重任务正在创建中...");
oneClickCheckTaskPackage(asideVal).then((res) => {
if (res.code === "OK") {
checkDuplicateNo.value = res.data.checkDuplicateNo
} else {
message.error(res.message || '查重失败')
}
})
} }
async function showLoginSuccessModal() { async function showLoginSuccessModal() {
@ -190,28 +236,33 @@ async function showLoginSuccessModal() {
} }
async function commitHandler(settingParam) { async function commitHandler(settingParam) {
const contentParams = { const params = {
search_month: timeRange.value, name: settingParam.packagename,
checkDuplicateNo: checkDuplicateNo.value
} }
const modal = generateModalRef.value as any
modal.showModal()
createPackage(params).then((res) => {
if (res.code === "OK") {
message.success(res.data);
modal.closeModal()
}
})
const asideVal = configStore.getAsideValue const asideVal = configStore.getAsideValue
const finalParam = { ...contentParams, ...asideVal } const finalParam = { ...asideVal }
finalParam.buessinessno = settingParam.packagename finalParam.buessinessno = settingParam.packagename
finalParam.search_history = settingParam.comparehistory ? 1 : 0 finalParam.search_history = settingParam.comparehistory ? 1 : 0
const modal = generateModalRef.value as any
modal.showModal()
oneClickCheck(finalParam).then(() => {
modal.closeModal()
}, () => {
modal.closeModal()
})
} }
onMounted(() => { onMounted(() => {
emitter.on('filter', refreshHandler) emitter.on('filter', refreshHandler)
//
getLastCheckNo().then((res) => {
if (res.code === "OK") {
checkDuplicateNo.value = res.data
}
})
nextTick(() => { nextTick(() => {
computeListHeight() computeListHeight()
// //
@ -310,7 +361,7 @@ async function downloadImage(item) {
} }
} }
function previewHandler(index: number,event: MouseEvent) { function previewHandler(index: number, event: MouseEvent) {
event.stopImmediatePropagation(); event.stopImmediatePropagation();
event.stopPropagation(); event.stopPropagation();
if (imageRef.value?.[index] && (imageRef.value[index] as any).src) if (imageRef.value?.[index] && (imageRef.value[index] as any).src)
@ -325,7 +376,11 @@ function previewHandler(index: number,event: MouseEvent) {
<SvgIcon size="32" name="magnifying" /> <SvgIcon size="32" name="magnifying" />
<span class="font">AI一键查重</span> <span class="font">AI一键查重</span>
</div> </div>
<SvgIcon style="cursor: pointer;" size="105" name="yijianchachong" @click="oneCheck" /> <SvgIcon v-show="checkTaskStatus !== 2" style="cursor: pointer;" size="105" name="yijianchachong"
@click="oneCheck" />
<div v-show="checkTaskStatus === 2" style="cursor: pointer;" size="105" name="magnifying" @click="oneCheck">
生成任务包
</div>
</div> </div>
<div class="wrapper-content"> <div class="wrapper-content">
<div style="display: flex;justify-content: space-between;"> <div style="display: flex;justify-content: space-between;">
@ -352,7 +407,8 @@ function previewHandler(index: number,event: MouseEvent) {
<SvgIcon style="margin-left: 8px;" name="sort" size="12" /> <SvgIcon style="margin-left: 8px;" name="sort" size="12" />
</div> </div>
</div> </div>
<span style="font-size: 16px;color:#494949"> <span style="color:#7899fd;font-weight: 500;">{{ totalCount }}</span> </span> <span style="font-size: 16px;color:#494949"> <span style="color:#7899fd;font-weight: 500;">{{ totalCount
}}</span> </span>
</div> </div>
<n-spin :show="loading"> <n-spin :show="loading">
<div ref="el" class="scroll" :style="listStyle"> <div ref="el" class="scroll" :style="listStyle">
@ -508,7 +564,7 @@ function previewHandler(index: number,event: MouseEvent) {
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
margin-right: 24px; margin-right: 24px;
color:#323233; color: #323233;
.gap { .gap {
margin-left: 5px; margin-left: 5px;
@ -546,6 +602,7 @@ function previewHandler(index: number,event: MouseEvent) {
padding: 0 10px; padding: 0 10px;
background: rgba(0, 0, 0, .35); background: rgba(0, 0, 0, .35);
border-radius: 7px; border-radius: 7px;
.img-name { .img-name {
width: 70%; width: 70%;
color: #FFF; color: #FFF;

@ -1,7 +1,7 @@
<script lang="ts" setup> <script lang="ts" setup>
import type { FormInst, FormRules } from 'naive-ui' import type { FormInst, FormRules } from 'naive-ui';
import { ref } from 'vue' import { useMessage } from 'naive-ui';
import { useMessage } from 'naive-ui' import { ref } from 'vue';
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'commit', value: any) (e: 'commit', value: any)
@ -42,7 +42,7 @@ const rules: FormRules = {
const model = ref({ const model = ref({
packagename: '', packagename: '',
comparehistory: false, // comparehistory: false,
mark: false, mark: false,
}) })
@ -66,7 +66,6 @@ const formItemStyle = {
function afterLeave() { function afterLeave() {
model.value.packagename = '' model.value.packagename = ''
model.value.comparehistory = false
model.value.mark = false model.value.mark = false
} }
</script> </script>
@ -85,11 +84,6 @@ function afterLeave() {
<n-form-item path="packagename" label="任务包名称"> <n-form-item path="packagename" label="任务包名称">
<n-input v-model:value="model.packagename" max="12" @keydown.enter.prevent /> <n-input v-model:value="model.packagename" max="12" @keydown.enter.prevent />
</n-form-item> </n-form-item>
<n-form-item path="comparehistory" :style="formItemStyle">
<n-checkbox v-model:checked="model.comparehistory">
是否对比历史数据
</n-checkbox>
</n-form-item>
<n-form-item path="mark" :style="formItemStyle"> <n-form-item path="mark" :style="formItemStyle">
<n-checkbox v-model:checked="model.mark"> <n-checkbox v-model:checked="model.mark">
是否给重复图片添加重复标识 是否给重复图片添加重复标识

@ -42,7 +42,7 @@ let formInline: FormState = reactive({
// password: "123456", // password: "123456",
enterprisecode: "", enterprisecode: "",
username: "", username: "",
password: "" password: "",
}); });
let formSms: FormSms = reactive({ let formSms: FormSms = reactive({
@ -54,38 +54,52 @@ const tab = ref(0);
const countTime = ref("获取验证码"); const countTime = ref("获取验证码");
const rules = { const rules = {
enterprisecode: [ enterprisecode: [
{ required: true, message: "请输入企业编码", trigger: "blur" },
{ {
trigger: ["blur"], trigger: ["blur","input","change"],
level: "error", level: "error",
validator(_rule, value) { validator(_rule, value) {
if (loginSuccess.value) { if (loginSuccess.value) {
return true; return true;
} else {
return new Error(loginRejectMessge.value);
} }
if (!value) {
return new Error("请输入企业编码");
}
return new Error(loginRejectMessge.value);
}, },
}, },
], ],
agentcode: [ agentcode: [
{ required: true, message: "请输入企业编码", trigger: "blur" },
{ {
trigger: ["blur"], trigger: ["blur","input","change"],
level: "error", level: "error",
validator(_rule, value) { validator(_rule, value) {
if (loginSuccess.value) { if (loginSuccess.value) {
return true; return true;
} else {
return new Error(loginRejectMessge.value);
} }
if (!value) {
return new Error("请输入验证码");
}
return new Error(loginRejectMessge.value);
}, },
}, },
], ],
phone: { required: true, message: "请输入手机号", trigger: "blur" }, phone: [
{
trigger: ["blur","input","change"],
level: "error",
validator(_rule, value) {
if (loginSuccess.value) {
return true;
}
if (!value) {
return new Error("请输入手机号");
}
return new Error(loginRejectMessge.value);
},
},],
phonecode: [ phonecode: [
{ required: true, message: "请输入验证码", trigger: "blur" },
{ {
trigger: ["blur"], trigger: ["blur","input","change"],
level: "error", level: "error",
validator(_rule, value) { validator(_rule, value) {
if (value.length < 4 && value.length > 0) { if (value.length < 4 && value.length > 0) {
@ -93,32 +107,49 @@ const rules = {
} }
if (loginSuccess.value) { if (loginSuccess.value) {
return true; return true;
} else {
return new Error("验证码错误");
} }
if (!value) {
return new Error("请输入验证码");
}
return new Error(loginRejectMessge.value);
}, },
}, },
], ],
username: [ username: [
{ required: true, message: "请输入用户名", trigger: "blur" },
{ {
trigger: ["blur"], trigger: ["blur","input","change"],
level: "error", level: "error",
validator(_rule, value) { validator(_rule, value) {
if (loginSuccess.value) { if (loginSuccess.value) {
return true; return true;
} else {
return new Error(loginRejectMessge.value);
} }
if (!value) {
return new Error("请输入账号");
}
return new Error(loginRejectMessge.value);
}, },
}, },
], ],
password: { required: true, message: "请输入密码", trigger: "blur" }, password: [
captcha: { required: true, message: "请输入验证码", trigger: "blur" }, {
trigger: ["blur","input","change"],
level: "error",
validator(_rule, value) {
if (loginSuccess.value) {
return true;
}
if (!value) {
return new Error("请输入密码");
}
return new Error(loginRejectMessge.value);
},
},],
captcha: [{ required: true, message: "请输入验证码", trigger: "blur" }],
}; };
function handleSubmit(e) { function handleSubmit(e) {
e.preventDefault(); e.preventDefault();
loginSuccess.value = true;
formRef.value.validate(async (errors) => { formRef.value.validate(async (errors) => {
if (!errors) { if (!errors) {
const { username, password, enterprisecode } = formInline; const { username, password, enterprisecode } = formInline;
@ -163,9 +194,9 @@ function handleSubmit(e) {
} }
onMounted(() => { onMounted(() => {
let data:any = localStorage.getItem("LOGIN_FORM_SMS"); let data: any = localStorage.getItem("LOGIN_FORM_SMS");
if (data) { if (data) {
data = JSON.parse(data) as any data = JSON.parse(data) as any;
formSms.agentcode = data.agentcode; formSms.agentcode = data.agentcode;
formSms.phone = data.phone; formSms.phone = data.phone;
formSms.phonecode = ""; formSms.phonecode = "";
@ -175,7 +206,7 @@ onMounted(() => {
if (data) { if (data) {
data = JSON.parse(data) as any; data = JSON.parse(data) as any;
formInline.username = data.username; formInline.username = data.username;
formInline.password = ''; formInline.password = "";
// formInline.password = data.password; // formInline.password = data.password;
formInline.enterprisecode = data.enterprisecode; formInline.enterprisecode = data.enterprisecode;
autoLogin.value = true; autoLogin.value = true;
@ -184,6 +215,7 @@ onMounted(() => {
function handleSmsSubmit(e) { function handleSmsSubmit(e) {
e.preventDefault(); e.preventDefault();
loginSuccess.value = true;
formRefSms.value.validate(async (errors) => { formRefSms.value.validate(async (errors) => {
if (!errors) { if (!errors) {
const { phone, agentcode, phonecode } = formSms; const { phone, agentcode, phonecode } = formSms;
@ -346,20 +378,20 @@ function forget() {
</template> </template>
</n-input> </n-input>
</n-form-item> </n-form-item>
<n-form-item class="form-item"> <!-- <n-form-item class="form-item"> -->
<n-button <n-button
:class="{ 'btn-disabled': computedForm() }" :class="{ 'btn-disabled': computedForm() }"
class="btn" class="btn"
type="primary" type="primary"
size="large" size="large"
:loading="loading" :loading="loading"
block block
@click="handleSubmit" @click="handleSubmit"
:disabled="computedForm()" :disabled="computedForm()"
> >
登录 登录
</n-button> </n-button>
</n-form-item> <!-- </n-form-item> -->
<n-form-item class="default-color"> <n-form-item class="default-color">
<div class="flex justify-between w-full"> <div class="flex justify-between w-full">
<div class="flex-initial"> <div class="flex-initial">
@ -440,23 +472,23 @@ function forget() {
</template> </template>
</n-input> </n-input>
</n-form-item> </n-form-item>
<n-form-item class="form-item"> <!-- <n-form-item class="form-item"> -->
<n-button <n-button
:class="{ 'btn-disabled': computedForm() }" :class="{ 'btn-disabled': computedForm() }"
class="btn" class="btn"
type="primary" type="primary"
size="large" size="large"
:loading="loading" :loading="loading"
block block
@click="handleSmsSubmit" @click="handleSmsSubmit"
:disabled="computedForm()" :disabled="computedForm()"
> >
登录 登录
</n-button> </n-button>
</n-form-item> <!-- </n-form-item> -->
<n-form-item class="default-color"> <n-form-item class="default-color">
<div class="flex justify-between w-full"> <div class="flex justify-between w-full">
<div class="flex-initial"> <div class="flex-initial save-btn">
<n-checkbox v-model:checked="autoLogin"> <n-checkbox v-model:checked="autoLogin">
<span class="forgetSpan">记住账号</span> <span class="forgetSpan">记住账号</span>
</n-checkbox> </n-checkbox>
@ -474,7 +506,7 @@ function forget() {
<style lang="less" scoped> <style lang="less" scoped>
.form-login { .form-login {
width: 26.25rem; width: 26.25rem;
height: 26.0625rem; height: 28.0625rem;
box-sizing: border-box; box-sizing: border-box;
background: linear-gradient( background: linear-gradient(
136deg, 136deg,
@ -486,7 +518,7 @@ function forget() {
box-shadow: 0px 6px 12px 0px rgba(0, 0, 0, 0.04); box-shadow: 0px 6px 12px 0px rgba(0, 0, 0, 0.04);
backdrop-filter: blur(12px); backdrop-filter: blur(12px);
position: relative; position: relative;
padding: 3rem 1.6875rem 0; padding: 3rem 1.6875rem 2rem;
.img-close { .img-close {
position: absolute; position: absolute;
@ -528,10 +560,10 @@ function forget() {
.line { .line {
width: 2rem; width: 2rem;
height: .25rem; height: 0.25rem;
border-radius: 2px; border-radius: 2px;
margin: 0 auto; margin: 0 auto;
margin-top: .5625rem; margin-top: 0.5625rem;
} }
} }
} }
@ -540,14 +572,16 @@ function forget() {
margin-top: 1.8125rem; margin-top: 1.8125rem;
.form-item { .form-item {
height: 3.75rem; height: 4.75rem;
} }
.item-input { .item-input {
width: 22.875rem; width: 22.875rem;
// height: 44px; // height: 2.75rem;
background: rgba(255, 255, 255, 0.5); background: rgba(255, 255, 255, 0.5);
border-radius: 4px; border-radius: 4px;
// margin-bottom: 1rem;
font-size: 1rem;
} }
.btn { .btn {
@ -555,8 +589,8 @@ function forget() {
height: 2.75rem; height: 2.75rem;
background: linear-gradient(234deg, #96aaff 0%, #1c43ff 100%); background: linear-gradient(234deg, #96aaff 0%, #1c43ff 100%);
border-radius: 3px; border-radius: 3px;
margin-top: .625rem; // margin-top: 1rem;
margin-bottom: .875rem; // margin-bottom: -0.875rem;
&-disabled { &-disabled {
opacity: 0.5; opacity: 0.5;
@ -571,38 +605,56 @@ function forget() {
} }
.order-last { .order-last {
font-size: .875rem; font-size: 1rem;
font-family: PingFang SC, PingFang SC-Regular; font-family: PingFang SC, PingFang SC-Regular;
font-weight: Regular; font-weight: Regular;
color: #507afd; color: #507afd;
} }
.code { .code {
font-size: .9375rem; font-size: 0.9375rem;
font-family: PingFang SC, PingFang SC-Regular; font-family: PingFang SC, PingFang SC-Regular;
font-weight: Regular; font-weight: Regular;
color: #507afd; color: #507afd;
margin-left: .75rem; margin-left: 0.75rem;
cursor: pointer; cursor: pointer;
&-count { &-count {
font-size: .875rem; font-size: 0.875rem;
color: #999999; color: #999999;
} }
} }
} }
::v-deep(.n-form-item-feedback--error) { ::v-deep(.n-form-item-feedback--error) {
// color: #FF4E4F !important; color: #ff4e4f !important;
} }
.forgetSpan { .forgetSpan {
font-size: .9375rem; font-size: 0.9375rem;
font-family: PingFang SC, PingFang SC-Regular; font-family: PingFang SC, PingFang SC-Regular;
font-weight: Regular; font-weight: Regular;
text-align: center; text-align: center;
color: #999999; color: #999999;
line-height: 1.3125rem; line-height: 1rem;
} }
::v-deep(.n-base-clear>.n-base-clear__clear>.n-base-icon>svg){ ::v-deep(.n-base-clear > .n-base-clear__clear > .n-base-icon > svg) {
color: #c9c9c9; color: #c9c9c9;
} }
::v-deep(.n-input .n-input__input-el) {
height: 2.75rem !important;
font-size: 1rem !important;
}
::v-deep(.n-input .n-input-wrapper) {
height: 2.75rem !important;
}
.save-btn {
font-size: 0.9375rem;
}
::v-deep(.n-form-item .n-form-item-feedback-wrapper) {
height: 1rem;
padding: 0 !important;
margin: 0 !important;
line-height: normal !important;
min-height: 0 !important;
// margin-bottom: .5rem;
}
</style> </style>

@ -293,4 +293,9 @@ function close() {
margin-left: -30.3125rem; margin-left: -30.3125rem;
} }
} }
::v-deep(.n-form-item .n-form-item-feedback-wrapper .n-form-item-feedback.n-form-item-feedback--error){
color: #FF4E4F !important;
font-size: .75rem !important;
}
</style> </style>

@ -103,7 +103,7 @@ function getMore() {
<template> <template>
<div class="wrapper-message"> <div class="wrapper-message">
<div class="header flex justify-between"> <div class="flex justify-between header">
<div class="header-title"> <div class="header-title">
消息通知 消息通知
</div> </div>
@ -118,10 +118,10 @@ function getMore() {
v-for="(item) in tabList" v-for="(item) in tabList"
:key="item.value" :key="item.value"
:class="{ 'item-active': tab === item.value }" :class="{ 'item-active': tab === item.value }"
class="item flex" class="flex item"
@click="switchTab(item.value)" @click="switchTab(item.value)"
> >
<div class="item-left flex align-center"> <div class="flex item-left align-center">
<img class="icon" :src="tab === item.value ? item.activeIcon : item.icon" alt=""> <img class="icon" :src="tab === item.value ? item.activeIcon : item.icon" alt="">
<div :class="{ 'text-active': tab === item.value }" class="text"> <div :class="{ 'text-active': tab === item.value }" class="text">
{{ item.name }} {{ item.name }}
@ -133,7 +133,7 @@ function getMore() {
</div> </div>
<div class="list"> <div class="list">
<div v-for="(item, index) in list" :key="item.id" :class="{ 'pt0': index === 0, 'item-disabled': item.readFlag }" class="item" @click="goDetail(item)"> <div v-for="(item, index) in list" :key="item.id" :class="{ 'pt0': index === 0, 'item-disabled': item.readFlag }" class="item" @click="goDetail(item)">
<div class="left left"> <div class="left">
<div class="num"> <div class="num">
{{ format(item.sendTime, 'dd') }} {{ format(item.sendTime, 'dd') }}
<div v-if="!item.readFlag" class="point" /> <div v-if="!item.readFlag" class="point" />
@ -240,7 +240,6 @@ function getMore() {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
cursor: pointer; cursor: pointer;
&-active{ &-active{
background: rgba(80,122,253,.1); background: rgba(80,122,253,.1);
} }
@ -311,7 +310,7 @@ function getMore() {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
flex: 1; flex: 1;
padding: 16px 0 16px 25px; padding: 16px 0 8px 25px;
border-bottom: 1px solid #eeeeee; border-bottom: 1px solid #eeeeee;
&-disabled{ &-disabled{
@ -369,7 +368,7 @@ function getMore() {
.status{ .status{
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 8px; // margin-top: 8px;
} }
.tag{ .tag{
@ -415,7 +414,7 @@ function getMore() {
text-align: left; text-align: left;
color: #999999; color: #999999;
line-height: 19px; line-height: 19px;
margin-top: 8px; // margin-top: 8px;
} }
.name{ .name{

Loading…
Cancel
Save