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

index.vue 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <!--
  2. * @Author: ysh
  3. * @Date: 2024-02-27 14:49:15
  4. * @LastEditors: Please set LastEditors
  5. * @LastEditTime: 2024-03-05 11:35:07
  6. -->
  7. <template>
  8. <div class="project-wrapper">
  9. <!-- 新建项目 -->
  10. <h2>经营管理部登记</h2>
  11. <el-form :model="addForm" :rules="rules" label-width="100px">
  12. <el-form-item label="项目编号:" prop="projectNumber">
  13. <el-input v-model="addForm.projectNumber"></el-input>
  14. </el-form-item>
  15. <el-form-item label="项目名称:" prop="projectName">
  16. <el-input v-model="addForm.projectName"></el-input>
  17. </el-form-item>
  18. <el-form-item label="项目负责人:" prop="projectLeader">
  19. <el-tag effect="plain" type="warning" style="margin-right: 10px;"
  20. v-if="addForm.projectLeaderName != undefined">{{ addForm.projectLeaderName }}</el-tag>
  21. <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="choosePeople">选择</el-button>
  22. </el-form-item>
  23. <el-form-item label="项目类型:" prop="projectType">
  24. <el-input v-model="addForm.projectType"></el-input>
  25. </el-form-item>
  26. <el-form-item label="项目级别:" prop="projectLevel">
  27. <el-radio v-model="addForm.projectLevel" label="0">一般项目</el-radio>
  28. <el-radio v-model="addForm.projectLevel" label="1">重大项目</el-radio>
  29. </el-form-item>
  30. <el-form-item label="项目来源:" prop="projectSource">
  31. <el-radio v-model="addForm.projectSource" label="0">院内</el-radio>
  32. <el-radio v-model="addForm.projectSource" label="1">院外</el-radio>
  33. </el-form-item>
  34. <el-form-item label="甲方单位:" prop="partyA">
  35. <el-input v-model="addForm.partyA"></el-input>
  36. </el-form-item>
  37. <el-form-item label="联系人:" prop="contactPerson">
  38. <el-input v-model="addForm.contactPerson"></el-input>
  39. </el-form-item>
  40. <el-form-item label="联系电话:" prop="telephone">
  41. <el-input v-model="addForm.telephone"></el-input>
  42. </el-form-item>
  43. <el-form-item label="项目概况:" prop="projectRegistrant">
  44. <table border="1">
  45. <tr>
  46. <td style="width:250px;">工作内容</td>
  47. <td>等级或比例尺</td>
  48. <td>单位</td>
  49. <td>工作量</td>
  50. <td style="width:100px;">要求完成时间</td>
  51. <td>备注</td>
  52. </tr>
  53. <tr v-for="(work, index) in workList" :key="index">
  54. <td>
  55. <el-input v-model="work.content" type="textarea" autosize clearable></el-input>
  56. </td>
  57. <td>
  58. <el-input v-model="work.scale" clearable></el-input>
  59. </td>
  60. <td>
  61. <el-input v-model="work.unit" clearable></el-input>
  62. </td>
  63. <td>
  64. <el-input v-model="work.workload" clearable></el-input>
  65. </td>
  66. <td>
  67. <el-date-picker style="width:140px;" v-model="work.deadline" value-format="yyyy-MM-dd" type="date"
  68. placeholder="选择日期">
  69. </el-date-picker>
  70. </td>
  71. <td>
  72. <el-input v-model="work.remark" type="textarea" autosize clearable></el-input>
  73. </td>
  74. <td>
  75. <el-button type="danger" icon="el-icon-minus" size="mini" circle
  76. @click="deletWorkItem(index)"></el-button>
  77. </td>
  78. </tr>
  79. </table>
  80. <el-button icon="el-icon-plus" size="mini" @click="addWorkList"></el-button>
  81. </el-form-item>
  82. <el-form-item label="项目登记人:" prop="projectRegistrant">
  83. <el-input v-model="addForm.projectRegistrant"></el-input>
  84. </el-form-item>
  85. <el-form-item label="备注:" prop="projectRegistrant">
  86. <el-input v-model="addForm.remark" type="textarea" rows="3"></el-input>
  87. </el-form-item>
  88. </el-form>
  89. <div slot="footer" class="dialog-footer" style="text-align: center;">
  90. <el-button type="primary" @click="confirmAddForm">确 定</el-button>
  91. <el-button @click="cancel">取 消</el-button>
  92. </div>
  93. <!-- 人员选择对话框 -->
  94. <el-dialog width="30%" title="选择项目负责人" :visible.sync="peopleVisible" append-to-body>
  95. <el-form>
  96. <el-form-item label="部门:">
  97. <el-select v-model="peopleForm.deptId" @change="handleChangeDept">
  98. <el-option v-for="item in peopleForm.deptList" :key="item.deptId" :label="item.deptName"
  99. :value="item.deptId" v-if="item.deptName != '四川中水成勘院测绘工程有限责任公司'">
  100. </el-option>
  101. </el-select>
  102. </el-form-item>
  103. <el-form-item label="人员:">
  104. <el-select v-model="peopleForm.userId">
  105. <el-option v-for="item in peopleForm.userList" :key="item.userId" :label="item.nickName"
  106. :value="item.userId">
  107. </el-option>
  108. </el-select>
  109. </el-form-item>
  110. <el-form-item>
  111. <el-button @click="confirmPeople" type="primary">确定</el-button>
  112. <el-button @click="cancelChoosePeople">取消</el-button>
  113. </el-form-item>
  114. </el-form>
  115. </el-dialog>
  116. </div>
  117. </template>
  118. <script>
  119. import { listProject, submitProject, modifyProject, delProject } from "@/api/oa/project/project";
  120. import { listDept } from '@/api/system/dept'
  121. import { listUser, getUser } from '@/api/system/user'
  122. export default {
  123. data() {
  124. return {
  125. // 查询参数
  126. queryParams: {
  127. pageNum: 1,
  128. pageSize: 10,
  129. projectNumber: '',
  130. projectLeader: '',
  131. projectLeaderName: undefined,
  132. projectName: '',
  133. },
  134. projectList: [],
  135. total: 0,
  136. loading: true,
  137. addOpen: false,
  138. modifyOpen: false,
  139. title: '',
  140. addForm: {},
  141. rules: {
  142. projectNumber: [{ required: true, message: '请输入项目编号', trigger: 'blur' }],
  143. projectName: [{ required: true, message: '请输入项目名称', trigger: 'blur' }]
  144. },
  145. peopleVisible: false,
  146. peopleForm: {
  147. deptId: '',
  148. deptList: [],
  149. userId: '',
  150. userList: []
  151. },
  152. workList: [{
  153. content: '',
  154. scale: '',
  155. unit: '',
  156. workload: '',
  157. deadline: '',
  158. remark: ''
  159. }],
  160. }
  161. },
  162. created() {
  163. this.getList();
  164. this.getDeptList();
  165. },
  166. methods: {
  167. // 查询项目列表
  168. getList() {
  169. this.loading = true
  170. listProject(this.queryParams).then(response => {
  171. this.projectList = [];
  172. for (let p of response.rows) {
  173. if (p.projectLeader != null) {
  174. getUser(Number(p.projectLeader)).then(res => {
  175. p.projectLeaderName = res.data.nickName;
  176. })
  177. }
  178. this.projectList.push(p);
  179. }
  180. this.total = response.total;
  181. this.loading = false;
  182. })
  183. },
  184. getDeptList() {
  185. listDept({
  186. deptName: undefined,
  187. status: undefined
  188. }).then(res => {
  189. this.peopleForm.deptList = res.data
  190. })
  191. },
  192. handleQuery() {
  193. this.queryParams.pageNum = 1;
  194. this.getList();
  195. },
  196. handleAdd() {
  197. this.title = '新增项目'
  198. this.addOpen = true
  199. },
  200. handleUpdate(row) {
  201. debugger
  202. this.addForm = row;
  203. this.title = '修改项目信息';
  204. this.addOpen = true;
  205. },
  206. handleDelete(row) {
  207. const projectIds = row.projectId || this.ids;
  208. const projectNumbers = row.projectNumber || this.ids;
  209. this.$modal.confirm('是否确认删除项目编号为"' + projectNumbers + '"的数据项?').then(function () {
  210. return delProject(projectIds);
  211. }).then(() => {
  212. this.getList();
  213. this.$modal.msgSuccess("删除成功");
  214. }).catch(() => { });
  215. },
  216. confirmAddForm() {
  217. this.addForm.workList = this.workList;
  218. let formData = new FormData();
  219. let form = JSON.stringify(this.addForm);
  220. formData.append("form", form);
  221. console.log(this.title);
  222. if (this.title == '新增项目')
  223. submitProject(formData).then(response => {
  224. this.$modal.msgSuccess("新增成功");
  225. this.addOpen = false;
  226. this.getList();
  227. });
  228. else
  229. modifyProject(formData).then(response => {
  230. this.$modal.msgSuccess("修改成功");
  231. this.addOpen = false;
  232. this.getList();
  233. });
  234. },
  235. // 人员选择
  236. choosePeople() {
  237. this.peopleVisible = true;
  238. },
  239. // 改变部门选择
  240. handleChangeDept(deptId) {
  241. this.peopleForm.userId = '';
  242. listUser({ pageSize: 999999, deptId }).then(res => {
  243. console.log(res);
  244. this.peopleForm.userList = res.rows
  245. })
  246. },
  247. // 确定项目负责人
  248. confirmPeople() {
  249. this.addForm.projectLeader = this.peopleForm.userId;
  250. this.addForm.projectLeaderName = this.tagLeader()
  251. this.peopleVisible = false
  252. },
  253. tagLeader() {
  254. if (this.addForm.projectLeader == '' || this.addForm.projectLeader == undefined || this.addForm.projectLeader == null) {
  255. return undefined
  256. } else {
  257. for (let user of this.peopleForm.userList) {
  258. if (this.addForm.projectLeader == user.userId) {
  259. return user.nickName
  260. }
  261. }
  262. }
  263. },
  264. cancel() {
  265. this.peopleForm.deptId = '';
  266. this.peopleForm.userId = '';
  267. this.addOpen = false;
  268. this.addForm = {}
  269. },
  270. addWorkList() {
  271. this.workList.push({
  272. content: '',
  273. scale: '',
  274. unit: '',
  275. workload: '',
  276. deadline: '',
  277. remark: ''
  278. });
  279. },
  280. deletWorkItem(index) {
  281. let arr = this.workList
  282. if (arr.length == 1) {
  283. return
  284. }
  285. if (index >= 0 && index < arr.length) {
  286. arr.splice(index, 1);
  287. }
  288. },
  289. cancelChoosePeople() {
  290. this.peopleForm.deptId = '';
  291. this.peopleForm.userId = '';
  292. this.peopleVisible = false;
  293. }
  294. },
  295. }
  296. </script>
  297. <style lang="scss" scoped>
  298. .project-wrapper {
  299. padding: 25px;
  300. }
  301. .table-header {
  302. background-color: #f5f5f5;
  303. }
  304. .card-header {
  305. display: flex;
  306. justify-content: space-between;
  307. padding: 0 10px;
  308. }
  309. table {
  310. /*居中*/
  311. margin: 0 auto;
  312. /*边框*/
  313. /* border: 1px solid black; */
  314. text-align: center;
  315. border-collapse: collapse;
  316. /*设置背景颜色*/
  317. /* background-color: #bfa; */
  318. }
  319. </style>