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

arrangeProject.vue 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <!--
  2. * @Author: ysh
  3. * @Date: 2024-03-19 09:24:06
  4. * @LastEditors: Please set LastEditors
  5. * @LastEditTime: 2024-04-08 14:11:02
  6. -->
  7. <template>
  8. <div class="app-container">
  9. <h2 style="text-align: center;">项目安排</h2>
  10. <el-form :model="form" :rules="rules" label-width="100px" :disabled="disabled">
  11. <el-form-item label="承担部门:" prop="undertakingDept">
  12. <el-select v-model="form.deptId" multiple clearable style="width:500px" @change="getDeptLeader">
  13. <el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName" :value="item.deptId"
  14. v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
  15. </el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="部门负责人" prop="deptLeader">
  19. <el-select v-model="form.deptLeader" multiple clearable style="width:500px">
  20. <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId">
  21. </el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="项目负责人" prop="projectLeader">
  25. <el-tag effect="plain" type="warning" style="margin-right: 10px;"
  26. v-if="form.projectLeader != '' && form.projectLeader != undefined">{{
  27. form.projectLeaderName }}</el-tag>
  28. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="choosePeople">选择</el-button>
  29. </el-form-item>
  30. <el-form-item label="现场负责人" prop="siteLeader">
  31. <el-select v-model="form.siteLeader" filterable clearable style="width:500px">
  32. <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"
  33. v-if="item.nickName != 'admin'">
  34. </el-option>
  35. </el-select>
  36. </el-form-item>
  37. </el-form>
  38. <!-- 人员选择对话框 -->
  39. <el-dialog width="320px" title="选择项目负责人" :visible.sync="peopleVisible" append-to-body>
  40. <el-form>
  41. <el-form-item label="部门:">
  42. <el-select v-model="peopleForm.deptId" @change="handleChangeDept">
  43. <el-option v-for="item in peopleForm.deptList" :key="item.deptId" :label="item.deptName"
  44. :value="item.deptId" v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
  45. </el-option>
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item label="人员:">
  49. <el-select v-model="peopleForm.userId">
  50. <el-option v-for="item in peopleForm.userList" :key="item.userId" :label="item.nickName"
  51. :value="item.userId">
  52. </el-option>
  53. </el-select>
  54. </el-form-item>
  55. <el-form-item style="text-align: center;">
  56. <el-button @click="confirmPeople" type="primary">确定</el-button>
  57. <el-button @click="cancelChoosePeople">取消</el-button>
  58. </el-form-item>
  59. </el-form>
  60. </el-dialog>
  61. <div slot="footer" class="dialog-footer" style="text-align: center;">
  62. <el-button type="primary" @click="confirmPlanForm" :disabled="disabled">确 定</el-button>
  63. <el-button @click="cancel" :disabled="disabled">取 消</el-button>
  64. </div>
  65. </div>
  66. </template>
  67. <script>
  68. import { listDept } from '@/api/system/dept'
  69. import { listUser } from '@/api/system/user'
  70. import { getUsersDeptLeaderByDept } from '@/api/system/post'
  71. import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
  72. import { listProject, getProject, addProject, updateProject, delProject, submitProject, modifyProject } from "@/api/oa/project/project";
  73. export default {
  74. props: {
  75. disabled: {
  76. type: Boolean,
  77. require: true,
  78. },
  79. taskForm: {
  80. type: Object,
  81. required: true
  82. }
  83. },
  84. data() {
  85. return {
  86. form: {},
  87. rules: {},
  88. deptList: [],
  89. userList: [],
  90. deptLeaderList: [],
  91. file: {
  92. fileList: []
  93. },
  94. peopleVisible: false,
  95. peopleForm: {
  96. deptId: '',
  97. deptList: [],
  98. userId: '',
  99. userList: []
  100. },
  101. }
  102. },
  103. created() {
  104. debugger
  105. if (this.$route.query.taskName != '项目登记') {
  106. this.initForm();
  107. // this.form.projectId = this.taskForm.formId;
  108. this.getDeptList();
  109. this.getUserList();
  110. }
  111. },
  112. methods: {
  113. initForm() {
  114. debugger
  115. getProject(this.$route.query.formId).then(res => {
  116. this.form = res.data;
  117. if (this.form.undertakingDept != null && this.form.undertakingDept != "" && this.form.undertakingDept != undefined) {
  118. this.form.deptId = this.form.undertakingDeptName.split(',')
  119. }
  120. if (this.form.projectLeaderUser) {
  121. this.form.projectLeaderName = this.form.projectLeaderUser.nickName
  122. }
  123. this.$set(this.form, 'deptLeader', [])
  124. if (this.form.undertakingDept) {
  125. let arr = this.form.undertakingDept.split(',')
  126. this.getDeptLeader(arr);
  127. } else {
  128. this.$set(this.form, 'deptId', [])
  129. }
  130. })
  131. },
  132. getUserList() {
  133. listUser({ pageSize: 9999, pageNum: 1 }).then(res => {
  134. this.userList = res.rows
  135. })
  136. },
  137. getDeptList() {
  138. listDept({
  139. deptName: undefined,
  140. status: undefined
  141. }).then(res => {
  142. this.deptList = res.data
  143. this.peopleForm.deptList = res.data
  144. })
  145. },
  146. getDeptLeader(val) {
  147. this.deptLeaderList = [];
  148. for (let v of val) {
  149. getUsersDeptLeaderByDept({ deptId: Number(v) }).then(res => {
  150. debugger
  151. this.deptLeaderList.push(res.data.userId);
  152. this.form.deptLeader = this.deptLeaderList;
  153. })
  154. }
  155. },
  156. // 人员选择
  157. choosePeople() {
  158. this.peopleVisible = true;
  159. },
  160. // 改变部门选择
  161. handleChangeDept(deptId) {
  162. this.peopleForm.userId = '';
  163. listUser({ pageSize: 999999, deptId }).then(res => {
  164. this.peopleForm.userList = res.rows
  165. })
  166. },
  167. // 确定项目负责人
  168. confirmPeople() {
  169. this.form.projectLeader = this.peopleForm.userId;
  170. this.form.projectLeaderName = this.tagLeader()
  171. this.peopleVisible = false
  172. },
  173. tagLeader() {
  174. if (this.form.projectLeader == '' || this.form.projectLeader == undefined || this.form.projectLeader == null) {
  175. return undefined
  176. } else {
  177. for (let user of this.peopleForm.userList) {
  178. if (this.form.projectLeader == user.userId) {
  179. return user.nickName
  180. }
  181. }
  182. }
  183. },
  184. cancelChoosePeople() {
  185. this.peopleForm.deptId = '';
  186. this.peopleForm.userId = '';
  187. this.peopleVisible = false;
  188. },
  189. confirmPlanForm() {
  190. this.form.undertakingDept = this.form.deptId.join(',')
  191. let formData = new FormData();
  192. formData.append("form", JSON.stringify(this.form));
  193. modifyProject(formData)
  194. const params = { taskId: this.taskForm.taskId };
  195. // 获取下一个流程节点
  196. getNextFlowNode(params).then(res => {
  197. this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
  198. this.$set(this.taskForm.variables, "budgetInitiator", this.peopleForm.userId);
  199. getUsersDeptLeaderByDept({ deptId: 105 }).then(res => {
  200. let userId = res.data.userId;
  201. this.$set(this.taskForm.variables, "approval", userId);
  202. complete(this.taskForm).then(response => {
  203. this.$modal.msgSuccess(response.msg);
  204. this.$emit('goBack')
  205. });
  206. })
  207. })
  208. },
  209. cancel() {
  210. this.form = {}
  211. },
  212. }
  213. }
  214. </script>
  215. <style lang="scss" scoped></style>