This commit is contained in:
Rao 2025-03-12 11:36:31 +08:00
parent 911585bd5c
commit c6fc7d8f24
8 changed files with 114 additions and 17 deletions

View File

@ -12,6 +12,7 @@ const StaffWhereInputSchema: ZodType<Prisma.StaffWhereInput> = z.any();
const StaffSelectSchema: ZodType<Prisma.StaffSelect> = z.any(); const StaffSelectSchema: ZodType<Prisma.StaffSelect> = z.any();
const StaffUpdateInputSchema: ZodType<Prisma.StaffUpdateInput> = z.any(); const StaffUpdateInputSchema: ZodType<Prisma.StaffUpdateInput> = z.any();
const StaffFindManyArgsSchema: ZodType<Prisma.StaffFindManyArgs> = z.any(); const StaffFindManyArgsSchema: ZodType<Prisma.StaffFindManyArgs> = z.any();
const StaffFindUniqueArgsSchema: ZodType<Prisma.StaffFindUniqueArgs> = z.any();
@Injectable() @Injectable()
export class StaffRouter { export class StaffRouter {
constructor( constructor(
@ -89,5 +90,10 @@ export class StaffRouter {
.mutation(async ({ input }) => { .mutation(async ({ input }) => {
return this.staffService.updateOrder(input); return this.staffService.updateOrder(input);
}), }),
findUnique: this.trpc.procedure
.input(StaffFindUniqueArgsSchema)
.query(async ({ input }) => {
return await this.staffService.findUnique(input);
}),
}); });
} }

View File

@ -421,7 +421,7 @@ export class GenDevService {
return trainSituation return trainSituation
} }
private async generateTrainSituations(probability: number = 0.7){ private async generateTrainSituations(probability: number = 0.1){
this.logger.log("Start generating train situations...") this.logger.log("Start generating train situations...")
const allTrainContents = await db.trainContent.findMany(); const allTrainContents = await db.trainContent.findMany();
// 这里相当于两次遍历 找到没有parentID的即是 // 这里相当于两次遍历 找到没有parentID的即是

View File

@ -1,4 +1,6 @@
import { api } from "@nice/client"; import { api } from "@nice/client";
import { useAuth } from "@web/src/providers/auth-provider";
import { UserProfile } from "@nice/common";
import { createContext, ReactNode, useContext, useEffect } from "react"; import { createContext, ReactNode, useContext, useEffect } from "react";
interface DailyContextProviderProps{ interface DailyContextProviderProps{
@ -17,9 +19,10 @@ interface DailyContextProps{
const DailyContextProvider = createContext<DailyContextProviderProps>(null) const DailyContextProvider = createContext<DailyContextProviderProps>(null)
export default function DailyContext({children}:DailyContextProps){ export default function DailyContext({children}:DailyContextProps){
// 获取当前单位下的所有staff的记录 const {user} = useAuth()
// 获取当前员工的单位下的所有staff的记录
const {data:staffs,isLoading:staffsLoading} = api.staff.findByDept.useQuery({ const {data:staffs,isLoading:staffsLoading} = api.staff.findByDept.useQuery({
deptId:"cm84jt1gv000do5gqsxx68iko" deptId:user.deptId
}) })
const staffsMsg = staffs?.map((staff)=>{ const staffsMsg = staffs?.map((staff)=>{
return { return {
@ -28,12 +31,9 @@ export default function DailyContext({children}:DailyContextProps){
username:staff.username username:staff.username
} }
}) })
useEffect(()=>{
console.log(staffs)
},[staffs])
return <DailyContextProvider.Provider value={{ return <DailyContextProvider.Provider value={{
staffsMsg, staffsMsg,
staffsLoading staffsLoading,
}}> }}>
{children} {children}
</DailyContextProvider.Provider> </DailyContextProvider.Provider>

View File

@ -1,23 +1,60 @@
import { Form, QRCode, Select } from "antd"; import { Form } from "antd";
import StaffSelect from "../../staff/staff-select"; import StaffSelect from "../../staff/staff-select";
import { useDaily } from "../DailyContext"; import { useDaily } from "../DailyContext";
import { useEffect, useState } from "react";
import { staffDetailSelect, UserProfile } from "@nice/common";
import { api } from "@nice/client";
import DailyPersonMsg from "./DailyPersonMsg";
import { MonitorOutlined } from "@ant-design/icons";
import DailyTrainMsg from "./DailyTrainMsg";
export function DailyMsgFormLayout() { export function DailyMsgFormLayout() {
const [form] = Form.useForm() const [form] = Form.useForm()
const { staffsMsg } = useDaily() const { staffsMsg } = useDaily()
const [selectedUserMsg, setSelectedUserMsg] = useState(null)
const [selectedUserId, setSelectedUserId] = useState<string | null>(null);
const { data: selectedUserData } = api.staff.findUnique.useQuery(
{
where: {
id: selectedUserId,
},
select: staffDetailSelect
},
{
enabled: !!selectedUserId, // 只有当selectedUserId存在时才执行查询
}
);
const handleChange = (value: string | string[]) => { const handleChange = (value: string | string[]) => {
console.log(value) if (!value) {
setSelectedUserId(null);
setSelectedUserMsg(null);
return;
}
setSelectedUserId(Array.isArray(value) ? value[0] : value);
} }
useEffect(() => {
if (selectedUserData) {
console.log(selectedUserData)
setSelectedUserMsg(selectedUserData);
}
}, [selectedUserData]);
return ( return (
<div className="w-full h-[260px] bg-white"> <div className="w-full h-[260px] bg-white flex flex-col items-center">
<Form <Form
form={form} form={form}
> >
<StaffSelect <div className="flex items-center m-8">
staffsMsg={staffsMsg} <MonitorOutlined className="mr-2" />
onChange={(value)=>handleChange(value)} <StaffSelect
></StaffSelect> staffsMsg={staffsMsg}
placeholder="请搜索或选择人员"
onChange={(value) => handleChange(value)}
></StaffSelect>
</div>
</Form> </Form>
<DailyPersonMsg selectedUserMsg={selectedUserMsg} />
<DailyTrainMsg />
</div> </div>
) )
} }

View File

@ -0,0 +1,13 @@
export default function DailyPersonMsg({selectedUserMsg}) {
return (
<div className="">
<span>{selectedUserMsg?.showname ? selectedUserMsg?.showname : "暂无数据"}</span>
<span>{selectedUserMsg?.age ? selectedUserMsg?.age : "暂无数据"}</span>
<span>{selectedUserMsg?.sex ? selectedUserMsg?.sex : "暂无数据"}</span>
<span>{selectedUserMsg?.absent ? selectedUserMsg?.absent : "暂无数据"}</span>
<span>{selectedUserMsg?.department?.name ? selectedUserMsg?.department?.name : "暂无数据"}</span>
<span>{selectedUserMsg?.position?.type ? selectedUserMsg?.position?.type : "暂无数据"}</span>
<span>{selectedUserMsg?.avatar ? selectedUserMsg?.avatar : "暂无数据"}</span>
</div>
)
}

View File

@ -0,0 +1,7 @@
export default function DailyTrainMsg() {
return (
<div>
<span></span>
</div>
)
}

View File

@ -23,7 +23,7 @@ export default function StaffSelect({
onChange, onChange,
placeholder, placeholder,
style, style,
multiple, multiple = false,
domainId, domainId,
staffsMsg, staffsMsg,
}: StaffSelectProps) { }: StaffSelectProps) {
@ -92,7 +92,7 @@ export default function StaffSelect({
options={options} options={options}
value={value} value={value}
onChange={onChange} onChange={onChange}
style={{ minWidth: 200, ...style }} style={{ minWidth: 600, ...style }}
/>{" "} />{" "}
</> </>
); );

View File

@ -167,3 +167,37 @@ export const trainSituationDetailSelect: Prisma.TrainSituationSelect = {
}, },
}, },
}; };
export const staffDetailSelect: Prisma.StaffSelect = {
id: true,
showname: true,
username: true,
deptId: true,
avatar: true,
age: true,
sex: true,
absent: true,
trainSituations:{
select:{
id: true,
trainContent:{
select:{
id: true,
title: true,
type: true,
}
}
}
},
department: {
select: {
id: true,
name: true,
}
},
position: {
select: {
id: true,
type: true,
}
}
};