综合办公系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

deviceForm.vue 8.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <!--
  2. * @Author: ysh
  3. * @Date: 2024-03-07 13:44:39
  4. * @LastEditors: Please set LastEditors
  5. * @LastEditTime: 2024-03-08 17:15:18
  6. -->
  7. <template>
  8. <div>
  9. <h2 style="text-align: center;">设备申请表</h2>
  10. <div>
  11. <el-form ref="deviceForm" :model="form" label-width="100px" :rules="rules">
  12. <!-- 申请人填写 -->
  13. <el-row :gutter="20">
  14. <el-col :span="6" :xs="24">
  15. <el-form-item label="申请人:" prop="user">
  16. <!-- <el-input v-model="form.user"></el-input> -->
  17. {{ form.user }}
  18. </el-form-item>
  19. </el-col>
  20. <el-col :span="6" :xs="24">
  21. <el-form-item label="所在部门:" prop="deptName">
  22. <!-- <el-input v-model="form.deptName"></el-input> -->
  23. {{ form.deptName }}
  24. </el-form-item>
  25. </el-col>
  26. <el-col :span="6" :xs="24">
  27. <el-form-item label="申请时间:" prop="applyDate">
  28. <el-date-picker style="width:140px;" v-model="form.applyDate" value-format="yyyy-MM-dd" type="date"
  29. placeholder="选择日期">
  30. </el-date-picker>
  31. </el-form-item>
  32. </el-col>
  33. </el-row>
  34. <el-form-item label="项目编号:" prop="projectNumber">
  35. <el-select v-model="form.projectNumber" filterable allow-create placeholder="请选择"
  36. @change="handleSelectProject" clearable>
  37. <el-option v-for="item in projectList" :key="item.value" :label="item.projectNumber"
  38. :value="item.projectId">
  39. </el-option>
  40. </el-select>
  41. <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="1">
  42. <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
  43. }}</el-descriptions-item>
  44. <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
  45. }}</el-descriptions-item>
  46. <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeader
  47. }}</el-descriptions-item>
  48. <el-descriptions-item label="承担部门" label-class-name="my-label">
  49. <el-tag size="small">{{ chooseProject.undertakingDept }}</el-tag>
  50. </el-descriptions-item>
  51. <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
  52. }}</el-descriptions-item>
  53. </el-descriptions>
  54. </el-form-item>
  55. <el-form-item label="申领事由:" prop="applyReason">
  56. <el-input type="textarea" :rows="2" placeholder="请输入申领事由" v-model="form.applyReason">
  57. </el-input>
  58. </el-form-item>
  59. <el-row>
  60. <el-col :span="6" :xs="24">
  61. <el-form-item label="开始日期:" prop="beginDate">
  62. <el-date-picker style="width:140px;" v-model="form.beginDate" value-format="yyyy-MM-dd" type="date"
  63. placeholder="选择日期" @change="calculateDay">
  64. </el-date-picker>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="6" :xs="24">
  68. <el-form-item label="结束日期:" prop="endDate">
  69. <el-date-picker style="width:140px;" v-model="form.endDate" value-format="yyyy-MM-dd" type="date"
  70. placeholder="选择日期" @change="calculateDay">
  71. </el-date-picker>
  72. </el-form-item>
  73. </el-col>
  74. <el-col :span="8" :xs="24">
  75. <el-form-item label="共计:">
  76. {{ form.days + '天' }}
  77. </el-form-item>
  78. </el-col>
  79. </el-row>
  80. <el-divider></el-divider>
  81. <!-- 部门审核意见 -->
  82. <el-form-item label="部门审核意见:" prop="deptComment" label-width="120px"
  83. v-if="taskName == '部门审核' || taskName == '分管审核' || taskName == '安排设备'">
  84. <el-input type="textarea" :rows="2" placeholder="请输入部门审核意见" v-model="form.deptComment">
  85. </el-input>
  86. </el-form-item>
  87. <!-- 分管审核意见 -->
  88. <el-form-item label="分管审核意见:" prop="managerComment" label-width="120px"
  89. v-if="taskName == '分管审核' || taskName == '安排设备'">
  90. <el-input type="textarea" :rows="2" placeholder="请输入分管审核意见" v-model="form.managerComment">
  91. </el-input>
  92. </el-form-item>
  93. </el-form>
  94. <el-row style="text-align: center;" v-if="taskName == '设备申请'">
  95. <el-button type="primary" @click="submit">提交申请</el-button>
  96. </el-row>
  97. </div>
  98. </div>
  99. </template>
  100. <script>
  101. import { listProject, getProject } from "@/api/oa/project/project";
  102. import { listDevice, getDevice } from "@/api/oa/device/device";
  103. import { listDeviceApproval, getDeviceApproval, updateDeviceApproval, submitDeviceApproval, modifyDeviceApproval } from '@/api/oa/device/deviceApproval'
  104. import {
  105. complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm,
  106. } from "@/api/flowable/todo";
  107. export default {
  108. props: {
  109. taskName: {
  110. type: String,
  111. required: true
  112. },
  113. taskForm: {
  114. type: Object,
  115. required: true
  116. }
  117. },
  118. created() {
  119. this.form.user = this.$store.getters.name;
  120. this.form.deptName = this.$store.getters.deptName;
  121. this.getProjectList();
  122. },
  123. data() {
  124. return {
  125. form: {
  126. applyDate: new Date(),
  127. days: ""
  128. },
  129. projectList: [],
  130. chooseProject: {},
  131. isSelect: false,
  132. rules: {
  133. projectNumber: [
  134. { required: true, message: '请选择项目编号', trigger: 'change' },
  135. ],
  136. passengers: [
  137. { required: true, message: '请选择输入乘车人数', trigger: 'change' },
  138. ],
  139. beginDate: [
  140. { required: true, message: '请选择开始日期', trigger: 'change' },
  141. ],
  142. endDate: [
  143. { required: true, message: '请选择结束日期', trigger: 'change' },
  144. ],
  145. applyReason: [
  146. { required: true, message: '请输入用车理由', trigger: 'blur' },
  147. ],
  148. },
  149. }
  150. },
  151. methods: {
  152. submit() {
  153. this.$refs['deviceForm'].validate((valid) => {
  154. if (valid) {
  155. this.form.formId = this.taskForm.formId;
  156. let formData = new FormData();
  157. let jsonForm = JSON.stringify(this.form);
  158. formData.append("form", jsonForm);
  159. const params = { taskId: this.taskForm.taskId };
  160. if (this.formTotal != 0) {
  161. modifyDeviceApproval(formData);
  162. } else {
  163. submitDeviceApproval(formData);
  164. }
  165. // 获取下一个流程节点
  166. getNextFlowNode(params).then(res => {
  167. const data = res.data;
  168. this.taskForm.formData = formData;
  169. this.getNextFlowNodeApproval();
  170. })
  171. }
  172. })
  173. },
  174. // 查询项目列表
  175. getProjectList() {
  176. this.loading = true
  177. listProject({
  178. pageNum: 1,
  179. pageSize: 9999999999
  180. }).then(response => {
  181. this.projectList = response.rows;
  182. })
  183. },
  184. // 选择项目
  185. handleSelectProject(val) {
  186. if (val != "" && val != undefined && val != null) {
  187. getProject(val).then(res => {
  188. this.chooseProject = res.data;
  189. this.isSelect = true
  190. })
  191. } else {
  192. this.isSelect = false
  193. }
  194. },
  195. // 计算天数
  196. calculateDay() {
  197. if (this.form.beginDate && this.form.endDate) {
  198. let y1 = new Date(this.form.beginDate);
  199. let y2 = new Date(this.form.endDate);
  200. if (y2 < y1) {
  201. this.form.days = '';
  202. return
  203. }
  204. let sub = Math.abs(y2 - y1);
  205. let days = Math.floor(sub / (1000 * 60 * 60 * 24)) + 1;
  206. this.form.days = days;
  207. } else {
  208. this.form.days = '';
  209. }
  210. },
  211. isEmptyObject(obj) {
  212. for (var key in obj) {
  213. if (obj.hasOwnProperty(key)) {
  214. return false;
  215. }
  216. }
  217. return true;
  218. }
  219. },
  220. }
  221. </script>
  222. <style lang="scss" scoped></style>