综合办公系统
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.

changeForm.vue 9.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  1. <template>
  2. <div class="app-container">
  3. <el-row :gutter="20">
  4. <el-col :span="18" :xs="24">
  5. <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  6. <el-form-item label="项目信息" prop="projectId">
  7. <el-button type="primary" size="mini" @click="openProject = true" v-if="taskName == '变更登记'">选择项目</el-button>
  8. <el-descriptions border v-if="isSelect" style="margin-top: 10px;" :column="2" direction="vertical">
  9. <el-descriptions-item label="项目名称" label-class-name="my-label">{{ chooseProject.projectName
  10. }}</el-descriptions-item>
  11. <el-descriptions-item label="项目编号" label-class-name="my-label">{{ chooseProject.projectNumber
  12. }}</el-descriptions-item>
  13. <el-descriptions-item label="甲方单位" label-class-name="my-label">{{ chooseProject.partyA.partyAName
  14. }}</el-descriptions-item>
  15. <el-descriptions-item label="项目类型" label-class-name="my-label">{{ chooseProject.projectType
  16. }}</el-descriptions-item>
  17. <el-descriptions-item label="承担部门" label-class-name="my-label">{{
  18. chooseProject.undertakingDeptName
  19. }}</el-descriptions-item>
  20. <el-descriptions-item label="项目负责人" label-class-name="my-label">{{ chooseProject.projectLeaderUser
  21. ? chooseProject.projectLeaderUser.nickName : ''
  22. }}</el-descriptions-item>=
  23. </el-descriptions>
  24. </el-form-item>
  25. <el-form-item label="变更内容" prop="content">
  26. <el-input type="textarea" :rows="10" v-model="form.content" :disabled="taskName != '变更登记'" />
  27. </el-form-item>
  28. <el-row>
  29. <el-col :span="6" :xs="24" :offset="12">
  30. <el-form-item label="签名:" label-width="120px">
  31. <span class="auditor"> {{ registrantName }}
  32. </span>
  33. </el-form-item>
  34. </el-col>
  35. <el-col :span="6">
  36. <el-form-item label="登记时间" label-width="120px">
  37. <span> {{ parseTime(form.registerTime, '{y}-{m}-{d}') }} </span>
  38. </el-form-item>
  39. </el-col>
  40. </el-row>
  41. </el-form>
  42. <div style="text-align: center;" v-if="taskName && taskName == '变更登记'">
  43. <el-button type="primary" @click="submitForm">提交申请</el-button>
  44. </div>
  45. <div style="text-align: center;" v-if="taskName && taskName == '变更确认'">
  46. <el-button type="primary" @click="submitForm">确认变更</el-button>
  47. </div>
  48. </el-col>
  49. <el-col :span="6" :xs="24" v-if="isFlow">
  50. <el-card>
  51. <h2 style="text-align: center;">流程进度</h2>
  52. <div>
  53. <flow :flowData="flowData" />
  54. </div>
  55. </el-card>
  56. </el-col>
  57. </el-row>
  58. <el-dialog title="选择项目" :visible.sync="openProject" width="70%" append-to-body>
  59. <project-choose @chooseProject="confirmProject"></project-choose>
  60. </el-dialog>
  61. </div>
  62. </template>
  63. <script>
  64. import { listProjectChange, getProjectChange, delProjectChange, addProjectChange, updateProjectChange } from "@/api/oa/project/projectChange";
  65. import { getProject } from "@/api/oa/project/project";
  66. import { getUsersManageLeaderByDept, getUsersDeptLeaderByDept } from '@/api/system/post'
  67. import flow from '@/views/flowable/task/todo/detail/flow';
  68. import { complete, getNextFlowNode } from "@/api/flowable/todo";
  69. import { flowXmlAndNode } from "@/api/flowable/definition";
  70. import projectChoose from '@/views/flowable/form/components/chooseProject.vue';
  71. import { getDept } from "@/api/system/dept";
  72. export default {
  73. components: {
  74. projectChoose,
  75. flow
  76. },
  77. props: {
  78. taskName: {
  79. type: String,
  80. required: true
  81. },
  82. taskForm: {
  83. type: Object,
  84. required: true
  85. },
  86. isFlow: {
  87. type: Boolean,
  88. default: true
  89. },
  90. },
  91. data() {
  92. return {
  93. // 遮罩层
  94. loading: true,
  95. // 选中数组
  96. ids: [],
  97. // 非单个禁用
  98. single: true,
  99. // 非多个禁用
  100. multiple: true,
  101. // 显示搜索条件
  102. showSearch: true,
  103. // 总条数
  104. total: 0,
  105. // cmc项目变更表格数据
  106. projectChangeList: [],
  107. leaderList: [],
  108. undertakingDeptNameList: [],
  109. // 弹出层标题
  110. title: "",
  111. // 是否显示弹出层
  112. open: false,
  113. openProject: false,
  114. chooseProject: {},
  115. isSelect: false,
  116. // 查询参数
  117. queryParams: {
  118. pageNum: 1,
  119. pageSize: 10,
  120. projectId: null,
  121. content: null,
  122. registrant: null,
  123. registerTime: null
  124. },
  125. // 表单参数
  126. form: {
  127. registerTime: undefined,
  128. },
  129. flowData: {},
  130. formTotal: 0,
  131. registrantName: '',
  132. // 表单校验
  133. rules: {
  134. projectId: [
  135. { required: true, message: '请选择项目编号', trigger: 'blur' }
  136. ],
  137. content: [
  138. { required: true, message: '请输入变更内容', trigger: 'blur' }
  139. ]
  140. }
  141. };
  142. },
  143. created() {
  144. this.initForm();
  145. this.getList();
  146. if (this.$route.query.projectId) {
  147. getProject(this.$route.query.projectId).then(res => {
  148. if (res.data) {
  149. this.$set(this.form, 'projectId', res.data.projectId);
  150. this.handleSelectProject(res.data.projectId)
  151. }
  152. })
  153. }
  154. if (this.isFlow) {
  155. flowXmlAndNode({ procInsId: this.taskForm.procInsId, deployId: this.taskForm.deployId }).then(res => {
  156. this.flowData = res.data;
  157. })
  158. }
  159. },
  160. methods: {
  161. // 初始化表单
  162. initForm() {
  163. getProjectChange(this.taskForm.formId).then(res => {
  164. if (this.isEmptyObject(res.data)) {
  165. this.formTotal = 0;
  166. this.form.registrant = this.$store.getters.userId;
  167. this.registrantName = this.$store.getters.name;
  168. this.form.registerTime = new Date();
  169. }
  170. else {
  171. this.formTotal = 1;
  172. this.form = res.data;
  173. this.registrantName = res.data.registrantUser.nickName
  174. if (res.data.projectId) {
  175. getProject(res.data.projectId).then(response => {
  176. this.chooseProject = response.data;
  177. this.isSelect = true;
  178. })
  179. }
  180. this.loading = false
  181. }
  182. })
  183. },
  184. /** 查询cmc项目变更列表 */
  185. getList() {
  186. this.loading = true;
  187. listProjectChange(this.queryParams).then(response => {
  188. this.projectChangeList = response.rows;
  189. this.total = response.total;
  190. this.loading = false;
  191. });
  192. },
  193. isEmptyObject(obj) {
  194. for (var key in obj) {
  195. if (obj.hasOwnProperty(key)) {
  196. return false;
  197. }
  198. }
  199. return true;
  200. },
  201. // 选择项目
  202. handleSelectProject(val) {
  203. if (val != "" && val != undefined && val != null) {
  204. getProject(val).then(response => {
  205. this.chooseProject = response.data;
  206. this.isSelect = true;
  207. if (this.chooseProject.undertakingDept) {
  208. this.getLeader(arr);
  209. }
  210. })
  211. } else {
  212. this.isSelect = false
  213. }
  214. },
  215. confirmProject(val) {
  216. if (val.length > 1) {
  217. this.$message.error('请选择一个项目');
  218. return
  219. } else if (val.length == 1) {
  220. this.chooseProject = val[0]
  221. this.isSelect = true
  222. this.form.projectId = val[0].projectId
  223. this.$refs.form.validateField('projectId');
  224. if (this.chooseProject.projectLeader)
  225. this.leaderList.push(this.chooseProject.projectLeader);
  226. getUsersDeptLeaderByDept({ deptId: 109 }).then(res => {
  227. this.leaderList.push(res.data.userId);
  228. })
  229. if (this.chooseProject.undertakingDept) {
  230. let arr = this.chooseProject.undertakingDept.split(',')
  231. this.getLeader(arr);
  232. }
  233. }
  234. this.openProject = false;
  235. },
  236. getLeader(val) {
  237. for (let v of val) {
  238. getUsersDeptLeaderByDept({ deptId: Number(v) }).then(res => {
  239. this.leaderList.push(res.data.userId);
  240. })
  241. getUsersManageLeaderByDept({ deptId: Number(v) }).then(res => {
  242. this.leaderList.push(res.data[0].userId);
  243. })
  244. }
  245. },
  246. /** 提交按钮 */
  247. submitForm() {
  248. this.$refs["form"].validate(valid => {
  249. if (valid) {
  250. if (this.formTotal != 0) {
  251. updateProjectChange(this.form).then(response => {
  252. this.$modal.msgSuccess("修改成功");
  253. this.open = false;
  254. this.getList();
  255. });
  256. const params = { taskId: this.taskForm.taskId };
  257. getNextFlowNode(params).then(res => {
  258. if (this.taskName == '变更登记') {
  259. this.$set(this.taskForm.variables, "approvalList", this.leaderList);
  260. }
  261. complete(this.taskForm).then(response => {
  262. this.$modal.msgSuccess(response.msg);
  263. this.$emit('goBack')
  264. });
  265. })
  266. } else {
  267. this.form.changeId = this.taskForm.formId;
  268. addProjectChange(this.form).then(response => {
  269. this.$modal.msgSuccess("新增成功");
  270. this.open = false;
  271. this.getList();
  272. });
  273. const params = { taskId: this.taskForm.taskId };
  274. getNextFlowNode(params).then(res => {
  275. this.$set(this.taskForm.variables, "approvalList", this.leaderList);
  276. complete(this.taskForm).then(response => {
  277. this.$modal.msgSuccess(response.msg);
  278. this.$emit('goBack')
  279. });
  280. })
  281. }
  282. }
  283. });
  284. },
  285. }
  286. };
  287. </script>
  288. <style lang="scss" scoped>
  289. @import "@/assets/styles/element-reset.scss";
  290. </style>