Pārlūkot izejas kodu

Add 添加清洁消毒任务及工单

Yue 3 mēneši atpakaļ
vecāks
revīzija
85490f8d7f

+ 6 - 6
SERVER/ChickenFarmV3/vb-modules/vb-device/src/main/java/cn/vber/device/controller/DeviceStatisticsController.java

@@ -38,7 +38,7 @@ public class DeviceStatisticsController extends BaseController {
     /**
      * 生成设备故障统计列表
      */
-    @SaCheckPermission("device/report/fault")
+    @SaCheckPermission("device:report:fault:gen")
     @PostMapping("/fault/gen/{cycle}")
     public R<Void> generateFault(@PathVariable String cycle) {
         return toAjax(statisticsDeviceFailureService.generate(cycle));
@@ -47,7 +47,7 @@ public class DeviceStatisticsController extends BaseController {
     /**
      * 获取设备故障率统计列表
      */
-    @SaCheckPermission("device/report/fault")
+    @SaCheckPermission("device:report:fault")
     @GetMapping("/fault")
     public TableDataInfo<StatisticsDeviceFailureVo> fault(StatisticsDeviceFailureBo bo, PageQuery pageQuery) {
         return statisticsDeviceFailureService.queryPageList(bo, pageQuery);
@@ -56,7 +56,7 @@ public class DeviceStatisticsController extends BaseController {
     /**
      * 生成人员设备维修明细列表
      */
-    @SaCheckPermission("device/report/repair")
+    @SaCheckPermission("device:report:repair:gen")
     @PostMapping("/repair/gen/{cycle}")
     public R<Void> generateRepair(@PathVariable String cycle) {
         return toAjax(statisticsMechanicRepairDetailsService.generate(cycle));
@@ -65,7 +65,7 @@ public class DeviceStatisticsController extends BaseController {
     /**
      * 获取人员设备维修明细列表
      */
-    @SaCheckPermission("device/report/repair")
+    @SaCheckPermission("device:report:repair")
     @GetMapping("/repair")
     public TableDataInfo<StatisticsMechanicRepairDetailsVo> repair(StatisticsMechanicRepairDetailsBo bo, PageQuery pageQuery) {
         return statisticsMechanicRepairDetailsService.queryPageList(bo, pageQuery);
@@ -75,7 +75,7 @@ public class DeviceStatisticsController extends BaseController {
     /**
      * 生成点检漏报率统计列表
      */
-    @SaCheckPermission("device/report/inspection")
+    @SaCheckPermission("device:report:inspection:gen")
     @PostMapping("/missed/gen/{cycle}")
     public R<Void> generateInspection(@PathVariable String cycle) {
         return toAjax(statisticsInspectionMissedService.generate(cycle));
@@ -85,7 +85,7 @@ public class DeviceStatisticsController extends BaseController {
     /**
      * 获取点检漏报率统计列表
      */
-    @SaCheckPermission("device/report/inspection")
+    @SaCheckPermission("device:report:inspection")
     @GetMapping("/missed")
     public TableDataInfo<StatisticsInspectionMissedVo> missed(StatisticsInspectionMissedBo bo, PageQuery pageQuery) {
         return statisticsInspectionMissedService.queryPageList(bo, pageQuery);

+ 7 - 6
SERVER/ChickenFarmV3/vb-modules/vb-device/src/main/java/cn/vber/device/controller/DeviceTaskController.java

@@ -1,6 +1,7 @@
 package cn.vber.device.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.annotation.SaMode;
 import cn.vber.common.core.domain.R;
 import cn.vber.common.core.validate.AddGroup;
 import cn.vber.common.core.validate.EditGroup;
@@ -40,7 +41,7 @@ public class DeviceTaskController extends BaseController {
     /**
      * 查询设备任务列表
      */
-    @SaCheckPermission("device:deviceTask")
+    @SaCheckPermission(value = {"device:deviceMaintenanceTask:list", "biosecurity:task:query"}, mode = SaMode.OR)
     @GetMapping("/list")
     public TableDataInfo<DeviceTaskVo> list(DeviceTaskBo bo, PageQuery pageQuery) {
         return deviceTaskService.queryPageList(bo, pageQuery);
@@ -49,7 +50,7 @@ public class DeviceTaskController extends BaseController {
     /**
      * 导出设备任务列表
      */
-    @SaCheckPermission("device:deviceTask:export")
+    @SaCheckPermission(value = {"device:deviceMaintenanceTask:export", "biosecurity:task:export"}, mode = SaMode.OR)
     @Log(title = "设备任务", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(DeviceTaskBo bo, HttpServletResponse response) {
@@ -62,7 +63,7 @@ public class DeviceTaskController extends BaseController {
      *
      * @param id 主键
      */
-    @SaCheckPermission("device:deviceTask:query")
+    @SaCheckPermission(value = {"device:deviceMaintenanceTask:query", "biosecurity:task:query"}, mode = SaMode.OR)
     @GetMapping("/{id}")
     public R<DeviceTaskVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
         return R.ok(deviceTaskService.queryById(id));
@@ -71,7 +72,7 @@ public class DeviceTaskController extends BaseController {
     /**
      * 新增设备任务
      */
-    @SaCheckPermission("device:deviceTask:add")
+    @SaCheckPermission(value = {"device:deviceMaintenanceTask:add", "biosecurity:task:add"}, mode = SaMode.OR)
     @Log(title = "设备任务", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
@@ -82,7 +83,7 @@ public class DeviceTaskController extends BaseController {
     /**
      * 修改设备任务
      */
-    @SaCheckPermission("device:deviceTask:edit")
+    @SaCheckPermission(value = {"device:deviceMaintenanceTask:edit", "biosecurity:task:edit"}, mode = SaMode.OR)
     @Log(title = "设备任务", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
@@ -95,7 +96,7 @@ public class DeviceTaskController extends BaseController {
      *
      * @param ids 主键串
      */
-    @SaCheckPermission("device:deviceTask:remove")
+    @SaCheckPermission(value = {"device:deviceMaintenanceTask:remove", "biosecurity:task:remove"}, mode = SaMode.OR)
     @Log(title = "设备任务", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {

+ 7 - 7
SERVER/ChickenFarmV3/vb-modules/vb-device/src/main/java/cn/vber/device/controller/InspectionRuleController.java

@@ -49,7 +49,7 @@ public class InspectionRuleController extends BaseController {
     /**
      * 查询点检规则管理列表
      */
-    @SaCheckPermission("device:inspectionRule")
+    @SaCheckPermission("device:inspection")
     @GetMapping("/list")
     public TableDataInfo<InspectionRuleVo> list(InspectionRuleBo bo, PageQuery pageQuery) {
         return inspectionRuleService.queryPageList(bo, pageQuery);
@@ -58,7 +58,7 @@ public class InspectionRuleController extends BaseController {
     /**
      * 导出点检规则管理列表
      */
-    @SaCheckPermission("device:inspectionRule:export")
+    @SaCheckPermission("device:inspection:export")
     @Log(title = "点检规则管理", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     public void export(InspectionRuleBo bo, HttpServletResponse response) {
@@ -71,7 +71,7 @@ public class InspectionRuleController extends BaseController {
      *
      * @param id 主键
      */
-    @SaCheckPermission("device:inspectionRule:query")
+    @SaCheckPermission("device:inspection:query")
     @GetMapping("/{id}")
     public R<InspectionRuleVo> getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) {
         return R.ok(inspectionRuleService.queryById(id));
@@ -80,7 +80,7 @@ public class InspectionRuleController extends BaseController {
     /**
      * 新增点检规则管理
      */
-    @SaCheckPermission("device:inspectionRule:add")
+    @SaCheckPermission("device:inspection:add")
     @Log(title = "点检规则管理", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
@@ -91,7 +91,7 @@ public class InspectionRuleController extends BaseController {
     /**
      * 修改点检规则管理
      */
-    @SaCheckPermission("device:inspectionRule:edit")
+    @SaCheckPermission("device:inspection:edit")
     @Log(title = "点检规则管理", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping()
@@ -104,14 +104,14 @@ public class InspectionRuleController extends BaseController {
      *
      * @param ids 主键串
      */
-    @SaCheckPermission("device:inspectionRule:remove")
+    @SaCheckPermission("device:inspection:remove")
     @Log(title = "点检规则管理", businessType = BusinessType.DELETE)
     @DeleteMapping("/{ids}")
     public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] ids) {
         return toAjax(inspectionRuleService.deleteWithValidByIds(List.of(ids), true));
     }
 
-    @SaCheckPermission("device:inspectionRule:startStop")
+    @SaCheckPermission("device:inspection:startStop")
     @Log(title = "点检规则管理", businessType = BusinessType.UPDATE)
     @RepeatSubmit()
     @PutMapping("/startStop/{ids}")

+ 4 - 7
SERVER/ChickenFarmV3/vb-modules/vb-device/src/main/java/cn/vber/device/core/enums/TaskTypeEnum.java

@@ -9,13 +9,10 @@ public enum TaskTypeEnum {
     MAINTENANCE_MANAGEMENT(1),
 
     /**
-     * 清洁
+     * 清洁消毒
      */
-    CLEANING(2),
-    /**
-     * 消毒
-     */
-    DISINFECTION(3);
+    CLEANING_DISINFECTION(2);
+
 
     private final Integer type;
 
@@ -43,7 +40,7 @@ public enum TaskTypeEnum {
     public String getName() {
         return switch (this) {
             case MAINTENANCE_MANAGEMENT -> "设备保养";
-            case CLEANING -> "清洁消毒";
+            case CLEANING_DISINFECTION -> "清洁消毒";
             default -> null;
         };
     }

+ 1 - 1
UI/VB.VUE/src/core/services/RequestService.ts

@@ -91,7 +91,7 @@ Rs.interceptors.request.use(
 				const s_url = sessionObj.url // 请求地址
 				const s_data = sessionObj.data // 请求数据
 				const s_time = sessionObj.time // 请求时间
-				const interval = 1000 // 间隔时间(ms),小于此时间视为重复提交
+				const interval = 300 // 间隔时间(ms),小于此时间视为重复提交
 				if (
 					s_data === requestObj.data &&
 					requestObj.time - s_time < interval &&

+ 13 - 5
UI/VB.VUE/src/layouts/main/header/navbar/WorkOrderMenu.vue

@@ -29,7 +29,7 @@
 					<span class="menu-title">我的工单</span>
 				</router-link>
 			</div>
-			<div class="menu-item px-1">
+			<div v-has-permission="'workOrder:needReceive'" class="menu-item px-1">
 				<router-link to="/workOrder/needReceive" class="menu-link">
 					<span class="menu-icon">
 						<VbIcon icon-name="brifecase-timer" icon-type="duotone" class="me-2 fs-3"></VbIcon>
@@ -37,7 +37,7 @@
 					<span class="menu-title">待接受工单</span>
 				</router-link>
 			</div>
-			<div class="menu-item px-1">
+			<div v-has-permission="'workOrder:myReceiveR'" class="menu-item px-1">
 				<router-link to="/workOrder/myReceiveR" class="menu-link">
 					<span class="menu-icon">
 						<VbIcon icon-name="brifecase-tick" icon-type="duotone" class="me-2 fs-3"></VbIcon>
@@ -45,7 +45,7 @@
 					<span class="menu-title">维修工单</span>
 				</router-link>
 			</div>
-			<div class="menu-item px-1">
+			<div v-has-permission="'workOrder:myReceiveM'" class="menu-item px-1">
 				<router-link to="/workOrder/myReceiveM" class="menu-link">
 					<span class="menu-icon">
 						<VbIcon icon-name="brifecase-tick" icon-type="duotone" class="me-2 fs-3"></VbIcon>
@@ -53,12 +53,20 @@
 					<span class="menu-title">保养工单</span>
 				</router-link>
 			</div>
-			<div class="menu-item px-1">
+			<div v-has-permission="'workOrder:myReceiveC'" class="menu-item px-1">
 				<router-link to="/workOrder/myReceiveC" class="menu-link">
 					<span class="menu-icon">
 						<VbIcon icon-name="brifecase-tick" icon-type="duotone" class="me-2 fs-3"></VbIcon>
 					</span>
-					<span class="menu-title">清洁消毒工单</span>
+					<span class="menu-title">清洁工单</span>
+				</router-link>
+			</div>
+			<div v-has-permission="'workOrder:myReceiveD'" class="menu-item px-1">
+				<router-link to="/workOrder/myReceiveD" class="menu-link">
+					<span class="menu-icon">
+						<VbIcon icon-name="brifecase-tick" icon-type="duotone" class="me-2 fs-3"></VbIcon>
+					</span>
+					<span class="menu-title">消毒工单</span>
 				</router-link>
 			</div>
 		</div>

+ 23 - 0
UI/VB.VUE/src/views/biosecurity/cleanOrder/index.vue

@@ -0,0 +1,23 @@
+<script setup lang="ts" name="DeviceOrder">
+import DOrder from "../../workOrder/_order.vue"
+
+const customBtns = [
+	{
+		key: "handleCreate",
+		name: "添加设备清洁工单",
+		icon: "bi bi-plus-square",
+		disabledFun: () => false
+	}
+]
+const actions = ["update", "detail", "delete", "accept", "reject"]
+const permActions = ["delete", "accept", "reject"]
+</script>
+<template>
+	<DOrder
+		:order-type="3"
+		:clean-type="1"
+		:custom-btns="customBtns"
+		:actions="actions as any"
+		:data-filter="true"
+		:perm-actions="permActions as any" />
+</template>

+ 23 - 0
UI/VB.VUE/src/views/biosecurity/disinfectOrder/index.vue

@@ -0,0 +1,23 @@
+<script setup lang="ts" name="DeviceOrder">
+import DOrder from "../../workOrder/_order.vue"
+
+const customBtns = [
+	{
+		key: "handleCreate",
+		name: "添加设备消毒工单",
+		icon: "bi bi-plus-square",
+		disabledFun: () => false
+	}
+]
+const actions = ["update", "detail", "delete", "accept", "reject"]
+const permActions = ["delete", "accept", "reject"]
+</script>
+<template>
+	<DOrder
+		:order-type="4"
+		:clean-type="2"
+		:custom-btns="customBtns"
+		:actions="actions as any"
+		:data-filter="true"
+		:perm-actions="permActions as any" />
+</template>

+ 488 - 0
UI/VB.VUE/src/views/biosecurity/task/index.vue

@@ -0,0 +1,488 @@
+<script setup lang="ts" name="DeviceTask">
+import apis from "@a"
+import dayjs from "dayjs"
+
+const tableRef = ref()
+const modalRef = ref()
+const deviceSelectRef = ref()
+const selectType = ref("form")
+const opts = reactive({
+	columns: [
+		{ field: "id", name: "任务ID", width: 100, isSort: true, visible: false, tooltip: true },
+		{
+			field: "taskName",
+			name: "任务名称",
+			visible: true,
+			isSort: false,
+			width: "auto",
+			tooltip: true
+		},
+		// {field: "taskType", name: "任务类型", visible: true, isSort: false, width: 100},
+		// {field: "cleanType", name: "清洁类型", visible: true, isSort: false, width: 100},
+		{
+			field: "deviceName",
+			name: "设备名称",
+			visible: true,
+			isSort: false,
+			width: "auto",
+			tooltip: true
+		},
+		{
+			field: "cycle",
+			name: "清消周期(单位:时)",
+			visible: true,
+			isSort: false,
+			width: 180,
+			tooltip: true
+		},
+		{
+			field: "executorName",
+			name: "执行责任人",
+			visible: true,
+			isSort: false,
+			width: 120,
+			tooltip: true
+		},
+		{
+			field: "acceptorName",
+			name: "验收责任人",
+			visible: true,
+			isSort: false,
+			width: 120,
+			tooltip: true
+		},
+		{
+			field: "lastCreateTime",
+			name: "上次创建时间",
+			visible: true,
+			isSort: false,
+			width: 140,
+			tooltip: true
+		},
+		{ field: "status", name: "状态", visible: true, isSort: false, width: 80, tooltip: true },
+		{ field: "startTime", name: "开始时间", visible: true, isSort: false, width: 140 },
+		{ field: "endTime", name: "结束时间", visible: true, isSort: false, width: 140 },
+		{ field: "actions", name: `操作`, width: 120 }
+	] as any[],
+	queryParams: {
+		taskName: undefined,
+		taskType: 2,
+		cleanType: undefined,
+		deviceId: undefined,
+		deviceName: undefined,
+		status: undefined
+	},
+	searchFormItems: [
+		{
+			field: "taskName",
+			label: "任务名称",
+			class: "w-100",
+			required: false,
+			placeholder: "请输入任务名称",
+			component: "I",
+			listeners: {
+				keyup: (e: KeyboardEvent) => {
+					if (e.code == "Enter") {
+						handleQuery()
+					}
+				}
+			}
+		},
+		// {
+		// 	field: "taskType",
+		// 	label: "任务类型",
+		// 	class: "w-100",
+		// 	required: false,
+		// 	component: "Dict",
+		// 	props: {
+		// 		placeholder: "请选择任务类型",
+		// 		dictType: "device_task_type",
+		// 		valueIsNumber: 1,
+		// 		type: "select"
+		// 	},
+		// 	listeners: {
+		// 		change: () => {
+		// 			handleQuery()
+		// 		}
+		// 	}
+		// },
+		// {
+		// 	field: "cleanType",
+		// 	label: "清洁类型",
+		// 	class: "w-100",
+		// 	required: false,
+		// 	component: "Dict",
+		// 	props: {
+		// 		placeholder: "请选择清洁类型",
+		// 		dictType: "device_clean_type",
+		// 		valueIsNumber: 1,
+		// 		type: "select"
+		// 	},
+		// 	listeners: {
+		// 		change: () => {
+		// 			handleQuery()
+		// 		}
+		// 	}
+		// },
+		{
+			field: "deviceName",
+			label: "设备名称",
+			class: "w-100",
+			required: false,
+			placeholder: "请选择设备",
+			component: "I",
+			listeners: {
+				keyup: (e: KeyboardEvent) => {
+					if (e.code == "Enter") {
+						handleQuery()
+					}
+				}
+			},
+			append: "icon",
+			appendClickFunc: () => {
+				handleOpenDeviceSelect("search")
+			}
+		},
+		{
+			field: "status",
+			label: "任务状态",
+			class: "w-100",
+			required: false,
+			placeholder: "请选择状态",
+			component: "Dict",
+			props: {
+				placeholder: "请选择状态",
+				dictType: "sys_normal_disable",
+				valueIsNumber: 1,
+				type: "select"
+			},
+			listeners: {
+				change: () => {
+					handleQuery()
+				}
+			}
+		}
+	] as any,
+	permission: "device:deviceMaintenanceTask",
+	handleBtns: [],
+	handleFuns: {
+		handleCreate,
+		handleUpdate: () => {
+			const row = tableRef.value.getSelected()
+			handleUpdate(row)
+		},
+		handleDelete: () => {
+			const rows = tableRef.value.getSelecteds()
+			handleDelete(rows)
+		}
+	},
+	customBtns: [],
+	tableListFun: apis.device.deviceTaskApi.list,
+	getEntityFun: apis.device.deviceTaskApi.get,
+	deleteEntityFun: apis.device.deviceTaskApi.del,
+	exportUrl: apis.device.deviceTaskApi.exportUrl,
+	exportName: "DeviceTask",
+	modalTitle: "设备清洁消毒任务",
+	formItems: [
+		{
+			field: "taskName",
+			label: "任务名称",
+			class: "w-100",
+			required: true,
+			placeholder: "请输入清消任务名称",
+			component: "I"
+		},
+		// {
+		// 	field: "taskType",
+		// 	label: "任务类型",
+		// 	class: "w-100",
+		// 	required: true,
+		// 	component: "Dict",
+		// 	props: {
+		// 		placeholder: "请选择任务类型",
+		// 		dictType: "device_task_type",
+		// 		type: "select",
+		// 		valueIsNumber: 1
+		// 	}
+		// },
+		{
+			field: "cleanType",
+			label: "清消类型",
+			class: "w-100",
+			required: true,
+			component: "Dict",
+			props: {
+				placeholder: "请选择清消类型",
+				dictType: "device_clean_type",
+				type: "select",
+				valueIsNumber: 1
+			}
+		},
+		{
+			field: "deviceName",
+			disabled: true,
+			label: "设备名称",
+			class: "w-100",
+			required: true,
+			placeholder: "请输入选择设备",
+			component: "I",
+			append: "icon",
+			appendClickFunc: () => {
+				handleOpenDeviceSelect("form")
+			}
+		},
+		{
+			field: "cycle",
+			label: "清消周期(单位:时)",
+			class: "w-100",
+			required: true,
+			placeholder: "请输入清消周期",
+			component: "I"
+		},
+		{
+			field: "executorName",
+			disabled: true,
+			label: "执行责任人",
+			class: "w-100",
+			required: true,
+			placeholder: "请输入执行责任人",
+			component: "I",
+			append: "icon",
+			appendClickFunc: () => {
+				handleOpenUserSelect("executor")
+			}
+		},
+		{
+			field: "acceptorName",
+			disabled: true,
+			label: "验收责任人",
+			class: "w-100",
+			required: true,
+			placeholder: "请输入验收责任人",
+			component: "I",
+			append: "icon",
+			appendClickFunc: () => {
+				handleOpenUserSelect("acceptor")
+			}
+		},
+		{
+			field: "startTime",
+			label: "开始时间",
+			class: "w-100",
+			required: false,
+			component: "D",
+			props: {
+				placeholder: "请选择开始时间",
+				type: "datetime",
+				valueFormat: "YYYY-MM-DD HH:mm:ss"
+			}
+		},
+		{
+			field: "endTime",
+			label: "结束时间",
+			class: "w-100",
+			required: false,
+			component: "D",
+			props: {
+				placeholder: "请选择结束时间",
+				type: "datetime",
+				valueFormat: "YYYY-MM-DD HH:mm:ss"
+			}
+		},
+		{
+			field: "taskDesc",
+			label: "任务描述",
+			class: "w-100",
+			required: false,
+			placeholder: "请输入清消任务描述",
+			component: "I",
+			props: {
+				type: "textarea",
+				rows: 5
+			}
+		}
+	] as any,
+	resetForm: () => {
+		form.value = emptyFormData.value
+	},
+	labelWidth: "80px",
+	emptyFormData: {
+		id: undefined,
+		taskName: undefined,
+		taskDesc: undefined,
+		taskType: 2,
+		cleanType: undefined,
+		deviceId: undefined,
+		deviceName: undefined,
+		cycle: undefined,
+		executorId: undefined,
+		executorName: undefined,
+		acceptorId: undefined,
+		acceptorName: undefined,
+		status: 0,
+		endTime: undefined,
+		remark: undefined
+	}
+})
+const { queryParams, emptyFormData } = toRefs(opts)
+const form = ref<any>(emptyFormData.value)
+
+/** 搜索按钮操作 */
+function handleQuery(query?: any) {
+	query = query || tableRef.value?.getQueryParams() || queryParams.value
+	addDateRange(query, query.dateRangeEndTime, "EndTime")
+	addDateRange(query, query.dateRangeCreateTime)
+	addDateRange(query, query.dateRangeUpdateTime, "UpdateTime")
+	tableRef.value?.query(query)
+}
+
+/** 重置按钮操作 */
+function resetQuery(query?: any) {
+	query = query || tableRef.value?.getQueryParams() || queryParams.value
+	query.dateRangeEndTime = [] as any
+	addDateRange(query, query.dateRangeEndTime, "EndTime")
+	query.dateRangeCreateTime = [] as any
+	addDateRange(query, query.dateRangeCreateTime)
+	//
+}
+function handleCreate() {
+	tableRef.value.defaultHandleFuns.handleCreate()
+}
+/** 修改按钮操作 */
+function handleUpdate(row: any) {
+	tableRef.value.defaultHandleFuns.handleUpdate("", row)
+}
+
+/** 删除按钮操作 */
+function handleDelete(rows: any[]) {
+	tableRef.value.defaultHandleFuns.handleDelete("", rows)
+}
+
+/** 提交按钮 */
+function submitForm() {
+	apis.device.deviceTaskApi.addOrUpdate(form.value).then(() => {
+		handleQuery()
+	})
+}
+
+function handleOpenDeviceSelect(type: string) {
+	selectType.value = type
+	if (selectType.value === "search") {
+		queryParams.value.deviceId = undefined
+		queryParams.value.deviceName = ""
+		tableRef.value.setQueryParams(queryParams.value)
+	}
+	deviceSelectRef.value.open()
+}
+function onDeviceSelectConfirm(data: any) {
+	if (selectType.value === "form") {
+		form.value.deviceId = data[0].id
+		form.value.deviceName = data[0].name
+	} else if (selectType.value === "search") {
+		queryParams.value.deviceId = data[0].id
+		queryParams.value.deviceName = data[0].name
+		handleQuery(queryParams.value)
+	}
+}
+const userSelectRef = ref()
+const selectUserType = ref("")
+function handleOpenUserSelect(type: string) {
+	selectUserType.value = type
+	userSelectRef.value.open()
+}
+function onUserSelectConfirm(data) {
+	if (selectUserType.value === "executor") {
+		form.value.executorId = data[0].userId
+		form.value.executorName = data[0].nickName
+	} else if (selectUserType.value === "acceptor") {
+		form.value.acceptorId = data[0].userId
+		form.value.acceptorName = data[0].nickName
+	}
+}
+</script>
+<template>
+	<div class="app-container">
+		<VbDataTable
+			ref="tableRef"
+			keyField="id"
+			:columns="opts.columns"
+			:handle-perm="opts.permission"
+			:handle-btns="opts.handleBtns"
+			:handle-funs="opts.handleFuns"
+			:search-form-items="opts.searchFormItems"
+			:custom-btns="opts.customBtns"
+			:remote-fun="opts.tableListFun"
+			:get-entity-fun="opts.getEntityFun"
+			:delete-entity-fun="opts.deleteEntityFun"
+			:export-url="opts.exportUrl"
+			:export-name="opts.exportName"
+			:modal="modalRef"
+			:reset-form-fun="opts.resetForm"
+			v-model:form-data="form"
+			v-model:query-params="queryParams"
+			:check-multiple="true"
+			:reset-search-form-fun="resetQuery"
+			:custom-search-fun="handleQuery">
+			<template #taskType="{ row }">
+				<DictTag type="device_task_type" :value-is-number="1" :value="row.taskType"></DictTag>
+			</template>
+			<template #cleanType="{ row }">
+				<DictTag type="device_clean_type" :value-is-number="1" :value="row.cleanType"></DictTag>
+			</template>
+			<template #status="{ row }">
+				<DictTag type="sys_normal_disable" :value-is-number="1" :value="row.status"></DictTag>
+			</template>
+			<template #lastCreateTime="{ row }">
+				<template v-if="row.lastCreateTime">
+					{{ dayjs(row.lastCreateTime).format("YYYY-MM-DD HH:mm:ss") }}
+				</template>
+				<span v-else>-</span>
+			</template>
+			<template #startTime="{ row }">
+				<template v-if="row.startTime">
+					{{ dayjs(row.startTime).format("YYYY-MM-DD HH:mm:ss") }}
+				</template>
+			</template>
+			<template #endTime="{ row }">
+				<template v-if="row.endTime">
+					{{ dayjs(row.endTime).format("YYYY-MM-DD HH:mm:ss") }}
+				</template>
+			</template>
+			<template #actions="{ row }">
+				<vb-tooltip content="修改" placement="top">
+					<el-button
+						link
+						type="primary"
+						@click="handleUpdate(row)"
+						v-hasPermission="'device:deviceTask:edit'">
+						<template #icon>
+							<VbIcon icon-name="notepad-edit" icon-type="duotone" class="fs-3"></VbIcon>
+						</template>
+					</el-button>
+				</vb-tooltip>
+				<vb-tooltip content="删除" placement="top">
+					<el-button
+						link
+						type="primary"
+						@click="handleDelete([row])"
+						v-hasPermission="'device:deviceTask:remove'">
+						<template #icon>
+							<VbIcon icon-name="trash-square" icon-type="duotone" class="fs-3"></VbIcon>
+						</template>
+					</el-button>
+				</vb-tooltip>
+			</template>
+		</VbDataTable>
+		<VbModal
+			v-model:modal="modalRef"
+			:title="opts.modalTitle"
+			:form-data="form"
+			:form-items="opts.formItems"
+			:label-width="opts.labelWidth"
+			append-to-body
+			@confirm="submitForm"></VbModal>
+
+		<DeviceSelect ref="deviceSelectRef" @confirm="onDeviceSelectConfirm"></DeviceSelect>
+		<UserSelect ref="userSelectRef" :multiple="false" @confirm="onUserSelectConfirm"></UserSelect>
+	</div>
+</template>

+ 1 - 45
UI/VB.VUE/src/views/device/device/index.vue

@@ -113,36 +113,7 @@ const opts = reactive({
 				}
 			}
 		},
-		{
-			field: "location",
-			label: "安装位置",
-			class: "w-100",
-			required: false,
-			placeholder: "请输入安装位置",
-			component: "I",
-			listeners: {
-				keyup: (e: KeyboardEvent) => {
-					if (e.code == "Enter") {
-						handleQuery()
-					}
-				}
-			}
-		},
-		{
-			field: "manufacturer",
-			label: "厂家",
-			class: "w-100",
-			required: false,
-			placeholder: "请输入厂家",
-			component: "I",
-			listeners: {
-				keyup: (e: KeyboardEvent) => {
-					if (e.code == "Enter") {
-						handleQuery()
-					}
-				}
-			}
-		},
+
 		{
 			field: "dateRangeInstallationDate",
 			label: "安装日期",
@@ -164,21 +135,6 @@ const opts = reactive({
 				}
 			},
 			span: 5
-		},
-		{
-			field: "responsiblePerson",
-			label: "负责人",
-			class: "w-100",
-			required: false,
-			placeholder: "请输入负责人",
-			component: "I",
-			listeners: {
-				keyup: (e: KeyboardEvent) => {
-					if (e.code == "Enter") {
-						handleQuery()
-					}
-				}
-			}
 		}
 	] as any,
 	permission: "device:device",

+ 1 - 0
UI/VB.VUE/src/views/device/deviceMaintenanceOrder/index.vue

@@ -17,5 +17,6 @@ const permActions = ["delete", "accept", "reject"]
 		:order-type="2"
 		:custom-btns="customBtns"
 		:actions="actions as any"
+		:data-filter="true"
 		:perm-actions="permActions as any" />
 </template>

+ 1 - 0
UI/VB.VUE/src/views/device/deviceRepairOrder/index.vue

@@ -17,5 +17,6 @@ const permActions = ["delete", "accept", "reject"]
 		:order-type="1"
 		:custom-btns="customBtns"
 		:actions="actions as any"
+		:data-filter="true"
 		:perm-actions="permActions as any" />
 </template>

+ 7 - 3
UI/VB.VUE/src/views/workOrder/_order.vue

@@ -35,11 +35,13 @@ const props = withDefaults(
 		status?: number
 		reporterId?: number
 		receiverId?: number
+		dataFilter?: boolean
 	}>(),
 	{
 		customBtns: () => {
 			return []
-		}
+		},
+		dataFilter: false
 	}
 )
 
@@ -196,7 +198,7 @@ const opts = reactive({
 		},
 		{
 			field: "cleanType",
-			show: () => props.orderType == 3,
+			show: () => (props.orderType == 3 || props.orderType == 4) && props.cleanType == undefined,
 			disabled: () => props.cleanType,
 			label: "清洁类型",
 			class: "w-100",
@@ -265,7 +267,9 @@ const opts = reactive({
 		handleAddAssistants
 	},
 	customBtns: props.customBtns,
-	tableListFun: apis.device.deviceOrderApi.list,
+	tableListFun: props.dataFilter
+		? apis.device.deviceOrderApi.list
+		: apis.device.deviceOrderApi.list2,
 	getEntityFun: apis.device.deviceOrderApi.get,
 	deleteEntityFun: apis.device.deviceOrderApi.del,
 	exportUrl: apis.device.deviceOrderApi.exportUrl,

+ 24 - 0
UI/VB.VUE/src/views/workOrder/myReceiveD.vue

@@ -0,0 +1,24 @@
+<script setup lang="ts" name="DeviceOrder">
+import appStore from "@s"
+import DOrder from "./_order.vue"
+
+const customBtns = [
+	{
+		key: "handleAddAssistants",
+		name: "添加协助人员",
+		// clickFun: handleAddAssistants,
+		icon: "bi bi-plus-square",
+		disabledFun: (c) => {
+			return c != 1
+		}
+	}
+]
+const actions = ["update", "detail", "suspend", "resume", "submit"]
+</script>
+<template>
+	<DOrder
+		:order-type="4"
+		:receiver-id="appStore.authStore.user.userId"
+		:custom-btns="customBtns"
+		:actions="actions as any" />
+</template>