projectApplicationDetails.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656
  1. <template>
  2. <!-- 项目立项申请查看详细项目基本内容 -->
  3. <div class="projectApplication1">
  4. <div class="vfpHeader">
  5. <!-- 详情页 -->
  6. <div class="titleOne">项目立项申请</div>
  7. <span class="smallTitle">项目进展详情</span>
  8. <el-button @click="back()" type="primary" size="mini">返回</el-button>
  9. </div>
  10. <hr>
  11. <!-- 跳转导航开始 -->
  12. <div class="AppBar">
  13. <div class="AppBarActive">项目基本内容</div>
  14. <div @click="remark">项目详情</div>
  15. </div>
  16. <!-- 跳转导航结束 -->
  17. <!-- 活动申请填写信息区域开始 -->
  18. <div class="select">
  19. <div class="selectTop">
  20. <div class="label">项目名称</div>
  21. <el-input v-model="select.project" placeholder="请输入内容"></el-input>
  22. </div>
  23. <div class="selectMid">
  24. <div class="selectLeft">
  25. <div class="inpBlock">
  26. <div class="label">负责人</div>
  27. <el-input v-model="select.person" placeholder="请输入内容"></el-input>
  28. </div>
  29. <div class="inpBlock">
  30. <div class="label">所在部门</div>
  31. <el-select v-model="select.departmentData" style="width: 100%;" placeholder="请选择">
  32. <el-option
  33. v-for="item in select.department"
  34. :key="item.id"
  35. :label="item.name"
  36. :value="item.id">
  37. </el-option>
  38. </el-select>
  39. </div>
  40. <div class="inpBlock">
  41. <div class="label">联系电话</div>
  42. <el-input v-model="select.tel" placeholder="请输入内容"></el-input>
  43. </div>
  44. </div>
  45. <div class="selectRight">
  46. <div class="inpBlock">
  47. <div class="label">项目开始时间</div>
  48. <el-date-picker
  49. v-model="select.Date"
  50. type="datetime"
  51. style="width: 100%;"
  52. value-format="yyyy-MM-dd HH:mm:ss"
  53. placeholder="选择日期">
  54. </el-date-picker>
  55. </div>
  56. <div class="inpBlock">
  57. <div class="label">预算总经费</div>
  58. <el-input v-model="select.Fund" placeholder="请输入内容"></el-input>
  59. </div>
  60. <div class="inpBlock">
  61. <div class="label">选择分类</div>
  62. <el-select v-model="select.sort" style="width: 100%;" placeholder="请选择">
  63. <el-option
  64. v-for="item in select.sortOptions"
  65. :key="item.id"
  66. :label="item.name"
  67. :value="item.id">
  68. </el-option>
  69. </el-select>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. <!-- 活动申请填写信息区域结束 -->
  75. <!-- 项目封面修改上传开始 -->
  76. <div style="height: 260px;">
  77. <div class="tabTit">
  78. <div><p>封面上传</p></div>
  79. </div>
  80. <hr>
  81. <div style="margin-bottom: 10px;">修改项目封面</div>
  82. <el-upload
  83. class="avatar-uploader"
  84. action="#"
  85. disabled
  86. style="position: relative;"
  87. :show-file-list="false"
  88. >
  89. <img v-if="dialogImageUrl" :src="dialogImageUrl" class="avatar">
  90. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  91. <BeUpload style="position:absolute; width: 301px;height: 180px; opacity: 0;z-index:333;left: 0px;top: 0;" @getFile="getFile" class="uploadPic" :navName="'上传封面'" :accept="accept"></BeUpload>
  92. </el-upload>
  93. </div>
  94. <!-- 项目封面修改上传开始结束 -->
  95. <!-- 项目成员开始 -->
  96. <div class="tabTit">
  97. <div><p>项目成员</p></div>
  98. <el-button type="primary" @click="addMember" size="mini">添加成员</el-button>
  99. </div>
  100. <hr>
  101. <el-table
  102. :data="tableData"
  103. tooltip-effect="dark"
  104. stripe
  105. class="fontSize"
  106. :header-cell-style="{ background: '#f2f2f2',color:'#000' }"
  107. >
  108. <el-table-column
  109. prop="name"
  110. label="姓名"
  111. align="center"
  112. >
  113. </el-table-column>
  114. <el-table-column
  115. prop="class"
  116. label="班级"
  117. align="center"
  118. >
  119. </el-table-column>
  120. <el-table-column
  121. prop="phone"
  122. label="电话"
  123. align="center"
  124. >
  125. </el-table-column>
  126. <el-table-column
  127. prop="score"
  128. label="学分"
  129. align="center"
  130. >
  131. </el-table-column>
  132. <el-table-column
  133. prop="operation"
  134. align="center"
  135. label="操作"
  136. >
  137. <template #default="scope">
  138. <div class="operations">
  139. <!-- <el-button type="primary" @click="lookDetail(scope)" size="mini">查看详情</el-button> -->
  140. <el-button type="primary" @click="amendDialogData(scope.row)" size="mini">修改</el-button>
  141. <el-button type="primary" @click="Del(scope.row)" size="mini">删除</el-button>
  142. </div>
  143. </template>
  144. </el-table-column>
  145. </el-table>
  146. <!-- 项目成员结束 -->
  147. <!-- 项目简介开始 -->
  148. <div class="tabTit">
  149. <div><p>项目简介</p></div>
  150. </div>
  151. <hr>
  152. <el-input
  153. type="textarea"
  154. :rows="6"
  155. resize="none"
  156. class="textArea"
  157. placeholder="请输入内容"
  158. v-model="textarea">
  159. </el-input>
  160. <!-- 项目简介结束 -->
  161. <div class="baseBtn">
  162. <div class="blockWidth">
  163. <el-button type="primary" class="backBtn" @click="audit">立即修改</el-button>
  164. </div>
  165. </div>
  166. <!--添加成员dialog对话框开始 -->
  167. <el-dialog
  168. title="添加成员"
  169. :visible.sync="addMemberDialog"
  170. :modal="true"
  171. :close-on-click-modal="true"
  172. class="AddMember"
  173. :before-close="init">
  174. <div class="littleBlock">
  175. <div class="dialogLabel">姓名</div>
  176. <div>
  177. <el-input v-model="addTabMember.name"></el-input>
  178. </div>
  179. </div>
  180. <div class="littleBlock">
  181. <div class="dialogLabel">班级</div>
  182. <div>
  183. <el-input v-model="addTabMember.class"></el-input>
  184. </div>
  185. </div>
  186. <div class="littleBlock">
  187. <div class="dialogLabel">电话</div>
  188. <div>
  189. <el-input type="number" v-model="addTabMember.phone" onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))" ></el-input>
  190. </div>
  191. </div>
  192. <!-- <div class="littleBlock">
  193. <div class="dialogLabel">学分</div>
  194. <div>
  195. <el-input type="number" v-model="addTabMember.score" onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))" ></el-input>
  196. </div>
  197. </div> -->
  198. <div slot="footer" class="footer">
  199. <el-button type="primary" @click="commit" class="diaBtn" >确认提交</el-button>
  200. <el-button @click="init" class="diaBtn">取消</el-button>
  201. </div>
  202. </el-dialog>
  203. <!--添加成员dialog对话框结束 -->
  204. <!--修改成员dialog对话框开始 -->
  205. <el-dialog
  206. title="修改成员"
  207. :visible.sync="amendMemberDialog"
  208. :modal="true"
  209. :close-on-click-modal="true"
  210. class="AddMember"
  211. :before-close="init">
  212. <div class="littleBlock">
  213. <div class="dialogLabel">姓名</div>
  214. <div>
  215. <el-input v-model="amendTabMember.name"></el-input>
  216. </div>
  217. </div>
  218. <div class="littleBlock">
  219. <div class="dialogLabel">班级</div>
  220. <div>
  221. <el-input v-model="amendTabMember.class"></el-input>
  222. </div>
  223. </div>
  224. <div class="littleBlock">
  225. <div class="dialogLabel">电话</div>
  226. <div>
  227. <el-input type="number" v-model="amendTabMember.phone" onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))" ></el-input>
  228. </div>
  229. </div>
  230. <!-- <div class="littleBlock">
  231. <div class="dialogLabel">学分</div>
  232. <div>
  233. <el-input type="number" v-model="amendTabMember.score" onkeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))" ></el-input>
  234. </div>
  235. </div> -->
  236. <div slot="footer" class="footer">
  237. <el-button type="primary" @click="commit2" class="diaBtn" >确认提交</el-button>
  238. <el-button @click="init" class="diaBtn">取消</el-button>
  239. </div>
  240. </el-dialog>
  241. <!--修改成员dialog对话框结束 -->
  242. <!-- 删除成员对话框开始 -->
  243. <el-dialog
  244. title="删除成员"
  245. :visible.sync="delMember"
  246. width="600px"
  247. class="delMemberDialog">
  248. <span class="deleteContent">确定删除成员?</span>
  249. <span slot="footer" class="dialog-footer">
  250. <el-button type="primary" @click="commitDelMember" class="btn5">确认删除</el-button>
  251. <el-button @click="init" class="btn5" >取消</el-button>
  252. </span>
  253. </el-dialog>
  254. <!-- 删除成员对话框结束 -->
  255. <!-- 修改对话框开始 -->
  256. <el-dialog
  257. title="提示"
  258. :visible.sync="submitHint"
  259. width="600px"
  260. class="projectApplicationfundAddDialog"
  261. style="top: 120px;"
  262. :before-close="init">
  263. <div class="addDialogLogo">LOGO</div>
  264. <div class="deleteContent">确定修改项目基本信息?</div>
  265. <span slot="footer" class="dialog-footer">
  266. <el-button type="primary" @click="submitAll" class="btn5">确认提交</el-button>
  267. <el-button @click="init" class="btn5" style="background:#cccccc" size="small">取消</el-button>
  268. </span>
  269. </el-dialog>
  270. <!-- 修改对话框结束 -->
  271. </div>
  272. </template>
  273. <script>
  274. import { uuid } from 'vue-uuid';
  275. import BeUpload from "../../components/tool/beUpload.vue";
  276. export default {
  277. components: {
  278. BeUpload,
  279. },
  280. data() {
  281. return {
  282. iid:'',
  283. accept:'*',
  284. dialogImageUrl:'', //图片地址
  285. input:'',
  286. delMember:false,
  287. amendMemberDialog:false,
  288. addMemberDialog:false,
  289. submitHint:false,
  290. select:{ //数据详情框数据
  291. project:'',
  292. person:'',
  293. departmentData:"", //部门框值
  294. sort:'', //分类值
  295. tel:'',
  296. Date:'',
  297. Fund:'',
  298. sortOptions: [], //分类下拉框
  299. department:[],
  300. },
  301. textarea:'周四福利大放送', //项目简介
  302. tableData:[], //成员列表数据
  303. addTabMember:{ //添加项目成员
  304. id:'',
  305. name:'',
  306. class:'',
  307. phone:'',
  308. score:0
  309. },
  310. amendTabMember:{ //修改项目成员
  311. id:'',
  312. name:'',
  313. class:'',
  314. phone:'',
  315. score:0
  316. }
  317. }
  318. },
  319. methods:{
  320. getFile(val) { //上传封面
  321. console.log(val);
  322. // let data=[{
  323. // name:val.fileName,
  324. // url:val.url
  325. // }]
  326. this.dialogImageUrl=val.url
  327. // console.log(this.data.fileList);
  328. },
  329. addMember(){ //添加成员按钮,显示对话框
  330. this.addMemberDialog=true
  331. },
  332. commit(){ //对话框确认添加成员按钮
  333. // console.log(this.addTabMember.name);
  334. if (this.addTabMember.name == undefined || this.addTabMember.name=='') return this.$message.error('请输入姓名')
  335. if (this.addTabMember.class == undefined || this.addTabMember.name=='') return this.$message.error('请输入班级')
  336. if (this.addTabMember.phone == undefined || this.addTabMember.name=='') return this.$message.error('请输入电话')
  337. // if (this.addTabMember.score == undefined || this.addTabMember.name=='') return this.$message.error('请输入分数')
  338. this.addTabMember.id=uuid.v1();
  339. this.tableData.push(this.addTabMember)
  340. this.$message.success('添加人员成功')
  341. this.addTabMember={}
  342. this.addMemberDialog=false;
  343. },
  344. amendDialogData(val){ //人员信息列表修改按钮
  345. this.iid=val;
  346. console.log(val);
  347. // this.amendTabMember=val
  348. Object.assign(this.amendTabMember,val)
  349. this.amendMemberDialog=true;
  350. },
  351. commit2(){ //人员信息对话框确定修改按钮
  352. this.tableData.forEach((e,i)=>{
  353. if (e.id == this.iid.id) {
  354. Object.assign(e,this.amendTabMember)
  355. this.amendMemberDialog=false;
  356. this.$message.success('修改信息成功')
  357. }
  358. })
  359. },
  360. Del(val){
  361. this.iid=val; //列表删除按钮
  362. this.delMember=true;
  363. },
  364. commitDelMember(){ //对话框确定删除按钮
  365. this.tableData.forEach((e,i,arr)=>{
  366. if (e.id==this.iid.id) {
  367. arr.splice(i,1)
  368. this.$message.success('删除成功')
  369. this.delMember=false;
  370. }
  371. })
  372. },
  373. audit(){ //立即审核按钮
  374. // this.$message.success('审核成功')
  375. this.submitHint=true
  376. },
  377. submitAll(){
  378. let param={
  379. uid:this.$store.state.userInfo.userid,
  380. pid:JSON.parse(localStorage.getItem('pid')),
  381. tit:this.select.project,
  382. leader:this.select.person,
  383. beginTime:this.select.Date,
  384. cid:this.select.departmentData,
  385. mon:this.select.Fund,
  386. phone:this.select.tel,
  387. tid:this.select.sort,
  388. student:JSON.stringify(this.tableData),
  389. con:this.textarea,
  390. imgsrc:this.dialogImageUrl
  391. }
  392. this.ajax
  393. .post(this.$store.state.api+'/UpdateProjectBase',param)
  394. .then(res=>{
  395. // console.log(res);
  396. if (res.data==1) {
  397. this.$message.success('修改成功')
  398. this.submitHint=false
  399. this.getData()
  400. return
  401. }
  402. this.$message.error('修改失败')
  403. },err=>{
  404. console.log(err);
  405. })
  406. },
  407. init(){
  408. this.addMemberDialog=false;
  409. this.amendMemberDialog=false;
  410. this.delMember=false;
  411. this.submitHint=false;
  412. },
  413. remark(){ //导航栏项目详情按钮
  414. this.$router.push('/projectApplication2')
  415. },
  416. back(){ //返回按钮
  417. this.$router.push('/projectApplication')
  418. },
  419. getData(){ //初始化完成获取基本数据进行填充
  420. let param={
  421. uid:this.$store.state.userInfo.userid,
  422. pid:JSON.parse(localStorage.getItem('pid'))
  423. }
  424. this.ajax
  425. .get(this.$store.state.api+'/GetProjectBase',param)
  426. .then(res=>{
  427. // console.log(res);
  428. let data=res.data[0][0]
  429. this.select.project=data.title;
  430. this.select.Fund=data.money;
  431. this.select.person=data.pro_leader;
  432. this.select.Date=data.begintime;
  433. this.textarea=data.brief;
  434. this.tableData=JSON.parse(data.course_student)
  435. this.select.tel=data.phone;
  436. this.dialogImageUrl=data.image
  437. this.select.departmentData = data['classid']
  438. this.select.sort = data['typeid']
  439. },err=>{
  440. console.log(err);
  441. })
  442. },
  443. getProjectDepartmentData(){ //获取项目立项申请基础信息页面所在部门数据
  444. let param={
  445. uid:this.$store.state.userInfo.userid
  446. }
  447. this.ajax
  448. .get(this.$store.state.api+'/SelectAllDepartment',param)
  449. .then(res=>{
  450. // console.log(res.data);
  451. this.select.department=res.data[0]
  452. },err=>{
  453. console.log(err);
  454. })
  455. },
  456. getProjectTypeData(){ //获取项目立项申请基础信息页面分类数据
  457. let param={
  458. uid:this.$store.state.userInfo.userid
  459. }
  460. this.ajax
  461. .get(this.$store.state.api+'/SelectAllType',param)
  462. .then(res=>{
  463. this.select.sortOptions=res.data[0]
  464. },err=>{
  465. console.log(err);
  466. })
  467. },
  468. },
  469. created(){ //数据加载完成后触发
  470. this.getData();
  471. this.getProjectDepartmentData();
  472. this.getProjectTypeData();
  473. // this.value=(this.options[0].value)
  474. },
  475. }
  476. </script>
  477. <style lang="less">
  478. .projectApplication1{
  479. .avatar-uploader .el-upload {
  480. border: 1px dashed #d9d9d9;
  481. border-radius: 6px;
  482. cursor: pointer;
  483. // position: relative;
  484. overflow: hidden;
  485. }
  486. .avatar-uploader .el-upload:hover {
  487. border-color: #409EFF;
  488. }
  489. .avatar-uploader-icon {
  490. font-size: 28px;
  491. color: #8c939d;
  492. width: 300px;
  493. // height: 100%;
  494. line-height: 178px;
  495. text-align: center;
  496. }
  497. .avatar {
  498. width: 300px;
  499. height:178px !important;
  500. display: block;
  501. }
  502. .delMemberDialog{ //删除对话框
  503. .el-dialog{
  504. border-radius: 5px;
  505. overflow: hidden;
  506. }
  507. .deleteContent{
  508. margin: 30px 0;
  509. font-size: 22px;
  510. color: #000;
  511. }
  512. .el-dialog__header{
  513. background: #32455b;
  514. display: flex;
  515. justify-content: center;
  516. }
  517. .el-dialog__title{
  518. color:#fff;
  519. font-size: 22px;
  520. position: relative;
  521. top: -5px;
  522. }
  523. .el-dialog__body{
  524. display: flex;
  525. justify-content: center;
  526. }
  527. .dialog-footer{
  528. display: flex;
  529. justify-content: center;
  530. box-sizing: border-box;
  531. .btn5{
  532. font-size: 16px;
  533. }
  534. }
  535. }
  536. //项目修改对话框开始
  537. .projectApplicationfundAddDialog{
  538. .el-dialog__header{
  539. border-radius: 10px 10px 0 0;
  540. background: #32455b;
  541. }
  542. .el-dialog{
  543. border-radius:10px ;
  544. }
  545. .deleteContent{
  546. width: 100%;
  547. text-align: center;
  548. font-size: 22px;
  549. color: #000;
  550. }
  551. .addDialogLogo{
  552. width: 60px;
  553. height: 30px;
  554. border-radius: 5px;
  555. display: flex;
  556. justify-content: center;
  557. line-height: 30px;
  558. background: #f2f2f2;
  559. position: absolute;
  560. left: 20px; top: 15px;
  561. }
  562. .el-dialog__title{
  563. color:#fff;
  564. display: flex;
  565. justify-content: center;
  566. font-size: 18px;
  567. position: relative;
  568. top: -2px;
  569. }
  570. .addDialogMid{
  571. box-sizing: border-box;
  572. padding:0 60px 0 10px;
  573. .addDialogTit{
  574. display: flex;
  575. span{
  576. width: 80px;
  577. line-height: 40px;
  578. text-align: left;
  579. }
  580. }
  581. .addDialogTit1{
  582. display: flex;
  583. justify-content: space-between;
  584. margin-bottom: 15px;
  585. }
  586. .addDialogTit2{
  587. margin-top: 10px;
  588. font-size: 18px;
  589. color: #000;
  590. text-indent: 2em;
  591. }
  592. .addDialogCon{
  593. margin-top: 20px;
  594. }
  595. }
  596. .dialog-footer{
  597. display: flex;
  598. justify-content: center;
  599. .btn5{
  600. height: 40px;
  601. font-size: 16px;
  602. background: #0e72e6;
  603. width: 200px;
  604. }
  605. }
  606. }
  607. }
  608. </style>