qaz 4 өдөр өмнө
parent
commit
8c408d8260

+ 8 - 0
src/views/system/borrow/api.ts

@@ -99,4 +99,12 @@ export async function ReturnEquipment(data: any) {
 		method: 'post',
 		data
 	});
+}
+
+/* 获取所有用户 */
+export function GetAllUser() {
+	return request({
+		url: '/api/system/app_user/',
+		method: 'get'
+	});
 }

+ 60 - 7
src/views/system/borrow/component/ClassroomBorrow/index.vue

@@ -27,18 +27,38 @@
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
-					<el-form-item label="借用人" prop="external_borrower_name">
+					
+					<el-form-item label="借用人类型" prop="borrower_type">
+						<el-select v-model="form.borrower_type" placeholder="请选择借用人角色" >
+							<el-option label="管理员用户" :value=0 />
+							<el-option label="应用用户" :value=1 />
+							<el-option label="外部用户" :value=2 />
+						</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :span="8" >
+					<el-form-item label="借用人" prop="admin_borrower" v-if="form.borrower_type == 0">
+						<el-select v-model="form.admin_borrower" placeholder="请选择借用人" >
+							<el-option  :label="adminList.name" :value="adminList.id" />
+						</el-select>
+					</el-form-item>
+					<el-form-item label="借用人" prop="app_user_borrower" v-if="form.borrower_type == 1">
+						<el-select v-model="form.app_user_borrower" placeholder="请选择借用人" >
+							<el-option v-for="item in allUserList"  :key="item.id" :label="item.name" :value="item.id" />
+						</el-select>
+					</el-form-item>
+					<el-form-item label="借用人" prop="external_borrower_name" v-if="form.borrower_type == 2">
 						<el-input v-model="form.external_borrower_name" placeholder="请输入借用人"  />
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
-					<el-form-item label="学号/工号" prop="app_user_borrower">
-						<el-input v-model="form.app_user_borrower" placeholder="请输入学号/工号"  />
+					<el-form-item label="学号/工号" prop="user_code">
+						<el-input v-model="form.user_code" placeholder="请输入学号/工号"  />
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
-					<el-form-item label="联系电话" prop="external_borrower_phone">
-						<el-input v-model="form.external_borrower_phone" placeholder="请输入联系电话"  />
+					<el-form-item label="联系电话" prop="mobile">
+						<el-input v-model="form.mobile" placeholder="请输入联系电话"  />
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
@@ -138,9 +158,29 @@ import { cloneDeep } from 'lodash-es';
 import Cookies from 'js-cookie';
 import { request } from '/@/utils/service';
 import { Plus } from '@element-plus/icons-vue';
+import { getUserInfo } from '../../../login/api';
 
 
+/* 获取管理员列表 */
+const adminList = ref([]);
 
+async function getAdminList() {
+	const res = await getUserInfo();
+	adminList.value = res.data;
+	console.log("adminList.value:::",adminList.value)	
+}
+/*  */
+/* 获取所有用户 */
+const allUserList = ref([]);
+async function getAllUserList() {
+	const res = await api.GetAllUser();
+	allUserList.value = res.data;
+	// 设置默认选择第一个用户
+	if (allUserList.value.length > 0) {
+		form.value.app_user_borrower = allUserList.value[0].id;
+	}
+	console.log("allUserList.value:::",allUserList.value)	
+}
 const fileList = ref([]);
 
 // const fileList = ref([]);
@@ -256,7 +296,7 @@ function getStartTime(time: number): string {
 
 const form = ref({
 	application_no: '',
-	borrower_type:0,
+	borrower_type:1,
 	external_borrower_name:"",
 	external_borrower_phone:"",
 	purpose:'',
@@ -328,6 +368,7 @@ onMounted(() => {
 	try {
 		const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
 		if (userInfo) {
+			form.value.borrower_type = 1;
 			form.value.external_borrower_name = userInfo.username || '';
 			form.value.app_user_borrower = Number(userInfo.dept_info?.dept_id )|| 1;
 			form.value.external_borrower_phone = userInfo.mobile || '';
@@ -335,14 +376,26 @@ onMounted(() => {
 		}
 	} catch (e) {console.error(e)}
 	fetchWeeklySchedule();
+	getAdminList()
+	getAllUserList()
 });
 
+// 监听借用人选择变化
+watch(() => form.value.app_user_borrower, (newValue) => {
+  if (newValue && allUserList.value.length > 0) {
+    const selectedUser = allUserList.value.find(user => user.id === newValue);
+    if (selectedUser) {
+      form.value.user_code = selectedUser.user_code || '';
+	  form.value.mobile = selectedUser.mobile || '';
+    }
+  }
+});
 
 
 function resetForm() {
   form.value = {
     application_no: '',
-	borrower_type:0,
+	borrower_type:1,
 	external_borrower_name:"",
 	external_borrower_phone:"",
     emergency_contact: '111',

+ 1 - 1
src/views/system/borrow/component/CollectEquipment/SettlementDialog.vue

@@ -19,7 +19,7 @@
         </el-col>
         <el-col :span="8">
           <el-form-item label="借用人">
-            <el-input v-model="formData.emergency_contact" disabled />
+            <el-input v-model="formData.borrower_info.name" disabled />
           </el-form-item>
         </el-col>
         <el-col :span="8">

+ 102 - 38
src/views/system/borrow/component/CollectEquipment/index.vue

@@ -10,18 +10,41 @@
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
-                            <el-form-item label="借用人" prop="emergency_contact">
-                                <el-input v-model="form.emergency_contact" placeholder="请输入借用人" :disabled="true" />
-                            </el-form-item>
+                          <el-form-item label="借用人类型" prop="borrower_type">
+                            <el-select v-model="form.borrower_type" placeholder="请选择借用人角色"  :disabled="true">
+                              <el-option label="管理员用户" :value=0 />
+                              <el-option label="应用用户" :value=1 />
+                              <el-option label="外部用户" :value=2 />
+                            </el-select>
+                          </el-form-item>
+                        </el-col>
+                        <el-col :span="8" >
+                          <!-- <el-form-item label="借用人" prop="external_borrower_name"  v-if="form.borrower_type !== 2">
+                            <el-input v-model="form.borrower_info.name" placeholder="请输入借用人" :disabled="true" />
+                          </el-form-item> -->
+                          <el-form-item label="借用人" prop="admin_borrower" v-if="form.borrower_type == 0">
+                            <el-select v-model="form.admin_borrower" placeholder="请选择借用人" :disabled="true" >
+                              <el-option  :label="adminList.name" :value="adminList.id" />
+                            </el-select>
+                          </el-form-item>
+                          <el-form-item label="借用人" prop="app_user_borrower" v-if="form.borrower_type == 1">
+                            <el-select v-model="form.app_user_borrower.id" placeholder="请选择借用人" :disabled="true" >
+                              <el-option v-for="item in allUserList"  :key="item.id" :label="item.name" :value="item.id" />
+                            </el-select>
+                          </el-form-item> 
+                          <el-form-item label="借用人" prop="external_borrower_name" v-if="form.borrower_type == 2">
+                            <el-input v-model="form.external_borrower_name" placeholder="请输入借用人" :disabled="true" />
+                          </el-form-item>
                         </el-col>
                         <el-col :span="8">
-                            <el-form-item label="学号/工号" prop="app_user_borrower">
-                                <el-input v-model="form.app_user_borrower" placeholder="请输入学号/工号"  :disabled="true"/>
+                            <el-form-item label="学号/工号" prop="user_code">
+                       <!--      {{ form.borrower_info.user_code }} -->
+                                <el-input v-model="form.app_user_borrower.user_code" placeholder="请输入学号/工号"  :disabled="true"/>
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
-                            <el-form-item label="联系电话" prop="emergency_phone">
-                                <el-input v-model="form.emergency_phone" placeholder="请输入联系电话" :disabled="true" />
+                            <el-form-item label="联系电话" >
+                                <el-input v-model="form.app_user_borrower.mobile" placeholder="请输入联系电话" :disabled="true" />
                             </el-form-item>
                         </el-col>
                         <el-col :span="8">
@@ -71,7 +94,7 @@
                         </el-col>
                     </el-row>
                     <div style="margin: 16px 0 8px 0; font-weight: bold"> {{ isCollect ? '借用列表' : '归还列表' }}</div>
-                    <el-table :data="form.items" border style="width: 100%; margin-bottom: 12px">
+                    <el-table :data="form.items.filter(item => item.device === null)" border style="width: 100%; margin-bottom: 12px">
                         <el-table-column type="index" label="序号" width="60" />
                         <el-table-column prop="device_category_name" label="设备分类" />
                         <!-- <el-table-column prop="quantity" label="借用数量" /> -->
@@ -327,6 +350,29 @@ import * as api from '../../api';
 import * as deviceApi from '../../../device/api';
 import { CollectEquipment, ReturnEquipment } from '../../api';
 import type { TabsPaneContext } from 'element-plus';
+import { getUserInfo } from '../../../login/api';
+
+
+/* 获取管理员列表 */
+const adminList = ref([]);
+
+async function getAdminList() {
+	const res = await getUserInfo();
+	adminList.value = res.data;
+	console.log("adminList.value:::",adminList.value)	
+}
+/*  */
+/* 获取所有用户 */
+const allUserList = ref([]);
+async function getAllUserList() {
+	const res = await api.GetAllUser();
+	allUserList.value = res.data;
+	// 设置默认选择第一个用户
+	if (allUserList.value.length > 0) {
+		form.value.app_user_borrower = allUserList.value[0].id;
+	}
+	console.log("allUserList.value:::",allUserList.value)	
+}
 
 interface ApiResponse {
   code: number;
@@ -725,6 +771,10 @@ function handleUploadError(err: any, file: any, fileList: any) {
 
 
 const form = ref<FormData>({
+  borrower_info:{
+    user_code:'',
+    mobile:''
+  },
 	application_no: '',
 	emergency_contact: '',
 	emergency_phone: '',
@@ -779,6 +829,8 @@ const rules = {
 
 // 自动填充用户信息
 onMounted(() => {
+	getAdminList()
+	getAllUserList()
 	try {
 		const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
 		if (userInfo) {
@@ -798,8 +850,6 @@ watch(
 );
 
 watch(() => props.modelValue, async (val) => {
-    console.log("props:::",props.modelValue);
-    console.log("val:::", isView.value);
   if (val && val.id) {
 			try {
 			const res = await api.GetApplicationDetail(val.id);
@@ -817,25 +867,27 @@ watch(() => props.modelValue, async (val) => {
 
                 // 同步 form.items 到 returnDeviceList
                 if (form.value.items && form.value.items.length > 0) {
-                    returnDeviceList.value = form.value.items.map(item => ({
-                        device_no: item.device,
-                        device_type: item.remark,
-                        device_name: item.device_name,
-                        borrow_count: item.quantity,
-                        brand: '',
-                        model: item.device_specification,
-                        warehouse: item.location,
-                        status: '未归还'
-                    }));
+                    returnDeviceList.value = form.value.items
+                        .filter(item => item.device !== null)
+                        .map(item => ({
+                            device_no: item.device,
+                            device_type: item.remark,
+                            device_name: item.device_name,
+                            borrow_count: item.quantity,
+                            brand: '',
+                            model: item.device_specification,
+                            warehouse: item.location,
+                            status: '未归还'
+                        }));
                 }
                 // 同步 form.records 到 returnAbnormalList
                 if (form.value.records && form.value.records.length > 0) {
                     // 添加损坏类型记录
                     const damageRecord: AbnormalRecord = {
                         application_no: form.value.application_no,
-                        operator_name: form.value.emergency_contact,
-                        user_code: form.value.borrower_info?.user_code || '',
-                        emergency_phone: form.value.emergency_phone,
+                        operator_name: form.value.emergency_contact||form.value.app_user_borrower.name,
+                        user_code: form.value.borrower_info?.user_code || form.value.app_user_borrower.user_code,
+                        emergency_phone: form.value.emergency_phone || form.value.app_user_borrower.mobile,
                         type: '损坏',
                         condition: form.value.borrower_damage_count || 0,
                         create_time: dayjs().format('YYYY-MM-DD HH:mm:ss')
@@ -844,9 +896,9 @@ watch(() => props.modelValue, async (val) => {
                     // 添加逾期类型记录
                     const overdueRecord: AbnormalRecord = {
                         application_no: form.value.application_no,
-                        operator_name: form.value.emergency_contact,
-                        user_code: form.value.borrower_info?.user_code || '',
-                        emergency_phone: form.value.emergency_phone,
+                        operator_name: form.value.emergency_contact||form.value.app_user_borrower.name,
+                        user_code: form.value.borrower_info?.user_code || form.value.app_user_borrower.user_code,
+                        emergency_phone: form.value.emergency_phone || form.value.app_user_borrower.mobile,
                         type: '逾期',
                         condition: form.value.borrower_overdue_count || 0, // 逾期数量设为1
                         create_time: dayjs().format('YYYY-MM-DD HH:mm:ss')
@@ -868,16 +920,18 @@ watch(() => props.modelValue, async (val) => {
 
                 // 同步 form.items 到 returnDeviceList
                 if (form.value.items && form.value.items.length > 0) {
-                    returnDeviceList.value = form.value.items.map(item => ({
-                        device_no: item.device,
-                        device_type: item.remark,
-                        device_name: item.device_name,
-                        borrow_count: item.quantity,
-                        brand: '',
-                        model: item.device_specification,
-                        warehouse: item.location,
-                        status: '未归还'
-                    }));
+                    returnDeviceList.value = form.value.items
+                        .filter(item => item.device !== null)
+                        .map(item => ({
+                            device_no: item.device,
+                            device_type: item.remark,
+                            device_name: item.device_name,
+                            borrow_count: item.quantity,
+                            brand: '',
+                            model: item.device_specification,
+                            warehouse: item.location,
+                            status: '未归还'
+                        }));
                 }
 			}
 			} catch (e) {
@@ -897,7 +951,16 @@ watch(() => props.modelValue, async (val) => {
 // 		}
 // 	}, { immediate: true }
 // );
-
+// 监听借用人选择变化
+watch(() => form.value.app_user_borrower, (newValue) => {
+  if (newValue && allUserList.value.length > 0) {
+    const selectedUser = allUserList.value.find(user => user.id === newValue);
+    if (selectedUser) {
+      form.value.user_code = selectedUser.user_code || '';
+	  form.value.mobile = selectedUser.mobile || '';
+    }
+  }
+});
 function addItem() {
 	showSelectDeviceDialog.value = true;
 }
@@ -1023,7 +1086,8 @@ function onSubmit() {
       device: item.device_no,
       quantity: item.borrow_count,
       condition: returnRemark.value,
-      device_id: Number(item.device_no) || 0
+      device_id: Number(item.device_no) || 0,
+
     }));
     
     const submitData = {

+ 76 - 10
src/views/system/borrow/component/SpecialBorrow/index.vue

@@ -8,18 +8,40 @@
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
-					<el-form-item label="借用人" prop="external_borrower_name">
-						<el-input v-model="form.external_borrower_name" placeholder="请输入借用人" :disabled="isView" />
+					<el-form-item label="借用人类型" prop="borrower_type">
+					<el-select v-model="form.borrower_type" placeholder="请选择借用人角色"  >
+						<el-option label="管理员用户" :value=0 />
+						<el-option label="应用用户" :value=1 />
+						<el-option label="外部用户" :value=2 />
+					</el-select>
+					</el-form-item>
+				</el-col>
+				<el-col :span="8" >
+					<el-form-item label="借用人" prop="admin_borrower" v-if="form.borrower_type == 0">
+					<el-select v-model="form.admin_borrower" placeholder="请选择借用人"  >
+						<el-option  :label="adminList.name" :value="adminList.id" />
+					</el-select>
+					</el-form-item>
+					<el-form-item label="借用人" prop="app_user_borrower" v-if="form.borrower_type == 1">
+					<el-select v-model="form.app_user_borrower" placeholder="请选择借用人"  >
+						<el-option v-for="item in allUserList"  :key="item.id" :label="item.name" :value="item.id" />
+					</el-select>
+					</el-form-item>
+					<el-form-item label="借用人" prop="external_borrower_name" v-if="form.borrower_type == 2">
+					<el-input v-model="form.external_borrower_name" placeholder="请输入借用人"  />
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
-					<el-form-item label="学号/工号" prop="app_user_borrower">
-						<el-input v-model="form.app_user_borrower" placeholder="请输入学号/工号"  :disabled="isView"/>
+					<el-form-item label="学号/工号" prop="user_code">
+						<el-input v-model="form.user_code" placeholder="请输入学号/工号"  :disabled="isView"/>
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
-					<el-form-item label="联系电话" prop="external_borrower_phone">
-						<el-input v-model="form.external_borrower_phone" placeholder="请输入联系电话" :disabled="isView" />
+					<el-form-item label="联系电话" prop="mobile" v-if="form.borrower_type !== 2">
+						<el-input v-model="form.mobile" placeholder="请输入联系电话" :disabled="isView" />
+					</el-form-item>
+					<el-form-item label="联系电话" prop="external_borrower_phone" v-if="form.borrower_type == 2">
+						<el-input v-model="form.external_borrower_phone" placeholder="请输入联系电话"  :disabled="isView"/>
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
@@ -69,7 +91,7 @@
 				</el-col>
 			</el-row>
 			<div style="margin: 16px 0 8px 0; font-weight: bold">借用列表</div>
-			<el-table :data="form.items" border style="width: 100%; margin-bottom: 12px">
+			<el-table :data="form.items.filter(item => item.device === null)" border style="width: 100%; margin-bottom: 12px">
 				<el-table-column type="index" label="序号" width="60" />
 				<el-table-column prop="remark" label="设备分类" />
 				<!-- <el-table-column prop="quantity" label="借用数量" /> -->
@@ -137,8 +159,30 @@ import Cookies from 'js-cookie';
 import { request } from '/@/utils/service';
 import { Plus } from '@element-plus/icons-vue';
 import SelectCatgory from '../SelectCatgory/index.vue';
+import { getUserInfo } from '../../../login/api';
 
 
+/* 获取管理员列表 */
+const adminList = ref([]);
+
+async function getAdminList() {
+	const res = await getUserInfo();
+	adminList.value = res.data;
+	console.log("adminList.value:::",adminList.value)	
+}
+/*  */
+/* 获取所有用户 */
+const allUserList = ref([]);
+async function getAllUserList() {
+	const res = await api.GetAllUser();
+	allUserList.value = res.data;
+	// 设置默认选择第一个用户
+	if (allUserList.value.length > 0) {
+		form.value.app_user_borrower = allUserList.value[0].id;
+	}
+	console.log("allUserList.value:::",allUserList.value)	
+}
+
 
 
 const now = dayjs().format('YYYY-MM-DD HH:mm:ss');
@@ -309,9 +353,12 @@ const rules = {
 
 // 自动填充用户信息
 onMounted(() => {
+	getAdminList()
+	getAllUserList()
 	try {
 		const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
 		if (userInfo) {
+			form.value.borrower_type = 1;
 			form.value.external_borrower_name = userInfo.username || '';
 			form.value.app_user_borrower = Number(userInfo.dept_info?.dept_id )|| 1;
 			form.value.external_borrower_phone = userInfo.mobile || '';
@@ -328,6 +375,7 @@ watch(
 );
 
 watch(() => props.modelValue, async (val) => {
+	console.log("val+++",val && val.id && isView.value,val&& isEdit.value);
   if (val && val.id && isView.value) {
 			try {
 			const res = await api.GetApplicationDetail(val.id);
@@ -335,7 +383,7 @@ watch(() => props.modelValue, async (val) => {
 				const data = res.data;
 				Object.assign(form.value, data);
 				buildSteps(data);
-	
+				console.log("data:::",data);
 
 			}
 			} catch (e) {
@@ -344,16 +392,31 @@ watch(() => props.modelValue, async (val) => {
 	}else if(val&& isEdit.value){
 		try {
 			const res = await api.GetApplicationDetail(val.id);
+	
 			if (res.code === 2000 && res.data) {
 				const data = res.data;
+			/* 	if(isEdit.value){
+					data.app_user_borrower = data.borrower_info.id;
+				} */
+					console.log(data);
 				Object.assign(form.value, data);
+				console.log("form.value:::",form.value);
 			}
 			} catch (e) {
 			ElMessage.error('获取审批信息失败');
 			}
 	}
 }, { immediate: true });
-
+// 监听借用人选择变化
+watch(() => form.value.app_user_borrower, (newValue) => {
+  if (newValue && allUserList.value.length > 0) {
+    const selectedUser = allUserList.value.find(user => user.id === newValue);
+    if (selectedUser) {
+      form.value.user_code = selectedUser.user_code || '';
+	  form.value.mobile = selectedUser.mobile || '';
+    }
+  }
+});
 
 // watch(
 // 	() => props.modelValue,
@@ -372,7 +435,7 @@ function addItem() {
 function onDeviceSelected(devices) {
 	form.value.items.push(
 		...devices.map((d) => ({
-			device: d.id,
+			device_category: d.id,
 			remark: d.name,
 			quantity: 1,
 			location: d.warehouse,
@@ -386,6 +449,7 @@ function onCancel() {
 	emit('update:visible', false);
 }
 function onSubmit() {
+	
 	formRef.value.validate((valid: boolean) => {
 		if (valid) {
 			form.value.items = form.value.items.map(item => ({
@@ -398,6 +462,8 @@ function onSubmit() {
 			form.value.expected_end_time = dayjs(form.value.expected_end_time).format('YYYY-MM-DD HH:mm:ss')|| now;
 			form.team_members_count=Number(form.value.team_members_count)||1;
 			form.value.mode = isEdit.value ? 'edit' : 'add';
+			console.log(form.value);
+			// return
 			emit('submit', { ...form.value });
 			emit('update:visible', false);
 			// ElMessage.success("添加成功!");

+ 1 - 1
src/views/system/borrow/crud.tsx

@@ -53,7 +53,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						show:true,	
 						order:4,
 						disabled:compute( ({row})=>{
-							return row.status !== 1 && row.status !== 2;
+							return row.borrow_type === 0;
 						}), 
 						click: ({ row }) => {
 							window.dispatchEvent(new CustomEvent('borrow-edit', { detail: row }));

+ 7 - 1
src/views/system/borrow/index.vue

@@ -54,19 +54,25 @@ function onBorrowTypeSelected(type: number, mode: 'view' | 'edit' | 'add' |'coll
 		borrowForm.value = { ...(record || {}), borrow_type: type, mode };
 	});
 	if (type === 1) {
+		console.log("mode:::",mode);
 		if(mode==='view'){
 			showCollectDialog.value = true;
 		}else{
 			showClassroomBorrowDialog.value = true;
 		}
 	} else if (type === 2) {
+		console.log("mode:::",mode);
 		if(mode==='view'){
 			showCollectDialog.value = true;
 		}else{
 			showSpecialBorrowDialog.value = true;
 		}
 	} else if (type === 0) {
-		showCollectDialog.value = true;
+		if(mode==='view'){
+			showCollectDialog.value = true;
+		}else{
+			showClassroomBorrowDialog.value = true;
+		}
 	}
 }