ProjectManagement3_1.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578
  1. <template>
  2. <!-- 项目管理 活动开展 查看详细-->
  3. <div class="ProjectManagement3_1" v-loading="loading">
  4. <div class="vfpHeader">
  5. <!-- 详情页 -->
  6. <div class="titleOne">项目管理</div>
  7. <span class="smallTitle" style="left: 100px;">项目进展详情</span>
  8. </div>
  9. <hr>
  10. <!-- 跳转导航开始 -->
  11. <div class="AppBar" style="position: relative;">
  12. <div @click="content">项目基本内容</div>
  13. <div @click="remark">项目详情</div>
  14. <div @click="remark2" class="AppBarActive">活动开展</div>
  15. <div @click="remark4">项目附件</div>
  16. <div @click="remark5">项目结题附件</div>
  17. <el-button type="primary" style="position: absolute;right: 0;top: -5px; width: 100px;font-size: 16px;"
  18. @click="$router.back()"
  19. size="mini">返回</el-button>
  20. </div>
  21. <!-- 跳转导航结束 -->
  22. <!-- 活动申请填写信息区域开始 -->
  23. <div class="select">
  24. <div class="selectTop">
  25. <div class="label">项目名称</div>
  26. <el-input v-model="selects.projectName" placeholder="请输入内容"></el-input>
  27. </div>
  28. <div class="selectMid">
  29. <div class="selectLeft">
  30. <div class="inpBlock" style="position: relative;">
  31. <div class="label">预算经费</div>
  32. <el-input v-model="selects.fund" placeholder="请输入内容"></el-input>
  33. <div style="position: absolute;top: 8px;right: -30px;">(万)</div>
  34. </div>
  35. <div class="inpBlock">
  36. <div class="label">负责人</div>
  37. <el-input v-model="selects.leader" placeholder="请输入内容"></el-input>
  38. </div>
  39. <div class="inpBlock">
  40. <div class="label">所在部门</div>
  41. <el-select v-model="selects.department" style="width: 100%;" placeholder="请选择">
  42. <el-option
  43. v-for="item in selectInput"
  44. :key="item.id"
  45. :label="item.name"
  46. :value="item.id">
  47. </el-option>
  48. </el-select>
  49. </div>
  50. <div class="inpBlock">
  51. <div class="label">联系电话</div>
  52. <el-input v-model="selects.tel" placeholder="请输入内容"></el-input>
  53. </div>
  54. </div>
  55. <div class="selectRight">
  56. <div class="inpBlock">
  57. <div class="label">项目开始时间</div>
  58. <el-date-picker
  59. v-model="selects.beginDate"
  60. type="datetime"
  61. style="width: 100%;"
  62. placeholder="选择日期">
  63. </el-date-picker>
  64. </div>
  65. <div class="inpBlock">
  66. <div class="label">参与学生人数</div>
  67. <el-input v-model="selects.studentNum" placeholder="请输入内容"></el-input>
  68. </div>
  69. </div>
  70. </div>
  71. </div>
  72. <!-- 活动申请填写信息区域结束 -->
  73. <!-- 活动指导老师开始 -->
  74. <div class="tabTit">
  75. <div>
  76. <p>活动指导老师</p>
  77. </div>
  78. <el-button type="primary" @click="addTeacher" size="mini">添加教师</el-button>
  79. </div>
  80. <hr>
  81. <el-table
  82. :data="tableData"
  83. tooltip-effect="dark"
  84. stripe
  85. class="fontSize"
  86. :header-cell-style="{ background: '#f2f2f2',color:'#000' }"
  87. >
  88. <!-- 数据根据prop进行遍历填充 -->
  89. <el-table-column
  90. prop="Name"
  91. label="姓名"
  92. align="center"
  93. >
  94. </el-table-column>
  95. <el-table-column
  96. prop="work"
  97. label="工作单位"
  98. align="center"
  99. >
  100. </el-table-column>
  101. <el-table-column
  102. prop="takeCharge"
  103. label="活动分工"
  104. align="center"
  105. >
  106. </el-table-column>
  107. <el-table-column
  108. prop="operation"
  109. align="center"
  110. label="操作"
  111. >
  112. <template #default="scope">
  113. <div class="operations">
  114. <el-button type="primary" size="mini" @click="updateTeacher(scope.$index)" style="font-size: 14px;">修改</el-button>
  115. <el-button type="primary" size="mini" style="font-size: 14px;" @click="deleteRow(scope.$index)">删除</el-button>
  116. </div>
  117. </template>
  118. </el-table-column>
  119. </el-table>
  120. <!-- 活动指导老师结束 -->
  121. <!-- 多行文本框区域开始 -->
  122. <div class="tabTit">
  123. <div><p>活动介绍</p></div>
  124. </div>
  125. <el-input
  126. type="textarea"
  127. :rows="6"
  128. resize="none"
  129. style="color: black;font-size: 16px;font-weight: 600;"
  130. placeholder="请输入内容"
  131. v-model="selects.brief">
  132. </el-input>
  133. <div class="tabTit">
  134. <div><p>活动计划</p></div>
  135. </div>
  136. <div class="textArea">
  137. <vue-editor :editorToolbar="customToolbar" v-model="textareaS[0]"></vue-editor>
  138. </div>
  139. <div class="tabTit">
  140. <div><p>预期目标</p></div>
  141. </div>
  142. <div class="textArea">
  143. <vue-editor :editorToolbar="customToolbar" v-model="textareaS[1]"></vue-editor>
  144. </div>
  145. <div class="tabTit">
  146. <div><p>活动受面</p></div>
  147. </div>
  148. <div class="textArea">
  149. <vue-editor :editorToolbar="customToolbar" v-model="textareaS[2]"></vue-editor>
  150. </div>
  151. <div class="tabTit">
  152. <div><p>经费支出计划</p></div>
  153. </div>
  154. <div class="textArea">
  155. <vue-editor :editorToolbar="customToolbar" v-model="textareaS[3]"></vue-editor>
  156. </div>
  157. <!-- 多行文本框区域结束 -->
  158. <div class="baseBtn">
  159. <div class="blockWidth">
  160. <el-button v-show="state==0" type="primary" class="backBtn" @click="updateActivityDialog" >上传修改</el-button>
  161. <el-button v-show="state==1" type="primary" class="backBtn" @click="updateActivityDialog" >上传修改</el-button>
  162. <el-button v-show="state==2" disabled style="background: #ccc !important;border: 0;" type="primary" class="backBtn" @click="updateActivityDialog" >上传修改</el-button>
  163. </div>
  164. </div>
  165. <!--添加成员dialog对话框开始 -->
  166. <el-dialog
  167. :title="isAddMember?'添加指导老师':'修改指导老师'"
  168. :visible.sync="addMemberDialog"
  169. class="AddMember"
  170. :before-close="handleClose">
  171. <div class="littleBlock">
  172. <div class="dialogLabel">姓名</div>
  173. <div>
  174. <el-input v-model="Member.Name"></el-input>
  175. </div>
  176. </div>
  177. <div class="littleBlock">
  178. <div class="dialogLabel">工作单位</div>
  179. <div>
  180. <el-input v-model="Member.work"></el-input>
  181. </div>
  182. </div>
  183. <div class="littleBlock">
  184. <div class="dialogLabel">活动分工</div>
  185. <div>
  186. <el-input v-model="Member.takeCharge"></el-input>
  187. </div>
  188. </div>
  189. <div slot="footer" class="footer">
  190. <el-button v-show="isAddMember" type="primary" @click="commit" class="AllDialogBtn" >确认提交</el-button>
  191. <el-button v-show="!isAddMember" type="primary" @click="change" class="AllDialogBtn" >确认修改</el-button>
  192. <el-button @click="handleClose" class="AllDialogBtn">取消</el-button>
  193. </div>
  194. </el-dialog>
  195. <!--添加成员dialog对话框结束 -->
  196. <!-- 修改对话框框开始 -->
  197. <el-dialog
  198. title="提示"
  199. :visible.sync="updateActivity"
  200. width="600px"
  201. class="projectApplicationfundAddDialog"
  202. :before-close="handleClose">
  203. <div class="addDialogLogo">LOGO</div>
  204. <div class="deleteContent">确定修改?</div>
  205. <span slot="footer" class="dialog-footer">
  206. <el-button type="primary" @click="submitAll" class="AllDialogBtn">确认提交</el-button>
  207. <el-button @click="handleClose" class="AllDialogBtn">取消</el-button>
  208. </span>
  209. </el-dialog>
  210. <!-- 提交对话框结束 -->
  211. <!-- 删除成员对话框开始 -->
  212. <el-dialog
  213. title="删除指导老师"
  214. :visible.sync="delMember"
  215. width="600px"
  216. class="delMemberDialog">
  217. <span class="deleteContent">确定删除指导老师?</span>
  218. <span slot="footer" class="dialog-footer">
  219. <el-button type="primary" @click="commitDelMember" class="AllDialogBtn">确认删除</el-button>
  220. <el-button @click="handleClose" class="AllDialogBtn" >取消</el-button>
  221. </span>
  222. </el-dialog>
  223. <!-- 删除成员对话框结束 -->
  224. </div>
  225. </template>
  226. <script>
  227. import { VueEditor } from "vue2-editor";
  228. // import { uuid } from 'vue-uuid';
  229. export default {
  230. components:{
  231. VueEditor,
  232. },
  233. data() {
  234. return {
  235. updateActivity:false,
  236. loading:false,
  237. isAddMember:1,
  238. state:0,
  239. customToolbar: [
  240. ["bold", "italic", "underline"], [{ list: "ordered" }, { list: "bullet" }],
  241. [{ align: "" }, { align: "center" }, { align: "right"}, { align: "justify"}],
  242. [{header:[false,1,2,3,4]}]
  243. ],
  244. iid:'', //为删除框储存id
  245. delMember:false, //删除对话框
  246. addMemberDialog:false,
  247. tableData:[], //活动指导老师列表
  248. selects:{ //基础信息
  249. projectName:'',
  250. fund:'',
  251. leader:'',
  252. department:'',
  253. tel:'',
  254. beginDate:'',
  255. studentNum:'',
  256. brief:'',
  257. classid:"",
  258. },
  259. textareaS:[],
  260. selectInput: [], //部门下拉框
  261. Member:{
  262. // Id:"",
  263. Name:'',
  264. work:'',
  265. takeCharge:''
  266. },
  267. }
  268. },
  269. methods:{
  270. getData(){ //获取基础信息
  271. this.loading = true;
  272. this.ajax.get(this.$store.state.api+"/GetActivityDetail",{
  273. uid:this.$store.state.userInfo.userid,
  274. // aId:this.$route.query["Id"]
  275. aId:this.$route.query["Id"]
  276. }).then(res=>{
  277. if(!res.data[0][0])return this.$message.error("错误")
  278. let data = res.data[0][0];
  279. // console.log(data);
  280. this.selects.projectName=data.title;
  281. this.selects.fund=data.money;
  282. this.selects.leader=data.pro_leader;
  283. this.selects.tel=data.phone;
  284. this.selects.brief=data.brief
  285. this.selects.classid=data.classid
  286. this.selects.beginDate=data.create_at;
  287. this.selects.studentNum=data.students;
  288. this.selects.department=data.classid;
  289. this.tableData=JSON.parse(data.course_teacher)
  290. this.textareaS=JSON.parse(data.chapters)
  291. this.state=data.state
  292. this.loading = false;
  293. }).catch(err=>{
  294. this.$message.error(err.message)
  295. })
  296. },
  297. getAllClass(){
  298. this.ajax.get(this.$store.state.api+"/SelectAllDepartment",{
  299. uid:this.$store.state.userInfo.userid,
  300. }).then(res=>{
  301. this.selectInput = res.data[0];
  302. }).catch(err=>{
  303. this.$message.error(err.message)
  304. })
  305. },
  306. handleClose(){
  307. this.addMemberDialog=false
  308. this.updateActivity=false
  309. this.delMember=false
  310. for(let i in this.Member)this.Member[i]='';
  311. },
  312. addTeacher(){ //添加老师对话框
  313. this.isAddMember=1;
  314. this.addMemberDialog=true;
  315. },
  316. commit(){ //确定添加老师
  317. if(this.Member.Name=='')return this.$message.error('请输入姓名')
  318. if(this.Member.work=='')return this.$message.error('请输入工作单位')
  319. if(this.Member.takeCharge=='')return this.$message.error('请输入活动分工')
  320. let k={}
  321. this.addMemberDialog=false;
  322. Object.assign(k,this.Member)
  323. this.tableData.push(k);
  324. this.$message.success('添加成功')
  325. for(let i in this.Member)this.Member[i]='';
  326. },
  327. updateTeacher(index){ //修改对话框出现
  328. Object.assign(this.Member,this.tableData[index])
  329. this.Member['index']=index //在data中赋值这样谁都可以取到了
  330. this.isAddMember=0;
  331. this.addMemberDialog = true;
  332. },
  333. change(){ //确定修改老师
  334. if(this.Member.Name=='')return this.$message.error('请输入姓名')
  335. if(this.Member.work=='')return this.$message.error('请输入工作单位')
  336. if(this.Member.takeCharge=='')return this.$message.error('请输入活动分工')
  337. Object.assign(this.tableData[this.Member['index']],this.Member) //this.Member['index']在显示框出现的时候赋值了
  338. for(let i in this.Member)this.Member[i]='';
  339. this.addMemberDialog = true;
  340. this.$message({message:"修改成功",type:"success"})
  341. this.addMemberDialog = false;
  342. },
  343. deleteRow(index){ //删除对话框出现
  344. this.delMember=true
  345. this.iid=index
  346. },
  347. commitDelMember(){ //确定删除老师
  348. this.tableData.splice(this.iid,1)
  349. // this.tableData = this.tableData.filter(item=>item.Id!=this.iid);
  350. this.$message({message:"删除成功",type:"success"})
  351. this.delMember=false
  352. },
  353. updateActivityDialog(){ //显示修改提交对话框
  354. this.updateActivity=true
  355. },
  356. submitAll(){ //确定提交修改
  357. //保存修改
  358. const param = {
  359. uid:this.$store.state.userInfo.userid,
  360. aid:this.$route.query["Id"],
  361. tit:this.selects.projectName,
  362. con:this.selects.brief,
  363. leader:this.selects.leader,
  364. mon:this.selects.fund,
  365. stu:this.selects.studentNum,
  366. teacher:JSON.stringify(this.tableData),
  367. chap:JSON.stringify(this.textareaS),
  368. pid:this.$route.query['pid'],
  369. cid:this.selects.classid,
  370. ph:this.selects.tel,
  371. beginTime:JSON.stringify(this.selects.beginDate)
  372. }
  373. this.ajax.post(this.$store.state.api+"/UpdateActivity",param).then(res=>{
  374. if(res.data==1){
  375. this.$message.success("修改成功");
  376. this.updateActivity=false
  377. this.getData();
  378. }else{
  379. this.$message.error("修改失败"+res.data);
  380. }
  381. }).catch(err=>{
  382. this.$message.error(err.message)
  383. })
  384. console.log(this.tableData)
  385. },
  386. content(){
  387. this.$router.push('/ProjectManagement1')
  388. },
  389. remark(){
  390. this.$router.push('/ProjectManagement2')
  391. },
  392. remark2(){
  393. this.$router.push('/ProjectManagement3')
  394. },
  395. remark4(){
  396. this.$router.push('/ProjectManagement4')
  397. },
  398. remark5(){
  399. this.$router.push('/ProjectManagement5')
  400. },
  401. edit(){
  402. },
  403. backBtn2(){
  404. this.$router.push('/ProjectManagement1')
  405. },
  406. // handleSelectionChange(val) {
  407. // this.multipleSelection = val;
  408. // },
  409. },
  410. mounted(){
  411. this.getData();
  412. this. getAllClass();
  413. // console.log(this.$route.query["Id"]);
  414. }
  415. }
  416. </script>
  417. <style lang="less">
  418. .projectApplicationfundAddDialog{ //提交对话框开始
  419. .el-dialog{
  420. border-radius:5px ;
  421. overflow: hidden;
  422. }
  423. .deleteContent{
  424. width: 100%;
  425. text-align: center;
  426. font-size: 22px;
  427. color: #000;
  428. }
  429. .addDialogLogo{
  430. width: 60px;
  431. height: 30px;
  432. border-radius: 5px;
  433. display: flex;
  434. justify-content: center;
  435. line-height: 30px;
  436. background: #f2f2f2;
  437. position: absolute;
  438. left: 20px; top: 15px;
  439. }
  440. .el-dialog__header{
  441. background: #32455b;
  442. }
  443. .el-dialog__title{
  444. color:#fff;
  445. display: flex;
  446. justify-content: center;
  447. font-size: 18px;
  448. position: relative;
  449. top: -2px;
  450. }
  451. .addDialogMid{
  452. box-sizing: border-box;
  453. padding:0 60px 0 10px;
  454. .addDialogTit{
  455. display: flex;
  456. span{
  457. width: 80px;
  458. line-height: 40px;
  459. text-align: left;
  460. }
  461. }
  462. .addDialogTit1{
  463. display: flex;
  464. justify-content: space-between;
  465. margin-bottom: 15px;
  466. }
  467. .addDialogTit2{
  468. margin-top: 10px;
  469. font-size: 18px;
  470. color: #000;
  471. text-indent: 2em;
  472. }
  473. .addDialogCon{
  474. margin-top: 20px;
  475. }
  476. }
  477. .dialog-footer{
  478. display: flex;
  479. justify-content: center;
  480. // .btn5{
  481. // height: 40px;
  482. // font-size: 16px;
  483. // background: #0e72e6;
  484. // width: 200px;
  485. // }
  486. }
  487. }
  488. .delMemberDialog{ //删除对话框
  489. font-size: 18px;
  490. .el-dialog{
  491. border-radius: 5px;
  492. overflow: hidden;
  493. }
  494. .deleteContent{
  495. font-size: 22px;
  496. color: #000;
  497. }
  498. .el-dialog__header{
  499. background: #32455b;
  500. display: flex;
  501. justify-content: center;
  502. }
  503. .el-dialog__title{
  504. color:#fff;
  505. display: flex;
  506. justify-content: center;
  507. font-size: 18px;
  508. position: relative;
  509. top: -2px;
  510. }
  511. .el-dialog__body{
  512. display: flex;
  513. justify-content: center;
  514. }
  515. // .addDialogMid{
  516. // box-sizing: border-box;
  517. // padding:0 60px 0 10px;
  518. // .addDialogTit{
  519. // display: flex;
  520. // span{
  521. // width: 80px;
  522. // font-size: 16px;
  523. // line-height: 40px;
  524. // text-align: left;
  525. // }
  526. // }
  527. // }
  528. .dialog-footer{
  529. display: flex;
  530. justify-content: center;
  531. box-sizing: border-box;
  532. // .btn5{
  533. // font-size: 16px;
  534. // }
  535. }
  536. }
  537. </style>