kllay 1 viikko sitten
vanhempi
sitoutus
699008035d

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

@@ -1,5 +1,5 @@
 <template>
-	<fs-page>
+	<fs-page class="borrow-page"> 
 		<fs-crud ref="crudRef" v-bind="crudBinding" />
 		<BorrowTypeSelect v-model:visible="showBorrowTypeDialog" @select="onBorrowTypeSelected" />
 		<CommonBorrow v-if="showCommonBorrowDialog" v-model:visible="showCommonBorrowDialog" :modelValue="borrowForm" @submit="handleBorrowSubmit" />
@@ -82,14 +82,14 @@ onMounted(() => {
 	window.addEventListener('borrow-edit', handleEdit);
 	window.addEventListener('borrow-remove', handleRemove);
 	// 动态覆盖 actionbar.add 的 onClick
-	if (crudBinding.value.actionbar?.buttons?.add) {
-		crudBinding.value.actionbar.buttons.add.onClick = () => {
-			showBorrowTypeDialog.value = true;
-		};
-	}
+	// if (crudBinding.value.actionbar?.buttons?.add) {
+	// 	crudBinding.value.actionbar.buttons.add.onClick = () => {
+	// 		showBorrowTypeDialog.value = true;
+	// 	};
+	// }
 	// 创建借用单按钮
 	function insertButton() {
-		const fsActionbar = document.querySelector('.fs-actionbar');
+		const fsActionbar = document.querySelector('.borrow-page .fs-actionbar');
 		if (fsActionbar && !fsActionbar.querySelector('.my-create-btn')) {
 			const button = document.createElement('button');
 			button.className = 'el-button el-button--primary el-button--default my-create-btn';

+ 62 - 0
src/views/system/borrow/workflow/WorkflowDialog/api.ts

@@ -0,0 +1,62 @@
+import { request } from '/@/utils/service';
+import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
+
+export const apiPrefix = '/api/system/approval/workflow_step/';
+
+export function GetList(query: UserPageQuery) {
+	return request({
+		url: apiPrefix,
+		method: 'get',
+		params: query,
+	});
+}
+
+export function GetObj(id: InfoReq) {
+	return request({
+		url: apiPrefix + id,
+		method: 'get',
+	});
+}
+
+export function AddObj(obj: AddReq) {
+	return request({
+		url: apiPrefix,
+		method: 'post',
+		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 switchTenant(tenantId: string) {
+	return request({
+		url: '/api/system/tenant/switch/',
+		method: 'post',
+		data: { tenant_id: tenantId },
+	});
+}
+
+export function GetDeviceClassList() {
+	return request({
+		url: "/api/system/device/category/",
+		method: 'get',
+	});
+}
+
+
+
+

+ 195 - 22
src/views/system/borrow/workflow/WorkflowDialog/index.vue

@@ -17,6 +17,7 @@
 						<el-input v-model="form.scene" placeholder="请输入" />
 					</el-form-item>
 				</el-col>
+				
 			</el-row>
 			<el-row :gutter="20">
 				<el-col :span="12">
@@ -34,6 +35,14 @@
 						<el-input v-model="form.description" type="textarea" :rows="2" placeholder="请输入流程描述" :disabled="props.mode === 'view'" />
 					</el-form-item>
 				</el-col>
+				<el-col :span="12">
+					<el-form-item label="是否启用" prop="is_active">
+						<el-select v-model="form.is_active" placeholder="请选择启用还是禁用" :disabled="props.mode === 'view'">
+							<el-option label="启用" :value="true" />
+							<el-option label="禁用" :value="false" />
+						</el-select>
+					</el-form-item>
+				</el-col>
 			</el-row>
 			<el-divider>条件选择</el-divider>
 			<el-row :gutter="20">
@@ -46,26 +55,43 @@
 				<el-col :span="8">
 					<el-form-item label="用户角色" prop="condition.roles">
 						<el-checkbox-group v-model="form.condition.roles">
-							<el-checkbox label="教师" />
-							<el-checkbox label="学生" />
-							<el-checkbox label="非本院师生" />
+							<el-checkbox label="教师" value="teacher"  />
+							<el-checkbox label="学生" value="student" />
+							<el-checkbox label="非本院师生" value="external"  />
 						</el-checkbox-group>
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
 					<el-form-item label="设备标签" prop="condition.equipment">
 						<el-select v-model="form.condition.equipment" placeholder="请选择">
+						<el-option 
+							v-for="(item, index) in resdevicelist" 
+							:key="index"
+							:label="item.name" 
+							:value="item.id"
+						/>
+						</el-select>
+
+						<!-- <el-select v-model="form.condition.equipment" placeholder="请选择">
 							<el-option label="贵重设备" value="贵重设备" />
 							<el-option label="普通设备" value="普通设备" />
-						</el-select>
+						</el-select> -->
 					</el-form-item>
 				</el-col>
 				<el-col :span="8">
 					<el-form-item label="借用类型" prop="condition.borrow_types">
 						<el-checkbox-group v-model="form.condition.borrow_types" :disabled="props.mode === 'view'">
-							<el-checkbox label="0">常规借用</el-checkbox>
-							<el-checkbox label="1">课堂借用</el-checkbox>
-							<el-checkbox label="2">特殊借用</el-checkbox>
+							<el-checkbox label="常规借用" value="0"></el-checkbox>
+							<el-checkbox label="课堂借用" value="1"></el-checkbox>
+							<el-checkbox label="特殊借用" value="2"></el-checkbox>
+						</el-checkbox-group>
+					</el-form-item>
+				</el-col>
+				<el-col :span="8">
+					<el-form-item label="借用方式" prop="condition.team_type">
+						<el-checkbox-group v-model="form.condition.team_type" :disabled="props.mode === 'view'">
+							<el-checkbox label="个人借用" value="0"></el-checkbox>
+							<el-checkbox label="团队借用" value="1"></el-checkbox>
 						</el-checkbox-group>
 					</el-form-item>
 				</el-col>
@@ -97,7 +123,8 @@
 									:prop="`steps.${idx}.roles.${ridx}.name`"
 									:rules="[{ required: true, message: '请选择角色', trigger: 'change' }]"
 								>
-									<el-select v-model="role.name" placeholder="请选择角色" style="width: 300px">
+									<!-- <el-select v-model="role.name" placeholder="请选择角色" style="width: 300px" @change="onRoleChange(idx, ridx, $event)"> -->
+										<el-select v-model="role.name" placeholder="请选择角色" style="width: 300px">
 										<el-option label="指导老师" value="指导老师" />
 										<el-option label="管理员" value="管理员" />
 									</el-select>
@@ -109,8 +136,9 @@
 									:rules="[{ required: true, message: '请选择通过条件', trigger: 'change' }]"
 								>
 									<el-radio-group v-model="role.passType">
-										<el-radio label="any">1名通过即可</el-radio>
-										<el-radio label="all">所有人员通过</el-radio>
+										<!-- <el-radio label="单人审核"  value="0"></el-radio> -->
+										<el-radio label="1名通过即可"  value="1"></el-radio>
+										<el-radio label="所有人员通过"  value="2"></el-radio>
 									</el-radio-group>
 								</el-form-item>
 								<el-button
@@ -154,10 +182,11 @@
 </template>
 
 <script setup lang="ts">
-import { ref, watch, reactive } from 'vue';
+import { ref, watch, reactive ,nextTick } from 'vue';
 import { ElMessage } from 'element-plus';
 import { Plus, Minus } from '@element-plus/icons-vue';
 import * as api from '../api';
+import * as firstapi from './api';
 
 const props = defineProps<{
 	visible: boolean;
@@ -173,6 +202,24 @@ watch(
 );
 watch(visible, (v) => emit('update:visible', v));
 
+
+
+
+
+const resdevicelist=reactive([]);
+firstapi.GetDeviceClassList()
+  .then(result => {
+		const deviceData = result.data; 
+		// eslint-disable-next-line no-console
+		console.log("获取到的data值:", deviceData);
+		// 清空并填充响应式数组
+		resdevicelist.splice(0, resdevicelist.length, ...deviceData);
+	})
+	.catch(error => {
+		// eslint-disable-next-line no-console
+		console.error("请求失败:", error);
+});
+
 const defaultRole = () => ({
 	name: '',
 	passType: '',
@@ -184,42 +231,100 @@ const defaultStep = () => ({
 const form = reactive({
 	name: '',
 	scene: '',
-	workflow_type: 0, // 新增
+	workflow_type: "0", // 新增
 	description: '', // 新增
+	is_active: true,
 	condition: {
 		days: 1,
 		roles: [],
-		equipment: '',
+		equipment: [],
 		borrow_types: [], // 新增
+		team_type:[],
 	},
 	steps: [defaultStep()],
 });
 
-const rules = {
+const rules = reactive({
 	name: [{ required: true, message: '请输入流程名称', trigger: 'blur' }],
 	workflow_type: [{ required: true, message: '请选择流程类型', trigger: 'change' }],
 	description: [{ required: true, message: '请输入流程描述', trigger: 'blur' }],
+	is_active:[{ required: true, message: '请输选择是否启用', trigger: 'blur' }],
 	'condition.days': [{ required: true, message: '请输入借用天数', trigger: 'change' }],
 	'condition.roles': [{ required: true, message: '请选择用户角色', trigger: 'change' }],
 	'condition.equipment': [{ required: true, message: '请选择设备标签', trigger: 'change' }],
 	'condition.borrow_types': [{ required: true, message: '请选择借用类型', trigger: 'change' }],
-};
+	'condition.team_type': [{ required: true, message: '请选择借用方式', trigger: 'change' }],
+});
 
 const formRef = ref();
 
+
+
+function generateStepRules() {
+  form.steps.forEach((step, stepIdx) => {
+    step.roles.forEach((role, roleIdx) => {
+      rules[`steps.${stepIdx}.roles.${roleIdx}.name`] = [
+        { required: true, message: '请选择角色', trigger: 'change' },
+      ];
+      rules[`steps.${stepIdx}.roles.${roleIdx}.passType`] = [
+        { required: true, message: '请选择通过条件', trigger: 'change' },
+      ];
+    });
+  });
+}
+
+
+
+
 watch(
 	() => props.editData,
-	(val) => {
+	async (val) => {
+		// eslint-disable-next-line no-console
+		console.error("编辑时获取到的值val:", val);
 		if (val) {
-			Object.assign(form, JSON.parse(JSON.stringify(val)));
+			// Object.assign(form, JSON.parse(JSON.stringify(val)));
+			const cloned = JSON.parse(JSON.stringify(val));
+			form.name = cloned.name || '';
+			form.scene = cloned.scene || '';
+			form.workflow_type = String(cloned.workflow_type ?? '0'); 
+			form.description = cloned.description || '';
+			form.is_active = cloned.is_active ?? true;
+
+			const tc = cloned.trigger_conditions || {};
+			form.condition = {
+				days: 1, 
+				roles: tc.user_types || [],
+				equipment: Array.isArray(tc.equipment_categories) ? tc.equipment_categories[0] : '',
+				borrow_types: tc.borrow_types || [],
+				team_type: tc.team_type || [],
+			};
+
+			const res = await api.GetObj(cloned.id);
+			// eslint-disable-next-line no-console
+			console.log("编辑时res.data.steps:", res.data.steps);
+			form.steps = Array.isArray(res.data.steps) && res.data.steps.length
+			? res.data.steps.map((step: any) => ({
+				roles: [
+					{
+					name: step.step_name || '',
+					passType: String(step.step_type ?? '1'),
+					},
+				],
+				}))
+			: [defaultStep()];
+			// Object.assign(form, cloned);
 		} else {
 			form.name = '';
 			form.scene = '';
-			form.workflow_type = 0;
+			form.workflow_type = "0";
 			form.description = '';
-			form.condition = { days: 1, roles: [], equipment: '', borrow_types: [] };
+			form.is_active = true;
+			form.condition = { days: 1, roles: [], equipment: [], borrow_types: [],team_type:[] };
 			form.steps = [defaultStep()];
 		}
+		generateStepRules();
+
+		await nextTick();
 	},
 	{ immediate: true }
 );
@@ -239,8 +344,37 @@ function removeRole(stepIdx: number, roleIdx: number) {
 function onCancel() {
 	visible.value = false;
 }
+
+// function onRoleChange(stepIdx: number, roleIdx: number, selectedValue: string) {
+//   const firstpayload = {
+//     workflow: "1",
+//     step_name: selectedValue,
+//   };
+//   // eslint-disable-next-line no-console
+//   console.log("选中的角色名:", selectedValue);
+//   // eslint-disable-next-line no-console
+//   console.log("构造的 payload:", firstpayload);
+// }
+
+// const passTypeMap: Record<string, string> = {
+//   any: "1", // 多人审核(任一通过)
+//   all: "2", // 多人审核(全部通过)
+//   single: "0", // 单人审核(你可以自定义触发条件)
+//   department: "3", // 部门负责人审核
+//   role: "4",       // 角色审核
+//   auto: "5",       // 自动审核
+// };
+
+
 async function onSave() {
-	await formRef.value?.validate();
+
+	try {
+		await formRef.value?.validate();
+		} catch (err) {
+		// eslint-disable-next-line no-console
+		console.warn('表单验证失败:', err);
+		return; // 阻止后续提交
+		}
 
 	// 组装接口需要的数据
 	const payload = {
@@ -252,11 +386,50 @@ async function onSave() {
 			equipment_categories: form.condition?.equipment ? [form.condition.equipment] : ['贵重设备'],
 			borrow_types: form.condition?.borrow_types?.length ? form.condition.borrow_types : ['0', '1', '2'],
 			team_type: form.condition?.team_type?.length ? form.condition.team_type : ['0', '1'],
-			user_types: form.condition?.roles?.length ? form.condition.roles.map((r) => (r === '教师' ? 'teacher' : 'student')) : ['student', 'teacher'],
+			user_types: form.condition?.roles?.length ? form.condition.roles:['student', 'teacher'],
 		},
 	};
+	// eslint-disable-next-line no-console
+	console.log(payload);
+	//创建审批
+	const res = await api.AddObj(payload);
+	// 提取返回的 ID
+	const workflowId = res?.data?.id;
+	if (!workflowId) {
+		ElMessage.error('未能获取流程 ID');
+		return;
+	}
+
+	// ✅ 获取用户选择的角色名
+	const selectedRoleNames = form.steps
+    .flatMap(step => step.roles.map(role => role.name))
+    .filter(name => !!name);
+	const selectedPassTypes = form.steps
+	.flatMap(step => step.roles.map(role => role.passType));
+
+	//组装审核接口
+	const firstpayload={
+		workflow: String(workflowId),
+		step_name: String(selectedRoleNames),
+		step_order: 1,
+		step_type: String(selectedPassTypes),
+		description:"由指导老师进行初审",
+		approvers: [],  // 指定审核人ID列表,可选
+		approver_roles: [],  // 审核角色ID列表,可选
+		approver_depts: [],  // 审核部门ID列表,可选
+		approval_conditions: {  // 审核条件,可以为空
+			required_fields: [],  // 必填字段
+			value_ranges: {}  // 字段值范围限制
+		},
+		timeout_hours: 24,  // 超时时间(小时)
+		timeout_action: "auto_reject",  // 超时处理:auto_approve=自动通过,auto_reject=自动拒绝,escalate=升级处理
+		is_active: true  // 是否启用:true=启用,false=禁用
+
+	};
+	// eslint-disable-next-line no-console
+	console.log(firstpayload);
+	await api.AddFirstObj(firstpayload);
 
-	await api.AddObj(payload);
 	ElMessage.success('保存成功');
 	emit('success');
 	visible.value = false;

+ 26 - 1
src/views/system/borrow/workflow/api.ts

@@ -2,6 +2,7 @@ import { request } from '/@/utils/service';
 import { UserPageQuery, AddReq, DelReq, EditReq, InfoReq } from '@fast-crud/fast-crud';
 
 export const apiPrefix = '/api/system/approval/workflow/';
+export const apipoefixsp='/api/system/approval/workflow_step/';
 
 export function GetList(query: UserPageQuery) {
 	return request({
@@ -13,7 +14,7 @@ export function GetList(query: UserPageQuery) {
 
 export function GetObj(id: InfoReq) {
 	return request({
-		url: apiPrefix + id,
+		url: apiPrefix + id+ '/',
 		method: 'get',
 	});
 }
@@ -42,6 +43,30 @@ export function DelObj(id: DelReq) {
 	});
 }
 
+
+
+
+
+export function GetFirstList(query: UserPageQuery) {
+	return request({
+		url: apipoefixsp,
+		method: 'get',
+		params: query,
+	});
+}
+
+
+
+export function AddFirstObj(obj: AddReq) {
+	return request({
+		url: apipoefixsp,
+		method: 'post',
+		data: obj,
+	});
+}
+
+
+
 export function switchTenant(tenantId: string) {
 	return request({
 		url: '/api/system/tenant/switch/',

+ 17 - 2
src/views/system/borrow/workflow/curd.tsx

@@ -41,7 +41,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 			},
 			actionbar: {
 				buttons: {
-					add: { show: false }, // 关闭 fast-crud 自带新增按钮
+					add: { show: false ,text: '创建审批流',}, // 关闭 fast-crud 自带新增按钮
 				},
 			},
 			rowHandle: {
@@ -49,7 +49,7 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 				width: 220,
 				buttons: {
 					view: {
-						show: true,
+						show: false,
 						click: ({ row }) => {
 							window.dispatchEvent(new CustomEvent('workflow-view', { detail: row }));
 						},
@@ -81,6 +81,21 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 					},
 				},
 				name: { title: '流程名称', column: { minWidth: 140 }, search: { show: true } },
+				workflow_type:{
+					title: '流程类型id', column: { show:false,minWidth: 140 }, search: { show: false }
+				},
+				"trigger_conditions.team_type":{
+					title: '流程类型id', column: { show:false,minWidth: 140 }, search: { show: false }
+				},
+				"trigger_conditions.user_types":{
+					title: '流程类型id', column: { show:false,minWidth: 140 }, search: { show: false }
+				},
+				"trigger_conditions.borrow_types":{
+					title: '流程类型id', column: { show:false,minWidth: 140 }, search: { show: false }
+				},
+				"trigger_conditions.equipment_categories":{
+					title: '流程类型id', column: { show:false,minWidth: 140 }, search: { show: false }
+				},
 				workflow_type_label: { title: '流程类型', column: { minWidth: 120 } },
 				description: { title: '流程描述', column: { minWidth: 200 } },
 				step_count: { title: '步骤数', column: { minWidth: 80, align: 'center' } },

+ 11 - 11
src/views/system/borrow/workflow/index.vue

@@ -1,5 +1,5 @@
 <template>
-	<fs-page>
+	<fs-page class="workflow-page">
 		<fs-crud ref="crudRef" v-bind="crudBinding" />
 		<WorkflowDialog v-model:visible="dialogVisible" :editData="editData" :mode="dialogMode" @success="onDialogSuccess" />
 	</fs-page>
@@ -42,23 +42,23 @@ function onEdit(e: Event) {
 onMounted(() => {
 	crudExpose.doRefresh();
 	// 动态追加“新建审批流程”按钮
-	function insertButton() {
-		const fsActionbar = document.querySelector('.fs-actionbar');
-		if (fsActionbar && !fsActionbar.querySelector('.my-create-btn')) {
-			const button = document.createElement('button');
-			button.className = 'el-button el-button--primary el-button--default my-create-btn';
-			button.innerHTML = '新建审批流程';
-			button.onclick = onAdd;
-			fsActionbar.append(button);
+	function insertfwButton() {
+		const fsActionbarfw= document.querySelector('.workflow-page .fs-actionbar');
+		if (fsActionbarfw && !fsActionbarfw.querySelector('.my-create-btn')) {
+			const buttonwf = document.createElement('button');
+			buttonwf.className = 'el-buttonwf el-button el-button--primary el-button--default my-create-btn';
+			buttonwf.innerHTML = '新建审批流程';
+			buttonwf.onclick = onAdd;
+			fsActionbarfw.append(buttonwf);
 		}
 	}
 
 	// 先尝试插入一次
-	insertButton();
+	insertfwButton();
 
 	// 监听 DOM 变化,确保 actionbar 出现时插入按钮
 	observer = new MutationObserver(() => {
-		insertButton();
+		insertfwButton();
 	});
 	observer.observe(document.body, { childList: true, subtree: true });
 	window.addEventListener('workflow-view', onView);

+ 3 - 1
src/views/system/device/api.ts

@@ -59,7 +59,9 @@ export function uploadFile(formData: FormData) {
 		headers:{
 					'Content-Type': 'multipart/form-data',
 					'Authorization': token ? `JWT ${token}` : ''
-				}
+				},
+		timeout:600000
+
 	});
 	// return axios.post('/api/system/device/upload-image/', formData, {
 	// 	headers: {

+ 60 - 18
src/views/system/device/crud.tsx

@@ -5,6 +5,45 @@ import { uploadFile } from './api';
 import { auth } from '/@/utils/authFunction';
 import { commonCrudConfig } from '/@/utils/commonCrud';
 
+export async function uploadRequestHandler(file: any) {
+	const formData = new FormData();
+	formData.append('image', file.file);
+  
+	const res = await uploadFile(formData);
+  
+	// ✅ 提取相对路径
+	const relativeUrl = res?.data?.image_url;
+	if (!relativeUrl) {
+		throw new Error('上传接口未返回 image_url');
+	}
+  
+	// ✅ 拼接完整 URL(根据你的服务器地址)
+	const baseUrl = import.meta.env.VITE_API_URL || 'http://58.34.94.147:8086/';
+	// const fullUrl = baseUrl.replace(/\/$/, '') + '/' + relativeUrl.replace(/^\//, '');
+	const fullUrl= "http://58.34.94.147:8086/media/files/3/c/3c711548de2284d59922379243a60bd8.png";
+  
+	
+	// ✅ 构造 response 对象,确保包含 url 字段
+	const response = {
+		url: fullUrl,
+		name: file.file.name,
+		...res.data
+	};
+
+	// ✅ 设置 file 对象
+	file.value = fullUrl;
+	file.url = fullUrl;
+	file.response = response;
+	file.fsRes = response;
+	// eslint-disable-next-line no-console
+	console.log('上传返回 response:', response);
+
+
+	return response;
+  }
+  
+
+
 export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProps): CreateCrudOptionsRet {
 	const pageRequest = async (query: UserPageQuery) => {
 		return await api.GetList(query);
@@ -288,29 +327,32 @@ export const createCrudOptions = function ({ crudExpose }: CreateCrudOptionsProp
 						show:false,				
 					},
 					form: {
-						// show: auth('image:upload'),
+						show: auth('image:upload'),
 						component: {
 							uploader: {
 								type: 'form',
 								limit: 1,
 								accept: ".jpg,.png",
-								uploadRequest: async (file) => {
-								// eslint-disable-next-line no-console
-								// console.log("files::",file);
-								const previewUrl = URL.createObjectURL(file.file);
-								file.value=previewUrl;
-								const formData = new FormData();
-								formData.append('image', file.file);
-								// eslint-disable-next-line no-console
-								// console.log("files::",file);
-								const res = await uploadFile(formData);			
-								// eslint-disable-next-line no-console
-								console.log("url::"+res.data.image_url);
-								file.value = res.data.image_url; // 绑定表单字段
-								// const apiUrl = import.meta.env.VITE_API_URL;
-								// const res = await axios.post(`${import.meta.env.VITE_API_URL}/api/system/device/upload-image/`, formData);
-								return {url:res.data.image_url,}    // 必须返回包含url的对象
-								}
+								uploadRequest: uploadRequestHandler,
+								// uploadRequest: async (file) => {
+								// // eslint-disable-next-line no-console
+								// // console.log("files::",file);
+								// const previewUrl = URL.createObjectURL(file.file);
+								// file.value=previewUrl;
+								// const formData = new FormData();
+								// formData.append('image', file.file);
+								// // eslint-disable-next-line no-console
+								// // console.log("files::",file);
+								// const res = await uploadFile(formData);			
+								// // eslint-disable-next-line no-console
+								// console.log("url::"+res.data.image_url);
+								// file.value = res.data.image_url; // 绑定表单字段
+								// // const testurl="http://58.34.94.147:8086/media/files/3/c/3c711548de2284d59922379243a60bd8.png";
+								// // const apiUrl = import.meta.env.VITE_API_URL;
+								// // const res = await axios.post(`${import.meta.env.VITE_API_URL}/api/system/device/upload-image/`, formData);
+								// return {url: "http://58.34.94.147:8086/media/files/3/c/3c711548de2284d59922379243a60bd8.png"}    // 必须返回包含url的对象
+								// }
+
 							}
 						}
 					}