综合办公系统
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

arrangeProject.vue 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. <!--
  2. * @Author: ysh
  3. * @Date: 2024-03-19 09:24:06
  4. * @LastEditors: Please set LastEditors
  5. * @LastEditTime: 2024-06-07 10:55:28
  6. -->
  7. <template>
  8. <div class="app-container">
  9. <h2 style="text-align: center;">项目安排</h2>
  10. <el-form :model="form" :rules="rules" label-width="120px" :disabled="disabled">
  11. <el-row :gutter="20">
  12. <el-col :span="12" :xs="24">
  13. <el-form-item label="承担部门:" prop="undertakingDept">
  14. <el-select v-model="form.deptId" multiple clearable style="width:100%" @change="getDeptLeader">
  15. <el-option v-for="item in deptList" :key="item.deptId" :label="item.deptName" :value="item.deptId"
  16. v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
  17. </el-option>
  18. </el-select>
  19. </el-form-item>
  20. </el-col>
  21. <el-col :span="12" :xs="24">
  22. <el-form-item label="部门负责人:" prop="deptLeader">
  23. <el-select v-model="form.deptLeader" multiple clearable style="width:100%">
  24. <el-option v-for="item in $store.state.user.userList" :key="item.userId" :label="item.nickName"
  25. :value="item.userId">
  26. </el-option>
  27. </el-select>
  28. </el-form-item>
  29. </el-col>
  30. </el-row>
  31. <el-row :gutter="20">
  32. <el-col :span="12" :xs="24">
  33. <el-form-item label="项目负责人:" prop="projectLeader">
  34. <el-tag effect="plain" type="warning" style="margin-right: 10px;"
  35. v-if="form.projectLeader != '' && form.projectLeader != undefined">{{
  36. form.projectLeaderName }}</el-tag>
  37. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="choosePeople">选择</el-button>
  38. </el-form-item>
  39. </el-col>
  40. <el-col :span="12" :xs="24">
  41. <el-form-item label="现场负责人:" prop="siteLeader">
  42. <el-select v-model="form.siteLeader" filterable clearable style="width:100%">
  43. <el-option v-for="item in $store.state.user.userList" :key="item.userId" :label="item.nickName"
  44. :value="item.userId" v-if="item.nickName != 'admin'">
  45. </el-option>
  46. </el-select>
  47. </el-form-item>
  48. </el-col>
  49. </el-row>
  50. <el-row :gutter="20">
  51. <el-col :span="12" :xs="24">
  52. <el-form-item label="组织交底日期:" prop="organizeTime">
  53. <el-date-picker style="width: 100%;" v-model="form.organizeTime" value-format="yyyy-MM-dd" type="date"
  54. placeholder="选择日期">
  55. </el-date-picker>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="12" :xs="24">
  59. <el-form-item label="组织交底文档:" prop="organizeDocument">
  60. <FileUpload v-if="$route.query.taskName == '项目安排'" ref="orz" :limit="1" :filePathName="'组织交底文件'"
  61. :fileType="['doc', 'docx', 'xls', 'xlsx', 'pdf']" @input="setOrganizeDocument">
  62. </FileUpload>
  63. <div v-if="form.organizeDocument && $route.query.taskName != '项目安排'" class="upload-list">
  64. <el-link type="primary" @click="reviewWord(`${baseUrl}${'/profile/upload' + form.organizeDocument}`)">
  65. {{ getFileName(form.organizeDocument) }}
  66. </el-link>
  67. <el-link class="ml20" type="warning" :href="`${baseUrl}${'/profile/upload' + form.organizeDocument}`"
  68. :underline="false" target="_blank">
  69. <span class="el-icon-download">下载文件</span>
  70. </el-link>
  71. </div>
  72. </el-form-item>
  73. </el-col>
  74. </el-row>
  75. </el-form>
  76. <!-- 人员选择对话框 -->
  77. <el-dialog width="320px" title="选择项目负责人" :visible.sync="peopleVisible" append-to-body>
  78. <el-form>
  79. <el-form-item label="部门:">
  80. <el-select v-model="peopleForm.deptId" @change="handleChangeDept">
  81. <el-option v-for="item in peopleForm.deptList" :key="item.deptId" :label="item.deptName"
  82. :value="item.deptId" v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
  83. </el-option>
  84. </el-select>
  85. </el-form-item>
  86. <el-form-item label="人员:">
  87. <el-select v-model="peopleForm.userId">
  88. <el-option v-for="item in peopleForm.userList" :key="item.userId" :label="item.nickName"
  89. :value="item.userId">
  90. </el-option>
  91. </el-select>
  92. </el-form-item>
  93. <el-form-item style="text-align: center;">
  94. <el-button @click="confirmPeople" type="primary">确定</el-button>
  95. <el-button @click="cancelChoosePeople">取消</el-button>
  96. </el-form-item>
  97. </el-form>
  98. </el-dialog>
  99. <div slot="footer" class="dialog-footer" style="text-align: center;">
  100. <el-button type="primary" @click="confirmPlanForm" :disabled="disabled">提 交</el-button>
  101. <!-- <el-button @click="cancel" :disabled="disabled">取 消</el-button> -->
  102. </div>
  103. </div>
  104. </template>
  105. <script>
  106. import { listDept } from '@/api/system/dept'
  107. import { listUser } from '@/api/system/user'
  108. import { getUsersDeptLeaderByDept } from '@/api/system/post'
  109. import { complete, rejectTask, returnList, returnTask, getNextFlowNode, delegate, flowTaskForm, } from "@/api/flowable/todo";
  110. import { listProject, getProject, addProject, updateProject, delProject, submitProject, modifyProject } from "@/api/oa/project/project";
  111. export default {
  112. props: {
  113. disabled: {
  114. type: Boolean,
  115. require: true,
  116. },
  117. taskForm: {
  118. type: Object,
  119. required: true
  120. }
  121. },
  122. data() {
  123. return {
  124. baseUrl: process.env.VUE_APP_BASE_API,
  125. form: {},
  126. rules: {},
  127. deptList: [],
  128. deptLeaderList: [],
  129. file: {
  130. fileList: []
  131. },
  132. peopleVisible: false,
  133. peopleForm: {
  134. deptId: '',
  135. deptList: [],
  136. userId: '',
  137. userList: []
  138. },
  139. }
  140. },
  141. created() {
  142. if (this.$route.query.taskName != '项目登记') {
  143. this.initForm();
  144. // this.form.projectId = this.taskForm.formId;
  145. this.getDeptList();
  146. }
  147. },
  148. methods: {
  149. initForm() {
  150. getProject(this.taskForm.formId).then(res => {
  151. this.form = res.data;
  152. if (this.form.undertakingDept != null && this.form.undertakingDept != "" && this.form.undertakingDept != undefined) {
  153. this.form.deptId = this.form.undertakingDeptName.split(',')
  154. }
  155. if (this.form.projectLeaderUser) {
  156. this.form.projectLeaderName = this.form.projectLeaderUser.nickName
  157. }
  158. this.$set(this.form, 'deptLeader', [])
  159. if (this.form.undertakingDept) {
  160. let arr = this.form.undertakingDept.split(',')
  161. this.getDeptLeader(arr);
  162. } else {
  163. this.$set(this.form, 'deptId', [])
  164. }
  165. this.$store.commit('SET_PROJECTNUMBER', this.form.projectNumber)
  166. this.$store.commit('SET_PROJECTNAME', this.form.projectName)
  167. this.$store.commit('SET_PROJECT', this.form)
  168. })
  169. },
  170. getDeptList() {
  171. listDept({
  172. deptName: undefined,
  173. status: undefined
  174. }).then(res => {
  175. this.deptList = res.data
  176. this.peopleForm.deptList = res.data
  177. })
  178. },
  179. getDeptLeader(val) {
  180. this.deptLeaderList = [];
  181. for (let v of val) {
  182. getUsersDeptLeaderByDept({ deptId: Number(v) }).then(res => {
  183. this.deptLeaderList.push(res.data.userId);
  184. this.form.deptLeader = this.deptLeaderList;
  185. })
  186. }
  187. },
  188. // 人员选择
  189. choosePeople() {
  190. this.peopleVisible = true;
  191. },
  192. // 改变部门选择
  193. handleChangeDept(deptId) {
  194. this.peopleForm.userId = '';
  195. listUser({ pageSize: 999999, deptId }).then(res => {
  196. this.peopleForm.userList = res.rows
  197. })
  198. },
  199. // 确定项目负责人
  200. confirmPeople() {
  201. this.form.projectLeader = this.peopleForm.userId;
  202. this.form.projectLeaderName = this.tagLeader()
  203. this.peopleVisible = false
  204. },
  205. tagLeader() {
  206. if (this.form.projectLeader == '' || this.form.projectLeader == undefined || this.form.projectLeader == null) {
  207. return undefined
  208. } else {
  209. for (let user of this.peopleForm.userList) {
  210. if (this.form.projectLeader == user.userId) {
  211. return user.nickName
  212. }
  213. }
  214. }
  215. },
  216. cancelChoosePeople() {
  217. this.peopleForm.deptId = '';
  218. this.peopleForm.userId = '';
  219. this.peopleVisible = false;
  220. },
  221. confirmPlanForm() {
  222. this.form.undertakingDept = this.form.deptId.join(',');
  223. updateProject(this.form)
  224. const params = { taskId: this.taskForm.taskId };
  225. // 获取下一个流程节点
  226. getNextFlowNode(params).then(res => {
  227. this.$set(this.taskForm.variables, "formId", this.taskForm.formId);
  228. this.$set(this.taskForm.variables, "budgetInitiator", this.peopleForm.userId);
  229. getUsersDeptLeaderByDept({ deptId: 105 }).then(res => {
  230. let userId = res.data.userId;
  231. this.$set(this.taskForm.variables, "approval", userId);
  232. complete(this.taskForm).then(response => {
  233. this.$modal.msgSuccess(response.msg);
  234. this.$emit('goBack');
  235. });
  236. })
  237. })
  238. },
  239. cancel() {
  240. this.form = {}
  241. },
  242. setOrganizeDocument(val) {
  243. let arr = val.split('/upload')
  244. this.form.organizeDocument = arr[1]
  245. if (val == "") {
  246. this.form.organizeDocument = ""
  247. }
  248. },
  249. getFileName(name) {
  250. if (name != null) {
  251. let arr = name.split('/')
  252. return arr[arr.length - 1];
  253. }
  254. },
  255. handleFileDelete() {
  256. // this.$refs.orz.handleDelete(0);
  257. },
  258. }
  259. }
  260. </script>
  261. <style lang="scss" scoped>
  262. .upload-list {}
  263. </style>