From 7d03329274a6a3054f3959be43423bebe08aeb64 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Fri, 21 Nov 2025 16:15:37 +0800
Subject: [PATCH] feat:智飞工单

---
 src/views/tickets/orderLog.vue |  169 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 146 insertions(+), 23 deletions(-)

diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index c73e4ef..d531fcc 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -4,7 +4,7 @@
     <el-tabs v-model="activeTab" @tab-click="handleTabChange">
       <el-tab-pane v-for="tab in tabsList" :key="tab.name" :label="`${tab.label} (${tab.count})`" :name="tab.name">
         <SearchBox @search="searchClick"></SearchBox>
-        <el-button v-if="hasAddBtnPermission() && activeTab != 'WAIT_AUDIT'" type="primary" icon="el-icon-plus" @click="handleAddOrder">新建工单
+        <el-button v-if="permission?.order_log_add && activeTab != 'WAIT_AUDIT'" type="primary" icon="el-icon-plus" @click="handleAddOrder">新建工单
         </el-button>
         <el-button type="success" plain icon="el-icon-download" @click="exportData">导出
         </el-button>
@@ -41,27 +41,27 @@
             <el-table-column prop="cycle_time_value" label="工单周期频次" align="center" show-overflow-tooltip />
             <el-table-column label="操作" width="200" align="center">
               <template #default="scope">
-                <template v-if="scope.row.status == 1">
-                  <el-button v-if="hasPaddingBtnPermission()" type="text" icon="el-icon-view" @click="handleCheckDetail(row)">审核</el-button>
+                <template v-if="scope.row.status === 1">
+                  <el-button type="text" icon="el-icon-view" v-if="permission.order_log_review" @click="handleCheckDetail(scope.row, '工单审核')">审核</el-button>
                   <!--待审核状态-->
-                  <el-button type="text" icon="el-icon-warning" v-if="hasRecallPaddingBtnPermission()" @click="orderLogRecall(scope.row.id)">撤回
+                  <el-button type="text" icon="el-icon-warning" v-if="permission.order_log_recall" @click="revokeOrder(scope.row.id)">撤回
                   </el-button>
                 </template>
                 <!--已驳回-->
-                <template v-if="scope.row.status == 2">
-                  <el-button type="text" icon="el-icon-warning" @click="rejectDetail(scope.row.id)">驳回原因</el-button>
-                  <el-button v-if="userInfo.user_id == row.create_user" type="text" icon="el-icon-view" @click="handleViewDetail(scope.row)">编辑</el-button>
-                  <el-button v-else type="text" icon="el-icon-view" @click="handleViewDetail(scope.row)">详情</el-button>
+                <template v-if="scope.row.status === 2">
+                  <el-button type="text" icon="el-icon-warning" @click="rejectReason(scope.row.id)">驳回原因</el-button>
+                  <el-button type="text" icon="el-icon-view" v-if="userInfo.user_id === scope.row.create_user" @click="handleViewDetail(scope.row, '工单编辑')">编辑</el-button>
+                  <el-button type="text" icon="el-icon-view" v-else @click="handleViewDetail(scope.row, '工单详情')">详情</el-button>
                 </template>
                 <!-- 已通过 -->
-                <template v-if="scope.row.status == 3">
-                  <el-button type="text" icon="el-icon-view" @click="handleViewDetail(scope.row)">详情</el-button>
+                <template v-if="scope.row.status === 3">
+                  <el-button type="text" icon="el-icon-view" @click="handleViewDetail(scope.row, '工单详情')">详情</el-button>
                 </template>
                 <!--草稿-->
-                <template v-if="scope.row.status == 0">
-                  <el-button type="text" icon="el-icon-edit" @click="handleViewDetail(scope.row)">编辑</el-button>
+                <template v-if="scope.row.status === 0">
+                  <el-button type="text" icon="el-icon-edit" @click="handleViewDetail(scope.row, '工单编辑')">编辑</el-button>
                   <el-button type="text" icon="el-icon-position" @click="userPublishPush(scope.row.id)">发布</el-button>
-                  <el-button type="text" icon="el-icon-delete" @click="deleteOrderLog(scope.row.id)">删除</el-button>
+                  <el-button type="text" icon="el-icon-delete" @click="deleteOrder(scope.row.id)">删除</el-button>
                 </template>
               </template>
             </el-table-column>
@@ -76,11 +76,15 @@
       </el-tab-pane>
     </el-tabs>
   </div>
+  <AddEditDetails v-model:show="isShowAddEditDetails" @refresh="refreshGetOrderList" />
 </template>
 
 <script setup>
-import SearchBox from './SearchBox.vue'
+import SearchBox from './component/SearchBox.vue'
+import AddEditDetails from './component/AddEditDetails.vue'
+import NProgress from 'nprogress'
 import { useStore } from 'vuex'
+import { downloadXls } from '@/utils/util'
 import {
   getList,
   saveUpdateOrderLog,
@@ -96,12 +100,16 @@
 } from '@/api/tickets/orderLog'
 import { cloneDeep } from 'lodash';
 import { computed, onMounted } from 'vue';
+import { ElMessage, ElMessageBox } from 'element-plus'
 
 const store = useStore()
 
+const userInfo = computed(() => store.state.user.userInfo)
 const permission = computed(() => store.state.user.permission);
 
-console.log(permission, '8888')
+console.log(userInfo,permission, '8888')
+
+const isShowAddEditDetails = ref(false)
 
 const activeTab = ref('all')
 // tab切换
@@ -132,7 +140,6 @@
     },
   }
   getList(apiParams).then(res => {
-    console.log(res.data.data.records,'99999999')
     orderListTable.value = res.data.data.records
     total.value = res.data.data.total
   })
@@ -158,20 +165,136 @@
   getTableList()
 }
 
-const refreshGetJobList = () => {
+const refreshGetOrderList = () => {
   orderListParams.current = 1
   orderListParams.size = 10
   getTableList()
 }
 
 // 新增按钮 和 导出按钮
-function hasAddBtnPermission () {
-  // undefined 或 false 都返回 false,只有 true 返回 true
-  console.log(permission?.value.order_log_add, '66666')
-  return permission && permission?.value.order_log_add
+// function hasAddBtnPermission () {
+//   return permission && permission?.value.order_log_add
+// }
+// 新建工单、编辑、详情
+const txtTitle = ref('新建工单')
+const rowObj = ref({})
+provide('txtTitle', txtTitle)
+provide('rowObj', rowObj)
+function handleAddOrder() {
+  isShowAddEditDetails.value = true
 }
-// 新建工单
-function handleAddOrder() {}
+// 详情、编辑
+function handleViewDetail(row, txt) {
+  txtTitle.value = txt
+  isShowAddEditDetails.value = true
+}
+
+// 审核
+function handleCheckDetail(row, txt) {
+  rowObj.value = row
+  txtTitle.value = txt
+  isShowAddEditDetails.value = true
+}
+
+// 导出
+async function exportData() {
+  try {
+    await ElMessageBox.confirm('是否导出智飞工单数据?', '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    })
+
+    NProgress.start()
+
+    const apiParams = {
+      ...cloneDeep(orderListParams),
+      searchParams: {
+        ...cloneDeep(orderListParams.searchParams)
+      },
+    }
+    const res = await orderLogExport(apiParams)
+
+    downloadXls(res.data, `智飞工单${dayjs().format('YYYY-MM-DD')}.xlsx`)
+    ElMessage.success('导出成功')
+
+  } catch (error) {
+    if (error !== 'cancel') {
+      ElMessage.error('导出失败')
+      console.error('导出错误:', error)
+    }
+  } finally {
+    NProgress.done()
+  }
+}
+
+// 撤回工单
+async function revokeOrder(id) {
+  try {
+    await ElMessageBox.confirm('确定撤回到草稿箱?', '是否撤回', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    })
+    // 用户点击确定,执行撤回操作
+    await orderLogRecall(id)
+    // 显示成功消息
+    ElMessage.success('撤回成功')
+    // 触发搜索刷新
+    refreshGetOrderList()
+  } catch (error) {
+    // 用户点击取消,不执行任何操作
+    if (error !== 'cancel') {
+      ElMessage.error('撤回失败')
+      console.error('撤回错误:', error)
+    }
+  }
+}
+
+// 驳回原因
+async function rejectReason(id) {
+  try {
+    const res = await orderLogDetails(id)
+    const data = res.data.data
+
+    await ElMessageBox.confirm(data.remark, '驳回原因', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    })
+
+    // 用户点击确定后的逻辑 TODO
+    // form.value = { ...res.data.data }
+    // handleViewDetail(data)
+
+  } catch (error) {
+    // 用户点击取消,不执行任何操作
+    if (error !== 'cancel') {
+      ElMessage.error('操作失败')
+      console.error('错误:', error)
+    }
+  }
+}
+
+// 删除
+async function deleteOrder(id) {
+  try {
+    await ElMessageBox.confirm('确定删除吗?', '提示', {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning'
+    })
+    deleteOrderLog(id)
+    ElMessage.success('删除成功')
+    // 触发搜索刷新
+    refreshGetOrderList()
+  } catch (error) {
+    if (error !== 'cancel') {
+      ElMessage.error('删除失败')
+      console.error('删除错误:', error)
+    }
+  }
+}
 
 onMounted(() => {
   getTableList()

--
Gitblit v1.9.3