|
@@ -141,11 +141,11 @@
|
|
|
</el-scrollbar>
|
|
|
</div>
|
|
|
<div class="action">
|
|
|
- <el-button type="warning" hc-btn @clicl="saveClick" :loading="saveLoading">
|
|
|
+ <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">
|
|
|
+ <el-button type="primary" hc-btn @click="saveClick" :loading="saveLoading">
|
|
|
<HcIcon name="check-double"/>
|
|
|
<span>提交出差申请</span>
|
|
|
</el-button>
|
|
@@ -175,6 +175,7 @@ import {ref, onActivated} from "vue";
|
|
|
import {useRoute, useRouter} from 'vue-router'
|
|
|
import {getProjectList, getDictInfo} from "~api/other";
|
|
|
import {arrIndex, deepClone, formValidate, getArrValue} from "js-fast-way";
|
|
|
+import businessApi from '~api/attendance/business-trip.js';
|
|
|
|
|
|
const router = useRouter()
|
|
|
const useRoutes = useRoute()
|
|
@@ -189,11 +190,79 @@ onActivated(() => {
|
|
|
dataId.value = useRoutes?.query?.id ?? ''
|
|
|
getTrafficType()
|
|
|
getProjectData()
|
|
|
+ getDetailsData()
|
|
|
})
|
|
|
-const journeyList=ref([
|
|
|
- {},
|
|
|
+const getDetailsData = async () => {
|
|
|
+ if (dataType.value === 'view') {
|
|
|
+ //预览详情
|
|
|
+ let newDetails = {}, newDetails1 = {}
|
|
|
+ const {error, code, data, msg} = await businessApi.detail({
|
|
|
+ id: dataId.value
|
|
|
+ })
|
|
|
+ //判断状态
|
|
|
+ if (!error && code === 200) {
|
|
|
+ const res = getObjValue(data)
|
|
|
+ //基础数据
|
|
|
+ Object.keys(detailsObj).forEach(key => {
|
|
|
+ newDetails[key] = res[key]
|
|
|
+ })
|
|
|
+ //明细数据
|
|
|
+ Object.keys(detailsObj1).forEach(key => {
|
|
|
+ newDetails1[key] = res[key]
|
|
|
+ })
|
|
|
+ newDetails1.id = res?.id
|
|
|
+
|
|
|
+ newDetails.details = [newDetails1]
|
|
|
+ } else {
|
|
|
+ newDetails = detailsObj
|
|
|
+ newDetails.details = [detailsObj1]
|
|
|
+
|
|
|
+ window.$message?.error(msg)
|
|
|
+ }
|
|
|
+ detailsData.value = newDetails
|
|
|
+ } else if (dataType.value === 'draft') {
|
|
|
+ //草稿详情
|
|
|
+ const {error, code, data} = await businessApi.draftDetail({
|
|
|
+ eMDraftIds: dataId.value
|
|
|
+ })
|
|
|
+ //判断状态
|
|
|
+ const res = getArrValue(data)
|
|
|
+ if (!error && code === 200 && res.length > 0) {
|
|
|
+ let newDetails = {}, newDetailsArr = []
|
|
|
+ res.forEach((item, index) => {
|
|
|
+ //基础数据
|
|
|
+ if (index === 0) {
|
|
|
+ Object.keys(detailsObj).forEach(key => {
|
|
|
+ newDetails[key] = item[key]
|
|
|
+ })
|
|
|
+ }
|
|
|
+ //明细数据
|
|
|
+ let newDetails1 = {}
|
|
|
+ Object.keys(detailsObj1).forEach(key => {
|
|
|
+ newDetails1[key] = item[key]
|
|
|
+ })
|
|
|
+ newDetails1.id = item?.id
|
|
|
+ newDetailsArr.push(newDetails1)
|
|
|
+
|
|
|
+ })
|
|
|
+ newDetails.journeyList = newDetailsArr
|
|
|
+ console.log(formModel.value,'formModel.value');
|
|
|
+ formModel.value = newDetails
|
|
|
+ } else {
|
|
|
+
|
|
|
+ formModel.value = {
|
|
|
+ ...detailsObj,
|
|
|
+ details: [detailsObj1]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
|
|
|
-])
|
|
|
+ formModel.value = {
|
|
|
+ ...detailsObj,
|
|
|
+ details: [detailsObj1]
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
//行程表单
|
|
|
const formItemRules = {
|
|
|
isSingletonType: {
|
|
@@ -265,8 +334,8 @@ const delJourney=(item,index)=>{
|
|
|
}
|
|
|
//单程往返
|
|
|
const wayType = ref([
|
|
|
- {name: '单程', key: '1'},
|
|
|
- {name: '往返', key: '2'},
|
|
|
+ {name: '单程', key: 1},
|
|
|
+ {name: '往返', key: 2},
|
|
|
|
|
|
])
|
|
|
//交通工具
|
|
@@ -398,14 +467,65 @@ const tableBudgetData = ref([
|
|
|
{id: 3, key1: 'xxxx'},
|
|
|
{id: 4, key1: 'xxxx'},
|
|
|
])
|
|
|
+//行程
|
|
|
+const detailsObj1 = {
|
|
|
+ trafficType: '', // 交通工具
|
|
|
+ isSingletonType: '', // 单程往返
|
|
|
+ startCity: '', // 出发城市
|
|
|
+ endCity: '', //目的城市
|
|
|
+ startDate: null, // 开始时间
|
|
|
+ endDate: null, // 结束时间
|
|
|
+ duration: null, // 时长
|
|
|
+ //details: [detailsObj1],
|
|
|
+}
|
|
|
+//基础详情
|
|
|
+const detailsObj = {
|
|
|
+
|
|
|
+ tripDesc: '', // 出差事由
|
|
|
+ durationAll: 0, // 出差天数
|
|
|
+ fellowTravelerUserIds: '', // 同行人
|
|
|
+ remarks: '', //出差备注
|
|
|
+ projectId: '', // 所属项目
|
|
|
+ submitStatus: null, // 审提交状态 1=暂存 2=提交审批
|
|
|
+ journeyList: [detailsObj1],
|
|
|
+}
|
|
|
+
|
|
|
+//处理表单数据
|
|
|
+const getFormData = (submitStatus = 1) => {
|
|
|
+ const res = deepClone(formModel.value)
|
|
|
+
|
|
|
+ const ccUserList = [{userId: ''}] //抄送人列表
|
|
|
+ const personnelUser = {userId: ''} //人事
|
|
|
+ const financeUser = {userId: ''} //财务人员
|
|
|
+ const responsibleUser = {userId: ''} //部门负责人
|
|
|
+ //----处理数据----
|
|
|
+ let newFormData = [], newDetails = {}
|
|
|
+ //基础数据
|
|
|
+ Object.keys(detailsObj).forEach(key => {
|
|
|
+ newDetails[key] = res[key]
|
|
|
+ })
|
|
|
+ //组装为数组集合的表单数据
|
|
|
+ const list = res?.journeyList
|
|
|
+ list.forEach(item => {
|
|
|
+ newFormData.push({
|
|
|
+ ...newDetails,
|
|
|
+ ...item,
|
|
|
+ ccUserList,
|
|
|
+ personnelUser,
|
|
|
+ financeUser,
|
|
|
+ responsibleUser,
|
|
|
+ submitStatus //提交状态 1=暂存 2=提交审批
|
|
|
+ })
|
|
|
+ })
|
|
|
+ return newFormData
|
|
|
+}
|
|
|
const saveLoading=ref(false)
|
|
|
const saveClick=async()=>{
|
|
|
- // console.log('提交',formModel.value);
|
|
|
const res = await formValidate(formRef.value)
|
|
|
if (!res) return false;
|
|
|
//处理明细表单效验
|
|
|
saveLoading.value = true
|
|
|
- const form = formModel.value.journeyList
|
|
|
+ const form = getFormData(2)
|
|
|
for (let i = 0; i < form.length; i++) {
|
|
|
const refs = await getFormRef(i)
|
|
|
const res = await formValidate(refs)
|
|
@@ -413,11 +533,32 @@ const saveClick=async()=>{
|
|
|
saveLoading.value = false
|
|
|
return
|
|
|
}else{
|
|
|
- console.log(formModel.value,'11111');
|
|
|
+ const {error, code, msg} = await businessApi.submit(form)
|
|
|
+ //判断状态
|
|
|
+ tempLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ window.$message?.success('保存成功')
|
|
|
+ } else {
|
|
|
+ window.$message?.error(msg)
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
//发起请求
|
|
|
}
|
|
|
+//暂存数据
|
|
|
+const tempLoading = ref(false)
|
|
|
+const tempDraftData = async () => {
|
|
|
+ tempLoading.value = true
|
|
|
+ const form = getFormData(1)
|
|
|
+ const {error, code, msg} = await businessApi.submit(form)
|
|
|
+ //判断状态
|
|
|
+ tempLoading.value = false
|
|
|
+ if (!error && code === 200) {
|
|
|
+ window.$message?.success('暂存成功')
|
|
|
+ } else {
|
|
|
+ window.$message?.error(msg)
|
|
|
+ }
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|