add.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393
  1. <template>
  2. <div>
  3. <div class="addbox">
  4. <!-- 步骤条 -->
  5. <div class="steps">
  6. <div class="step" :class="{'finish':progress>ite.dictValue,'act':progress==ite.dictValue}" v-for="(ite,idx) in step" :key="idx" >
  7. <div class="tit flexc"><span>{{idx+1}}</span>{{ite.dictLabel}}
  8. <div class="line"></div>
  9. </div>
  10. <div class="list" v-for="(aite,aidx) in ite.desc" :key="aidx">
  11. <span class="cir"></span>{{aite.tit}}
  12. </div>
  13. </div>
  14. </div>
  15. <!-- 标签页 -->
  16. <div class="tabs">
  17. <!-- <div class="flex1" style="overflow: hidden;"> -->
  18. <el-tabs v-model="activeName" @tab-click="handleClick">
  19. <el-tab-pane name="first">
  20. <div slot="label" class="tab flexc">
  21. <img class="tabimg" v-if="activeName=='first'" src="@/assets/images/project/taba_.png"/>
  22. <img class="tabimg" v-else src="@/assets/images/project/taba.png"/>
  23. <span>签约环节
  24. </span>
  25. </div>
  26. <first-info-form v-if="activeName=='first'" ref="firstInfo" :cylbOptions="cylbOptions" :qybjOptions="qybjOptions" :info="qyxxinfo" @getSubmit="getSubmitqxyy" :xmbh="xmbh"></first-info-form>
  27. </el-tab-pane>
  28. <el-tab-pane name="second" :disabled="isdisabled">
  29. <div slot="label" class="tab flexc" @click="handleClicka">
  30. <img class="tabimg" v-if="activeName=='second'" src="@/assets/images/project/tabb_.png"/>
  31. <img class="tabimg" v-else src="@/assets/images/project/tabb.png"/>
  32. <span>开工环节
  33. </span>
  34. </div>
  35. <second-info-form v-if="activeName=='second'" ref="secondInfo" :xmbh="xmbh" :info="kghjinfo" @getSubmit="getKgxxDetail"></second-info-form>
  36. </el-tab-pane>
  37. <el-tab-pane name="third" :disabled="isdisabled">
  38. <div slot="label" class="tab flexc" @click="handleClicka">
  39. <img class="tabcimg" v-if="activeName=='third'" src="@/assets/images/project/tabc_.png"/>
  40. <img class="tabcimg" v-else src="@/assets/images/project/tabc.png"/>
  41. <span>建设环节
  42. </span>
  43. </div>
  44. <third-info-form v-if="activeName=='third'" ref="thirdInfo" :info="jshjinfo"></third-info-form>
  45. </el-tab-pane>
  46. <el-tab-pane name="fourth" :disabled="isdisabled">
  47. <div slot="label" class="tab flexc" @click="handleClicka">
  48. <img class="tabdimg" v-if="activeName=='fourth'" src="@/assets/images/project/tabd_.png"/>
  49. <img class="tabdimg" v-else src="@/assets/images/project/tabd.png"/>
  50. <span>投产环节
  51. </span>
  52. </div>
  53. <fourth-info-form v-if="activeName=='fourth' " ref="fourthInfo" :info="tchjinfo"></fourth-info-form>
  54. </el-tab-pane>
  55. </el-tabs>
  56. <div class="btns flexcc">
  57. <el-button v-hasPermi="['zhaoshangV3:qyxx:edit']" type="success" size="small" @click="hunpl">完成</el-button>
  58. </div>
  59. <!-- </div> -->
  60. </div>
  61. </div>
  62. </div>
  63. </template>
  64. <script>
  65. import firstInfoForm from "./firstInfoForm"
  66. import secondInfoForm from "./secondInfoForm"
  67. import thirdInfoForm from "./thirdInfoForm"
  68. import fourthInfoForm from "./fourthInfoForm"
  69. import { getXmbh,addQyxx, updateQyxx, delQyxx, getQyxx,listQyxx } from "@/api/zhaoshang/qyxx"
  70. import {addKgxx, updateKgxx, delKgxx, getKgxxNum,listKgxx } from "@/api/zhaoshang/kgxx"
  71. import {addJsxx, updateJsxx, delJsxx, getJsxxNum,listJsxx } from "@/api/zhaoshang/jsxx"
  72. import {addTcxx, updateTcxx, delTcxx, getTcxxNum,listTcxx } from "@/api/zhaoshang/tcxx"
  73. export default{
  74. components:{
  75. firstInfoForm,secondInfoForm,thirdInfoForm,fourthInfoForm
  76. },
  77. data() {
  78. return{
  79. step:[
  80. {tit:'立项',desc:[{tit:'新建'},{tit:'审核'}]},
  81. {tit:'签约',desc:[{tit:'签约双方信息'},{tit:'签约项目信息'},{tit:'附件上传'}]},
  82. {tit:'开工',desc:[{tit:'开工前相关手续办理'},{tit:'开工信息'},{tit:'附件上传'}]},
  83. {tit:'建设',desc:[{tit:'建设信息'},{tit:'附件上传'}]},
  84. {tit:'投产',desc:[{tit:'投产信息'},{tit:'附件上传'}]},
  85. {tit:'完成',desc:[{tit:'提交'},{tit:'审核'}]},
  86. ],
  87. activeName:'first',
  88. // 表详细信息
  89. qyxxinfo: {
  90. // "qyxxId":"",//签约信息ID
  91. // "xmId":null,//项目编号
  92. "xmbh":null,//项目编号
  93. "xmmc":null,//项目名称
  94. "tzfkId":null,//投资方资方库id
  95. "tzf":null,//投资方
  96. "sdzf":null,//属地政府
  97. "qyrq":null,//签约日期
  98. "xmlrr":null,//项目录入人
  99. "job":null,//录入人职务
  100. "lrrPhone":null,//录入人联系方式
  101. "baztze":null,//备案总投资额
  102. "lxsjTime":null,//立项时间
  103. "cylb":null,//产业类别
  104. "jsnr":null,//建设内容
  105. "tzqybj":null,//投资企业背景
  106. "zcqymc":null,//在潜注册公司名称
  107. "zcrq":null,//企业注册日期
  108. "zczj":null,//注册资金
  109. "jyfw":null,//经营范围
  110. "fddbr":null,//法定代表人
  111. "lxfs":null,//联系方式
  112. "sjtzze":null,//实际投资总额
  113. "sjgdzctze":null,//实际固定资产投资额
  114. "gdmj":null,//供地面积
  115. "zlcf":null,//租赁厂房
  116. "lztd":null,//流转土地
  117. "mjtzqd":null,//亩均投资强度
  118. "mjsr":null,//亩均收入
  119. "yjncz":null,//预计年产值
  120. "yjls":null,//预计利税
  121. "tzhszq":null,//投资回收周期
  122. 'fjList':null,//附件列表
  123. },
  124. // 开工
  125. kghjinfo: {
  126. "xmbh":null,//项目编号
  127. },
  128. // 建设
  129. jshjinfo: {
  130. "xmbh":null,//项目编号
  131. "timete":null,
  132. },
  133. // 投产
  134. tchjinfo: {
  135. "xmbh":null,//项目编号
  136. },
  137. cylbOptions:[],//产业类型
  138. qybjOptions:[],//企业背景,
  139. ptype:'add',//新增还是修改,
  140. xmId:'',//项目id,
  141. xmbh:'',//项目编号
  142. qxtab:[{tit:'签约双方信息'},{tit:'签约项目信息'},{tit:'附件上传'}],
  143. kgtab:[{tit:'开工前相关手续办理'},{tit:'开工信息'},{tit:'附件上传'}],
  144. sstab:[{tit:'建设时间'},{tit:'建设进度跟踪'},{tit:'附件上传'}],
  145. tctab:[{tit:'投产信息'},{tit:'年度统计'},{tit:'附件上传'}],
  146. wctab:[{tit:'提交'}],
  147. progress:1,
  148. isdisabled:true,
  149. }
  150. },
  151. created() {
  152. this.getDicts("industry_type").then(response => {
  153. this.cylbOptions = response.data;
  154. });
  155. this.getDicts("enterprise_background").then(response => {
  156. this.qybjOptions = response.data;
  157. });
  158. // 项目进度project_schedule
  159. this.getDicts("project_schedule").then(response => {
  160. this.step = response.data.map(v => {
  161. if(v.dictValue==1){
  162. v.desc=this.qxtab
  163. }else if(v.dictValue==2){
  164. v.desc=this.kgtab
  165. }else if(v.dictValue==3){
  166. v.desc=this.sstab
  167. }else if(v.dictValue==4){
  168. v.desc=this.tctab
  169. }else if(v.dictValue==5){
  170. v.desc=this.wctab
  171. }
  172. return {
  173. dictLabel: v.dictLabel,
  174. dictValue: v.dictValue,
  175. desc: v.desc
  176. }
  177. })
  178. // this.xmjdOptions = response.data;
  179. });
  180. if(this.$route.query.id!=-1){
  181. this.ptype='edit'
  182. this.xmId=this.$route.query.id;
  183. this.xmbh=this.$route.query.bh;
  184. this.getQyxxDetail()
  185. }else{
  186. this.ptype='add';
  187. // this.xmbh='ZS20250714102';
  188. // this.qyxxinfo.xmbh=this.xmbh
  189. // this.kghjinfo.xmbh=this.xmbh
  190. // this.tchjinfo.xmbh=this.xmbh
  191. // this.jshjinfo.xmbh=this.xmbh
  192. this.getXmbh()
  193. }
  194. },
  195. mounted() {
  196. // 获取当前时间
  197. this.qyxxinfo.qyrq=this.time()
  198. },
  199. methods:{
  200. // 完成
  201. hunpl(){
  202. this.qyxxinfo.progress = 5
  203. updateQyxx(this.qyxxinfo).then(res=>{
  204. if(res.code==200){
  205. this.$message.success('操作成功');
  206. }
  207. })
  208. },
  209. handleClicka(){
  210. if(this.isdisabled){
  211. this.$message.error('请先提交签约信息');
  212. }
  213. },
  214. handleClick(e){
  215. var name=e.name;
  216. if(name=='first'){
  217. this.getQyxxDetail()
  218. }else if(name=='second'){
  219. this.getKgxxDetail()
  220. }else if(name=='third'){
  221. this.getJsxxDetail()
  222. }else if(name=='fourth'){
  223. this.getTcxxDetail()
  224. }
  225. },
  226. getXmbh(){
  227. getXmbh().then(res=>{
  228. this.xmbh=res.data;
  229. this.qyxxinfo.xmbh=res.data;
  230. this.qyxxinfo.id=-1;
  231. this.kghjinfo.xmbh=res.data;
  232. this.jshjinfo.xmbh=res.data;
  233. this.tchjinfo.xmbh=res.data;
  234. })
  235. },
  236. time() {
  237. var date = new Date();
  238. var y = date.getFullYear();
  239. var m = date.getMonth() + 1;
  240. var d = date.getDate();
  241. var h = date.getHours();
  242. var min = date.getMinutes();
  243. var s = date.getSeconds();
  244. var yearStr = y + '-' + (m < 10 ? ('0' + m) : m) + '-' + (d < 10 ? ('0' + d) : d)
  245. var timeStr = (h < 10 ? ('0' + h) : h) + ':' + (min < 10 ? ('0' + min) : min) + ':' + (s < 10 ? (
  246. '0' + s) : s);
  247. return yearStr
  248. },
  249. getSubmitqxyy(params){
  250. this.xmId=params;
  251. this.getQyxxDetail()
  252. // var info=JSON.parse(JSON.stringify(params))
  253. // if(this.ptype=='add'){
  254. // addQyxx(info).then(res=>{
  255. // if(res.code==200){
  256. // this.$message.success('保存成功');
  257. // }
  258. // })
  259. // }else{
  260. // updateQyxx(info).then(res=>{
  261. // if(res.code==200){
  262. // this.$message.success('修改成功');
  263. // }
  264. // })
  265. // }
  266. },
  267. //签约
  268. getQyxxDetail(){
  269. getQyxx(this.xmId).then(res=>{
  270. if(res.code==200){
  271. this.qyxxinfo=res.data;
  272. this.xmbh=res.data.xmbh;
  273. this.isdisabled=false;
  274. this.progress=Number(res.data.progress)
  275. }
  276. })
  277. },
  278. // 开工
  279. getKgxxDetail(){
  280. getKgxxNum(this.xmbh).then(res=>{
  281. if(res.code==200){
  282. if(res.data){
  283. this.kghjinfo=res.data
  284. }else{
  285. var obj={
  286. xmbh:this.xmbh,
  287. id:-1
  288. }
  289. this.kghjinfo=JSON.parse(JSON.stringify(obj));
  290. }
  291. }
  292. })
  293. },
  294. // 建设
  295. getJsxxDetail(){
  296. getJsxxNum(this.xmbh).then(res=>{
  297. if(res.code==200){
  298. if(res.data){
  299. this.jshjinfo=res.data
  300. }else{
  301. var obj={
  302. xmbh:this.xmbh,
  303. id:-1
  304. }
  305. this.jshjinfo=JSON.parse(JSON.stringify(obj));
  306. }
  307. }
  308. })
  309. },
  310. // 投产
  311. getTcxxDetail(){
  312. getTcxxNum(this.xmbh).then(res=>{
  313. if(res.code==200){
  314. if(res.data){
  315. this.tchjinfo=res.data
  316. }else{
  317. var obj={
  318. xmbh:this.xmbh,
  319. id:-1
  320. }
  321. this.tchjinfo=JSON.parse(JSON.stringify(obj));
  322. }
  323. }
  324. })
  325. }
  326. }
  327. }
  328. </script>
  329. <style lang="scss" scoped>
  330. ::v-deep {
  331. .el-button{padding: 8px 14px;font-size: 14px;}
  332. .tabs{width: 100%;
  333. .el-button--small{background-color: #00A854;}
  334. .el-tabs__item{padding-right: 0;color: #666666;line-height: 45px;height: 45px;padding-left: 0;}
  335. .el-tabs__active-bar{background: #2777D0;}
  336. .is-active{color: #2777D0;font-weight: bold;}
  337. }
  338. }
  339. .flex{display: flex;}
  340. .flexc{display: flex;align-items: center;}
  341. .flex1{flex: 1;}
  342. .addbox{padding: 14px 12px 25px;
  343. .steps{background: #FFFFFF;border-radius: 4px;padding: 30px 60px 24px 85px;display: flex;
  344. .step{flex-basis: 50%;position: relative;
  345. &.finish,&.act{
  346. .tit{color: #3D455B;
  347. span{background: #1890FF;color: #FFFFFF;border: none;}
  348. }
  349. }
  350. &.finish{
  351. .line{background-color: #1890FF !important;}
  352. .list{
  353. .cir{background: #00A854;}
  354. }
  355. }
  356. &:last-child{
  357. .line{display: none !important;}
  358. }
  359. .tit{font-weight: bold;font-size: 16px;color: #666666;margin-bottom: 10px;
  360. span{width: 24px;height: 24px;background: #FFFFFF;border-radius: 50%;border: 1px solid #DADADA;font-weight: bold;display: flex;align-items: center;justify-content: center;flex: 0 0 auto;
  361. font-size: 14px;color: #AAAAAA;margin-right: 12px;}
  362. .line{height: 2px;margin-left: 18px;margin-right: 18px;flex: 1;
  363. background: #E6E6E6;}
  364. }
  365. }
  366. .list{font-weight: 500;font-size: 12px;color: #9B9B9B;line-height: 24px;padding-left: 8px;
  367. .cir{width: 8px;height: 8px;background: #BFBFBF;border-radius: 50%;display: inline-block;margin-right: 8px;}
  368. }
  369. }
  370. }
  371. .tabs{position: relative;
  372. .tab{padding: 0 21px;}
  373. .tabimg{width: 14px;height: 14px;margin-right: 8px;}
  374. .tabcimg{width: 13px;height: 13px;margin-right: 9px;}
  375. .tabdimg{width: 14px;height: 15px;margin-right: 8px;}
  376. .btns{height: 45px;box-sizing: border-box;position: absolute;right: 0;top: 0;
  377. }
  378. }
  379. </style>