Dragon 1 year ago
parent f8bc960d4d
commit a90ad2cbf2

@ -0,0 +1,44 @@
import { http } from '@/utils/http/axios'
import type { PageParam, PictureSortParam, SetTFParam } from '/#/api'
import { ContentTypeEnum } from '@/enums/httpEnum'
/**
*
* @returns
*/
export async function getCode(params: PageParam) {
const res = await http.request({
url: `/web/smslogin/sendcode`,
method: 'get',
params,
})
const { data: { records, pages } } = res
return {
pageCount: pages,
data: records,
}
}
/**
*
*/
export async function smsLogin(params: any) {
return http.request({
url: `/web/smslogin/login`,
method: 'post',
params,
headers: { 'Content-Type': ContentTypeEnum.FORM_DATA },
})
}
/**
*
*/
export async function forgetPassword(params: any) {
return http.request({
url: `/ocr/sUser/selectSUser`,
method: 'post',
params,
})
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

@ -9,6 +9,8 @@ import { useUserStore } from '@/store/modules/user'
import { ResultEnum } from '@/enums/httpEnum'
import { getFilter, setFilter } from '@/api/home/filter'
import { getConfig } from '@/api/system/user'
import { forgetPassword, getCode } from '@/api/login/login'
import { asideMap } from '@/config/aside'
const emit = defineEmits(['close', 'forget'])
@ -19,6 +21,13 @@ interface FormState {
captcha: string
}
interface FormForget {
agentcode: string
loginname: string
phone: string
phonecode: string
}
const formRef = ref()
const message = useMessage()
const loading = ref(false)
@ -29,17 +38,23 @@ const router = useRouter()
const route = useRoute()
const show = ref(false)
const flag = ref(false)
const formForget: FormForget = reactive({
agentcode: '三方系统标识8',
loginname: '13311111111',
phone: '13311111111',
phonecode: '',
})
const formInline: FormState = reactive({
enterprisecode: '三方系统标识8',
username: '13311111111',
password: '123456',
captcha: '',
})
const tab = ref(1)
const tab = ref(0)
const countTime = ref('获取验证码')
const rules = {
enterprisecode: { required: true, message: '请输入企业编码', trigger: 'blur' },
username: { required: true, message: '请输入用户名', trigger: 'blur' },
loginname: { required: true, message: '请输入用户名', trigger: 'blur' },
password: { required: true, message: '请输入密码', trigger: 'blur' },
captcha: { required: true, message: '请输入验证码', trigger: 'blur' },
reenteredPassword: [
@ -64,19 +79,20 @@ function handleSubmit(e) {
e.preventDefault()
formRef.value.validate(async (errors) => {
if (!errors) {
const { username, password, enterprisecode, captcha } = formInline
const { loginname, phone, phonecode, agentcode } = formForget
message.loading('登录中...')
loading.value = true
const params = {
logincode: captcha,
username,
password,
codetoken: userStore.getCapToken,
agentcode: enterprisecode,
loginname,
phone,
phonecode,
agentcode,
}
try {
const res = await forgetPassword(params)
console.log(res)
const { code, message: msg } = await userStore.login(params)
await userStore.getInformation()
const response = await getFilter()
@ -127,6 +143,15 @@ function computedForm() {
return !formInline.enterprisecode || !formInline.username || !formInline.password
}
async function sendCode(value) {
const res = await getCode({
phone: 13311111111,
agentcode: '三方系统标识8',
})
console.log(res)
startCount()
}
function startCount() {
let time = 60
countTime.value = '60s'
@ -157,35 +182,35 @@ function forget() {
</div>
</div>
<div v-if="tab === 0" class="form-1">
<n-form ref="formRef" label-placement="left" size="large" :model="formInline" :rules="rules">
<n-form-item class="form-item" path="enterprisecode">
<n-input v-model:value="formInline.enterprisecode" class="item-input" placeholder="请输入企业编码">
<n-form ref="formRef" label-placement="left" size="large" :model="formForget" :rules="rules">
<n-form-item class="form-item" path="agentcode">
<n-input v-model:value="formForget.agentcode" class="item-input" placeholder="请输入企业编码">
<template #prefix>
<svg-icon size="20" name="enterprise" />
</template>
</n-input>
</n-form-item>
<n-form-item class="form-item" path="username">
<n-input v-model:value="formInline.username" class="item-input" placeholder="请输入用户名">
<n-form-item class="form-item" path="loginname">
<n-input v-model:value="formForget.loginname" class="item-input" placeholder="请输入用户名">
<template #prefix>
<svg-icon size="20" name="account" />
</template>
</n-input>
</n-form-item>
<n-form-item class="form-item" path="username">
<n-input v-model:value="formInline.username" class="item-input" placeholder="请输入手机号">
<n-form-item class="form-item" path="phone">
<n-input v-model:value="formForget.phone" class="item-input" placeholder="请输入手机号">
<template #prefix>
<img class="img-phone" src="@/assets/images/login/phone.png" alt="" @click="close">
</template>
</n-input>
</n-form-item>
<n-form-item class="form-item" path="username">
<n-input v-model:value="formInline.username" maxlength="6" class="item-input" placeholder="请输入验证码" clearable>
<n-form-item class="form-item" path="phonecode">
<n-input v-model:value="formForget.phonecode" maxlength="6" class="item-input" placeholder="请输入验证码" clearable>
<template #prefix>
<img class="img-phone" src="@/assets/images/login/auth.png" alt="" @click="close">
</template>
<template #suffix>
<div :class="{ 'code-count': countTime !== '获取验证码' }" class="code" @click="startCount">
<div :class="{ 'code-count': countTime !== '获取验证码' }" class="code" @click="sendCode">
{{ countTime }}
</div>
</template>

@ -10,16 +10,23 @@ import { ResultEnum } from '@/enums/httpEnum'
import { getFilter, setFilter } from '@/api/home/filter'
import { getConfig } from '@/api/system/user'
import { asideMap } from '@/config/aside'
import { getCode, smsLogin } from '@/api/login/login'
const emit = defineEmits(['close', 'forget'])
interface FormState {
enterprisecode?: string
username: string
password: string
captcha: string
}
interface FormSms {
agentcode: string
phone: string
phonecode: string
}
const formRef = ref()
const formRefSms = ref()
const message = useMessage()
const loading = ref(false)
const autoLogin = ref(true)
@ -32,12 +39,20 @@ const formInline: FormState = reactive({
enterprisecode: '三方系统标识8',
username: '13311111111',
password: '123456',
captcha: '',
})
const formSms: FormSms = reactive({
agentcode: '三方系统标识8',
phone: '13311111111',
phonecode: '',
})
const tab = ref(0)
const countTime = ref('获取验证码')
const rules = {
enterprisecode: { required: true, message: '请输入企业编码', trigger: 'blur' },
agentcode: { required: true, message: '请输入企业编码', trigger: 'blur' },
phone: { required: true, message: '请输入手机号', trigger: 'blur' },
phonecode: { required: true, message: '请输入验证码', trigger: 'blur' },
username: { required: true, message: '请输入用户名', trigger: 'blur' },
password: { required: true, message: '请输入密码', trigger: 'blur' },
captcha: { required: true, message: '请输入验证码', trigger: 'blur' },
@ -47,12 +62,11 @@ function handleSubmit(e) {
e.preventDefault()
formRef.value.validate(async (errors) => {
if (!errors) {
const { username, password, enterprisecode, captcha } = formInline
const { username, password, enterprisecode } = formInline
message.loading('登录中...')
loading.value = true
const params = {
logincode: captcha,
username,
password,
codetoken: userStore.getCapToken,
@ -98,6 +112,59 @@ function handleSubmit(e) {
})
}
function handleSmsSubmit(e) {
e.preventDefault()
formRefSms.value.validate(async (errors) => {
if (!errors) {
const { phone, agentcode, phonecode } = formSms
message.loading('登录中...')
loading.value = true
try {
const res = await smsLogin({
phone,
agentcode,
phonecode,
})
console.log(res)
// const { code, message: msg } = await userStore.login(params)
await userStore.getInformation()
const response = await getFilter()
//
if (response.data === null) {
const systemConfig = await getConfig()
const onList: string[] = []
Object.keys(systemConfig.data).forEach((key) => {
//
if (key.startsWith('iz') && systemConfig.data[key] === 'Y' && asideMap[key]?.isDefaultFilter)
onList.push(key)
})
await setFilter({ searchcount: onList.join(',') })
}
message.destroyAll()
if (code === ResultEnum.SUCCESS) {
const toPath = decodeURIComponent((route.query?.redirect || '/') as string)
message.success('登录成功,即将进入系统')
if (route.name === LOGIN_NAME)
router.replace('/')
else router.replace(toPath)
}
else {
message.info(msg || '登录失败')
}
}
finally {
loading.value = false
}
}
else {
message.error('请填写完整信息,并且进行验证码校验')
}
})
}
function close() {
emit('close')
}
@ -110,6 +177,15 @@ function computedForm() {
return !formInline.enterprisecode || !formInline.username || !formInline.password
}
async function sendCode(value) {
const res = await getCode({
phone: 13311111111,
agentcode: '三方系统标识8',
})
console.log(res)
startCount()
}
function startCount() {
let time = 60
countTime.value = '60s'
@ -184,35 +260,35 @@ function forget() {
</n-form>
</div>
<div v-else class="form-1">
<n-form ref="formRef" label-placement="left" size="large" :model="formInline" :rules="rules">
<n-form-item class="form-item" path="enterprisecode">
<n-input v-model:value="formInline.enterprisecode" class="item-input" placeholder="请输入企业编码">
<n-form ref="formRefSms" label-placement="left" size="large" :model="formSms" :rules="rules">
<n-form-item class="form-item" path="agentcode">
<n-input v-model:value="formSms.agentcode" class="item-input" placeholder="请输入企业编码">
<template #prefix>
<svg-icon size="20" name="enterprise" />
</template>
</n-input>
</n-form-item>
<n-form-item class="form-item" path="username">
<n-input v-model:value="formInline.username" class="item-input" placeholder="请输入手机号">
<n-form-item class="form-item" path="phone">
<n-input v-model:value="formSms.phone" class="item-input" placeholder="请输入手机号">
<template #prefix>
<img class="img-phone" src="@/assets/images/login/phone.png" alt="" @click="close">
</template>
</n-input>
</n-form-item>
<n-form-item class="form-item" path="username">
<n-input v-model:value="formInline.username" maxlength="6" class="item-input" placeholder="请输入验证码" clearable>
<n-form-item class="form-item" path="phonecode">
<n-input v-model:value="formSms.phonecode" maxlength="6" class="item-input" placeholder="请输入验证码" clearable>
<template #prefix>
<img class="img-phone" src="@/assets/images/login/auth.png" alt="" @click="close">
</template>
<template #suffix>
<div :class="{ 'code-count': countTime !== '获取验证码' }" class="code" @click="startCount">
<div :class="{ 'code-count': countTime !== '获取验证码' }" class="code" @click="sendCode">
{{ countTime }}
</div>
</template>
</n-input>
</n-form-item>
<n-form-item class="form-item">
<n-button :class="{ 'btn-disabled': computedForm() }" class="btn" type="primary" size="large" :loading="loading" block @click="handleSubmit">
<n-button :class="{ 'btn-disabled': computedForm() }" class="btn" type="primary" size="large" :loading="loading" block @click="handleSmsSubmit">
登录
</n-button>
</n-form-item>

@ -56,17 +56,17 @@ const taskDetailPictureList = ref<any[]>([])
const tab = ref(0)
async function getList() {
async function getList(value) {
const res = await getMessageList({
pageNo: '1',
pageSize: '10',
msgCategory: '1',
msgCategory: value,
})
const { data } = res
state.list = data
}
getList()
getList('1')
watch(() => workStore.activeId, async (newValue, oldValue) => {
const res = await getPackageTaskList(newValue, packagepagination)
@ -87,16 +87,12 @@ async function handleSelect(item: any) {
totalCount.value = total
}
onUnmounted(() => {
workStore.reset()
})
function switchTab(type: number) {
tab.value = type
getList(type)
}
function goDetail(id) {
// console.log(id)
emit('goDetail', id)
}
</script>

@ -1,232 +1,18 @@
<script lang="ts" setup>
import { computed, onUnmounted, reactive, ref, unref, watch } from 'vue'
import { useDialog, useMessage } from 'naive-ui'
import { clone, pickBy } from 'lodash-es'
import ConfrimModal from '../modal/ConfrimModal.vue'
import type { PictureSortParam, SetTFParam } from '/#/api'
import { onUnmounted, reactive, ref } from 'vue'
import { useMessage } from 'naive-ui'
import type { SetTFParam } from '/#/api'
import { useWorkOrder } from '@/store/modules/workOrder'
import { clearTF, getPackageTaskList, getTaskDetailInfo, getTaskDetailPictureList, setTF } from '@/api/work/work'
import { fieldMap } from '@/config/workorder'
import { clearTF } from '@/api/work/work'
const batch = ref(false)
const selectItems = ref<any[]>([])
const message = useMessage()
const dialog = useDialog()
const totalCount = ref(0)
function setBatch(value: boolean) {
batch.value = value
if (value === false) {
selectItems.value.forEach(item => item.checked = false)
selectItems.value.length = 0
}
}
function onCheckChange(checked: any, item: any) {
const index = selectItems.value.indexOf(item)
item.checked = checked
if (index === -1 && checked)
selectItems.value.push(item)
else
selectItems.value.splice(index, 1)
}
const showActions = computed(() => {
return selectItems.value.length > 0 && batch
})
const packagepagination = reactive({
pageNo: 1,
pageSize: 10,
})
const taskpagination = reactive({
pageNo: 1,
pageSize: 10,
})
const sortBy: PictureSortParam = {
orderbyname: 'desc',
orderbyvalue: 'fromuptime',
}
const workStore = useWorkOrder()
const selectTask = ref<any>(null)
const overTask = ref<any>(null)
const taskList = ref<any[]>([])
const taskDetailInfo = ref<any>({})
const taskDetailPictureList = ref<any[]>([])
const confrimModalRef = ref(null)
let processItems: any[] = []
const tab = ref(0)
function validate(items: any[]) {
if (items.length === 0)
return '至少选中一个任务'
for (const item of items) {
const { iztrueorfalse, history, states } = item
if (iztrueorfalse !== null)
return '存在已经辨识过的任务'
else if (history)
return '包含历史数据'
else if (states !== 1 && states !== 2)
return '审批状态不合法'
}
return null
}
function falseHandler() {
let cloneItem: any
if (batch.value) { processItems = selectItems.value }
else if (overTask.value) {
cloneItem = clone(overTask.value)
processItems = [cloneItem]
}
const msg = validate(processItems)
if (msg !== null) {
message.error(msg)
return
}
const modal = unref(confrimModalRef)! as any
modal.showModal()
}
function trueHandler() {
let cloneItem: any
if (batch.value) { processItems = selectItems.value }
else if (overTask.value) {
cloneItem = clone(overTask.value)
processItems = [cloneItem]
}
const msg = validate(processItems)
if (msg !== null) {
message.error(msg)
return
}
dialog.info({
title: '确认提示',
content: '确认给该任务图判真吗?',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
setTrue()
},
onNegativeClick: () => { },
})
}
function setTrue() {
const ids: any[] = processItems.map(item => item.id)
const param: SetTFParam = {
taskchildpictureids: ids.join(','),
iztrueorfalse: 1,
packageid: workStore.getActiveId,
judgeid: '0',
}
doSetTF(param)
}
function setFalse(id: string, desc: null | string) {
const ids: any[] = processItems.map(item => item.id)
const param: SetTFParam = {
taskchildpictureids: ids.join(','),
iztrueorfalse: 0,
packageid: workStore.getActiveId,
judgeid: id,
}
if (desc)
param.judgedesc = desc
doSetTF(param)
}
function doSetTF(param: SetTFParam) {
setTF(param).then((res) => {
const { code } = res
processItems.length = 0
if (code === 'OK')
updateList(param)
else
message.error(res.message)
})
}
function updateList(param: SetTFParam) {
const list = taskDetailPictureList.value
const ids = param.taskchildpictureids.split(',')
for (const item of list) {
if (ids.includes(item.id))
item.iztrueorfalse = param.iztrueorfalse
}
}
function forwardHandler() {
workStore.forward()
}
function backHandler() {
workStore.back()
}
watch(() => workStore.activeId, async (newValue, oldValue) => {
const res = await getPackageTaskList(newValue, packagepagination)
const { data } = res
taskList.value = data
if (taskList.value.length > 0)
handleSelect(taskList.value[0])
})
const packageName = computed(() => {
const index = workStore.getCurrentIndex
return workStore.getOrderList[index]?.packagename || ''
})
async function handleSelect(item: any) {
selectTask.value = item
const taskId = item.id
taskDetailInfo.value = await getTaskDetailInfo(taskId, workStore.activeId)
const { data, total } = await getTaskDetailPictureList(workStore.activeId, taskId, { ...taskpagination, ...sortBy })
taskDetailPictureList.value = data
totalCount.value = total
}
async function sortHandler(orderby: 'pictureResult' | 'fromuptime') {
if (!selectTask.value)
return
taskpagination.pageNo = 1
taskpagination.pageSize = 10
sortBy.orderbyvalue = orderby
const res = await getTaskDetailPictureList(workStore.activeId, selectTask.value.id, { ...taskpagination, ...sortBy })
taskDetailPictureList.value = res.data
}
const propertys = computed(() => {
const { ocrPicture } = taskDetailInfo.value
const v = pickBy(ocrPicture, (value, key: string) => {
return key.startsWith('field') && value !== null
})
return v
})
const taskDetailInfo = ref<any>({})
async function clearMark() {
async function getDetail() {
const res = await clearTF(workStore.activeId, selectTask.value.id)
if (res.code === 'OK') {
taskDetailInfo.value.iztrueorfalse = null
@ -234,36 +20,6 @@ async function clearMark() {
}
else { message.error(res.message) }
}
function overTaskHandelr(item: any) {
if (validate([item]) == null && batch.value === false)
overTask.value = item
}
function leaveTaskHandler() {
overTask.value = null
}
onUnmounted(() => {
workStore.reset()
})
function getPercent(pictureid: string) {
const { ocpictureid, pictureresult } = taskDetailInfo.value
const index = ocpictureid.split(',').indexOf(String(pictureid))
const results = pictureresult.split(',')
const percent = results[index] || '0'
const val = Number.parseFloat(percent)
return `${val}%`
}
const mark = computed(() => {
return taskDetailInfo.value.iztrueorfalse === null ? '未标记' : '已标记'
})
function switchTab(type: number) {
tab.value = type
}
</script>
<template>
@ -274,13 +30,13 @@ function switchTab(type: number) {
</div>
</div>
<div class="right-card">
<img class="icon-set" src="@/assets/images/login/logo.png" alt="">
<img class="icon-set" src="@/assets/images/message/set.png" alt="">
<div class="title">
系统消息
</div>
<div class="form">
<div class="form-item flex">
<img class="icon" src="@/assets/images/login/logo.png" alt="">
<img class="icon" src="@/assets/images/message/user.png" alt="">
<div class="label">
创建人
</div>
@ -289,7 +45,7 @@ function switchTab(type: number) {
</div>
</div>
<div class="form-item flex">
<img class="icon" src="@/assets/images/login/logo.png" alt="">
<img class="icon" src="@/assets/images/message/time.png" alt="">
<div class="label">
发布时间
</div>
@ -298,7 +54,7 @@ function switchTab(type: number) {
</div>
</div>
<div class="form-item flex margin-no">
<img class="icon" src="@/assets/images/login/logo.png" alt="">
<img class="icon" src="@/assets/images/message/time.png" alt="">
<div class="label">
消息类型
</div>

@ -1,7 +1,17 @@
<script lang="ts" setup>
import { onUnmounted, reactive, ref } from 'vue'
import Aside from './aside/Aside.vue'
import Content from './content/Content.vue'
import Detail from './content/Detail.vue'
const type = ref('1')
const id = ref('')
function goDetail(value) {
type.value = '2'
id.value = value
}
</script>
<template>
@ -10,8 +20,8 @@ import Detail from './content/Detail.vue'
<!-- <Aside /> -->
<!-- 内容 -->
<Content />
<!-- <Detail /> -->
<Content v-if="type === '1'" @go-detail="goDetail" />
<Detail v-else />
</div>
</template>

Loading…
Cancel
Save