From c7b547cf132f3607e418b4dbd870a46eac3a1048 Mon Sep 17 00:00:00 2001
From: web <candymxq888@outlook.com>
Date: 星期一, 21 七月 2025 17:15:54 +0800
Subject: [PATCH] 添加工单

---
 src/views/workOrder/orderList/index.vue |  251 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/api/workOrder/index.js              |   37 +++++++
 2 files changed, 288 insertions(+), 0 deletions(-)

diff --git a/src/api/workOrder/index.js b/src/api/workOrder/index.js
new file mode 100644
index 0000000..2d85e20
--- /dev/null
+++ b/src/api/workOrder/index.js
@@ -0,0 +1,37 @@
+import { publicRequest } from '@/utils/request.js'
+
+
+// 获取工单列表
+export const getOrderList = (data) => {
+    return publicRequest({
+        url: '/userWorkOrder/search',
+        method: 'POST',
+        data
+    })
+}
+
+// 创建工单
+export const createOrder = (data) => {
+    return publicRequest({
+        url: '/userWorkOrder/create',
+        method: 'POST',
+        data
+    })
+}
+
+// 修改工单
+export const editOrder = (data) => {
+    return publicRequest({
+        url: '/userWorkOrder/modify',
+        method: 'POST',
+        data
+    })
+}
+
+// 获取工单详情
+export const getOrderInfo = (id) => {
+    return publicRequest({
+        url: `/userWorkOrder/get/${id}`,
+        method: 'GET'
+    })
+}
\ No newline at end of file
diff --git a/src/views/workOrder/orderList/index.vue b/src/views/workOrder/orderList/index.vue
new file mode 100644
index 0000000..1543ae5
--- /dev/null
+++ b/src/views/workOrder/orderList/index.vue
@@ -0,0 +1,251 @@
+<template>
+    <div class="app-container">
+       <el-form :model="queryParams" ref="queryRef" :inline="true">
+          <el-form-item prop="keywords">
+             <el-input
+                v-model="queryParams.keywords"
+                placeholder="请输入内容"
+                clearable
+                style="width: 200px"
+                @keyup.enter="handleQuery"
+             />
+          </el-form-item>
+          <el-form-item>
+             <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+             <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+          </el-form-item>
+       </el-form>
+ 
+       <el-row :gutter="10" class="mb8">
+          <el-col :span="1.5">
+             <el-button
+                type="primary"
+                plain
+                icon="Plus"
+                @click="handleAdd"
+             >新增</el-button>
+          </el-col>
+       </el-row>
+       <!--表格及分页-->
+       <el-table v-loading="loading" :data="tableData">
+          <el-table-column
+            v-for="(item, key, index) of tableHeader"
+            :prop="key.toString()"
+            :label="item"
+            :key="index"
+            align="center"
+          >
+        </el-table-column>
+          <el-table-column label="操作" width="auto" align="center" class-name="small-padding fixed-width">
+             <template #default="scope">
+                <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)">修改</el-button>
+             </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          :total="pageParam.total"
+          v-model:page="pageParam.page"
+          v-model:limit="pageParam.limit"
+          :page-sizes="[10,20,30]"
+          @pagination="getList"
+        />
+       <!-- 添加或修改对话框 -->
+       <el-dialog :title="title" v-model="open" append-to-body center>
+          <el-form class="form-box" ref="formRef" :model="form" :rules="rules" label-width='auto'>
+                    <el-form-item label="工单名称" prop="name">
+                        <el-input v-model="form.name" placeholder="请输入工单名称" />
+                    </el-form-item>
+                    <el-form-item label="工单类型" prop="type" placeholder="请选择工单类型">
+                        <el-select v-model="form.type">
+                          <el-option v-for="item in typeOption"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value"
+                          ></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="执行人" prop="executeUser" placeholder="请选择执行人">
+                        <el-select v-model="form.executeUser">
+                          <el-option v-for="item in userList"
+                            :key="item.id"
+                            :label="item.nickName"
+                            :value="item.id"
+                          ></el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="内容描述" prop="content">
+                        <el-input v-model="form.content" placeholder="请输入内容描述" />
+                    </el-form-item>
+                    <el-form-item label="工单地址" prop="address">
+                        <el-input v-model="form.address" placeholder="请输入工单地址" />
+                    </el-form-item>
+                    <el-form-item label="备注" prop="remark">
+                        <el-input v-model="form.remark" placeholder="请输入备注" />
+                    </el-form-item>
+                    <el-form-item></el-form-item>
+          </el-form>
+          <template #footer>
+             <div class="dialog-footer">
+                <el-button type="primary" @click="submitForm">确 定</el-button>
+                <el-button @click="cancel">取 消</el-button>
+             </div>
+          </template>
+       </el-dialog>
+    </div>
+ </template>
+ 
+ <script setup name="Menu">
+ import { getOrderList, createOrder, editOrder } from "@/api/workOrder";
+ import user from "@/api/system/user";
+ import setPostParams from "@/utils/searchParams.js";
+ const { proxy } = getCurrentInstance();
+ 
+/**
+ * 搜索相关
+ */
+ /** 搜索按钮操作 */
+ function handleQuery() {
+   getList({keywords:queryParams.value.keywords,page:1})
+ }
+ 
+ /** 重置按钮操作 */
+ function resetQuery() {
+   proxy.resetForm("queryRef");
+   handleQuery();
+ }
+
+ /**
+  *  Table表格权限数据列表相关
+  */
+
+const pageParam = ref({
+    total:0,
+    limit:0,
+    page:0,
+})
+const tableData = ref([]);
+let  tableHeader = ref({
+    code: '工单号',
+    name: '工单名称',
+    typeView: '工单类型',
+    createUserName: '上报人',
+    executeUserName: '执行人',
+    executeStateView: '执行状态',
+    address: '所属地址',
+    updateTimeView: '上报时间'
+   })
+ /** 获取列表 */
+ async function getList(val) {
+      loading.value = true;
+
+     let postParam = setPostParams(val)
+      await getOrderList(postParam).then((res) =>{
+        tableData.value = res.data.list
+        pageParam.value.total = res.data.total
+        pageParam.value.limit = res.data.limit
+        pageParam.value.page = res.data.page
+    })
+    loading.value = false;
+ }
+ 
+ /** 新增按钮操作 */
+ async function handleAdd() {
+   reset();
+   open.value = true;
+   title.value = "新增工单";
+ }
+ /** 修改按钮操作 */
+ async function handleUpdate(row) {
+   reset();
+   form.value.id = row.id
+   for(var key in form.value) {
+    form.value[key] = row[key]
+   }
+   open.value = true;
+   title.value = "修改工单";
+ }
+
+ /**
+  *  新增/修改弹窗Form表单相关
+  */
+const open = ref(false);
+const loading = ref(false);
+const title = ref("");
+
+const data = reactive({
+  form:{},
+  queryParams: {
+      keywords: '',
+  },
+  rules: {
+      name: [{ required: true, message: "请输入工单名称", trigger: "blur" }],
+      type: [{ required: true, message: "请选择工单类型", trigger: "blur" }],
+      executeUser: [{ required: true, message: "请选择执行人", trigger: "blur" }],
+      content: [{ required: true, message: "请输入内容描述", trigger: "blur" }],
+      address: [{ required: true, message: "请输入工单地址", trigger: "blur" }],
+  },
+});
+const { queryParams, form, rules } = toRefs(data);
+const typeOption = [
+  { label: '设备维护', value: 1 },
+  { label: '设备维修', value: 2 },
+]
+const userList = ref([])
+
+// 获取用户
+const getUser = () => {
+  user().search({ limit: 100, page: 1 }).then(res => {
+    userList.value = res.data.list
+  })
+}
+
+ /** 提交按钮 */
+ async function submitForm() {
+   proxy.$refs["formRef"].validate( async valid => {
+     if (valid) {
+       if (form.value.id != undefined) {
+           await editOrder(form.value).then(res => {
+           proxy.$modal.msgSuccess("修改成功");
+           open.value = false;
+           getList();
+         }).catch(() =>{
+            open.value = false;
+            proxy.$modal.msgError("修改失败");
+         });
+       } else {
+          form.value.executeUserName = userList.value.find(el =>el.id === form.value.executeUser)?.nickName
+          await createOrder(form.value).then(res => {
+            proxy.$modal.msgSuccess("新增成功");
+            open.value = false;
+            getList();
+          }).catch(() =>{
+            open.value = false;
+            proxy.$modal.msgError("新增失败");
+         });
+       }
+     }
+   });
+ }
+
+ /** 取消按钮 */
+ function cancel() {
+   open.value = false;
+   reset();
+ }
+ /** 表单重置 */
+ function reset() {
+   form.value = {
+       name:'',
+       type:'',
+       executeUser:'',
+       executeUserName:'',
+       content:'',
+       address:'',
+       remark:'',
+   };
+   proxy.resetForm("formRef");
+ }
+ getList();
+ getUser()
+ </script>
+ 
\ No newline at end of file

--
Gitblit v1.9.3