ProjectDia.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939
  1. <template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
  2. <div>
  3. <el-dialog
  4. :title="title"
  5. :close-on-click-modal="false"
  6. draggable
  7. width="1300px"
  8. @close="close"
  9. @keyup.enter.native=""
  10. v-model="visible">
  11. <el-tabs v-model="activeName" type="border-card" @tab-click="tabHandleClick">
  12. <el-tab-pane label="项目登记详情" name="programDetail">
  13. <el-form size="large" :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''" :disabled="method === 'view'"
  14. label-width="170px" @submit.native.prevent>
  15. <el-row :gutter="15">
  16. <el-col :span="24">
  17. <el-form-item label="合同情况:" prop="contractStatus"
  18. :rules="[
  19. {required: true, message:'请选择合同情况', trigger:'blur'}
  20. ]">
  21. <el-radio-group v-model="inputForm.contractStatus" class="ml-4">
  22. <el-radio label="1" size="large">有合同</el-radio> <el-radio label="0" size="large">无合同</el-radio>
  23. </el-radio-group>
  24. </el-form-item>
  25. </el-col>
  26. <el-row :gutter="15" v-show="inputForm.contractStatus === '1'">
  27. <el-col :span="24" >
  28. <el-divider content-position="left"><i class="el-icon-document"></i> 选择合同</el-divider>
  29. </el-col>
  30. <el-col :span="12">
  31. <el-form-item label="选择合同" prop="contractName"
  32. :rules="[
  33. {required: true, message:'合同不能为空', trigger:'blur'},
  34. {required: true, message:'合同不能为空', trigger:'change'}
  35. ]">
  36. <el-input size="large" :readonly="true" @focus="openContractForm()" v-model="inputForm.contractName" placeholder="请选择合同">
  37. <el-button slot="append" icon="el-icon-search" @click="openContractForm()"></el-button>
  38. </el-input>
  39. </el-form-item>
  40. </el-col>
  41. <el-col :span="12">
  42. <el-form-item label="合同金额(元)" prop="amount"
  43. :rules="[
  44. ]">
  45. <!-- <el-input v-model="inputForm.amount" placeholder="请填写合同金额"></el-input>-->
  46. <el-input-number
  47. :disabled="true"
  48. v-model="inputForm.amount"
  49. controls-position="right"
  50. :controls="false"
  51. style="width:100%;"
  52. :precision="2"
  53. placeholder="请填写合同金额"
  54. :step="0.01"
  55. :min="0"
  56. clearable>
  57. </el-input-number>
  58. </el-form-item>
  59. </el-col>
  60. <el-col :span="12">
  61. <el-form-item label="委托方" prop="primaryLinkman"
  62. :rules="[
  63. ]">
  64. <el-input :disabled="true" v-model="inputForm.primaryLinkman" placeholder="请填写委托方"></el-input>
  65. </el-form-item>
  66. </el-col>
  67. <el-col :span="12">
  68. <el-form-item label="合同类型(大类)" prop="contractTypeFirst"
  69. :rules="[
  70. ]">
  71. <el-input :disabled="true" v-model="inputForm.contractTypeFirst" placeholder="请填写合同类型(大类)"></el-input>
  72. </el-form-item>
  73. </el-col>
  74. <el-col :span="12">
  75. <el-form-item label="合同类型(小类)" prop="contractType"
  76. :rules="[
  77. ]">
  78. <el-input :disabled="true" v-model="inputForm.contractType" placeholder="请填写合同类型(小类)"></el-input>
  79. </el-form-item>
  80. </el-col>
  81. </el-row>
  82. </el-row>
  83. <el-divider content-position="left"><i class="el-icon-document"></i> 项目基本情况信息</el-divider>
  84. <el-row :gutter="15">
  85. <el-col :span="12">
  86. <el-form-item label="项目名称" prop="name"
  87. :rules="[
  88. {required: true, message:'项目名称不能为空', trigger:'blur'}
  89. ]">
  90. <el-input maxlength="64" v-model="inputForm.name" placeholder="请输入项目名称" clearable></el-input>
  91. </el-form-item>
  92. </el-col>
  93. <el-col :span="12">
  94. <el-form-item label="项目所在地" prop="projectPlace"
  95. :rules="[
  96. {required: true, message:'项目所在地不能为空', trigger:'change'}
  97. ]">
  98. <SelectTree
  99. ref="areaTree"
  100. :props="{
  101. value: 'id', // ID字段名
  102. label: 'name', // 显示名称
  103. children: 'children' // 子级字段名
  104. }"
  105. url="/system-server/sys/area/treeData"
  106. :value="inputForm.projectPlace"
  107. :clearable="true"
  108. size="large"
  109. :accordion="true"
  110. @getValue="(value) => {inputForm.projectPlace=value}"
  111. />
  112. </el-form-item>
  113. </el-col>
  114. <el-col :span="12">
  115. <el-form-item label="所在省份" prop="provience"
  116. :rules="[
  117. ]">
  118. <el-input :disabled="true" v-model="provience" placeholder="请输入所在省份" clearable></el-input>
  119. </el-form-item>
  120. </el-col>
  121. <el-col :span="12">
  122. <el-form-item label="所在地级市" prop="city"
  123. :rules="[
  124. ]">
  125. <el-input :disabled="true" v-model="city" placeholder="请输入所在地级市" clearable></el-input>
  126. </el-form-item>
  127. </el-col>
  128. <el-col :span="12">
  129. <el-form-item label="所在区县" prop="con"
  130. :rules="[
  131. ]">
  132. <el-input :disabled="true" v-model="con" placeholder="请输入所在区县" clearable></el-input>
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="12">
  136. <el-form-item label="建设地点" prop="buildPlace"
  137. :rules="[
  138. ]">
  139. <el-input v-model="inputForm.buildPlace" placeholder="请输入建设地点" clearable></el-input>
  140. </el-form-item>
  141. </el-col>
  142. <el-col :span="12">
  143. <el-form-item label="项目负责人" prop="projectLeader"
  144. :rules="[
  145. {required: true, message:'项目负责人不能为空', trigger:'change'}
  146. ]">
  147. <SelectUserTree
  148. ref="companyTree"
  149. size="large"
  150. :props="{
  151. value: 'id', // ID字段名
  152. label: 'name', // 显示名称
  153. children: 'children' // 子级字段名
  154. }"
  155. :url="`/system-server/sys/user/treeUserDataJyOffice?type=2`"
  156. :value="inputForm.projectLeader"
  157. :clearable="true"
  158. :accordion="true"
  159. @getValue="(value) => {inputForm.projectLeader=value}"/>
  160. </el-form-item>
  161. </el-col>
  162. <el-col :span="12">
  163. <el-form-item label="创建人" prop="createByName"
  164. :rules="[
  165. ]">
  166. <el-input :disabled="true" v-model="inputForm.createByName" placeholder="请填写创建人" clearable></el-input>
  167. </el-form-item>
  168. </el-col>
  169. <el-col :span="12">
  170. <el-form-item label="创建时间" prop="createDate"
  171. :rules="[
  172. ]">
  173. <el-input :disabled="true" v-model="inputForm.createDate" placeholder="请填写创建时间" clearable></el-input>
  174. </el-form-item>
  175. </el-col>
  176. <el-col :span="24">
  177. <el-form-item label="工程概况" prop="projectOverview"
  178. :rules="[
  179. ]">
  180. <el-input type="textarea" v-model="inputForm.projectOverview" maxlength="500" placeholder="请输入工程概况" show-word-limit></el-input>
  181. </el-form-item>
  182. </el-col>
  183. <el-col :span="24">
  184. <el-form-item label="特殊要求" prop="special"
  185. :rules="[
  186. ]">
  187. <el-input type="textarea" v-model="inputForm.special" maxlength="500" placeholder="请输入特殊要求" show-word-limit></el-input>
  188. </el-form-item>
  189. </el-col>
  190. </el-row>
  191. <el-divider content-position="left"><i class="el-icon-document"></i>
  192. <span><span style="color: red;border-top: 20px">*</span>委托方联系人信息</span>
  193. <el-button style="margin-left: 20px" type="primary" :disabled="this.inputForm.contractStatus === '1'" size="default" @click="openContactForm()" plain>
  194. 新增
  195. </el-button>
  196. </el-divider>
  197. <el-row :gutter="15" >
  198. <el-col :span="24">
  199. <vxe-table
  200. border
  201. show-overflow
  202. ref="clientTable"
  203. class="vxe-table-element"
  204. :data="inputForm.clientList"
  205. style="margin-left: 5em"
  206. :key="clientTableKey"
  207. :edit-rules="validRulesClient"
  208. highlight-current-row
  209. :edit-config="{trigger: 'click', mode: 'row', showStatus: true, autoClear: true, icon: '#'}"
  210. >
  211. <vxe-table-column field="clientName" title="联系人" :edit-render="{}" align="center">
  212. <template v-slot:edit="scope">
  213. <el-input :disabled="true" v-model="scope.row.clientName" ></el-input>
  214. </template>
  215. </vxe-table-column>
  216. <!-- <vxe-table-column align="center" field="clientType" title="人员类型" :edit-render="{name: '$select', options: clientTypes}">-->
  217. <!-- <template v-slot:edit="scope">-->
  218. <!-- <vxe-select :disabled="status === 'audit' || status === 'taskFormDetail'" v-model="scope.row.clientType" transfer>-->
  219. <!-- <vxe-option-->
  220. <!-- v-for="item in clientTypes"-->
  221. <!-- :key="item.value"-->
  222. <!-- :value="item.value"-->
  223. <!-- :label="item.label">-->
  224. <!-- </vxe-option>-->
  225. <!-- </vxe-select>-->
  226. <!-- </template>-->
  227. <!-- </vxe-table-column>-->
  228. <vxe-table-column align="center" field="linkPhone" title="联系方式1" :edit-render="{}">
  229. <template v-slot:edit="scope">
  230. <el-input :disabled="true" v-model="scope.row.linkPhone" ></el-input>
  231. </template>
  232. </vxe-table-column>
  233. <vxe-table-column align="center" field="linkMobile" title="联系方式2" :edit-render="{}">
  234. <template v-slot:edit="scope">
  235. <el-input :disabled="true" v-model="scope.row.linkMobile" ></el-input>
  236. </template>
  237. </vxe-table-column>
  238. <vxe-table-column align="center" field="position" title="职位" :edit-render="{}">
  239. <template v-slot:edit="scope">
  240. <el-input :disabled="true" v-model="scope.row.position" ></el-input>
  241. </template>
  242. </vxe-table-column>
  243. <vxe-table-column align="center" title="操作" width="100">
  244. <template v-slot="scope">
  245. <el-button size="large" type="danger" @click="removeEvent(scope.row,scope.$rowIndex,'client')">删除</el-button>
  246. </template>
  247. </vxe-table-column>
  248. </vxe-table>
  249. </el-col>
  250. </el-row>
  251. <el-row :gutter="15" v-show=" method==='view' ">
  252. <el-col :span="24">
  253. <el-divider content-position="left"><i class="el-icon-document"></i>
  254. 项目组成员
  255. </el-divider>
  256. <el-row :gutter="15">
  257. <el-col :span="24">
  258. <vxe-table
  259. border
  260. show-footer
  261. show-overflow
  262. :footer-method="footerMethod"
  263. ref="memberTable"
  264. class="vxe-table-element"
  265. :key="memberKey"
  266. :data="inputForm.members"
  267. style="margin-left: 5em"
  268. @cell-click=""
  269. :edit-rules="validRulesMember"
  270. @edit-closed=""
  271. highlight-current-row
  272. :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: status === 'audit' || status === 'taskFormDetail' ? true : false, icon: '#'}"
  273. >
  274. <vxe-table-column min-width="218" align="center" field="name" title="姓名"></vxe-table-column>
  275. <vxe-table-column min-width="218" align="center" field="officeName" title="部门"></vxe-table-column>
  276. <vxe-table-column min-width="218" align="center" field="roleName" title="角色"></vxe-table-column>
  277. <vxe-table-column min-width="218" align="center" field="mobile" title="手机号"></vxe-table-column>
  278. <vxe-table-column min-width="218" align="center" field="status" title="状态">
  279. <template #default="scope">
  280. <span v-if="scope.row.status === '0'" style="color: #67C23A">正常</span>
  281. <span v-else>移除</span>
  282. </template>
  283. </vxe-table-column>
  284. </vxe-table>
  285. </el-col>
  286. </el-row>
  287. </el-col>
  288. </el-row>
  289. </el-form>
  290. <!-- 附件-->
  291. <UpLoadComponent ref="uploadComponent"></UpLoadComponent>
  292. </el-tab-pane>
  293. <el-tab-pane label="一级校审" name="firstAudit">
  294. <ProjectAuditForm ref="projectThreeAuditForm" :formReadOnly="true"></ProjectAuditForm>
  295. </el-tab-pane>
  296. <el-tab-pane label="二级校审" name="secondAudit" >
  297. <ProjectAuditForm ref="secondAudit2" :formReadOnly="true"></ProjectAuditForm>
  298. </el-tab-pane>
  299. <el-tab-pane label="三级校审" name="thirdAudit" >
  300. <ProjectAuditForm ref="thirdAudit3" :formReadOnly="true"></ProjectAuditForm>
  301. </el-tab-pane>
  302. <el-tab-pane label="报告签发" name="reportIssuance">
  303. <SignetAddForm ref="signetAddForm" :formReadOnly="true"></SignetAddForm>
  304. </el-tab-pane>
  305. <el-tab-pane label="外审" name="outInstance">
  306. <OutInstanceForm ref="outInstanceForm" :formReadOnly="true"></OutInstanceForm>
  307. </el-tab-pane>
  308. <el-tab-pane label="报批签发" name="reportsSubmit">
  309. <ReportsInstanceForm ref="reportsInstanceForm" :formReadOnly="true"></ReportsInstanceForm>
  310. </el-tab-pane>
  311. <el-tab-pane label="归档" name="archive">
  312. <ProjectArchiveForm ref="projectArchiveForm" :formReadOnly="true"></ProjectArchiveForm>
  313. </el-tab-pane>
  314. <el-tab-pane label="环评资质" name="eia" >
  315. <ProjectEiaForm ref="projectEiaForm" :formReadOnly="true"></ProjectEiaForm>
  316. </el-tab-pane>
  317. </el-tabs>
  318. <template #footer>
  319. <span class="dialog-footer">
  320. <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
  321. <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
  322. </span>
  323. </template>
  324. </el-dialog>
  325. <ContractForm ref="contractForm" @getContract="getContract"></ContractForm>
  326. <ContactForm ref="contactForm" @getContract="getContact"></ContactForm>
  327. </div>
  328. </template>
  329. <script>
  330. import ContractForm from './ContractForm'
  331. import ContactForm from './ContractForm'
  332. import SelectTree from '@/components/treeSelect/treeSelect.vue'
  333. import areaService from "@/api/sys/areaService";
  334. import SelectUserTree from '@/views/utils/treeUserSelect'
  335. import ProjectInfoService from "@/api/jy/ProjectInfoService";
  336. import UpLoadComponent from '@/views/common/UpLoadComponent'
  337. import userService from '@/api/sys/UserService'
  338. import ProjectAuditForm from './ProjectAuditForm'
  339. import SignetAddForm from '@/views/materialManagement/userSeal/SignetAddForm'
  340. import OutInstanceForm from './OutInstanceForm'
  341. import ReportsInstanceForm from './ReportsInstanceForm'
  342. import ProjectArchiveForm from './ProjectArchiveForm'
  343. import ProjectEiaForm from './ProjectEiaForm'
  344. export default {
  345. props: {
  346. businessId: {
  347. type: String,
  348. default: ''
  349. },
  350. formReadOnly: {
  351. type: Boolean,
  352. default: false
  353. },
  354. status: {
  355. type: String,
  356. default: ''
  357. }
  358. },
  359. data () {
  360. return {
  361. title: '',
  362. method: '',
  363. visible: false,
  364. loading: false,
  365. typeDictList: [],
  366. activeName: 'programDetail',
  367. showReportIssuance:false,
  368. inputForm: {
  369. id: '', // 主键值(新增不传,修改必传)
  370. no: '', // 编号(新增不传,修改必传)
  371. contractId: '', // 合同id
  372. contractName: '', // 合同名称
  373. client: '', // 委托方
  374. primaryLinkman: '', // 委托方名称
  375. amount: '', // 合同金额
  376. contractType: '', // 合同类别
  377. name: '', // 项目名称
  378. projectPlace: '', // 项目所在地
  379. status: '', // 状态
  380. procInsId: '', // 流程id
  381. processDefinitionId: '', // 流程信息
  382. members: [], // 成员列表
  383. files: [], // 附件信息
  384. contractStatus: '',//合同情况
  385. contractType:'',//合同类型(小类)
  386. contractTypeFirst:'', //合同类型(大类)
  387. buildPlace:'', // 建设地点
  388. createByName:this.$store.state.user.name, //创建人
  389. createDate:this.moment(new Date()).format('YYYY-MM-DD HH:mm:ss'), //创建时间
  390. projectOverview:'', //工程概况
  391. special:'', //特殊要求
  392. projectLeader:'', //项目负责人
  393. clientList:[], //委托方联系人
  394. files: [], // 附件信息
  395. },
  396. clientTypes: [
  397. {value: 1, label: '委托人'},
  398. {value: 2, label: '项目对接人'}
  399. ],
  400. auditId1: '',
  401. auditId2: '',
  402. auditId3: '',
  403. archiveId: '',
  404. provience:'',
  405. city:'',
  406. con:'',
  407. sealId:'',
  408. outInstanceId:'',
  409. reportsSubmitId:'',
  410. archiveId:'',
  411. eiaId:''
  412. }
  413. },
  414. ProjectInfoService:null,
  415. created () {
  416. this.projectInfoService=new ProjectInfoService()
  417. this.getLocation()
  418. },
  419. computed: {
  420. bus: {
  421. get () {
  422. this.$refs.uploadComponent.setDividerName('附件')
  423. return this.businessId
  424. },
  425. set (val) {
  426. this.businessId = val
  427. }
  428. }
  429. },
  430. components: {
  431. ContractForm,
  432. ContactForm,
  433. SelectTree,
  434. SelectUserTree,
  435. UpLoadComponent,
  436. ProjectAuditForm,
  437. SignetAddForm,
  438. OutInstanceForm,
  439. ReportsInstanceForm,
  440. ProjectArchiveForm,
  441. ProjectEiaForm
  442. },
  443. methods: {
  444. getKeyWatch (keyWatch) {
  445. this.keyWatch = keyWatch
  446. },
  447. openContractForm () {
  448. if (!this.commonJS.isEmpty(this.inputForm.contractId)) {
  449. this.$refs.contractForm.init(this.inputForm.contractId)
  450. } else {
  451. this.$refs.contractForm.init()
  452. }
  453. },
  454. getContract (row) {
  455. console.log('row',row)
  456. let _this = this
  457. // eslint-disable-next-line no-unused-vars
  458. let _list = row
  459. let _num = 0
  460. if (this.commonJS.isEmpty(this.inputForm.clientList)) {
  461. this.inputForm.clientList = []
  462. }
  463. const waitForEach = function () {
  464. return new Promise(function (resolve, reject) {
  465. if (_this.commonJS.isEmpty(_this.inputForm.clientList)) {
  466. resolve()
  467. } else {
  468. _this.inputForm.clientList.forEach((client, index) => {
  469. if (_this.inputForm.customerNo === client.no) {
  470. _this.$refs.contactTable.remove(client)
  471. _this.inputForm.clientList.splice(index, 1)
  472. }
  473. })
  474. setTimeout(() => {
  475. resolve()
  476. }, 400)
  477. }
  478. })
  479. }
  480. waitForEach().then(() => {
  481. this.inputForm.contractId = row.id // 合同id
  482. this.inputForm.contractName = row.name // 合同名称
  483. this.inputForm.clientName = row.clientName // 委托方名称
  484. this.inputForm.contractType = row.contractType // 合同类型(小类)
  485. this.inputForm.contractTypeFirst = row.contractTypeFirst // 合同类型(大类)
  486. const wait = function () {
  487. return new Promise(function (resolve, reject) {
  488. _this.inputForm.clientList.forEach(client => {
  489. if (_list.no === client.no) {
  490. _num = 1
  491. }
  492. })
  493. setTimeout(() => {
  494. resolve()
  495. }, 100)
  496. })
  497. }
  498. wait().then(() => {
  499. if (_num === 0) {
  500. this.inputForm.clientList.push({ name: row.linkmanList[0].name,id: row.linkmanList[0].id})
  501. this.$refs.clientTable.insertAt({name: row.linkmanList[0].name,id: row.linkmanList[0].id,linkPhone:row.linkmanList[0].linkPhone,linkMobile:row.linkmanList[0].linkMobile,position:row.linkmanList[0].position})
  502. this.clientTableKey = Math.random()
  503. }
  504. })
  505. })
  506. this.$forceUpdate()
  507. console.log('list',this.inputForm.clientList)
  508. },
  509. //获取省市县
  510. getLocation(){
  511. var locationId=this.inputForm.projectPlace
  512. console.log('id',locationId)
  513. areaService.getParent(locationId).then((data)=>{
  514. if (!data){
  515. return
  516. }
  517. console.log('da',data)
  518. this.provience=data[2]
  519. this.city=data[3]
  520. this.con=data[4]
  521. })
  522. },
  523. //委托方联系人
  524. openContactForm(){
  525. if (this.commonJS.isEmpty(this.inputForm.clientList)) {
  526. this.$refs.contractForm.init()
  527. }
  528. },
  529. //添加委托方联系人
  530. getContact(row){
  531. this.inputForm.clientList.push({name: row.linkmanList[0].name,id: row.linkmanList[0].id})
  532. this.$refs.clientTable.insertAt({name: row.linkmanList[0].name,id: row.linkmanList[0].id,linkPhone:row.linkmanList[0].linkPhone,linkMobile:row.linkmanList[0].linkMobile,position:row.linkmanList[0].position})
  533. this.clientTableKey = Math.random()
  534. },
  535. // 删除
  536. removeEvent (row, rowIndex, type) {
  537. if (type === 'member') {
  538. this.$refs.memberTable.remove(row)
  539. this.inputForm.members.splice(rowIndex, 1)
  540. }
  541. if (type === 'client') {
  542. this.$refs.clientTable.remove(row)
  543. this.inputForm.clientList.splice(rowIndex, 1)
  544. }
  545. },
  546. init (method, id,auditId1, auditId2, auditId3,sealId,outInstanceId,reportsSubmitId,archiveId,eiaId) {
  547. console.log('this.reportsSubmitId',reportsSubmitId)
  548. this.auditIdfirst = auditId1
  549. this.auditIdsecond = auditId2
  550. this.auditIdthird = auditId3
  551. this.outInstanceId=outInstanceId
  552. this.sealId=sealId
  553. this.reportsSubmitId=reportsSubmitId
  554. this.archiveId=archiveId
  555. this.eiaId=eiaId
  556. this.method = method
  557. console.log('eiaId', eiaId)
  558. this.inputForm = {
  559. id: '', // 主键值(新增不传,修改必传)
  560. no: '', // 编号(新增不传,修改必传)
  561. contractId: '', // 合同id
  562. contractName: '', // 合同名称
  563. client: '', // 委托方
  564. primaryLinkman: '', // 委托方名称
  565. amount: '', // 合同金额
  566. contractType: '', // 合同类别
  567. name: '', // 项目名称
  568. projectPlace: '', // 项目所在地
  569. status: '', // 状态
  570. procInsId: '', // 流程id
  571. processDefinitionId: '', // 流程信息
  572. members: [], // 成员列表
  573. files: [], // 附件信息
  574. contractStatus: '',//合同情况
  575. contractType:'',//合同类型(小类)
  576. contractTypeFirst:'', //合同类型(大类)
  577. buildPlace:'', // 建设地点
  578. createByName:this.$store.state.user.name, //创建人
  579. createDate: this.moment(new Date()).format('YYYY-MM-DD HH:mm:ss'), //创建时间
  580. projectOverview:'', //工程概况
  581. special:'', //特殊要求
  582. projectLeader:'', //项目负责人
  583. clientList:[], //委托方联系人
  584. files: [], // 附件信息
  585. }
  586. this.inputForm.id = id
  587. if (method === 'add') {
  588. // this.inputForm.id = 'add'
  589. this.title = `新建项目`
  590. } else if (method === 'edit') {
  591. this.title = '修改项目'
  592. } else if (method === 'view') {
  593. this.title = '查看项目详情'
  594. }
  595. this.visible = true
  596. this.loading = false
  597. this.$nextTick(() => {
  598. this.$refs.inputForm.resetFields()
  599. this.loading = true
  600. this.$refs.uploadComponent.clearUpload()
  601. // this.$refs.archiveFile.clearUpload()
  602. if (this.commonJS.isNotEmpty(this.inputForm.id)) {
  603. this.projectInfoService.findById(this.inputForm.id).then((data) => {
  604. this.inputForm = this.recover(this.inputForm, data)
  605. this.inputForm.members=data.projectMembers
  606. this.inputForm.clientList=data.clientList
  607. this.inputForm.createByName=data.createById
  608. this.inputForm.clientList=data.clientList
  609. this.inputForm.members=data.projectMembers
  610. this.inputForm.amount=data.contractAmount
  611. if (this.commonJS.isEmpty(this.inputForm.members)) {
  612. this.inputForm.cwProjectMembersDTOList = []
  613. } else {
  614. this.inputForm.members.forEach((member, index) => {
  615. userService.queryDetailById(member.userId).then((data) => {
  616. member.name = this.commonJS.isEmpty(data.name) ? '' : data.name
  617. member.mobile = this.commonJS.isEmpty(data.mobile) ? '' : data.mobile
  618. member.officeName = this.commonJS.isEmpty(data.officeDTO) ? '' : this.commonJS.isEmpty(data.officeDTO.name) ? '' : data.officeDTO.name
  619. member.roleName = this.commonJS.isEmpty(data.roleList) ? '' : data.roleList.map(role => { return this.commonJS.isEmpty(role.name) ? '' : role.name }).join(',')
  620. this.tableKeyMembers = Math.random()
  621. })
  622. })
  623. }
  624. this.getLocation()
  625. // this.inputForm.cwWorkClientContactDTOList=data.cwWorkClientContactDTOList
  626. console.log('data', data)
  627. if (this.commonJS.isEmpty(this.inputForm.createDate)) {
  628. this.inputForm.createDate = this.moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
  629. }
  630. if (this.formReadOnly) {
  631. method = 'view'
  632. }
  633. this.$refs.uploadComponent.newUpload('view', this.inputForm.files, 'jyProject', null, null, null, null, null)
  634. // this.$refs.archiveFile.newUpload('view', [], 'cwWorkContract', null, null, null, null, false)
  635. this.loading = false
  636. })
  637. }
  638. })
  639. },
  640. reapplyForm (callback) {
  641. this.loading = true
  642. this.programProjectListInfoService.queryById(this.inputForm.id).then((data) => {
  643. if (data.status !== '4') { // 审核状态不是“驳回”,就弹出提示
  644. this.loading = false
  645. this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
  646. throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
  647. } else {
  648. this.startFormTrue(callback)
  649. }
  650. })
  651. },
  652. saveForm (callback) {
  653. this.doSubmit('save', callback)
  654. },
  655. startForm (callback) {
  656. this.loading = true
  657. if (this.commonJS.isNotEmpty(this.inputForm.id)) {
  658. this.projectInfoService.queryById(this.inputForm.id).then((data) => {
  659. if (this.commonJS.isNotEmpty(data.status) && data.status !== '0' && data.status !== '1' && data.status !== '3') { // 审核状态不是“未发起”或“暂存”或“撤回”,就弹出提示
  660. this.loading = false
  661. this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
  662. throw new Error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
  663. } else {
  664. this.startFormTrue(callback)
  665. }
  666. })
  667. } else {
  668. this.startFormTrue(callback)
  669. }
  670. },
  671. startFormTrue (callback) {
  672. this.doSubmit('startAndHold', callback)
  673. },
  674. agreeForm (callback) {
  675. this.doSubmit('agree', callback)
  676. },
  677. // 表单提交
  678. doSubmit (status, callback) {
  679. this.loading = true
  680. if (status === 'save') {
  681. // 暂存
  682. this.inputForm.status = '1'
  683. this.loading = true
  684. if (this.$refs.uploadComponent.checkProgress()) {
  685. this.loading = false
  686. return
  687. }
  688. this.inputForm.files = this.$refs.uploadComponent.getDataList()
  689. this.projectInfoService.saveForm(this.inputForm).then((data) => {
  690. callback(data.businessTable, data.businessId, this.inputForm)
  691. this.loading = false
  692. }).catch(() => {
  693. this.loading = false
  694. })
  695. return
  696. } else if (status === 'startAndHold') {
  697. // 送审 待审核
  698. this.inputForm.status = '2'
  699. } else if (status === 'agree') {
  700. // 审核同意
  701. this.inputForm.status = '5'
  702. }
  703. if (this.commonJS.isEmpty(this.inputForm.clientList)) {
  704. this.loading = false
  705. this.$message.error('填写一条委托方联系人信息')
  706. return
  707. }
  708. if (this.commonJS.isEmpty(this.inputForm.contractStatus)) {
  709. this.loading = false
  710. this.$message.error('请选择合同情况')
  711. return
  712. }
  713. if (this.inputForm.contractStatus === '1' && this.inputForm.contractName === '') {
  714. this.loading = false
  715. this.$message.error('请选择合同')
  716. return
  717. }
  718. if (this.commonJS.isEmpty(this.inputForm.projectPlace)) {
  719. this.loading = false
  720. this.$message.error('请选择项目所在地')
  721. return
  722. }
  723. if (this.commonJS.isEmpty(this.inputForm.projectLeader)) {
  724. this.loading = false
  725. this.$message.error('请选择项目负责人')
  726. return
  727. }
  728. this.$refs['inputForm'].validate((valid) => {
  729. if (valid) {
  730. this.loading = true
  731. if (this.$refs.uploadComponent.checkProgress()) {
  732. this.loading = false
  733. return
  734. }
  735. console.log('this.inputForm', this.inputForm)
  736. this.inputForm.files = this.$refs.uploadComponent.getDataList()
  737. JSON
  738. this.projectInfoService.saveForm(this.inputForm).then((data) => {
  739. this.inputForm.id = data.businessId
  740. callback(data.businessTable, data.businessId, this.inputForm)
  741. this.loading = false
  742. }).catch(() => {
  743. this.loading = false
  744. })
  745. } else {
  746. this.loading = false
  747. }
  748. })
  749. },
  750. async updateStatusById (type, callback) {
  751. this.loading = true
  752. if (await this.$refs.uploadComponent.checkProgress()) {
  753. this.loading = false
  754. throw new Error()
  755. } else {
  756. if (type === 'reject' || type === 'reback') {
  757. this.programProjectListInfoService.queryById(this.inputForm.id).then((data) => {
  758. if (data.status !== '2') { // status的值不等于“审核中”,就弹出提示
  759. this.loading = false
  760. this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
  761. throw new Error()
  762. } else {
  763. // if (type === 'agree') {
  764. // // 同意
  765. // this.inputForm.status = '5'
  766. // }
  767. if (type === 'reject') {
  768. // 驳回
  769. this.inputForm.status = '4'
  770. }
  771. if (type === 'reback') {
  772. // 撤回
  773. this.inputForm.status = '3'
  774. }
  775. if (type === 'reject' || type === 'reback') {
  776. let param = {status: this.inputForm.status, id: this.inputForm.id}
  777. this.programProjectListInfoService.updateStatusById(param).then(() => {
  778. this.loading = false
  779. callback()
  780. })
  781. }
  782. }
  783. })
  784. } else if (type === 'hold') {
  785. this.programProjectListInfoService.queryById(this.inputForm.id).then((data) => {
  786. if (data.status !== '4') { // status的值不等于“驳回”就弹出提示
  787. this.loading = false
  788. this.$message.error('任务数据已发生改变或不存在,请在待办任务中确认此任务是否存在')
  789. throw new Error()
  790. } else {
  791. // 终止
  792. let param = {status: '1', id: this.inputForm.id}
  793. this.programProjectListInfoService.updateStatusById(param).then(() => {
  794. this.loading = false
  795. callback()
  796. })
  797. }
  798. })
  799. }
  800. }
  801. },
  802. close () {
  803. this.inputForm = {
  804. id: '', // 主键值(新增不传,修改必传)
  805. no: '', // 编号(新增不传,修改必传)
  806. contractId: '', // 合同id
  807. contractName: '', // 合同名称
  808. client: '', // 委托方
  809. clientName: '', // 委托方名称
  810. amount: 0, // 合同金额
  811. contractType: '', // 合同类型
  812. name: '', // 项目名称
  813. projectType: '', // 项目类别
  814. projectMould: '', // 项目类型
  815. company: '', // 执业机构
  816. propertyHolder: '', // 产权持有人
  817. propertyHolderName: '', // 产权持有人姓名
  818. location: '', // 项目所在地
  819. isFirst: '', // 是否首次承建
  820. yearNum: '', // 承做年数
  821. checkYear: '', // 评估费用核算年度
  822. projectManager: '', // 项目经理
  823. projectManagerName: '', // 项目经理名称
  824. reportType: '', // 报告类型
  825. industry: '', // 所属行业
  826. enterpriseType: '', // 企业类型
  827. riskLevel: '', // 风险等级
  828. generateReportNumber: '', // 是否生成报告号
  829. projectSource: '', // 项目来源
  830. estimate: 0, // 预估收入(元)
  831. planEndTime: '', // 计划完成时间
  832. useNum: 0, // 计划使用人数
  833. appointment: 0, // 约定书(份)
  834. workHours: 0, // 预算工时
  835. remarks: '', // 备注
  836. assessmentEnterprise: '', // 被评估企业
  837. assessmentEnterpriseName: '', // 被评估企业名称
  838. linkNum: '', // 联系人及电话
  839. relationship: '', // 委托人与被评估单位关系
  840. assessmentWay: '', // 评估方式
  841. assessmentObjective: '', // 评估目的
  842. assessmentDate: '', // 评估基准日
  843. num: '', // 评估服务收费总额
  844. projectDevelopment: '', // 项目开发人
  845. delegateProjectType: '', // 项目类型
  846. assessmentObject: '', // 评估对象
  847. assessmentRange: '', // 评估范围
  848. workBeginAndEndDate: [], // 预计现场工作起止时间
  849. workBeginDate: '', // 预计现场工作开始时间
  850. workEndDate: '', // 预计现场工作结束时间
  851. reportingDate: '', // 预计出报告日期
  852. isHave: '', // 本所是否具备承接胜任能力
  853. isInfluence: '', // 是否影响本所乘坐人员独立性
  854. mode: '', // 项目承接方式
  855. status: '', // 状态
  856. procInsId: '', // 流程id
  857. processDefinitionId: '', // 流程信息
  858. links: [], // 联系人列表
  859. members: [], // 成员列表
  860. files: [], // 附件信息
  861. }
  862. this.activeName = 'programDetail'
  863. this.$refs.uploadComponent.clearUpload()
  864. this.$refs.inputForm.resetFields()
  865. this.visible = false
  866. },
  867. uploadVideoProcess (event, file, fileList) {
  868. this.progressFlag = true // 显示进度条
  869. this.loadProgress = parseInt(event.percent) // 动态获取文件上传进度
  870. if (this.loadProgress >= 100) {
  871. this.loadProgress = 100
  872. setTimeout(() => { this.progressFlag = false }, 1000) // 一秒后关闭进度条
  873. }
  874. },
  875. tabHandleClick (event) {
  876. let paneName = event.props.name
  877. if (paneName === 'firstAudit') {
  878. if (this.commonJS.isNotEmpty(this.auditIdfirst)) {
  879. this.$refs.projectThreeAuditForm.init('view', this.auditIdfirst, '一级校审')
  880. }
  881. }
  882. if (paneName === 'secondAudit') {
  883. if (this.commonJS.isNotEmpty(this.auditIdsecond)) {
  884. this.$refs.secondAudit2.init('view', this.auditIdsecond, '二级校审')
  885. }
  886. }
  887. if (paneName === 'thirdAudit') {
  888. if (this.commonJS.isNotEmpty(this.auditIdthird)) {
  889. this.$refs.thirdAudit3.init('view', this.auditIdthird, '三级校审')
  890. }
  891. }
  892. if (paneName === 'reportIssuance') {
  893. if (this.commonJS.isNotEmpty(this.sealId)) {
  894. console.log('建立了')
  895. this.$refs.signetAddForm.init('view', this.sealId)
  896. }
  897. }
  898. if (paneName === 'outInstance') {
  899. if (this.commonJS.isNotEmpty(this.outInstanceId)) {
  900. this.$refs.outInstanceForm.init('view', this.outInstanceId)
  901. }
  902. }
  903. if (paneName === 'reportsSubmit') {
  904. console.log('this.reportsSubmitId',this.reportsSubmitId)
  905. if (this.commonJS.isNotEmpty(this.reportsSubmitId)) {
  906. this.$refs.reportsInstanceForm.init('view',this.reportsSubmitId)
  907. }
  908. }
  909. if (paneName === 'archive') {
  910. if (this.commonJS.isNotEmpty(this.archiveId)) {
  911. this.$refs.projectArchiveForm.init('view', this.archiveId)
  912. }
  913. }
  914. if (paneName === 'eia') {
  915. if (this.commonJS.isNotEmpty(this.eiaId)) {
  916. this.$refs.projectEiaForm.init('view', this.eiaId)
  917. }
  918. }
  919. }
  920. }
  921. }
  922. </script>
  923. <style lang="scss">
  924. .el-input-number .el-input__inner {
  925. text-align: left;
  926. }
  927. .el-divider__text {
  928. font-size: 16px;
  929. font-weight: bold;
  930. }
  931. </style>