kllay 1 өдөр өмнө
parent
commit
2200c12ea9

+ 3 - 1
src/views/system/Inventorycount/InventoryDialog/index.vue

@@ -64,7 +64,9 @@
     if (res?.code===2000) {
     if (res?.code===2000) {
         const reslist=await api.GetPermission();
         const reslist=await api.GetPermission();
         if (reslist?.code===2000) {
         if (reslist?.code===2000) {
-            const record = findCheckRecord(check_no.value, reslist.data.results);
+            const record = findCheckRecord(check_no.value, reslist.data);
+            // console.log("reslist::::",res.data.id)
+            // console.log("record::::",record)
             deviceList.value.push({
             deviceList.value.push({
                 ...payload,
                 ...payload,
                 productName: res.data?.productName || '未知商品',
                 productName: res.data?.productName || '未知商品',

+ 14 - 14
src/views/system/allusers/api.ts

@@ -24,21 +24,21 @@ export function AddObj(obj: AddReq) {
 	});
 	});
 }
 }
 
 
-// export function UpdateObj(obj: EditReq) {
-// 	return request({
-// 		url: apiPrefix + obj.id + '/',
-// 		method: 'put',
-// 		data: obj,
-// 	});
-// }
+export function UpdateObj(obj: EditReq) {
+	return request({
+		url: apiPrefix + obj.id + '/',
+		method: 'put',
+		data: obj,
+	});
+}
 
 
-// export function DelObj(id: DelReq) {
-// 	return request({
-// 		url: apiPrefix + id + '/',
-// 		method: 'delete',
-// 		data: { id },
-// 	});
-// }
+export function DelObj(id: DelReq) {
+	return request({
+		url: apiPrefix + id + '/',
+		method: 'delete',
+		data: { id },
+	});
+}
 export function GetPermission() {
 export function GetPermission() {
     return request({
     return request({
         url: apiPrefix,
         url: apiPrefix,

+ 40 - 7
src/views/system/allusers/crud.tsx

@@ -11,13 +11,13 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 		return await api.GetObj(row.id);
 		return await api.GetObj(row.id);
 	};
 	};
 
 
-	// const editRequest = async ({ form, row }: EditReq) => {
-	// 	form.id = row.id;
-	// 	return await api.UpdateObj(form);
-	// };
-	// const delRequest = async ({ row }: DelReq) => {
-	// 	return await api.DelObj(row.id);
-	// };
+	const editRequest = async ({ form, row }: EditReq) => {
+		form.id = row.id;
+		return await api.UpdateObj(form);
+	};
+	const delRequest = async ({ row }: DelReq) => {
+		return await api.DelObj(row.id);
+	};
 	const addRequest = async ({ form }: AddReq) => {
 	const addRequest = async ({ form }: AddReq) => {
 		return await api.AddObj(form);
 		return await api.AddObj(form);
 	};
 	};
@@ -37,6 +37,8 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 		crudOptions: {
 		crudOptions: {
 			request: {
 			request: {
 				pageRequest,
 				pageRequest,
+				editRequest,
+				delRequest,
 				addRequest,
 				addRequest,
 				getDetail,
 				getDetail,
 			},
 			},
@@ -80,6 +82,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写学号' },
 						component: { placeholder: '请填写学号' },
 						rules: [{ required: true, message: '请填写学号' }],
 						rules: [{ required: true, message: '请填写学号' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				username:{
 				username:{
 					title:'昵称',
 					title:'昵称',
@@ -92,6 +97,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写昵称' },
 						component: { placeholder: '请填写昵称' },
 						rules: [{ required: true, message: '请填写昵称' }],
 						rules: [{ required: true, message: '请填写昵称' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				name: {
 				name: {
 					title: '名称',
 					title: '名称',
@@ -124,6 +132,12 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写密码' },
 						component: { placeholder: '请填写密码' },
 						rules: [{ required: true, message: '请填写密码' }],
 						rules: [{ required: true, message: '请填写密码' }],
 					},
 					},
+					editForm:{
+						show:false,
+					},
+					viewForm:{
+						show:false,
+					}
 				},
 				},
 				email:{
 				email:{
 					title: '邮箱',
 					title: '邮箱',
@@ -136,6 +150,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写邮箱' },
 						component: { placeholder: '请填写邮箱' },
 						rules: [{ required: false, message: '请填写邮箱' }],
 						rules: [{ required: false, message: '请填写邮箱' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				mobile:{
 				mobile:{
 					title: '手机号',
 					title: '手机号',
@@ -148,6 +165,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写手机号' },
 						component: { placeholder: '请填写手机号' },
 						rules: [{ required: true, message: '请填写手机号' }],
 						rules: [{ required: true, message: '请填写手机号' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				gender:{
 				gender:{
 					title: '性别',
 					title: '性别',
@@ -178,6 +198,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 							{ label: '学生', value: 0 },
 							{ label: '学生', value: 0 },
 							{ label: '教师', value: 1 },
 							{ label: '教师', value: 1 },
 							{ label: '校外团体', value: 2 },
 							{ label: '校外团体', value: 2 },
+							{ label: '学院领导', value: 3 },
 						],
 						],
 					}),
 					}),
 					form: {
 					form: {
@@ -196,6 +217,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写学院' },
 						component: { placeholder: '请填写学院' },
 						rules: [{ required: false, message: '请填写学院' }],
 						rules: [{ required: false, message: '请填写学院' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				sub_organization:{
 				sub_organization:{
 					title: '专业',
 					title: '专业',
@@ -208,6 +232,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写专业' },
 						component: { placeholder: '请填写专业' },
 						rules: [{ required: false, message: '请填写专业' }],
 						rules: [{ required: false, message: '请填写专业' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				grade_or_level:{
 				grade_or_level:{
 					title: '年级',
 					title: '年级',
@@ -220,6 +247,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写年级' },
 						component: { placeholder: '请填写年级' },
 						rules: [{ required: false, message: '请填写年级' }],
 						rules: [{ required: false, message: '请填写年级' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				class_or_group:{
 				class_or_group:{
 					title: '班级',
 					title: '班级',
@@ -232,6 +262,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写班级' },
 						component: { placeholder: '请填写班级' },
 						rules: [{ required: false, message: '请填写班级' }],
 						rules: [{ required: false, message: '请填写班级' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 
 
 
 

+ 12 - 0
src/views/system/borrow/component/CollectEquipment/AbnormalDialog/index.vue

@@ -15,6 +15,16 @@
           placeholder="请输入异常说明"
           placeholder="请输入异常说明"
         />
         />
       </el-form-item>
       </el-form-item>
+      
+      <el-form-item label="异常类型">
+      <el-select v-model="form.abnormalType" placeholder="请选择异常类型">
+        <el-option label="严重损坏" value="严重损坏" />
+        <el-option label="中度损坏" value="中度损坏" />
+        <el-option label="轻度损坏" value="轻度损坏" />
+      </el-select>
+    </el-form-item>
+
+
       <el-form-item label="照片">
       <el-form-item label="照片">
         <el-upload
         <el-upload
           class="upload-demo"
           class="upload-demo"
@@ -74,6 +84,7 @@ watch(() => dialogVisible.value, (newVal) => {
 const fileList = ref<any[]>([]);
 const fileList = ref<any[]>([]);
 
 
 const form = ref({
 const form = ref({
+  abnormalType:'',
   condition: '',
   condition: '',
   photos: [] as Array<{
   photos: [] as Array<{
     filename: string;
     filename: string;
@@ -117,6 +128,7 @@ const handleRemove = (file: any) => {
 
 
 const onCancel = () => {
 const onCancel = () => {
   form.value = {
   form.value = {
+    abnormalType:'',
     condition: '',
     condition: '',
     photos: []
     photos: []
   };
   };

+ 49 - 2
src/views/system/borrow/crud.tsx

@@ -148,7 +148,11 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 				}},
 				}},
 				borrower_type_label: { title: '借用人角色', column: { minWidth: 100 } },
 				borrower_type_label: { title: '借用人角色', column: { minWidth: 100 } },
 				borrow_type_label: { search: { show: false },title: '借用性质', column: { minWidth: 100 } },
 				borrow_type_label: { search: { show: false },title: '借用性质', column: { minWidth: 100 } },
-				"borrower_info.user_code":{title:"学号/工号",column: { minWidth: 100 }},
+				"borrower_info.user_code":{title:"学号/工号",search:{
+					show:true,		
+				},column: { minWidth: 100 },form:{
+					component: { placeholder: '' },
+				}},
 				"borrower_info.name": {
 				"borrower_info.name": {
 					title: '借用人',
 					title: '借用人',
 					search:{
 					search:{
@@ -182,7 +186,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 				},
 				},
 				expected_end_time: {
 				expected_end_time: {
 					title: '预计归还',
 					title: '预计归还',
-					column: { minWidth: 140, formatter: ({ value }: any) => (value ? dayjs(value).format('YYYY-MM-DD HH:mm:ss') : '') },
+					column: { minWidth: 140, formatter: ({ value }: any) => (value ? dayjs(value).format('YYYY-MM-DD') : '') },
 				},
 				},
 				actual_end_time: {
 				actual_end_time: {
 					title: '完结时间',
 					title: '完结时间',
@@ -216,6 +220,49 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 					title: '更新时间',
 					title: '更新时间',
 					column: { show:false,minWidth: 160, formatter: ({ value }: any) => (value ? dayjs(value).format('YYYY-MM-DD HH:mm:ss') : '') },
 					column: { show:false,minWidth: 160, formatter: ({ value }: any) => (value ? dayjs(value).format('YYYY-MM-DD HH:mm:ss') : '') },
 				},
 				},
+				"items.device_code": {
+					title: '设备编号',
+					search:{
+						show:true,		
+					},
+					column: {
+						show:false,
+						minWidth: 100,
+					},  form:{
+						show:false,
+						component: { placeholder: '' },
+					}
+				},
+				problem_records: {
+					title: '异常记录',
+					search:{
+						show:true,		
+					},
+					column: {
+						show:false,
+						minWidth: 100,
+					},  form:{
+						show:false,
+						component: { placeholder: '' },
+					}
+				},
+				accessories: {
+					title: '扫设备编码',
+					search:{
+						show:true,		
+					},
+					column: {
+						show:false,
+						minWidth: 100,
+					},  form:{
+						show:false,
+						component: { placeholder: '' },
+					}
+				},
+
+
+
+
 			},
 			},
 		},
 		},
 	};
 	};

+ 15 - 1
src/views/system/device/crud.tsx

@@ -153,6 +153,20 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
                 }
                 }
             },
             },
 			columns: {
 			columns: {
+				$checked: {
+					title: "选择",
+					form: { show: false },
+					column: {
+					type: "selection",
+					align: "center",
+					width: "55px",
+					columnSetDisabled: true, //禁止在列设置中选择
+					selectable(row, index) {
+						// return row.id !== 1; //设置第一行不允许选择
+						return row.id;
+					}
+				}
+				},
 				_index: {
 				_index: {
 					title: '序号',
 					title: '序号',
 					form: { show: false },
 					form: { show: false },
@@ -649,7 +663,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 					type: 'input',
 					type: 'input',
 					column: { show:false,minWidth: 120 },
 					column: { show:false,minWidth: 120 },
 					form: {
 					form: {
-						show:true,
+						show:false,
 						component: { placeholder: '请输入维修' }
 						component: { placeholder: '请输入维修' }
 					},
 					},
 					viewForm:{
 					viewForm:{

+ 29 - 2
src/views/system/device/index.vue

@@ -1,17 +1,44 @@
 <template>
 <template>
 	<fs-page>
 	<fs-page>
-		<fs-crud ref="crudRef" v-bind="crudBinding"> </fs-crud>
+		<fs-crud ref="crudRef" v-bind="crudBinding"> 
+			<template #actionbar-right>
+				<el-button type="primary" @click="handleBatchImport">批量导入</el-button>
+				<el-button type="primary" @click="handleExports" >导出</el-button>
+				<el-button type="primary"  @click="handleDownloadTemplate">下载模板</el-button>
+				<el-button type="danger" @click="handleBatchDelete" >批量删除</el-button>
+			</template>
+			<!-- <template #pagination-left>
+			<el-tooltip content="批量删除">
+			<fs-button  @click="handleBatchDelete">批量删除</fs-button>
+			</el-tooltip> 
+			</template>-->
+		</fs-crud>
 	</fs-page>
 	</fs-page>
 </template>
 </template>
 <script lang="ts" setup name="device">
 <script lang="ts" setup name="device">
 import { onMounted } from 'vue';
 import { onMounted } from 'vue';
-import { useFs } from '@fast-crud/fast-crud';
+import { useFs} from '@fast-crud/fast-crud';
 import { createCrudOptions } from './crud';
 import { createCrudOptions } from './crud';
 // import { GetPermission } from './api';
 // import { GetPermission } from './api';
 // import { handleColumnPermission } from '/@/utils/columnPermission';
 // import { handleColumnPermission } from '/@/utils/columnPermission';
 
 
 const { crudBinding, crudRef, crudExpose, crudOptions, resetCrudOptions } = useFs({ createCrudOptions });
 const { crudBinding, crudRef, crudExpose, crudOptions, resetCrudOptions } = useFs({ createCrudOptions });
 
 
+const handleBatchImport = () => {
+
+}
+const handleExports = () => {
+
+}
+
+const handleDownloadTemplate = () => {
+
+}
+
+function handleBatchDelete(){
+
+}
+
 // 页面打开后获取列表数据
 // 页面打开后获取列表数据
 onMounted(async () => {
 onMounted(async () => {
 	// 设置列权限
 	// 设置列权限

+ 9 - 0
src/views/system/devicedamage/api.ts

@@ -46,3 +46,12 @@ export function GetPermission() {
         method: 'get',
         method: 'get',
     });
     });
 }
 }
+
+
+export function UpdateDamageCancel(obj: EditReq) {
+	return request({
+		url: apiPrefix + obj.id + '/cancel_damage/',
+		method: 'post',
+		data: obj,
+	});
+}

+ 49 - 14
src/views/system/devicedamage/crud.tsx

@@ -2,6 +2,8 @@ import { AddReq, CreateCrudOptionsProps,dict, CreateCrudOptionsRet, UserPageQuer
 import * as api from './api';
 import * as api from './api';
 import { auth } from '/@/utils/authFunction';
 import { auth } from '/@/utils/authFunction';
 import { ja } from 'element-plus/es/locale';
 import { ja } from 'element-plus/es/locale';
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { request } from '/@/utils/service'
 
 
 
 
 export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
 export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
@@ -48,13 +50,44 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 				show:false,
 				show:false,
 			},
 			},
 			rowHandle:{
 			rowHandle:{
+				fixed: 'right',
+				width: 220,
 				buttons:{
 				buttons:{
 					remove:{
 					remove:{
 						show:true,
 						show:true,
 					},
 					},
 					edit:{
 					edit:{
 						show:true,
 						show:true,
+					},
+					cancelDamage: {
+						text: '撤销报损',
+						type: 'danger',
+						order: 98,
+						show: true,
+						click({ row }) {
+							ElMessageBox.confirm('确认撤销该报损记录?', '提示', {
+							confirmButtonText: '确定',
+							cancelButtonText: '取消',
+							type: 'warning'
+							}).then(async () => {
+							try {
+								const res = await api.UpdateDamageCancel(row);
+								console.log("res::::",res)
+								if (res.code === 2000) {
+								ElMessage.success('撤销成功')
+								crudExpose.doRefresh()
+								} else {
+								ElMessage.error(res.msg || '撤销失败')
+								}
+							} catch (err) {
+								ElMessage.error('请求失败')
+							}
+							}).catch(() => {
+							// 用户取消操作
+							})
+						}
 					}
 					}
+						
 
 
 				}
 				}
 
 
@@ -178,7 +211,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 					}
 					}
 				},
 				},
 				damage_type:{
 				damage_type:{
-					title: '维修类型',
+					title: '报损类型',
 					type: 'dict-select',
 					type: 'dict-select',
 					dict: dict({
 					dict: dict({
 						data: [
 						data: [
@@ -192,8 +225,8 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 					form: {
 					form: {
 						value:0,
 						value:0,
 						show:true,
 						show:true,
-						component: { placeholder: '请填写排序'},
-						rules: [{ required: false, message: '请填写排序' }],
+						component: { placeholder: '请填写报损类型'},
+						rules: [{ required: false, message: '请填写报损类型' }],
 					},
 					},
 					editForm:{
 					editForm:{
 						component: { disabled: true },
 						component: { disabled: true },
@@ -219,22 +252,24 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 					}
 					}
 				},
 				},
 				estimated_loss:{
 				estimated_loss:{
-					title: '预估维修费用',
+					title: '维修费用',
 					type: 'input',
 					type: 'input',
 					column: {
 					column: {
 						minWidth: 120,
 						minWidth: 120,
-						show:compute(({ form }) => {
-							// 只有当选择了胜任力标签时才显示配置
-							return form && form.damage_type === 1;
-						})
+						show:false,
+						// show:compute(({ form }) => {
+						// 	// 只有当选择了胜任力标签时才显示配置
+						// 	return form && form.damage_type === 1;
+						// })
 					},
 					},
 					form: {
 					form: {
-						component: { placeholder: '请填写预估维修费用' },
-						rules: [{ required: false, message: '请填写预估维修费用' }],
-						show:compute(({ form }) => {
-							// 只有当选择了胜任力标签时才显示配置
-							return form && form.damage_type === 1;
-						})
+						show:false,
+						component: { placeholder: '请填写维修费用' },
+						rules: [{ required: false, message: '请填写维修费用' }],
+						// show:compute(({ form }) => {
+						// 	// 只有当选择了胜任力标签时才显示配置
+						// 	return form && form.damage_type === 1;
+						// })
 					},
 					},
 					viewForm:{
 					viewForm:{
 						component: { placeholder: '' },
 						component: { placeholder: '' },

+ 97 - 0
src/views/system/devicemaintenance/RepairStatusDialog/index.vue

@@ -0,0 +1,97 @@
+<template>
+    <el-dialog
+      v-model="visible"
+      title="修改维修状态"
+      width="500px"
+      :close-on-click-modal="false"
+      @close="onCancel"
+    >
+      <el-form :model="form" label-width="100px">
+        <el-form-item label="维修状态">
+          <el-select v-model="form.status" placeholder="请选择维修状态">
+            <el-option label="待维修" :value="1" />
+            <el-option label="维修中" :value="2" />
+            <el-option label="维修完成" :value="3" />
+          </el-select>
+        </el-form-item>
+  
+        <el-form-item label="维修人员" v-if="form.status === 2">
+          <el-input v-model="form.repair_person" placeholder="请输入维修人员" />
+        </el-form-item>
+  
+        <el-form-item label="维修结果" v-if="form.status === 3">
+          <el-input v-model="form.repair_result" placeholder="请输入维修结果" />
+        </el-form-item>
+  
+        <el-form-item label="维修费用" v-if="form.status === 3">
+          <el-input-number v-model="form.repair_cost" :min="0" />
+        </el-form-item>
+  
+        <!-- <el-form-item label="维修备注">
+          <el-input type="textarea" v-model="form.repair_remark" :rows="2" />
+        </el-form-item> -->
+  
+        <!-- <el-form-item label="维修附件">
+          <el-input
+            type="textarea"
+            v-model="form.repair_attachments"
+            placeholder="多个附件用换行分隔"
+            :rows="2"
+          />
+        </el-form-item> -->
+      </el-form>
+  
+      <template #footer>
+        <el-button @click="onCancel">取消</el-button>
+        <el-button type="primary" @click="onConfirm">提交</el-button>
+      </template>
+    </el-dialog>
+  </template>
+  
+  <script setup lang="ts">
+  import { ref, reactive,watch } from 'vue'
+  import { ElMessage } from 'element-plus'
+  import { request } from '/@/utils/service'
+  
+  const props = defineProps<{ id: number; visible: boolean }>()
+  const emit = defineEmits(['update:visible', 'success'])
+
+  console.log("props::::",props.id)
+  
+  const visible = ref(props.visible)
+  watch(() => props.visible, val => (visible.value = val))
+  watch(() => visible.value, val => emit('update:visible', val))
+  
+  const form = reactive({
+    status: 1,
+    repair_person: '',
+    repair_result: '',
+    repair_cost: 0,
+    repair_remark: '',
+    repair_attachments: ''
+  })
+  
+  const onCancel = () => {
+    visible.value = false
+  }
+  
+  const onConfirm = async () => {
+    try {
+      const res = await request({
+        url: `/api/system/device-damage-records/${props.id}/update_repair_status/`,
+        method: 'post',
+        data: form
+      })
+      if (res.code === 2000) {
+        ElMessage.success('状态更新成功')
+        emit('success')
+        visible.value = false
+      } else {
+        ElMessage.error(res.msg || '更新失败')
+      }
+    } catch (err) {
+      ElMessage.error('请求失败')
+    }
+  }
+  </script>
+  

+ 100 - 5
src/views/system/devicemaintenance/crud.tsx

@@ -2,9 +2,13 @@ import { AddReq, CreateCrudOptionsProps,dict, CreateCrudOptionsRet, UserPageQuer
 import * as api from './api';
 import * as api from './api';
 import { auth } from '/@/utils/authFunction';
 import { auth } from '/@/utils/authFunction';
 import { ja } from 'element-plus/es/locale';
 import { ja } from 'element-plus/es/locale';
+import {getBaseURL} from '/@/utils/baseUrl';
+import Cookies from 'js-cookie';
+import {request} from '/@/utils/service';
+import {Ref} from 'vue'
 
 
-
-export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
+export const createCrudOptions = function ({ crudExpose,  dialogId,
+	dialogVisible }: CreateCrudOptionsProps & { dialogId: Ref<number | null>; dialogVisible: Ref<boolean> }): CreateCrudOptionsRet {
 	const pageRequest = async (query: UserPageQuery) => {
 	const pageRequest = async (query: UserPageQuery) => {
 		return await api.GetList(query);
 		return await api.GetList(query);
 	};
 	};
@@ -48,12 +52,24 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 				show:false,
 				show:false,
 			},
 			},
 			rowHandle:{
 			rowHandle:{
+				fixed: 'right',
+				width: 220,
 				buttons:{
 				buttons:{
 					remove:{
 					remove:{
 						show:true,
 						show:true,
 					},
 					},
 					edit:{
 					edit:{
 						show:true,
 						show:true,
+					},
+					updateStatus: {
+						text: '修改状态',
+						show: true,
+						order: 99,
+						type: 'primary',
+						click({ row }) {
+							dialogId.value = row.id
+							dialogVisible.value = true
+						}
 					}
 					}
 
 
 				}
 				}
@@ -219,7 +235,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 					}
 					}
 				},
 				},
 				estimated_loss:{
 				estimated_loss:{
-					title: '预估维修费用',
+					title: '维修费用',
 					type: 'input',
 					type: 'input',
 					column: {
 					column: {
 						minWidth: 120,
 						minWidth: 120,
@@ -229,8 +245,8 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						})
 						})
 					},
 					},
 					form: {
 					form: {
-						component: { placeholder: '请填写预估维修费用' },
-						rules: [{ required: false, message: '请填写预估维修费用' }],
+						component: { placeholder: '请填写维修费用' },
+						rules: [{ required: false, message: '请填写维修费用' }],
 						show:compute(({ form }) => {
 						show:compute(({ form }) => {
 							// 只有当选择了胜任力标签时才显示配置
 							// 只有当选择了胜任力标签时才显示配置
 							return form && form.damage_type === 1;
 							return form && form.damage_type === 1;
@@ -276,6 +292,85 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						rules: [{ required: true, message: '' }],
 						rules: [{ required: true, message: '' }],
 					}
 					}
 				},
 				},
+				remark:{
+					title: '备注',
+					type: 'input',
+					column: {
+						minWidth: 120,
+					},
+					form: {
+						show:true,
+						component: { placeholder: '请填写备注' },
+						rules: [{ required: false, message: '请填写备注' }],
+					},
+					viewForm:{
+						component: { placeholder: '' },
+						rules: [{ required: true, message: '' }],
+					}
+				},
+				damage_images:{
+					title: '附件',
+					type: 'image-uploader',
+					column: {
+						minWidth: 120,
+					},
+					form: {
+						show: auth('image:upload'),
+						component: {
+							uploader: {
+								type: 'form',
+								limit: 1,
+								action: '/api/system/device/upload-image/',
+								accept: ".jpg,.png",
+								uploadRequest: async ({ action, file, onProgress }) => {
+									const token = Cookies.get('token'); 
+									const data = new FormData();
+									data.append("image", file);
+									return await request({
+										url: action,
+										method: "post",
+										timeout: 60000,
+										headers: {
+										"Content-Type": "multipart/form-data",
+										"Authorization": token ? `JWT ${token}` : ''
+										},
+										data,
+										onUploadProgress: (p) => {
+										onProgress({ percent: Math.round((p.loaded / p.total) * 100) });
+										}
+									});
+								},
+								successHandle(ret) {
+									// eslint-disable-next-line no-console
+									// console.log("ret.data.image_url:::",ret.data.image_url);
+
+									return {
+										url: getBaseURL(ret.data.image_url), 
+										key: ret.data.id,
+										...ret.data
+									};
+								},
+							
+								
+
+								
+							}
+						},
+						
+					},
+					valueBuilder({ row, key }) {
+						return row[key] ? [row[key]] : [];
+					},
+					valueResolve({ form, key }) {
+						// eslint-disable-next-line no-console
+						console.log("form[key]:::",form[key]);
+						form[key] = Array.isArray(form[key]) ? form[key][0] : form[key];
+					},
+					viewForm:{
+						component: { placeholder: '' },
+						rules: [{ required: true, message: '' }],
+					}
+				}
 
 
 
 
 
 

+ 27 - 2
src/views/system/devicemaintenance/index.vue

@@ -4,17 +4,42 @@
 		<!-- <template #form-header-right>
 		<!-- <template #form-header-right>
         <el-tag color="danger">form-header-right插槽</el-tag>
         <el-tag color="danger">form-header-right插槽</el-tag>
       </template> -->
       </template> -->
+	  <RepairStatusDialog
+		v-show="dialogId !== null"
+		:id="dialogId"
+		v-model:visible="dialogVisible"
+		@success="handleSuccess"
+		/>
 	</fs-page>
 	</fs-page>
+
+
 </template>
 </template>
 
 
 <script lang="ts" setup name="devicemaintenance">
 <script lang="ts" setup name="devicemaintenance">
 import { useFs } from '@fast-crud/fast-crud';
 import { useFs } from '@fast-crud/fast-crud';
-import { onMounted } from 'vue';
+import { onMounted ,ref} from 'vue';
 import { GetPermission } from './api';
 import { GetPermission } from './api';
 import { createCrudOptions } from './crud';
 import { createCrudOptions } from './crud';
 import { handleColumnPermission } from '/@/utils/columnPermission';
 import { handleColumnPermission } from '/@/utils/columnPermission';
+import RepairStatusDialog from './RepairStatusDialog/index.vue'
+
+// const { crudBinding, crudRef, crudExpose, crudOptions, resetCrudOptions } = useFs({ createCrudOptions });
+
+
+const dialogVisible = ref(false)
+const dialogId = ref<number | null>(null)
+
+const handleSuccess = () => {
+  crudExpose.doRefresh()
+}
+
+const { crudBinding, crudRef, crudExpose, crudOptions, resetCrudOptions } = useFs({
+  createCrudOptions: (ctx) => createCrudOptions({ ...ctx, dialogId, dialogVisible })
+})
+
+console.log("dialogId:::",dialogId)
+
 
 
-const { crudBinding, crudRef, crudExpose, crudOptions, resetCrudOptions } = useFs({ createCrudOptions });
 
 
 // 页面打开后获取列表数据
 // 页面打开后获取列表数据
 onMounted(async () => {
 onMounted(async () => {

+ 1 - 1
src/views/system/home/api.ts

@@ -49,7 +49,7 @@ export function GetUtilizationList() {
 
 
 export function GetBorrowTrends() {
 export function GetBorrowTrends() {
 	return request({
 	return request({
-		url: apiPrefix+'borrow_trends/',
+		url: apiPrefix+'borrow_trends/?period=week',
 		method: 'get',
 		method: 'get',
 	});
 	});
 }
 }

+ 29 - 3
src/views/system/home/index.vue

@@ -774,6 +774,28 @@ export default defineComponent({
 
 
 
 
 
 
+		const groupByMonth = (data: Array<{ date: string; borrow_count: number; total_duration: number }>) => {
+				const map = new Map<string, { borrow_count: number; total_duration: number }>()
+
+				data.forEach(item => {
+					const month = dayjs(item.date).format('YYYY-MM')
+					if (!map.has(month)) {
+					map.set(month, { borrow_count: 0, total_duration: 0 })
+					}
+					const current = map.get(month)!
+					current.borrow_count += item.borrow_count
+					current.total_duration += item.total_duration
+				})
+
+				return Array.from(map.entries()).map(([month, values]) => ({
+					date: month, // 保持字段名为 date,兼容原图表逻辑
+					borrow_count: values.borrow_count,
+					total_duration: values.total_duration
+				}))
+		}
+
+
+
 
 
 		// 更新首页数据
 		// 更新首页数据
 		const updateHomeData = (data: ApiData) => {
 		const updateHomeData = (data: ApiData) => {
@@ -788,6 +810,7 @@ export default defineComponent({
 		};
 		};
 		//更新整体借用趋势
 		//更新整体借用趋势
 		const updateBorrowTrendChart = (trendData: Array<{ date: string; borrow_count: number; total_duration: number }>) => {
 		const updateBorrowTrendChart = (trendData: Array<{ date: string; borrow_count: number; total_duration: number }>) => {
+			const monthlyData = groupByMonth(trendData) 
 			const echart3 = echarts.init(document.getElementById('echart3'));
 			const echart3 = echarts.init(document.getElementById('echart3'));
 			if (!echart3) return;
 			if (!echart3) return;
 
 
@@ -824,7 +847,8 @@ export default defineComponent({
 					axisLine: {
 					axisLine: {
 						lineStyle: { color: 'rgba(255,255,255,.1)' }
 						lineStyle: { color: 'rgba(255,255,255,.1)' }
 					},
 					},
-					data: trendData.map(item => item.date.substring(5))
+					// data: trendData.map(item => item.date.substring(5))
+					data: monthlyData.map(item => item.date)
 				}],
 				}],
 				yAxis: [{
 				yAxis: [{
 					axisLabel: {
 					axisLabel: {
@@ -843,13 +867,15 @@ export default defineComponent({
 						name: '借用次数',
 						name: '借用次数',
 						type: 'line',
 						type: 'line',
 						smooth: true,
 						smooth: true,
-						data: trendData.map(item => item.borrow_count)
+						// data: trendData.map(item => item.borrow_count)
+						data: monthlyData.map(item => item.borrow_count)
 					},
 					},
 					{
 					{
 						name: '借用时长',
 						name: '借用时长',
 						type: 'line',
 						type: 'line',
 						smooth: true,
 						smooth: true,
-						data: trendData.map(item => item.total_duration)
+						// data: trendData.map(item => item.total_duration)
+						data: monthlyData.map(item => item.total_duration)
 					}
 					}
 				]
 				]
 			};
 			};

+ 4 - 3
src/views/system/messageCenter/crud.tsx

@@ -68,9 +68,10 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
 			actionbar: {
 			actionbar: {
 				buttons: {
 				buttons: {
 					add: {
 					add: {
-						show: computed(() => {
-							return tabActivted.value !== 'receive' && auth('messageCenter:Create');
-						}),
+						show:false,
+						// show: computed(() => {
+						// 	return tabActivted.value !== 'receive' && auth('messageCenter:Create');
+						// }),
 					},
 					},
 				},
 				},
 			},
 			},

+ 2 - 2
src/views/system/messageCenter/index.vue

@@ -3,7 +3,7 @@
 		<fs-crud ref="crudRef" v-bind="crudBinding">
 		<fs-crud ref="crudRef" v-bind="crudBinding">
 			<template #header-middle>
 			<template #header-middle>
 				<el-tabs v-model="tabActivted" @tab-click="onTabClick">
 				<el-tabs v-model="tabActivted" @tab-click="onTabClick">
-					<el-tab-pane label="我的发布" name="send"></el-tab-pane>
+					<!-- <el-tab-pane label="我的发布" name="send"></el-tab-pane> -->
 					<el-tab-pane label="我的接收" name="receive"></el-tab-pane>
 					<el-tab-pane label="我的接收" name="receive"></el-tab-pane>
 				</el-tabs>
 				</el-tabs>
 			</template>
 			</template>
@@ -17,7 +17,7 @@ import { useFs } from '@fast-crud/fast-crud';
 import createCrudOptions from './crud';
 import createCrudOptions from './crud';
 
 
 //tab选择
 //tab选择
-const tabActivted = ref('send');
+const tabActivted = ref('receive');
 const onTabClick = (tab: any) => {
 const onTabClick = (tab: any) => {
 	const { paneName } = tab;
 	const { paneName } = tab;
 	tabActivted.value = paneName;
 	tabActivted.value = paneName;

+ 21 - 1
src/views/system/screenconsole/component/StatusCards.vue

@@ -34,7 +34,7 @@ import {
   Edit, Refresh, Tools, Box, Folder, Monitor
   Edit, Refresh, Tools, Box, Folder, Monitor
 } from '@element-plus/icons-vue'
 } from '@element-plus/icons-vue'
 import { defineProps ,computed} from 'vue'
 import { defineProps ,computed} from 'vue'
-
+import { useRouter } from 'vue-router'
 
 
 const props = defineProps({
 const props = defineProps({
   statusData: {
   statusData: {
@@ -43,14 +43,34 @@ const props = defineProps({
   }
   }
 })
 })
 
 
+
+
 const statusList = computed(()=>[
 const statusList = computed(()=>[
   { label: '待审核', value: props.statusData.pending_approval, icon: Edit },
   { label: '待审核', value: props.statusData.pending_approval, icon: Edit },
   { label: '待归还', value: props.statusData.pending_return, icon: Refresh },
   { label: '待归还', value: props.statusData.pending_return, icon: Refresh },
   { label: '待维修', value: props.statusData.pending_maintenance, icon: Tools },
   { label: '待维修', value: props.statusData.pending_maintenance, icon: Tools },
   { label: '已逾期', value: props.statusData.pending_overdue, icon: Box },
   { label: '已逾期', value: props.statusData.pending_overdue, icon: Box },
 ])
 ])
+
+const router = useRouter()
   function handleClick(item: any) {
   function handleClick(item: any) {
       console.log('点击状态卡片:', item.label);
       console.log('点击状态卡片:', item.label);
+      switch (item.label) {
+      case '待审核':
+        router.push('/borrow/approval')
+        break
+      case '待归还':
+        router.push('/borrow/list')
+        break
+      case '待维修':
+        router.push('/devicemaintenance')
+        break
+      case '已逾期':
+        router.push('/device/list')
+        break
+      default:
+        console.warn('未知状态:', item.label)
+  }
   }
   }
   </script>
   </script>
   
   

+ 14 - 14
src/views/system/studentInfo/api.ts

@@ -24,21 +24,21 @@ export function AddObj(obj: AddReq) {
 	});
 	});
 }
 }
 
 
-// export function UpdateObj(obj: EditReq) {
-// 	return request({
-// 		url: apiPrefix + obj.id + '/',
-// 		method: 'put',
-// 		data: obj,
-// 	});
-// }
+export function UpdateObj(obj: EditReq) {
+	return request({
+		url: apiPrefix + obj.id + '/',
+		method: 'put',
+		data: obj,
+	});
+}
 
 
-// export function DelObj(id: DelReq) {
-// 	return request({
-// 		url: apiPrefix + id + '/',
-// 		method: 'delete',
-// 		data: { id },
-// 	});
-// }
+export function DelObj(id: DelReq) {
+	return request({
+		url: apiPrefix + id + '/',
+		method: 'delete',
+		data: { id },
+	});
+}
 export function GetPermission() {
 export function GetPermission() {
     return request({
     return request({
         url: apiPrefix,
         url: apiPrefix,

+ 44 - 7
src/views/system/studentInfo/crud.tsx

@@ -11,13 +11,13 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 		return await api.GetObj(row.id);
 		return await api.GetObj(row.id);
 	};
 	};
 
 
-	// const editRequest = async ({ form, row }: EditReq) => {
-	// 	form.id = row.id;
-	// 	return await api.UpdateObj(form);
-	// };
-	// const delRequest = async ({ row }: DelReq) => {
-	// 	return await api.DelObj(row.id);
-	// };
+	const editRequest = async ({ form, row }: EditReq) => {
+		form.id = row.id;
+		return await api.UpdateObj(form);
+	};
+	const delRequest = async ({ row }: DelReq) => {
+		return await api.DelObj(row.id);
+	};
 	const addRequest = async ({ form }: AddReq) => {
 	const addRequest = async ({ form }: AddReq) => {
 		return await api.AddObj(form);
 		return await api.AddObj(form);
 	};
 	};
@@ -37,6 +37,8 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 		crudOptions: {
 		crudOptions: {
 			request: {
 			request: {
 				pageRequest,
 				pageRequest,
+				editRequest,
+				delRequest,
 				addRequest,
 				addRequest,
 				getDetail,
 				getDetail,
 			},
 			},
@@ -80,6 +82,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写学号' },
 						component: { placeholder: '请填写学号' },
 						rules: [{ required: true, message: '请填写学号' }],
 						rules: [{ required: true, message: '请填写学号' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				username:{
 				username:{
 					title:'昵称',
 					title:'昵称',
@@ -92,6 +97,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写昵称' },
 						component: { placeholder: '请填写昵称' },
 						rules: [{ required: true, message: '请填写昵称' }],
 						rules: [{ required: true, message: '请填写昵称' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				name: {
 				name: {
 					title: '名称',
 					title: '名称',
@@ -112,6 +120,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 							placeholder: '请输入名称',
 							placeholder: '请输入名称',
 						},
 						},
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				password:{
 				password:{
 					title: '密码',
 					title: '密码',
@@ -124,6 +135,12 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写密码' },
 						component: { placeholder: '请填写密码' },
 						rules: [{ required: true, message: '请填写密码' }],
 						rules: [{ required: true, message: '请填写密码' }],
 					},
 					},
+					editForm:{
+						show:false,
+					},
+					viewForm:{
+						show:false,
+					}
 				},
 				},
 				email:{
 				email:{
 					title: '邮箱',
 					title: '邮箱',
@@ -136,6 +153,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写邮箱' },
 						component: { placeholder: '请填写邮箱' },
 						rules: [{ required: false, message: '请填写邮箱' }],
 						rules: [{ required: false, message: '请填写邮箱' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				mobile:{
 				mobile:{
 					title: '手机号',
 					title: '手机号',
@@ -148,6 +168,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写手机号' },
 						component: { placeholder: '请填写手机号' },
 						rules: [{ required: true, message: '请填写手机号' }],
 						rules: [{ required: true, message: '请填写手机号' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				gender:{
 				gender:{
 					title: '性别',
 					title: '性别',
@@ -178,9 +201,11 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 							{ label: '学生', value: 0 },
 							{ label: '学生', value: 0 },
 							{ label: '教师', value: 1 },
 							{ label: '教师', value: 1 },
 							{ label: '校外团体', value: 2 },
 							{ label: '校外团体', value: 2 },
+							{ label: '学院领导', value: 3 },
 						],
 						],
 					}),
 					}),
 					form: {
 					form: {
+						value:0,
 						component: { placeholder: '请填写租户' },
 						component: { placeholder: '请填写租户' },
 						rules: [{ required: false, message: '请填写租户' }],
 						rules: [{ required: false, message: '请填写租户' }],
 					},
 					},
@@ -196,6 +221,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写学院' },
 						component: { placeholder: '请填写学院' },
 						rules: [{ required: false, message: '请填写学院' }],
 						rules: [{ required: false, message: '请填写学院' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				sub_organization:{
 				sub_organization:{
 					title: '专业',
 					title: '专业',
@@ -208,6 +236,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写专业' },
 						component: { placeholder: '请填写专业' },
 						rules: [{ required: false, message: '请填写专业' }],
 						rules: [{ required: false, message: '请填写专业' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				grade_or_level:{
 				grade_or_level:{
 					title: '年级',
 					title: '年级',
@@ -220,6 +251,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写年级' },
 						component: { placeholder: '请填写年级' },
 						rules: [{ required: false, message: '请填写年级' }],
 						rules: [{ required: false, message: '请填写年级' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				class_or_group:{
 				class_or_group:{
 					title: '班级',
 					title: '班级',
@@ -232,6 +266,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写班级' },
 						component: { placeholder: '请填写班级' },
 						rules: [{ required: false, message: '请填写班级' }],
 						rules: [{ required: false, message: '请填写班级' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 
 
 
 

+ 81 - 21
src/views/system/teacherInfor/api.ts

@@ -2,12 +2,57 @@ import { AddReq, UserPageQuery } from '@fast-crud/fast-crud';
 import { request } from '/@/utils/service';
 import { request } from '/@/utils/service';
 
 
 export const apiPrefix = '/api/system/app_user/';
 export const apiPrefix = '/api/system/app_user/';
-export function GetList(query: UserPageQuery) {
-	return request({
-		url: apiPrefix+'?user_type=1',
-		method: 'get',
-		params: query,
-	});
+export async function  GetList(query: UserPageQuery) {
+		const res=request({
+			url: apiPrefix+'?user_type=1',
+			method: 'get',
+			params: query,
+		});
+		console.log("ressssss",res)
+		return res
+
+
+		// const [res1, res3] = await Promise.all([
+		// request({
+		// 	url: apiPrefix + '?user_type=1',
+		// 	method: 'get',
+		// 	params: query,
+		// }),
+		// request({
+		// 	url: apiPrefix + '?user_type=3',
+		// 	method: 'get',
+		// 	params: query,
+		// }),
+		// ])
+		// console.log("ressssss",res1)
+		// console.log("ressssss3333",res3)
+		// console.log("resdatassss::",res1.data)
+
+		// // 提取并合并 data 数组
+		// const mergedData = [...(res1?.data|| []), ...(res3?.data || [])]
+
+		// console.log("mergedDataddddddd::",mergedData)
+
+		// // 可选:合并分页信息(根据需要处理)
+		// const mergedResult = {
+		// code: 2000,
+		// msg: 'success',
+		// total: mergedData.length,
+		// data: mergedData,
+		// page: 1,
+		// limit: mergedData.length,
+		// is_next: false,
+		// is_previous: false,
+		// }
+
+		// console.log("mergedResultaaaaaaa::",mergedResult)
+
+		// return mergedResult
+
+
+
+
+
 }
 }
 export function GetObj(id: InfoReq) {
 export function GetObj(id: InfoReq) {
 	return request({
 	return request({
@@ -24,24 +69,39 @@ export function AddObj(obj: AddReq) {
 	});
 	});
 }
 }
 
 
-// export function UpdateObj(obj: EditReq) {
-// 	return request({
-// 		url: apiPrefix + obj.id + '/',
-// 		method: 'put',
-// 		data: obj,
-// 	});
-// }
-
-// export function DelObj(id: DelReq) {
-// 	return request({
-// 		url: apiPrefix + id + '/',
-// 		method: 'delete',
-// 		data: { id },
-// 	});
-// }
+export function UpdateObj(obj: EditReq) {
+	return request({
+		url: apiPrefix + obj.id + '/',
+		method: 'put',
+		data: obj,
+	});
+}
+
+export function DelObj(id: DelReq) {
+	return request({
+		url: apiPrefix + id + '/',
+		method: 'delete',
+		data: { id },
+	});
+}
 export function GetPermission() {
 export function GetPermission() {
     return request({
     return request({
         url: apiPrefix,
         url: apiPrefix,
         method: 'get',
         method: 'get',
     });
     });
+	// const users =  getUsersByTypes([1, 3])
+	// return users
 }
 }
+
+// const getUsersByTypes = async (types: number[]) => {
+// 	const requests = types.map(type =>
+// 		request({
+// 			url: apiPrefix,
+// 			method: 'get',
+// 			params: { user_type: type }
+// 		})
+// 	)
+// 	const results = await Promise.all(requests)
+// 	return results.flatMap(res => res.data.data)
+//   }
+  

+ 44 - 19
src/views/system/teacherInfor/crud.tsx

@@ -5,38 +5,31 @@ import { auth } from '/@/utils/authFunction';
 export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
 export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
 	const pageRequest = async (query: UserPageQuery) => {
 	const pageRequest = async (query: UserPageQuery) => {
 		return await api.GetList(query);
 		return await api.GetList(query);
+	
 	};
 	};
 
 
 		const getDetail = async ({ row }: InfoReq) => {
 		const getDetail = async ({ row }: InfoReq) => {
 		return await api.GetObj(row.id);
 		return await api.GetObj(row.id);
 	};
 	};
 
 
-	// const editRequest = async ({ form, row }: EditReq) => {
-	// 	form.id = row.id;
-	// 	return await api.UpdateObj(form);
-	// };
-	// const delRequest = async ({ row }: DelReq) => {
-	// 	return await api.DelObj(row.id);
-	// };
+	const editRequest = async ({ form, row }: EditReq) => {
+		form.id = row.id;
+		return await api.UpdateObj(form);
+	};
+	const delRequest = async ({ row }: DelReq) => {
+		return await api.DelObj(row.id);
+	};
 	const addRequest = async ({ form }: AddReq) => {
 	const addRequest = async ({ form }: AddReq) => {
 		return await api.AddObj(form);
 		return await api.AddObj(form);
 	};
 	};
 
 
-	/**
-	 * 懒加载
-	 * @param row
-	 * @returns {Promise<unknown>}
-	 */
-	// const loadContentMethod = (tree: any, treeNode: any, resolve: Function) => {
-	// 	pageRequest({ pcode: tree.code }).then((res: APIResponseData) => {
-	// 		resolve(res.data);
-	// 	});
-	// };
 
 
 	return {
 	return {
 		crudOptions: {
 		crudOptions: {
 			request: {
 			request: {
 				pageRequest,
 				pageRequest,
+				editRequest,
+				delRequest,
 				addRequest,
 				addRequest,
 				getDetail,
 				getDetail,
 			},
 			},
@@ -92,6 +85,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写昵称' },
 						component: { placeholder: '请填写昵称' },
 						rules: [{ required: true, message: '请填写昵称' }],
 						rules: [{ required: true, message: '请填写昵称' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				name: {
 				name: {
 					title: '名称',
 					title: '名称',
@@ -124,6 +120,12 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写密码' },
 						component: { placeholder: '请填写密码' },
 						rules: [{ required: true, message: '请填写密码' }],
 						rules: [{ required: true, message: '请填写密码' }],
 					},
 					},
+					editForm:{
+						show:false,
+					},
+					viewForm:{
+						show:false,
+					}
 				},
 				},
 				email:{
 				email:{
 					title: '邮箱',
 					title: '邮箱',
@@ -136,6 +138,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写邮箱' },
 						component: { placeholder: '请填写邮箱' },
 						rules: [{ required: false, message: '请填写邮箱' }],
 						rules: [{ required: false, message: '请填写邮箱' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				mobile:{
 				mobile:{
 					title: '手机号',
 					title: '手机号',
@@ -148,6 +153,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写手机号' },
 						component: { placeholder: '请填写手机号' },
 						rules: [{ required: true, message: '请填写手机号' }],
 						rules: [{ required: true, message: '请填写手机号' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				gender:{
 				gender:{
 					title: '性别',
 					title: '性别',
@@ -166,6 +174,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请选择性别' },
 						component: { placeholder: '请选择性别' },
 						rules: [{ required: true, message: '请选择性别' }],
 						rules: [{ required: true, message: '请选择性别' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				user_type:{
 				user_type:{
 					title: '用户类型',
 					title: '用户类型',
@@ -178,9 +189,11 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 							{ label: '学生', value: 0 },
 							{ label: '学生', value: 0 },
 							{ label: '教师', value: 1 },
 							{ label: '教师', value: 1 },
 							{ label: '校外团体', value: 2 },
 							{ label: '校外团体', value: 2 },
+							{ label: '学院领导', value: 3 },
 						],
 						],
 					}),
 					}),
 					form: {
 					form: {
+						value:1,
 						component: { placeholder: '请填写租户' },
 						component: { placeholder: '请填写租户' },
 						rules: [{ required: false, message: '请填写租户' }],
 						rules: [{ required: false, message: '请填写租户' }],
 					},
 					},
@@ -196,6 +209,9 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写学院' },
 						component: { placeholder: '请填写学院' },
 						rules: [{ required: false, message: '请填写学院' }],
 						rules: [{ required: false, message: '请填写学院' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				sub_organization:{
 				sub_organization:{
 					title: '专业',
 					title: '专业',
@@ -208,30 +224,39 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						component: { placeholder: '请填写专业' },
 						component: { placeholder: '请填写专业' },
 						rules: [{ required: false, message: '请填写专业' }],
 						rules: [{ required: false, message: '请填写专业' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				grade_or_level:{
 				grade_or_level:{
 					title: '年级',
 					title: '年级',
 					type: 'input',
 					type: 'input',
 					column: {
 					column: {
-						show: true,
+						show: false,
 						minWidth: 120,
 						minWidth: 120,
 					},
 					},
 					form: {
 					form: {
 						component: { placeholder: '请填写年级' },
 						component: { placeholder: '请填写年级' },
 						rules: [{ required: false, message: '请填写年级' }],
 						rules: [{ required: false, message: '请填写年级' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},
 				class_or_group:{
 				class_or_group:{
 					title: '班级',
 					title: '班级',
 					type: 'input',
 					type: 'input',
 					column: {
 					column: {
-						show: true,
+						show: false,
 						minWidth: 120,
 						minWidth: 120,
 					},
 					},
 					form: {
 					form: {
 						component: { placeholder: '请填写班级' },
 						component: { placeholder: '请填写班级' },
 						rules: [{ required: false, message: '请填写班级' }],
 						rules: [{ required: false, message: '请填写班级' }],
 					},
 					},
+					viewForm:{
+						component: { placeholder: '' },
+					}
 				},
 				},