人脸审批相关修改

This commit is contained in:
weiwei committed 2025-03-13 19:16:50 +08:00
1 parent a7f82a1ee7
commit 866cb60801
6 files changed
+94 -65

No files matched your search

+45 -43
View File
@@ -1,19 +1,20 @@
import { defineStore } from 'pinia';
import { Session } from '/@/utils/storage';
import { getUserInfo, login, loginByMobile, loginBySocial, refreshTokenApi } from '/@/api/login/index';
import { useMessage } from '/@/hooks/message';
import { defineStore } from "pinia"
import { Session } from "/@/utils/storage"
import { getUserInfo, login, loginByMobile, loginBySocial, refreshTokenApi } from "/@/api/login/index"
import { useMessage } from "/@/hooks/message"
/**
* @function useUserInfo
* @returns {UserInfosStore}
*/
export const useUserInfo = defineStore('userInfo', {
export const useUserInfo = defineStore("userInfo", {
state: (): UserInfosState => ({
userInfos: {
userName: '',
photo: '',
userName: "",
photo: "",
time: 0,
roles: [],
roleCodes: [],
authBtnList: [],
},
}),
@@ -26,23 +27,23 @@ export const useUserInfo = defineStore('userInfo', {
* @param {Object} data - 登录数据
* @returns {Promise<Object>}
*/
async login(data:any) {
data.grant_type = 'password';
data.scope = 'server';
async login(data: any) {
data.grant_type = "password"
data.scope = "server"
return new Promise((resolve, reject) => {
login(data)
.then((res) => {
// 存储token 信息
Session.set('token', res.access_token);
Session.set('refresh_token', res.refresh_token);
resolve(res);
Session.set("token", res.access_token)
Session.set("refresh_token", res.refresh_token)
resolve(res)
})
.catch((err) => {
useMessage().error(err?.msg || '系统异常请联系管理员');
reject(err);
});
});
useMessage().error(err?.msg || "系统异常请联系管理员")
reject(err)
})
})
},
/**
@@ -57,15 +58,15 @@ export const useUserInfo = defineStore('userInfo', {
loginByMobile(data.mobile, data.code)
.then((res) => {
// 存储token 信息
Session.set('token', res.access_token);
Session.set('refresh_token', res.refresh_token);
resolve(res);
Session.set("token", res.access_token)
Session.set("refresh_token", res.refresh_token)
resolve(res)
})
.catch((err) => {
useMessage().error(err?.msg || '系统异常请联系管理员');
reject(err);
});
});
useMessage().error(err?.msg || "系统异常请联系管理员")
reject(err)
})
})
},
/**
@@ -81,15 +82,15 @@ export const useUserInfo = defineStore('userInfo', {
loginBySocial(state, code)
.then((res) => {
// 存储token 信息
Session.set('token', res.access_token);
Session.set('refresh_token', res.refresh_token);
resolve(res);
Session.set("token", res.access_token)
Session.set("refresh_token", res.refresh_token)
resolve(res)
})
.catch((err) => {
useMessage().error(err?.msg || '系统异常请联系管理员');
reject(err);
});
});
useMessage().error(err?.msg || "系统异常请联系管理员")
reject(err)
})
})
},
/**
@@ -100,19 +101,19 @@ export const useUserInfo = defineStore('userInfo', {
*/
async refreshToken() {
return new Promise((resolve, reject) => {
const refreshToken = Session.get('refresh_token');
const refreshToken = Session.get("refresh_token")
refreshTokenApi(refreshToken)
.then((res) => {
// 存储token 信息
Session.set('token', res.access_token);
Session.set('refresh_token', res.refresh_token);
resolve(res);
Session.set("token", res.access_token)
Session.set("refresh_token", res.refresh_token)
resolve(res)
})
.catch((err) => {
useMessage().error(err.msg);
reject(err);
});
});
useMessage().error(err.msg)
reject(err)
})
})
},
/**
@@ -126,10 +127,11 @@ export const useUserInfo = defineStore('userInfo', {
user: res.data.sysUser,
time: new Date().getTime(),
roles: res.data.roles,
roleCodes: res.data.roleCodes,
authBtnList: res.data.permissions,
};
this.userInfos = userInfo;
});
}
this.userInfos = userInfo
})
},
},
});
})
+12 -12
View File
@@ -1,5 +1,5 @@
import { useUserInfo } from '/@/stores/userInfo';
import { judementSameArr } from '/@/utils/arrayOperation';
import { useUserInfo } from "/@/stores/userInfo"
import { judementSameArr } from "/@/utils/arrayOperation"
/**
* 单个权限验证
@@ -7,8 +7,8 @@ import { judementSameArr } from '/@/utils/arrayOperation';
* @returns 有权限,返回 `true`,反之则反
*/
export function auth(value: string): boolean {
const stores = useUserInfo();
return stores.userInfos.authBtnList.some((v: string) => v === value);
const stores = useUserInfo()
return stores.userInfos.authBtnList.some((v: string) => v === value)
}
/**
@@ -17,14 +17,14 @@ export function auth(value: string): boolean {
* @returns 有权限,返回 `true`,反之则反
*/
export function auths(value: Array<string>): boolean {
let flag = false;
const stores = useUserInfo();
let flag = false
const stores = useUserInfo()
stores.userInfos.authBtnList.map((val: string) => {
value.map((v: string) => {
if (val === v) flag = true;
});
});
return flag;
if (val === v) flag = true
})
})
return flag
}
/**
@@ -33,6 +33,6 @@ export function auths(value: Array<string>): boolean {
* @returns 有权限,返回 `true`,反之则反
*/
export function authAll(value: Array<string>): boolean {
const stores = useUserInfo();
return judementSameArr(value, stores.userInfos.authBtnList);
const stores = useUserInfo()
return judementSameArr(value, stores.userInfos.authBtnList)
}
+7 -3
View File
@@ -17,6 +17,11 @@
<preview-image :src="row.faceImg" />
</template>
</el-table-column>
<el-table-column prop="processStatus" align="center" label="审批状态">
<template #default="{ row }">
<dict-tag :options="check_status" :value="row.processStatus" />
</template>
</el-table-column>
<el-table-column v-auths="['userFace_sysUserFace_edit', 'userFace_sysUserFace_del']" prop="address" align="center" label="操作">
<template #default="{ row }">
<el-button v-auth="'userFace_sysUserFace_edit'" link type="primary" @click="editFace(row)">修改</el-button>
@@ -48,20 +53,19 @@ import { BasicTableProps, useTable } from "/@/hooks/table"
import * as userFaceApi from "/@/api/admin/userFace"
import { useMessage } from "/@/hooks/message"
import { auth } from "/@/utils/authFunction"
import { useDict } from "/@/hooks/dict"
// 定义刷新表格emit
const emit = defineEmits(["refresh"])
// 定义变量内容
const { check_status } = useDict("check_status")
const formRef = ref()
const dialogVisible = ref(false)
const uploadDialogVisible = ref(false)
const faceUploadTitle = ref<"上传人脸" | "修改人脸">("上传人脸")
const formLoading = ref(false)
const faceTableLoading = ref(false)
const formData = ref<any>({
id: undefined,
+13 -5
View File
@@ -28,14 +28,14 @@
<el-input clearable placeholder="请输入手机号" v-model="dataForm.phone"></el-input>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-col :span="12" v-if="!roleCodes.includes('DEPT_ADMIN') && !roleCodes.includes('ROLE_ADMIN')" class="mb20">
<el-form-item :label="$t('sysuser.role')" prop="role">
<el-select clearable multiple placeholder="请选择角色" v-model="dataForm.role">
<el-option :key="item.roleId" :label="item.roleName" :value="item.roleId" v-for="item in roleData" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12" class="mb20">
<el-col :span="12" v-if="!roleCodes.includes('DEPT_ADMIN') && !roleCodes.includes('ROLE_ADMIN')" class="mb20">
<el-form-item :label="$t('sysuser.post')" prop="post">
<el-select clearable multiple placeholder="请选择岗位" v-model="dataForm.post">
<el-option :key="item.postId" :label="item.postName" :value="item.postId" v-for="item in postData" />
@@ -95,9 +95,14 @@ import { useDict } from "/@/hooks/dict"
import { useI18n } from "vue-i18n"
import { useMessage } from "/@/hooks/message"
import { rule } from "/@/utils/validate"
import { useUserInfo } from "/@/stores/userInfo"
const { t } = useI18n()
const {
userInfos: { roleCodes },
} = useUserInfo()
// 定义刷新表格emit
const emit = defineEmits(["refresh"])
// @ts-ignore
@@ -166,7 +171,10 @@ const dataRules = ref({
{ validator: rule.chinese, trigger: "blur" },
],
deptId: [{ required: true, message: "部门不能为空", trigger: "blur" }],
role: [{ required: true, message: "角色不能为空", trigger: "blur" }],
role:
roleCodes.includes("DEPT_ADMIN") || roleCodes.includes("ROLE_ADMIN")
? []
: [{ required: true, message: "角色不能为空", trigger: "blur" }],
// post: [{ required: true, message: '岗位不能为空', trigger: 'blur' }],
// 手机号校验,不能为空、新增的时不能重复校验
phone: [
@@ -280,7 +288,7 @@ const getPostData = () => {
postList().then((res) => {
postData.value = res.data
// 默认选择第一个
if (!dataForm.userId) {
if (!roleCodes.includes("DEPT_ADMIN") && !roleCodes.includes("ROLE_ADMIN") && !dataForm.userId) {
dataForm.post = [res.data[0].postId]
}
})
@@ -290,7 +298,7 @@ const getRoleData = () => {
roleList().then((res) => {
roleData.value = res.data
// 默认选择第一个
if (!dataForm.userId) {
if (!roleCodes.includes("DEPT_ADMIN") && !roleCodes.includes("ROLE_ADMIN") && !dataForm.userId) {
dataForm.role = [res.data[0].roleId]
}
})
+1 -1
View File
@@ -166,7 +166,7 @@
</template>
</el-table-column>
</el-table>
<pagination v-bind="state.pagination" @current-change="currentChangeHandle" @size-change="sizeChangeHandle"> </pagination>
<pagination v-bind="state.pagination" @current-change="currentChangeHandle" @size-change="sizeChangeHandle" />
</template>
</DraggableDepTree>
</div>
@@ -55,10 +55,12 @@
<dict-tag :options="check_status" :value="row.processStatus" />
</template>
</el-table-column>
<el-table-column label="创建时间" prop="createTime" show-overflow-tooltip min-width="160" />
<el-table-column label="审核时间" prop="processTime" show-overflow-tooltip min-width="160" />
<el-table-column label="操作" min-width="100" fixed="right">
<el-table-column label="操作" min-width="160" fixed="right">
<template #default="scope">
<el-button type="primary" size="small" link icon="VideoPlay" @click="deal(scope.row)">开始处理</el-button>
<el-button v-auth="'userFace_sysUserFace_del'" link type="danger" @click="delFace(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -79,6 +81,7 @@ import { getUserFaceList } from "/@/api/admin/userFaceApprove"
import { useMessage } from "/@/hooks/message"
import { useDict } from "/@/hooks/dict"
import { getDicts } from "/@/api/admin/dict"
import * as userFaceApi from "/@/api/admin/userFace"
const { check_status } = useDict("check_status")
const queryRef = ref()
@@ -139,4 +142,16 @@ const deal = (row: any) => {
const taskSubmitEvent = () => {
getDataList()
}
// 删除人脸
const delFace = async (row: any) => {
try {
await useMessage().delConfirm("是否删除人脸?")
await userFaceApi.delObjs([row.id])
useMessage().success("删除成功")
getDataList()
} catch (error) {
console.log(error)
}
}
</script>