duy před 2 roky
rodič
revize
eb92475ae6

+ 112 - 113
src/views/attendance/business-trip/index.vue

@@ -1,83 +1,89 @@
 
 <template>
-  <HcCard>
-    <template #header>
-      <div class="w-36 ml-2">
+    <HcCard>
+        <template #header>
+            <div class="w-36 ml-2">
                 <el-select v-model="searchForm.projectId" block clearable placeholder="项目名称" size="large">
-                    <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId"/>
+                    <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId" />
                 </el-select>
-      </div>
+            </div>
      
-      <div class="ml-4">
-                <el-button type="primary" @click="searchClick" size="large">
-                    <HcIcon name="search-2"/>
+            <div class="ml-4">
+                <el-button type="primary" size="large" @click="searchClick">
+                    <HcIcon name="search-2" />
                     <span>搜索</span>
                 </el-button>
-       </div>
-      <div class="ml-2">
+            </div>
+            <div class="ml-2">
                 <el-button size="large" @click="resetClick">
-                    <HcIcon name="close-circle"/>
+                    <HcIcon name="close-circle" />
                     <span>重置</span>
                 </el-button>
-        </div>
-    </template>
-    <template  #extra>
-        <el-button type="warning" @click="toImportTempClick" size="large">
-          <HcIcon name="delete-bin-2"/>
-                    <span>草稿箱{{draftNum > 0 ? `(${draftNum})` : ''}}</span>
-         </el-button>
-         <el-button type="primary" size="large" class="ml-2" @click="addinfoClick">
-                    <HcIcon name="add"/>
-                    <span>新增出差申请</span>
-         </el-button>
-    </template>
-    <HcTable :column="tableColumn" :datas="tableData" :loading="tableLoading">
-      <template #tripDesc="{row}">
-                <span class="text-blue">{{row.tripDesc}}</span>
+            </div>
         </template>
-      <!-- <template #action="{row, index}">
+        <template #extra>
+            <el-button type="warning" size="large" @click="toImportTempClick">
+                <HcIcon name="delete-bin-2" />
+                <span>草稿箱{{ draftNum > 0 ? `(${draftNum})` : '' }}</span>
+            </el-button>
+            <el-button type="primary" size="large" class="ml-2" @click="addinfoClick">
+                <HcIcon name="add" />
+                <span>新增出差申请</span>
+            </el-button>
+        </template>
+        <HcTable :column="tableColumn" :datas="tableData" :loading="tableLoading">
+            <template #tripDesc="{ row }">
+                <span class="text-blue">{{ row.tripDesc }}</span>
+            </template>
+            <!-- <template #action="{row, index}">
          <el-button hc-btn type="primary" size="small">撤销</el-button>
        </template> -->
-       <template #action="{row,index}">
+            <template #action="{ row, index }">
                 <el-popconfirm title="是否确认撤销?" hide-icon @confirm="rowCancel(row)">
                     <template #reference>
-                        <el-button size="small" type="primary"
-                                   :disabled="row.status !== 1"
-                                   :loading="row.isCancelLoading"
-                        >撤销</el-button>
+                        <el-button
+                            size="small" type="primary"
+                            :disabled="row.status !== 1"
+                            :loading="row.isCancelLoading"
+                        >
+                            撤销
+                        </el-button>
                     </template>
                 </el-popconfirm>
+            </template>
+        </HcTable>
+        <template #action>
+            <HcPages :pages="searchForm" @change="pageChange" />
         </template>
-      </HcTable>
-      <template #action>
-            <HcPages :pages="searchForm" @change="pageChange"></HcPages>
-      </template>
-            <!--草稿箱弹窗-->
-            <HcDialog bgColor="#ffffff" widths="62rem" isToBody  :show="importModal" title="草稿箱" @close="importModalClose" isTable >
-              <el-alert title="3个月内未更新的草稿将被自动删除" type="warning"  show-icon/>
-              <div class="table_box">
-                <HcTable :column="drafttableColumn" :datas="drafttableData" ui="hc-test-drop-table" isRowDrop isSort @row-drop="rowDropTap" @row-sort="rowSortTap" :loading="draftLoad">
-                  <template #action="{row, index}">
-                    <el-button hc-btn type="primary" size="small" @click="editinfoClick(row)">继续编辑</el-button>
-                    <el-button hc-btn type="primary" size="small" @click="delRowClick(row)">删除</el-button>
-                  </template>
+        <!-- 草稿箱弹窗 -->
+        <HcDialog bg-color="#ffffff" widths="62rem" is-to-body :show="importModal" title="草稿箱" is-table @close="importModalClose">
+            <el-alert title="3个月内未更新的草稿将被自动删除" type="warning" show-icon />
+            <div class="table_box">
+                <HcTable :column="drafttableColumn" :datas="drafttableData" ui="hc-test-drop-table" :loading="draftLoad">
+                    <template #action="{ row, index }">
+                        <el-button hc-btn type="primary" size="small" @click="editinfoClick(row)">
+                            继续编辑
+                        </el-button>
+                        <el-button hc-btn type="primary" size="small" @click="delRowClick(row)">
+                            删除
+                        </el-button>
+                    </template>
                 </HcTable>
-              </div>
-               
-             </HcDialog>
-  </HcCard>
+            </div>
+        </HcDialog>
+    </HcCard>
 </template>
 
 <script setup>
-import {ref, watch,onMounted,onActivated} from  'vue'
-import dayjs from "dayjs"
+import { onActivated, onMounted, ref, watch } from 'vue'
+import dayjs from 'dayjs'
 import 'dayjs/locale/zh-cn'
-import {useRouter} from 'vue-router'
+import { useRouter } from 'vue-router'
 
-import businessApi from '~api/attendance/business-trip.js';
-import {getArrValue} from "js-fast-way"
-import {getProjectList, getDictInfo} from "~api/other";
-import {delMessage} from "~uti/tools";
+import businessApi from '~api/attendance/business-trip.js'
+import { getArrValue } from 'js-fast-way'
+import { getDictInfo, getProjectList } from '~api/other'
+import { delMessage } from '~uti/tools'
 const router = useRouter()
 onActivated(()=>{
   getProjectData()
@@ -86,28 +92,28 @@ onActivated(()=>{
 })
 
 const tableColumn = [
-    {key: 'tripDesc', name: '出差事由'},
-    {key: 'projectName', name: '关联项目'},
-    {key: 'duration', name: '实际出勤天数'},
-    {key: 'durationAll', name: '出差天数'},
-    {key: 'fellowTravelerUserNames', name: '同行人'},
-    {key: 'approvalResultName', name: '审批结果'},
-    {key: 'approvalStatusName', name: '审批状态'},
-    {key: 'createName', name: '创建人'},
-    {key: 'createTime', name: '创建时间'},
-    {key: 'action', name: '操作', width: '90', align: 'center', fixed: 'right'},
+    { key: 'tripDesc', name: '出差事由' },
+    { key: 'projectName', name: '关联项目' },
+    { key: 'duration', name: '实际出勤天数' },
+    { key: 'durationAll', name: '出差天数' },
+    { key: 'fellowTravelerUserNames', name: '同行人' },
+    { key: 'approvalResultName', name: '审批结果' },
+    { key: 'approvalStatusName', name: '审批状态' },
+    { key: 'createName', name: '创建人' },
+    { key: 'createTime', name: '创建时间' },
+    { key: 'action', name: '操作', width: '90', align: 'center', fixed: 'right' },
 
 
 
 ]
 const tableData = ref([
-    {name: '名称1',id:1},
-    {name: '名称2', },
-    {name: '名称3', }
+    { name: '名称1', id:1 },
+    { name: '名称2' },
+    { name: '名称3' },
 ])
 const searchForm = ref({
   
-    current: 1, size: 20, total: 0
+    current: 1, size: 20, total: 0,
 })
 //项目类型
 const projectType = ref([
@@ -117,7 +123,7 @@ const projectType = ref([
 //获取项目数据
 
 const getProjectData = async () => {
-    const {error, code, data} = await getProjectList()
+    const { error, code, data } = await getProjectList()
     //判断状态
     if (!error && code === 200) {
         projectType.value = getArrValue(data)
@@ -127,15 +133,15 @@ const getProjectData = async () => {
 }
 
 //分页被点击
-const pageChange = ({current, size}) => {
+const pageChange = ({ current, size }) => {
     searchForm.value.current = current
     searchForm.value.size = size
     getTableData()
 }
-const tableLoading=ref(false)
-const getTableData = async() => {
+const tableLoading = ref(false)
+const getTableData = async () => {
     tableLoading.value = true
-    const {error, code, data} = await businessApi.getPage(searchForm.value)
+    const { error, code, data } = await businessApi.getPage(searchForm.value)
     tableLoading.value = false
     if (!error && code === 200) {
         tableData.value = getArrValue(data['records'])
@@ -147,13 +153,13 @@ const getTableData = async() => {
 }
 //搜索
 const searchClick = () => {
-    searchForm.value.current = 1;
+    searchForm.value.current = 1
     getTableData()
 }
 
 //重置搜索表单
 const resetClick = () => {
-    searchForm.value = {current: 1, size: 20, total: 0}
+    searchForm.value = { current: 1, size: 20, total: 0 }
 }
 const defaultTime = ref([
   new Date(2000, 1, 1, 0, 0, 0),
@@ -162,67 +168,59 @@ const defaultTime = ref([
 //草稿箱
 //草稿箱数据
 const draftNum = ref(0)
-const importModal=ref(false)
-const importModalClose=()=>{
-  importModal.value=false
+const importModal = ref(false)
+const importModalClose = ()=>{
+  importModal.value = false
 }
 const drafttableColumn = [
-    {key: 'title', name: '标题'},
-    {key: 'updateTime', name: '更新时间'},
-    {key: 'action', name: '操作',widths:120},
+    { key: 'title', name: '标题' },
+    { key: 'updateTime', name: '更新时间' },
+    { key: 'action', name: '操作', widths:120 },
 ]
 const drafttableData = ref([
-    {name: '名称1', text: '2023-5-23 15:21:08', },
-    {name: '名称1', text: '2023-5-23 15:21:08', },
+    { name: '名称1', text: '2023-5-23 15:21:08' },
+    { name: '名称1', text: '2023-5-23 15:21:08' },
     
  
 ])
-const draftLoad=ref(false)
-const getdraftTableData = async() => {
+const draftLoad = ref(false)
+const getdraftTableData = async () => {
   draftLoad.value = true
-    const {error, code, data} = await businessApi.getDraftList()
+    const { error, code, data } = await businessApi.getDraftList()
     draftLoad.value = false
     if (!error && code === 200) {
       drafttableData.value = getArrValue(data)
-      draftNum.value=getArrValue(data).length
+      draftNum.value = getArrValue(data).length
      
     } else {
       drafttableData.value = []
       
     }
 }
-// 行拖拽
-const rowDropTap = (rows) => {
-    tableData.value = rows
-}
 
-// 点击排序
-const rowSortTap = (rows) => {
-    tableData.value = rows
-}
 
-const toImportTempClick=()=>{
-  importModal.value=true
+const toImportTempClick = ()=>{
+  importModal.value = true
   getdraftTableData()
 
 }
 //编辑出差申请
-const addinfoClick=()=>{
+const addinfoClick = ()=>{
   router.push({
         name: 'attendance-business-trip-info',
         query: {
-            type: 'add'
-        }
+            type: 'add',
+        },
     })
 }
-const editinfoClick=(row)=>{
-  importModal.value=false
+const editinfoClick = (row)=>{
+  importModal.value = false
   router.push({
         name: 'attendance-business-trip-info',
         query: {
           id: row.emdraftIds,
-          type: 'draft'
-        }
+          type: 'draft',
+        },
     })
 }
 //查看
@@ -231,16 +229,16 @@ const rowClick = (row) => {
       name: 'attendance-business-trip-info',
         query: {
             id: row.id,
-            type: 'view'
-        }
+            type: 'view',
+        },
     })
 }
 
 //撤销
 const rowCancel = async (row) => {
     row.isCancelLoading = true
-    const {error, code, msg} = await businessApi.cancel({
-        id: row.id
+    const { error, code, msg } = await businessApi.cancel({
+        id: row.id,
     })
     //判断状态
     row.isCancelLoading = false
@@ -250,9 +248,9 @@ const rowCancel = async (row) => {
     } 
 }
 //删除
-const delRowClick = async(row) => {
-    delMessage(async() => {
-        const {error, code, data,msg} = await businessApi.remove({groupId:row.groupId})  
+const delRowClick = async (row) => {
+    delMessage(async () => {
+        const { error, code, data, msg } = await businessApi.remove({ groupId:row.groupId })  
             if (!error && code === 200) {
                 window.$message.success(msg)
                 getdraftTableData().then()
@@ -262,5 +260,6 @@ const delRowClick = async(row) => {
     })
 }
 </script>
+
 <style lang='scss' scoped>
 </style>

+ 250 - 245
src/views/attendance/business-trip/info.vue

@@ -1,64 +1,63 @@
 <template>
-  <HcCard actionUi="text-center">
-    <template #header>
-        <div class="hc-expense-total-title">出差天数:{{ formModel?.durationAll ||''}}</div>
-    </template>
-      <div class="hac-card-project-box">
-          <div class="left-box">
-              <el-scrollbar>
-                  <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="auto" size="large" :disabled="dataType === 'view'">
-                      <div class="project-form-top">
-                       
-                              <el-form-item label="出差事由:" prop="tripDesc">
-                                  <el-input v-model="formModel.tripDesc"/>
-                              </el-form-item>
-                              <HcCardItem :title="'行程'+ Number(index+1) " class="mt-2 hc-card-item-box" v-for="(item,index) in formModel.journeyList" ui="hac-bg-grey">
-                        
-                                    <el-form :ref="(el) => setFormItemRefs(el, index)" :model="item" :rules="formItemRules" label-position="left" size="large">
-                                            <el-form-item label="交通工具" prop="trafficType">
-                                                <el-select v-model="item.trafficType" block clearable placeholder="请选择">
-                                                    <el-option v-for="item in trafficTypeData" :label="item.dictName" :value="item.dictValue"/>
-                                                </el-select>
-                                            </el-form-item>
-                                            <el-form-item label="单程往返" prop="isSingletonType">
-                                                <el-select v-model="item.isSingletonType" block clearable placeholder="请选择">
-                                                    <el-option v-for="item in wayType" :label="item.name" :value="item.key"/>
-                                                </el-select>
-                                            </el-form-item>
-                                            <el-form-item label="出发城市" prop="startCity">
-                                                <el-input v-model="item.startCity"  />
-                                            </el-form-item>
-                                            <el-form-item label="目的城市" prop="endCity">
-                                                <el-input v-model="item.endCity"  />
-                                            </el-form-item>
-                                            <el-form-item label="开始时间" prop="startDate">
-                                                <el-date-picker
-                                                    v-model="item.startDate"
-                                                    type="date"
-                                                    placeholder="请选择开始时间"
-                                                    style="width: 100%;"
-                                                    format="YYYY-MM-DD"
-                                                    value-format="YYYY-MM-DD"  
-                                                />
-                                            </el-form-item>
-                                            <el-form-item label="结束时间"  prop="endDate">
-                                                <el-date-picker
-                                                    :getwarin="getwarin(item)"
-                                                    v-model="item.endDate"
-                                                    type="date"
-                                                    placeholder="请选择结束时间"
-                                                    style="width: 100%;"
-                                                    format="YYYY-MM-DD" 
-                                                    value-format="YYYY-MM-DD"  
-                                                />
-                                            </el-form-item>
-                                            <el-form-item label="时长" prop="duration">
-                                                <el-input v-model="item.duration" disabled :getdata="getDiffDaydata(item)"/>
-                                            </el-form-item>
-                               
-                            </el-form>
-                                  <span class="tip ml-8">时长将自动计入考勤统计</span>
-                                  <!-- <template #extra>
+    <HcCard action-ui="text-center">
+        <template #header>
+            <div class="hc-expense-total-title">
+                出差天数:{{ formModel?.durationAll || '' }}
+            </div>
+        </template>
+        <div class="hac-card-project-box">
+            <div class="left-box">
+                <el-scrollbar>
+                    <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="auto" size="large" :disabled="dataType === 'view'">
+                        <div class="project-form-top">
+                            <el-form-item label="出差事由:" prop="tripDesc">
+                                <el-input v-model="formModel.tripDesc" />
+                            </el-form-item>
+                            <HcCardItem v-for="(item, index) in formModel.journeyList" :title="`行程${Number(index + 1)}` " class="mt-2 hc-card-item-box" ui="hac-bg-grey">
+                                <el-form :ref="(el) => setFormItemRefs(el, index)" :model="item" :rules="formItemRules" label-position="left" size="large">
+                                    <el-form-item label="交通工具" prop="trafficType">
+                                        <el-select v-model="item.trafficType" block clearable placeholder="请选择">
+                                            <el-option v-for="item in trafficTypeData" :label="item.dictName" :value="item.dictValue" />
+                                        </el-select>
+                                    </el-form-item>
+                                    <el-form-item label="单程往返" prop="isSingletonType">
+                                        <el-select v-model="item.isSingletonType" block clearable placeholder="请选择">
+                                            <el-option v-for="item in wayType" :label="item.name" :value="item.key" />
+                                        </el-select>
+                                    </el-form-item>
+                                    <el-form-item label="出发城市" prop="startCity">
+                                        <el-input v-model="item.startCity" />
+                                    </el-form-item>
+                                    <el-form-item label="目的城市" prop="endCity">
+                                        <el-input v-model="item.endCity" />
+                                    </el-form-item>
+                                    <el-form-item label="开始时间" prop="startDate">
+                                        <el-date-picker
+                                            v-model="item.startDate"
+                                            type="date"
+                                            placeholder="请选择开始时间"
+                                            style="width: 100%;"
+                                            format="YYYY-MM-DD"
+                                            value-format="YYYY-MM-DD"  
+                                        />
+                                    </el-form-item>
+                                    <el-form-item label="结束时间" prop="endDate">
+                                        <el-date-picker
+                                            v-model="item.endDate"
+                                            :getwarin="getwarin(item)"
+                                            type="date"
+                                            placeholder="请选择结束时间"
+                                            style="width: 100%;"
+                                            format="YYYY-MM-DD" 
+                                            value-format="YYYY-MM-DD"  
+                                        />
+                                    </el-form-item>
+                                    <el-form-item label="时长" prop="duration">
+                                        <el-input v-model="item.duration" disabled :getdata="getDiffDaydata(item)" />
+                                    </el-form-item>
+                                </el-form>
+                                <span class="tip ml-8">时长将自动计入考勤统计</span>
+                                <!-- <template #extra>
                                         <el-button type="primary" size="small"  @click="addJourney(item,index)">
                                             <HcIcon name="add"/>
                                             <span>增加行程</span>
@@ -68,110 +67,117 @@
                                             <span>删除行程</span>
                                         </el-button>
                                     </template> -->
-                                    <template #extra>
-                                        <el-button type="danger" size="small" @click="delJourney(index)" v-if="index > 0">
-                                            <HcIcon name="delete-bin"/>
-                                            <span>删除行程</span>
-                                        </el-button>
-                                    </template>
-                              </HcCardItem>
-                              <div  class="mt-16" style="margin-bottom: 40px;">
+                                <template #extra>
+                                    <el-button v-if="index > 0" type="danger" size="small" @click="delJourney(index)">
+                                        <HcIcon name="delete-bin" />
+                                        <span>删除行程</span>
+                                    </el-button>
+                                </template>
+                            </HcCardItem>
+                            <div class="mt-16" style="margin-bottom: 40px;">
                                 <el-divider content-position="right" border-style="dashed">
-                                      <el-button type="primary" hc-btn   @click="addJourney(item,index)">
-                                          <HcIcon name="add"/>
-                                          <span>添加行程</span>
-                                      </el-button>
-                               </el-divider>
-                              </div>
+                                    <el-button type="primary" hc-btn @click="addJourney(item, index)">
+                                        <HcIcon name="add" />
+                                        <span>添加行程</span>
+                                    </el-button>
+                                </el-divider>
+                            </div>
                             
-                              <el-form-item label="出差天数:" prop="durationAll" class="mt-4">
-                                  <el-input v-model="formModel.durationAll" disabled/>
-                              </el-form-item>
-                              <el-form-item label="出差备注:" prop="remarks" >
-                                  <el-input v-model="formModel.remarks" type="textarea"/>
-                              </el-form-item>
-                              <el-form-item label="同行人" prop="fellowTravelerUserIds">
+                            <el-form-item label="出差天数:" prop="durationAll" class="mt-4">
+                                <el-input v-model="formModel.durationAll" disabled />
+                            </el-form-item>
+                            <el-form-item label="出差备注:" prop="remarks">
+                                <el-input v-model="formModel.remarks" type="textarea" />
+                            </el-form-item>
+                            <el-form-item label="同行人" prop="fellowTravelerUserIds">
                                 <el-select
-                                        v-model="fellowTravelerUserIds"
-                                        block clearable
-                                        placeholder="请选择"
-                                        style="width: 100%"
-                                        multiple
-                                        >
-                                        <el-option v-for="item in partneroptions" :label="item.name" :value="item.id" />
-                                        </el-select>
-                              </el-form-item>
-                              <el-form-item label="所属项目" prop="projectId" >
-                                        <el-select v-model="formModel.projectId" block clearable placeholder="请选择">
-                                          <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId"/>
-                                      </el-select>
-                              </el-form-item>
-                              <el-form-item label="关联预算计划" prop="key">
-                                <el-button type="primary" size="small"   @click="budgetModalShow(item,index)">
-                                            <HcIcon name="add"/>
-                                            <span>关联预算计划</span>
+                                    v-model="fellowTravelerUserIds"
+                                    block clearable
+                                    placeholder="请选择"
+                                    style="width: 100%"
+                                    multiple
+                                >
+                                    <el-option v-for="item in partneroptions" :label="item.name" :value="item.id" />
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="所属项目" prop="projectId">
+                                <el-select v-model="formModel.projectId" block clearable placeholder="请选择">
+                                    <el-option v-for="item in projectType" :label="item.projectName" :value="item.projectId" />
+                                </el-select>
+                            </el-form-item>
+                            <el-form-item label="关联预算计划" prop="key">
+                                <el-button type="primary" size="small" @click="budgetModalShow(item, index)">
+                                    <HcIcon name="add" />
+                                    <span>关联预算计划</span>
                                 </el-button>
-                              </el-form-item>
-                             
-                          
-                       
-                      </div>
-              
-                  </el-form>
-              </el-scrollbar>
-          </div>
-          <div class="right-box">
-            <div class="record-flow-box">
-                <div class="title">流程</div>
-                <div class="content">
-                    <el-scrollbar>
-                        <el-timeline>
-                            <el-timeline-item v-for="(item, index) in timeLineData" :key="index">
-                                <div class="timeline-title">{{item.title}}</div>
-                                <div class="timeline-section">{{item.section}}</div>
-                            </el-timeline-item>
-                        </el-timeline>
-                    </el-scrollbar>
-                </div>
-                <div class="action">
-                    <el-button type="warning" hc-btn @click="tempDraftData" :loading="tempLoading">
-                        <HcIcon name="draft"/>
-                        <span>暂存草稿</span>
-                    </el-button>
-                    <el-button type="primary" hc-btn @click="saveClick" :loading="saveLoading">
-                        <HcIcon name="check-double"/>
-                        <span>提交出差申请</span>
-                    </el-button>
+                            </el-form-item>
+                        </div>
+                    </el-form>
+                </el-scrollbar>
+            </div>
+            <div class="right-box">
+                <div class="record-flow-box">
+                    <div class="title">
+                        流程
+                    </div>
+                    <div class="content">
+                        <el-scrollbar>
+                            <el-timeline>
+                                <el-timeline-item v-for="(item, index) in timeLineData" :key="index">
+                                    <div class="timeline-title">
+                                        {{ item.title }}
+                                    </div>
+                                    <div class="timeline-section">
+                                        {{ item.section }}
+                                    </div>
+                                </el-timeline-item>
+                            </el-timeline>
+                        </el-scrollbar>
+                    </div>
+                    <div class="action">
+                        <el-button type="warning" hc-btn :loading="tempLoading" @click="tempDraftData">
+                            <HcIcon name="draft" />
+                            <span>暂存草稿</span>
+                        </el-button>
+                        <el-button type="primary" hc-btn :loading="saveLoading" @click="saveClick">
+                            <HcIcon name="check-double" />
+                            <span>提交出差申请</span>
+                        </el-button>
+                    </div>
                 </div>
             </div>
-          </div>
-      </div>
-      <!--关联预算计划-->
-      <HcDialog bgColor="#ffffff" isToBody isTable
-                  title="关联预算计划" widths="80%" saveText="保存"
-                  :show="budgetModal"
-                  @close="budgetCloseClick"
-                  @save="budgetSaveClick"
+        </div>
+        <!-- 关联预算计划 -->
+        <HcDialog
+            bg-color="#ffffff" is-to-body is-table
+            title="关联预算计划" widths="80%" save-text="保存"
+            :show="budgetModal"
+            @close="budgetCloseClick"
+            @save="budgetSaveClick"
         >
             <HcTable :column="tableBudgetColumn" :datas="tableBudgetData" :loading="tableBudgetLoading">
-                <template #action="{row,index}">
-                    <el-button size="small" type="danger" @click="row.relevance = false" v-if="row.relevance">取消关联</el-button>
-                    <el-button size="small" type="primary" @click="row.relevance = true" v-else>关联</el-button>
+                <template #action="{ row, index }">
+                    <el-button v-if="row.relevance" size="small" type="danger" @click="row.relevance = false">
+                        取消关联
+                    </el-button>
+                    <el-button v-else size="small" type="primary" @click="row.relevance = true">
+                        关联
+                    </el-button>
                 </template>
             </HcTable>
-      </HcDialog>
-  </HcCard>
+        </HcDialog>
+    </HcCard>
 </template>
 
 <script setup>
-import {ref, onActivated,watch} from "vue";
-import {useRoute, useRouter} from 'vue-router'
-import {getProjectList, getDictInfo,getuserList} from "~api/other";
-import {arrIndex, deepClone, formValidate, getArrValue} from "js-fast-way";
-import businessApi from '~api/attendance/business-trip.js';
-import {getDiffDay} from "~uti/tools";
-import {useAppStore} from "~src/store";
-const useAppState = useAppStore();
+import { onActivated, ref, watch } from 'vue'
+import { useRoute, useRouter } from 'vue-router'
+import { getDictInfo, getProjectList, getuserList } from '~api/other'
+import { arrIndex, deepClone, formValidate, getArrValue } from 'js-fast-way'
+import businessApi from '~api/attendance/business-trip.js'
+import { getDiffDay } from '~uti/tools'
+import { useAppStore } from '~src/store'
+const useAppState = useAppStore()
 
 const router = useRouter()
 const useRoutes = useRoute()
@@ -193,8 +199,8 @@ const getDetailsData = async () => {
     if (dataType.value === 'view') {
         //预览详情
         let newDetails = {}, newDetails1 = {}
-        const {error, code, data, msg} = await businessApi.detail({
-            id: dataId.value
+        const { error, code, data, msg } = await businessApi.detail({
+            id: dataId.value,
         })
         //判断状态
         if (!error && code === 200) {
@@ -210,7 +216,7 @@ const getDetailsData = async () => {
             newDetails1.id = res?.id
          
             newDetails.details = [newDetails1]
-            fellowTravelerUserIds.value=res.fellowTravelerUserIds.split(',')
+            fellowTravelerUserIds.value = res.fellowTravelerUserIds.split(',')
         } else {
             newDetails = detailsObj
             newDetails.details = [detailsObj1]
@@ -220,8 +226,8 @@ const getDetailsData = async () => {
         detailsData.value = newDetails
     } else if (dataType.value === 'draft') {
         //草稿详情
-        const {error, code, data} = await businessApi.draftDetail({
-            eMDraftIds: dataId.value
+        const { error, code, data } = await businessApi.draftDetail({
+            eMDraftIds: dataId.value,
         })
         //判断状态
         const res = getArrValue(data)
@@ -244,32 +250,32 @@ const getDetailsData = async () => {
               
             })
             newDetails.journeyList = newDetailsArr
-            fellowTravelerUserIds.value=res[0].fellowTravelerUserIds.split(',')
-            console.log(formModel.value,'formModel.value');
+            fellowTravelerUserIds.value = res[0].fellowTravelerUserIds.split(',')
+            console.log(formModel.value, 'formModel.value')
             formModel.value = newDetails
         } else {
           
             formModel.value = {
                 ...detailsObj,
-                details: [detailsObj1]
+                details: [detailsObj1],
             }
         }
     } else {
 
         formModel.value = {
             ...detailsObj,
-            details: [detailsObj1]
+            details: [detailsObj1],
         }
     }
 }
 //获取间隔天数
-const getDiffDaydata=(item)=>{
-   let time= getDiffDay(item.startDate,item.endDate)
+const getDiffDaydata = (item)=>{
+   let time = getDiffDay(item.startDate, item.endDate)
  
-   item.duration=time||0
+   item.duration = time || 0
 }
-const getwarin=(item)=>{
-    if(item.endDate<item.startDate){
+const getwarin = (item)=>{
+    if (item.endDate < item.startDate) {
         window.$message.warning('结束时间不能小于开始时间')
        
     }
@@ -279,42 +285,42 @@ const formItemRules = {
     isSingletonType: {
       required: true,
       trigger: 'blur',
-      message: "请选择单程往返"
+      message: '请选择单程往返',
   },
   trafficType: {
       required: true,
       trigger: 'blur',
-      message: "请选择交通工具"
+      message: '请选择交通工具',
   },
   startCity: {
       required: true,
       trigger: 'blur',
-      message: "请选择出发城市"
+      message: '请选择出发城市',
   },
   endCity: {
       required: true,
       trigger: 'blur',
-      message: "请选择目的城市"
+      message: '请选择目的城市',
   },
   startDate: {
       required: true,
       trigger: 'blur',
-      message: "请选择开始时间"
+      message: '请选择开始时间',
   },
   endDate: {
       required: true,
       trigger: 'blur',
-      message: "请选择结束时间"
+      message: '请选择结束时间',
   },
   duration: {
       required: true,
       trigger: 'blur',
-      message: "请输入时长"
+      message: '请输入时长',
   },
   durationAll:{
     required: true,
       trigger: 'blur',
-      message: "请输入天数"
+      message: '请输入天数',
   },
 }
 const formRefs = ref([])
@@ -324,7 +330,7 @@ const setFormItemRefs = (el, index) => {
         if (indexs !== -1) {
             formRefs.value[index].ref = el
         } else {
-            formRefs.value.push({index: index, ref: el});
+            formRefs.value.push({ index: index, ref: el })
         }
     }
 }
@@ -336,26 +342,26 @@ const getFormRef = async (index) => {
 }
 
 //增加行程addJourney
-const addJourney=(item,index)=>{
+const addJourney = (item, index)=>{
    formModel.value?.journeyList.push({})
 }
-const delJourney=(item,index)=>{
-    console.log(index,'index');
+const delJourney = (item, index)=>{
+    console.log(index, 'index')
     formModel?.value.journeyList.splice(index, 1)
 }
 //单程往返
 const wayType = ref([
-  {name: '单程', key: 1},
-  {name: '往返', key: 2},
+  { name: '单程', key: 1 },
+  { name: '往返', key: 2 },
  
 ])
 //交通工具
-const trafficTypeData=ref([
+const trafficTypeData = ref([
 
 ])
 //交通类型字典
-const getTrafficType= async () => {
-    const {error, code, data} = await getDictInfo('traffic_type')
+const getTrafficType = async () => {
+    const { error, code, data } = await getDictInfo('traffic_type')
     //判断状态
     if (!error && code === 200) {
         trafficTypeData.value = getArrValue(data)
@@ -364,11 +370,11 @@ const getTrafficType= async () => {
     }
 }
 //出发城市cityType
-const cityType=ref([
-  {name: '北京', key: '1'},
-  {name: '上海', key: '2'},
-  {name: '深圳', key: '3'},
-  {name: '成都', key: '4'},
+const cityType = ref([
+  { name: '北京', key: '1' },
+  { name: '上海', key: '2' },
+  { name: '深圳', key: '3' },
+  { name: '成都', key: '4' },
 ])
 //项目类型
 const projectType = ref([
@@ -378,7 +384,7 @@ const projectType = ref([
 //获取项目数据
 
 const getProjectData = async () => {
-    const {error, code, data} = await getProjectList()
+    const { error, code, data } = await getProjectList()
     //判断状态
     if (!error && code === 200) {
         projectType.value = getArrValue(data)
@@ -388,10 +394,10 @@ const getProjectData = async () => {
 }
 //同行人
 
-const partneroptions=ref([])
+const partneroptions = ref([])
 
-const getUserDict=async()=>{
-    const {error, code, data} = await getuserList({tenantId:useAppState.tenantId})
+const getUserDict = async ()=>{
+    const { error, code, data } = await getuserList({ tenantId:useAppState.tenantId })
     if (!error && code === 200) {
       partneroptions.value = getArrValue(data)
 
@@ -402,11 +408,11 @@ const getUserDict=async()=>{
 }
 //合同类型
 const contractType = ref([
-  {name: '咨询服务+软件', key: '1'},
-  {name: '软件', key: '2'},
-  {name: '咨询服务', key: '3'},
-  {name: '后期服务+软件', key: '4'},
-  {name: '数字化扫描+软件', key: '5'},
+  { name: '咨询服务+软件', key: '1' },
+  { name: '软件', key: '2' },
+  { name: '咨询服务', key: '3' },
+  { name: '后期服务+软件', key: '4' },
+  { name: '数字化扫描+软件', key: '5' },
 ])
 
 
@@ -414,29 +420,29 @@ const contractType = ref([
 //顶部表单数据
 const formRef = ref(null)
 const formModel = ref({
-    journeyList:[{}]
+    journeyList:[{}],
 })
 //深度监听
 watch(() => [
-    formModel.value.journeyList
+    formModel.value.journeyList,
 ], ([datas]) => {
-   let timeall=0
+   let timeall = 0
    formModel.value.journeyList.forEach((ele)=>{
-    timeall=ele.duration+timeall
+    timeall = ele.duration + timeall
    })
-   formModel.value.durationAll=timeall//计算总时长
-}, {deep: true})
+   formModel.value.durationAll = timeall//计算总时长
+}, { deep: true })
 const formRules = {
     tripDesc: {
       required: true,
       trigger: 'blur',
-      message: "请输入项出差事由"
+      message: '请输入项出差事由',
   },
  
   projectId: {
       required: true,
       trigger: 'blur',
-      message: "请选择项目"
+      message: '请选择项目',
   },
 
 
@@ -445,7 +451,7 @@ const formRules = {
 
 //日期时间被选择
 const betweenTime = ref(null)
-const betweenTimeUpdate = ({arr, query}) => {
+const betweenTimeUpdate = ({ arr, query }) => {
   betweenTime.value = arr
   //formModel.value.betweenTime = query
 }
@@ -453,10 +459,10 @@ const betweenTimeUpdate = ({arr, query}) => {
 
 //时间线数据
 const timeLineData = ref([
-    {title: '审批人', section: '部门负责人'},
-    {title: '人事审批', section: '人事'},
+    { title: '审批人', section: '部门负责人' },
+    { title: '人事审批', section: '人事' },
 
-    {title: '抄送人', section: '总经理'},
+    { title: '抄送人', section: '总经理' },
   
 ])
 
@@ -478,7 +484,7 @@ const budgetModalShow = (item, index) => {
     budgetModal.value = true
     budgetIndex.value = index
     // budgetIds.value = item.budgetPlanIds?.split(',') || []
-    budgetIds.value=formModel.value.projectId
+    budgetIds.value = formModel.value.projectId
     getBudgetTableData(formModel.value.projectId)
 }
 const budgetCloseClick = () => {
@@ -490,18 +496,18 @@ const budgetSaveClick = () => {
 
 //关联预算计划表格
 const tableBudgetColumn = [
-    {key: 'key1', name: '任务所属项目'},
-    {key: 'key2', name: '状态',  width: '120', align: 'center'},
-    {key: 'key3', name: '任务描述'},
-    {key: 'key4', name: '完成指标', width: '120', align: 'center'},
-    {key: 'action', name: '操作', width: '100', align: 'center'},
+    { key: 'key1', name: '任务所属项目' },
+    { key: 'key2', name: '状态', width: '120', align: 'center' },
+    { key: 'key3', name: '任务描述' },
+    { key: 'key4', name: '完成指标', width: '120', align: 'center' },
+    { key: 'action', name: '操作', width: '100', align: 'center' },
 ]
 
 const tableBudgetData = ref([])
-const tableBudgetLoading=ref(false)
+const tableBudgetLoading = ref(false)
 const getBudgetTableData = async (projectId) => {
     tableBudgetLoading.value = true
-    const {error, code, data} = await businessApi.budget({projectId})
+    const { error, code, data } = await businessApi.budget({ projectId })
     //判断状态
     tableBudgetLoading.value = false
     if (!error && code === 200) {
@@ -512,27 +518,27 @@ const getBudgetTableData = async (projectId) => {
 }
 //行程
 const detailsObj1 = {
-    trafficType: '',             // 交通工具
-    isSingletonType: '',       // 单程往返
-    startCity: '',    // 出发城市
-    endCity: '',        //目的城市
-    startDate: null,           // 开始时间
-    endDate: null,           // 结束时间
-    duration: null,           // 时长
+    trafficType: '', // 交通工具
+    isSingletonType: '', // 单程往返
+    startCity: '', // 出发城市
+    endCity: '', //目的城市
+    startDate: null, // 开始时间
+    endDate: null, // 结束时间
+    duration: null, // 时长
     //details: [detailsObj1],
 }
 //基础详情
 const detailsObj = {
   
-    tripDesc: '',             // 出差事由
-    durationAll: 0,       // 出差天数
-    fellowTravelerUserIds: '',    // 同行人
-    remarks: '',        //出差备注
-    projectId: '',     // 所属项目
-    submitStatus: null,           // 审提交状态 1=暂存 2=提交审批
+    tripDesc: '', // 出差事由
+    durationAll: 0, // 出差天数
+    fellowTravelerUserIds: '', // 同行人
+    remarks: '', //出差备注
+    projectId: '', // 所属项目
+    submitStatus: null, // 审提交状态 1=暂存 2=提交审批
     journeyList: [detailsObj1],
 }
-const fellowTravelerUserIds=ref([])
+const fellowTravelerUserIds = ref([])
 //处理表单数据
 const getFormData = (submitStatus = 1) => {
     const res = deepClone(formModel.value)
@@ -551,15 +557,15 @@ const getFormData = (submitStatus = 1) => {
             ...newDetails,
             ...item,
     
-            submitStatus //提交状态 1=暂存 2=提交审批
+            submitStatus, //提交状态 1=暂存 2=提交审批
         })
     })
     return newFormData
 }
-const saveLoading=ref(false)
-const saveClick=async()=>{
+const saveLoading = ref(false)
+const saveClick = async ()=>{
     const res = await formValidate(formRef.value)
-    if (!res) return false;
+    if (!res) return false
     //处理明细表单效验
     saveLoading.value = true
     const form = getFormData(2)
@@ -569,10 +575,11 @@ const saveClick=async()=>{
         if (!res) {
             saveLoading.value = false
             return
-        }else{
-            form[0].fellowTravelerUserIds=fellowTravelerUserIds.value.join(',')
-            console.log(form,'form');
-            const {error, code, msg} = await businessApi.submit(form)
+        } else {
+           
+            form[0].fellowTravelerUserIds = fellowTravelerUserIds.value.join(',')
+            console.log(form, 'form')
+            const { error, code, msg } = await businessApi.submit(form)
             //判断状态
             tempLoading.value = false
             if (!error && code === 200) {
@@ -580,10 +587,9 @@ const saveClick=async()=>{
                 router.push({
                     name: 'attendance-business-trip',
                 })
-            } else {
-                window.$message?.error(msg)
-             }
+            } 
         }
+        saveLoading.value = false
     }
     //发起请求
 }
@@ -593,10 +599,10 @@ const tempDraftData = async () => {
     tempLoading.value = true
     const form = getFormData(1)
     form.forEach((ele)=>{
-        ele.fellowTravelerUserIds=fellowTravelerUserIds.value.join(',')
+        ele.fellowTravelerUserIds = fellowTravelerUserIds.value.join(',')
     })
-    console.log(form,'form');
-    const {error, code, msg} = await businessApi.submit(form)
+    console.log(form, 'form')
+    const { error, code, msg } = await businessApi.submit(form)
    
   
     //判断状态
@@ -607,7 +613,6 @@ const tempDraftData = async () => {
         window.$message?.error(msg)
     }
 }
-
 </script>
 
 <style lang="scss" scoped>