task-details.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. <template>
  2. <HcCard scrollbar actionUi="text-center">
  3. <HcCardItem>
  4. <div class="hac-task-name-box">
  5. <div class="label">任务名称</div>
  6. <div class="name">{{ taskBasicsInfo?.taskName }}</div>
  7. </div>
  8. <div class="hac-task-text-box">
  9. <span>上报类型:{{ taskBasicsInfo?.ReportTypeName }}</span>
  10. <span class="ml-10">上报人:{{ taskBasicsInfo?.reportUser }}</span>
  11. <span class="ml-10">上报时间:{{ taskBasicsInfo?.reportDate }}</span>
  12. </div>
  13. </HcCardItem>
  14. <HcCardItem title="任务详情" class="mt-4">
  15. <div class="h-52">
  16. <HcTable :isIndex="false" :column="tableColumn" :datas="tableData"/>
  17. </div>
  18. </HcCardItem>
  19. <HcCardItem title="操作任务" class="mt-4" v-if="dataType === '任务审批'">
  20. <el-form ref="formRef" :model="formModel" :rules="formRules" label-width="" :disabled="tabsKey !== 1">
  21. <el-form-item label="变更类别:" prop="type" size="large">
  22. <el-radio-group v-model="formModel.type" size="large">
  23. <el-radio label="1">已完成</el-radio>
  24. <el-radio label="2" class="ml-4">任务转移</el-radio>
  25. </el-radio-group>
  26. </el-form-item>
  27. <el-form-item label="完成时间:" prop="finish_time" class="w-72" v-if="formModel.type === '1'">
  28. <el-date-picker class="block" v-model="formModel.finish_time" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD"/>
  29. </el-form-item>
  30. <el-form-item label="转移时间:" prop="transfer" class="w-72" v-if="formModel.type === '2'">
  31. <el-date-picker class="block" v-model="formModel.transfer" format="YYYY-MM-DD" type="date" value-format="YYYY-MM-DD"/>
  32. </el-form-item>
  33. <el-form-item label="转移对象:" prop="type" size="large" v-if="formModel.type === '2'">
  34. <div class="form-item-div">张三</div>
  35. </el-form-item>
  36. <el-form-item label="转移原因:" prop="textContent" v-if="formModel.type === '2'">
  37. <el-input v-model="formModel.textContent" :autosize="{ minRows: 3, maxRows: 5 }" placeholder="请输入文字说明" type="textarea"/>
  38. </el-form-item>
  39. </el-form>
  40. </HcCardItem>
  41. <HcCardItem title="数据详情" class="mt-4" v-if="dataType!=='任务审批'">
  42. <!-- 报销 -->
  43. <div class="hc-info-list" v-if="dataType=='报销审批'">
  44. <HcListItem title="报销金额:" :content="otherInfo?.frMoney"/>
  45. <HcListItem title="发生日期:" :content="otherInfo?.frDate"/>
  46. <HcListItem title="费用类型:" :content="otherInfo?.frTypeName"/>
  47. <HcListItem title="费用说明:" :content="otherInfo?.frDesc"/>
  48. <HcListItem title="电子发票:" >
  49. <HcImg ui="img" :index="0"
  50. v-if="otherInfo?.frElectronicInvoiceUrl"
  51. :src="otherInfo?.frElectronicInvoiceUrl"
  52. :srcs="[otherInfo?.frElectronicInvoiceUrl]"
  53. />
  54. </HcListItem>
  55. <HcListItem title="附件文件:" >
  56. <HcImg ui="img" :index="0"
  57. v-if="otherInfo?.frElectronicInvoiceUrl"
  58. :src="otherInfo?.frAttachmentUrl"
  59. :srcs="[otherInfo?.frAttachmentUrl]"
  60. />
  61. </HcListItem>
  62. <HcListItem title="归属人:" :content="otherInfo?.userNameVesting"/>
  63. <HcListItem title="备注信息:" content="备注数据"/>
  64. </div>
  65. <!-- 出差审批 -->
  66. <div class="hc-info-list" v-if="dataType==='出差审批'">
  67. <tripInfo :other-info="otherInfo"/>
  68. </div>
  69. <!-- 支付申请 -->
  70. <div class="hc-info-list" v-if="dataType==='支付审批'">
  71. <paymentRequest :other-info="otherInfo"/>
  72. </div>
  73. <!-- 借款申请 -->
  74. <div class="hc-info-list" v-if="dataType==='借款审批'">
  75. <loanRequest :other-info="otherInfo"/>
  76. </div>
  77. <!-- 采购申请 -->
  78. <div class="hc-info-list" v-if="dataType==='采购审批'">
  79. <purchaseRequest :other-info="otherInfo"/>
  80. </div>
  81. <!-- 用车申请 -->
  82. <div class="hc-info-list" v-if="dataType==='用车审批'">
  83. <vehicleRequest :other-info="otherInfo"/>
  84. </div>
  85. <!-- 开票申请 -->
  86. <div class="hc-info-list" v-if="dataType==='发票审批'">
  87. <invoiceRequest :other-info="otherInfo"/>
  88. </div>
  89. <!-- 外包支付 -->
  90. <div class="hc-info-list" v-if="dataType==='外包支付'">
  91. <outsourcing :other-info="otherInfo"/>
  92. </div>
  93. <!-- 成本测算 -->
  94. <div class="hc-info-list" v-if="dataType==='成本测算'">
  95. <costBudget :other-info="otherInfo"/>
  96. </div>
  97. </HcCardItem>
  98. <HcCardItem title="操作任务" class="mt-4" v-if="dataType !== '1' && authType">
  99. <HcListItem ui="items-center" title="支付状态:">
  100. <el-radio-group v-model="taskBasicsInfo.payStatus" size="large">
  101. <el-radio label="1">已支付</el-radio>
  102. <el-radio label="0" class="ml-4">待支付</el-radio>
  103. </el-radio-group>
  104. </HcListItem>
  105. </HcCardItem>
  106. <template #action>
  107. <el-button size="large" type="info" hc-btn @click="goBackClick">
  108. <HcIcon name="arrow-go-back"/>
  109. <span v-if="tabsKey === 'to-do'">取消并返回</span>
  110. <span v-else>返回</span>
  111. </el-button>
  112. <el-button size="large" type="danger" hc-btn @click="groundsShow" v-if="tabsKey === 1">
  113. <HcIcon name="arrow-go-forward"/>
  114. <span>驳回申请</span>
  115. </el-button>
  116. <el-button size="large" type="primary" hc-btn @click="doubleClick" v-if="tabsKey === 1">
  117. <HcIcon name="check-double"/>
  118. <span>审核通过</span>
  119. </el-button>
  120. <!--模拟效果-->
  121. <!-- <div class="w-36 mx-6 inline-block">
  122. <el-select v-model="dataType" block placeholder="选择模拟类型" size="large">
  123. <el-option label="任务详情" value="任务审批"/>
  124. <el-option label="财务报销" value="报销审批"/>
  125. <el-option label="采购审批" value="采购审批"/>
  126. <el-option label="外包支付" value="外包支付"/>
  127. <el-option label="借款审批" value="借款审批"/>
  128. <el-option label="出差审批" value="出差审批"/>
  129. <el-option label="支付申请" value="支付审批"/>
  130. <el-option label="用车审批" value="用车审批"/>
  131. <el-option label="发票审批" value="发票审批"/>
  132. <el-option label="成本测算" value="成本测算"/>
  133. </el-select>
  134. </div> -->
  135. <!-- <el-button hc-btn @click="authTypeClick">模拟财务审核</el-button> -->
  136. </template>
  137. <HcDialog bgColor="#ffffff" isToBody :loading="groundsLoading" :show="groundsModal" title="请填写驳回理由" widths="600px" @close="closeGroundsClick" @save="saveGroundsClick">
  138. <el-form ref="formGroundsRef" :model="formGroundsModel" :rules="formGroundsRules" label-width="0" size="large">
  139. <el-form-item prop="rejectDesc">
  140. <el-input v-model="formGroundsModel.rejectDesc" :autosize="{ minRows: 6, maxRows: 10 }" placeholder="请输入驳回理由" type="textarea"/>
  141. </el-form-item>
  142. </el-form>
  143. </HcDialog>
  144. </HcCard>
  145. </template>
  146. <script setup>
  147. import {onActivated, ref} from "vue";
  148. import {useRouter, useRoute} from 'vue-router'
  149. import taskApi from '~api/home/task.js';
  150. import {getArrValue,getObjValue,formValidate} from "js-fast-way"
  151. import tripInfo from './components/trip-info.vue'//出差申请
  152. import paymentRequest from './components/pay-request.vue'
  153. import loanRequest from './components/loan-request.vue'
  154. import purchaseRequest from './components/purch-request.vue'//采购
  155. import vehicleRequest from './components/vehicle-request.vue'
  156. import invoiceRequest from './components/invoice-request.vue'
  157. import outsourcing from './components/outsourcing.vue'
  158. import costBudget from './components/cost-budget.vue'
  159. import {useAppStore} from "~src/store";
  160. import { getdepartmentList} from "~api/other";
  161. const useAppState = useAppStore();
  162. //初始变量
  163. const router = useRouter()
  164. const useRoutes = useRoute()
  165. const tabsKey = ref(useRoutes?.query?.tabKey ?? '')
  166. const dataType = ref(useRoutes?.query?.type ?? '')
  167. const dataId = ref(useRoutes?.query?.id ?? '')
  168. const authType = ref(false)//是否是财务人员
  169. //缓存页面被激活时
  170. onActivated(() => {
  171. tabsKey.value = useRoutes?.query?.tabKey ?? ''
  172. dataType.value = useRoutes?.query?.type ?? ''
  173. dataId.value = useRoutes?.query?.id ?? ''
  174. getTaskDatail()
  175. })
  176. const authTypeClick = () => {
  177. authType.value = !authType.value
  178. }
  179. const taskDetail=ref({})
  180. const taskBasicsInfo=ref({})//基础信息
  181. const otherInfo=ref({})
  182. const getTaskDatail=async()=>{
  183. const {error, code, data} = await taskApi.getDetail({id: dataId.value})
  184. if (!error && code === 200) {
  185. taskDetail.value=getObjValue(data)
  186. tableData.value=data['planTaskInfoList']
  187. taskBasicsInfo.value=data['basicsInfo']
  188. otherInfo.value=data['otherInfo']
  189. let isFinancialPersonnel=data['basicsInfo'].isFinancialPersonnel
  190. if(isFinancialPersonnel==1){//1 是财务审核
  191. authType.value=true
  192. }else{
  193. authType.value=false
  194. }
  195. } else {
  196. taskDetail.value={}
  197. }
  198. }
  199. //部门
  200. const departMent = ref([])
  201. //任务表格
  202. const tableColumn = [
  203. {key: 'projectName', name: '所属项目'},
  204. {key: 'taskDesc', name: '任务描述'}
  205. ]
  206. const tableData = ref([])
  207. //任务操作数据
  208. const formRef = ref(null)
  209. const formModel = ref({
  210. type: '1',
  211. })
  212. const formRules = {
  213. title: {
  214. required: true,
  215. trigger: 'blur',
  216. message: "请输入节点名称"
  217. },
  218. }
  219. const formPay = ref('1')
  220. const groundsShow = () => {
  221. groundsLoading.value = false
  222. groundsModal.value = true
  223. }
  224. //驳回弹窗
  225. const groundsLoading = ref(false)
  226. const groundsModal = ref(false)
  227. //驳回表单
  228. const formGroundsRef = ref(null)
  229. const formGroundsModel = ref({rejectDesc: ''})
  230. const formGroundsRules = {
  231. rejectDesc: {
  232. required: true,
  233. trigger: 'blur',
  234. message: "请输入驳回理由"
  235. },
  236. }
  237. //确认驳回
  238. const saveGroundsClick = async() => {
  239. const res = await formValidate(formGroundsRef.value)
  240. if(res){
  241. const {error, code, data} = await taskApi.rejectTask(
  242. {
  243. id: taskDetail.value.basicsInfo.taskId,
  244. rejectDesc:formGroundsModel.value?.rejectDesc
  245. }
  246. )
  247. if (!error && code === 200) {
  248. window?.$message.warning('驳回成功!')
  249. }
  250. closeGroundsClick()
  251. }
  252. }
  253. //取消驳回
  254. const closeGroundsClick = async() => {
  255. groundsModal.value = false
  256. groundsLoading.value = false
  257. console.log(formGroundsModel.value,'formGroundsModel');
  258. console.log(taskDetail.value,'renwu');
  259. }
  260. //审核通过
  261. const doubleClick = async() => {
  262. console.log(formGroundsModel.value,'formGroundsModel');
  263. console.log(taskDetail.value,'renwu');
  264. const {error, code, data} = await taskApi.submitTask(
  265. {
  266. id: taskDetail.value.basicsInfo.taskId,
  267. payStatus:taskBasicsInfo.value?.payStatus
  268. }
  269. )
  270. if (!error && code === 200) {
  271. window?.$message.success('审核通过!')
  272. }
  273. }
  274. //返回
  275. const goBackClick = () => {
  276. router.back()
  277. }
  278. </script>
  279. <style lang="scss" scoped>
  280. .hac-task-name-box {
  281. position: relative;
  282. display: flex;
  283. align-items: center;
  284. border: 1px solid #c5d7ff;
  285. border-radius: 3px;
  286. .label {
  287. position: relative;
  288. padding: 12px;
  289. background: #cddcff;
  290. }
  291. .name {
  292. position: relative;
  293. padding: 12px;
  294. border-left: 1px solid #c5d7ff;
  295. }
  296. }
  297. .hac-task-text-box {
  298. position: relative;
  299. font-size: 14px;
  300. margin-top: 14px;
  301. }
  302. </style>