Project.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782
  1. <template>
  2. <div class="create-container" v-loading="loading">
  3. <div class="title h1" v-if="!isModifyMode">项目</div>
  4. <div class="create-body">
  5. <div class="title h2" v-if="!isModifyMode">基本信息</div>
  6. <div v-if="!isModifyMode" class="el-form-item">
  7. <label class="el-form-item__label" style="width: 12%;">编号</label>
  8. <div class="el-form-item__content" style="margin-left: 12%;">
  9. <div>{{projectId}}</div>
  10. </div>
  11. </div>
  12. <el-form :model="project" :rules="rules" ref="project" label-width="12%" class="demo-project">
  13. <el-form-item label="项目名称" prop="name">
  14. <el-input v-if="isModifyMode" v-model="project.name"></el-input>
  15. <span v-if="!isModifyMode">{{project.name}}</span>
  16. </el-form-item>
  17. <el-form-item label="联系人" prop="name">
  18. <el-input v-if="isModifyMode" v-model="project.contactName" placeholder="请输入联系人姓名"></el-input>
  19. <span v-if="!isModifyMode">{{project.contactName}}</span>
  20. </el-form-item>
  21. <el-form-item label="联系人电话" prop="name">
  22. <el-input v-if="isModifyMode" v-model="project.contactPhone" placeholder="请输入联系人电话"></el-input>
  23. <span v-if="!isModifyMode">{{project.contactPhone}}</span>
  24. </el-form-item>
  25. <!--<el-form-item label="联系方式" prop="contact">-->
  26. <!--<div>-->
  27. <!--<el-row :gutter="2">-->
  28. <!--<el-col :span="2">-->
  29. <!--<span>联系人</span>-->
  30. <!--</el-col>-->
  31. <!--<el-col :span="10">-->
  32. <!--<el-input v-if="isModifyMode" v-model="project.contactName" placeholder="请输入联系人姓名"></el-input>-->
  33. <!--<div v-if="!isModifyMode">{{project.contactName}}</div>-->
  34. <!--</el-col>-->
  35. <!--</el-row>-->
  36. <!--<el-row :gutter="2">-->
  37. <!--<el-col :span="2">-->
  38. <!--<span>联系人电话</span>-->
  39. <!--</el-col>-->
  40. <!--<el-col :span="10">-->
  41. <!--<el-input-->
  42. <!--v-if="isModifyMode"-->
  43. <!--v-model="project.contactPhone"-->
  44. <!--placeholder="请输入联系人电话"-->
  45. <!--&gt;</el-input>-->
  46. <!--<div v-if="!isModifyMode">{{project.contactPhone}}</div>-->
  47. <!--</el-col>-->
  48. <!--</el-row>-->
  49. <!--</div>-->
  50. <!--</el-form-item>-->
  51. <el-form-item label="预算" prop="budget">
  52. <el-input v-if="isModifyMode" type="number" v-model="project.budget">
  53. ¥
  54. <template slot="append"></template>
  55. </el-input>
  56. <span v-if="!isModifyMode">{{project.budget}}¥</span>
  57. </el-form-item>
  58. <el-form-item label="需求描述">
  59. <el-input v-if="isModifyMode" type="textarea" v-model="project.desc"></el-input>
  60. <span v-if="!isModifyMode">{{project.desc}}</span>
  61. </el-form-item>
  62. <!--<el-form-item label="价格" prop="price">-->
  63. <!--<el-input v-if="isModifyMode" type="number" v-model="project.price">-->
  64. <!--<template slot="append">¥</template>-->
  65. <!--</el-input>-->
  66. <!--<span v-if="!isModifyMode">{{project.price}}¥</span>-->
  67. <!--</el-form-item>-->
  68. <el-form-item label="平台" prop="platform">
  69. <el-checkbox-group v-if="isModifyMode" v-model="project.platform">
  70. <span v-for="(item,index) in platforms" :key="index">
  71. <el-checkbox :label="item">{{ item }}&nbsp;&nbsp;&nbsp;&nbsp;</el-checkbox>
  72. </span>
  73. </el-checkbox-group>
  74. <span
  75. v-if="!isModifyMode"
  76. class="badge"
  77. v-for="item in project.platform"
  78. >{{item}}</span>
  79. </el-form-item>
  80. <el-form-item label="服务类型" prop="type">
  81. <el-checkbox-group v-if="isModifyMode" v-model="project.type">
  82. <span v-for="(item,index) in serviceType" :key="index">
  83. <el-checkbox :label="item" name="type">{{ item }}&nbsp;&nbsp;</el-checkbox>
  84. </span>
  85. </el-checkbox-group>
  86. <span v-if="!isModifyMode" class="badge" v-for="item in project.type">{{item}}</span>
  87. </el-form-item>
  88. <!--<el-form-item label="用途" prop="usage">-->
  89. <!--<el-input v-if="isModifyMode" v-model="project.usage"></el-input>-->
  90. <!--<span v-if="!isModifyMode">{{project.usage}}</span>-->
  91. <!--</el-form-item>-->
  92. <el-form-item label="项目可见性" prop="resource">
  93. <div v-if="!isModifyMode">
  94. <div v-if="project.resource=='1'">{{updateLocation(project.location)}}</div>
  95. <div v-if="project.resource=='0'">{{project.institution==null?'暂未被接收':project.institution}}</div>
  96. <div v-if="project.resource=='2'">{{resourceType[project.resource]}}</div>
  97. </div>
  98. <el-tabs :tab-position="tabPosition" v-model="project.resource" style="max-height: 200px;"
  99. v-if="isModifyMode">
  100. <el-tab-pane :label="resourceType[0]" name="0">
  101. <el-radio-group v-model="project.institution">
  102. <el-radio :label="item" name="type" v-for="(item,index) in institutionArray" :key="index">
  103. {{item.name}}
  104. </el-radio>
  105. </el-radio-group>
  106. </el-tab-pane>
  107. <el-tab-pane :label="resourceType[1]" name="1">
  108. <provincecity
  109. ref="addFormProvince"
  110. @selectChange="locationChange"
  111. :provinceCode="project.location==null?'3200':project.location.provinceCode"
  112. :cityCode="project.location==null?'3201':project.location.cityCode"
  113. ></provincecity>
  114. </el-tab-pane>
  115. <el-tab-pane :label="resourceType[2]" name="2"></el-tab-pane>
  116. </el-tabs>
  117. </el-form-item>
  118. <el-form-item label="需求文档" prop="doc">
  119. <el-upload
  120. v-if="isModifyMode"
  121. drag
  122. class="upload-demo"
  123. action=""
  124. :on-remove="handleRemove"
  125. :before-remove="beforeRemove"
  126. :limit="1"
  127. :on-exceed="handleExceed"
  128. :before-upload="beforeFileUpload"
  129. :http-request="uploadRequireDoc"
  130. :file-list="project.doc"
  131. >
  132. <i class="el-icon-upload"></i>
  133. <div class="el-upload__text">
  134. 将文件拖到此处,或
  135. <em>点击上传</em>
  136. </div>
  137. </el-upload>
  138. <span v-if="!isModifyMode"><a :href="project.requireDocUrl"><el-link :underline="false" type="primary"><i
  139. class="el-icon-document"></i>下载文档</el-link></a></span>
  140. </el-form-item>
  141. <el-form-item label="安装包" prop="file">
  142. <el-upload
  143. v-if="isModifyMode"
  144. drag
  145. class="upload-demo"
  146. action=""
  147. :on-remove="handleRemove"
  148. :before-remove="beforeRemove"
  149. :limit="1"
  150. :on-exceed="handleExceed"
  151. :before-upload="beforeApkUpload"
  152. :http-request="uploadApkFile"
  153. :file-list="project.file"
  154. >
  155. <i class="el-icon-upload"></i>
  156. <div class="el-upload__text">
  157. 将文件拖到此处,或
  158. <em>点击上传</em>
  159. </div>
  160. </el-upload>
  161. <span v-if="!isModifyMode"><a :href="project.fileUrl"><el-link :underline="false" type="primary"><i
  162. class="el-icon-document"></i>下载文件</el-link></a></span>
  163. </el-form-item>
  164. <el-form-item label="项目截止时间" prop="datetime">
  165. <div class="block" v-if="isModifyMode">
  166. <el-date-picker
  167. v-model="project.datetime"
  168. type="datetime"
  169. placeholder="选择截止时间"
  170. align="right"
  171. :picker-options="pickerOptions"
  172. ></el-date-picker>
  173. </div>
  174. <span v-if="!isModifyMode">{{new Date(project.datetime)}}</span>
  175. </el-form-item>
  176. <el-form-item v-if="isModifyMode">
  177. <div class="btn btn-small btn-info" @click="submitForm('project')">确认修改</div>
  178. <div class="btn btn-small" @click="resetForm('project')">重置</div>
  179. <div class="btn btn-small" @click="cancelMode('project')">取消</div>
  180. </el-form-item>
  181. <el-form-item v-if="!isModifyMode">
  182. <div class="btn btn-small btn-warning-soft" @click="submitProjectRequest()">结束项目</div>
  183. <!--<div class="btn btn-small btn-info" @click="submitProjectRequest()">发布项目</div>-->
  184. <div class="btn btn-small btn-info" @click="submitProjectRequest()">提交项目</div>
  185. <div class="btn btn-small btn-info" @click="applyProject()">接受项目</div>
  186. <div class="btn btn-small btn-danger" @click="submitProjectRequest()">拒绝项目</div>
  187. <div class="btn btn-small btn-info" @click="modifyForm()">修改项目</div>
  188. <!--<div class="btn btn-medium btn-info" @click="analyseDemand()">分析需求</div>-->
  189. <div class="btn btn-small btn-info" @click="createTask()">新建任务</div>
  190. <div class="btn btn-small btn-info" @click="createReport()">上传报告</div>
  191. </el-form-item>
  192. </el-form>
  193. </div>
  194. <div class="create-body" v-if="!isModifyMode">
  195. <div class="title h2">任务列表</div>
  196. <div class="task-list">
  197. <el-table :showHeader="true" :stripe="true" :data="task" style="width: 100%">
  198. <el-table-column prop="title" label="任务名称" title="任务名称"></el-table-column>
  199. <el-table-column prop="datetime" sortable label="任务截止时间"></el-table-column>
  200. <el-table-column prop="resource" label="任务可见性">
  201. <template slot-scope="scope">
  202. <div v-if="scope.row.resource=='1'">{{scope.row.location.provinceCode}}/{{scope.row.location.cityCode}}
  203. </div>
  204. <div v-if="scope.row.resource=='0'">{{scope.row.institution}}</div>
  205. <div v-if="scope.row.resource=='2'">{{resourceType[scope.row.resource]}}</div>
  206. </template>
  207. </el-table-column>
  208. <el-table-column prop="type" label="业务类型">
  209. <template slot-scope="scope">
  210. <div class="badge">{{scope.row.serviceType}}</div>
  211. </template>
  212. </el-table-column>
  213. <el-table-column align="right" label="操作">
  214. <template slot-scope="scope">
  215. <div
  216. class="btn btn-small btn-info"
  217. @click="goToTaskDetail(projectId, scope.row.id)"
  218. >查看详情
  219. </div>
  220. <div
  221. class="btn btn-small btn-danger"
  222. @click="handleDelete(scope.$index, scope.row.id)"
  223. >删除
  224. </div>
  225. </template>
  226. </el-table-column>
  227. </el-table>
  228. </div>
  229. </div>
  230. <div class="create-body" v-if="!isModifyMode">
  231. <div class="title h2">报告列表</div>
  232. <report-list v-bind:reports="reportList" v-bind:taskId=null v-bind:projectId="projectId"/>
  233. </div>
  234. </div>
  235. </template>
  236. <script>
  237. import ReportList from '@/components/report/ReportList'
  238. import Http from '@/js/http.js'
  239. import Apis from '@/js/api.js'
  240. import ResourceType from '@/constants/enum/resource-type'
  241. import provincecity from '@/components/commons/ProvinceCity'
  242. import {notify} from '@/constants/index'
  243. import {
  244. getAllInstitutions,
  245. getAllPlatformTypes,
  246. getAllServiceTypes,
  247. getProvinceCodeByProvinceName,
  248. getProvinceNameByProvinceCode,
  249. storageGet,
  250. } from '@/js/index'
  251. export default {
  252. name: 'Project',
  253. components: {
  254. provincecity,
  255. ReportList
  256. },
  257. data () {
  258. var validatePass = (rule, value, callback) => {
  259. var reg = /^(0|86|17951)?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/
  260. if (this.project.contactPhone) {
  261. if (!reg.test(this.project.contactPhone)) {
  262. callback(new Error('请检查手机号码'))
  263. } else {
  264. callback()
  265. }
  266. }
  267. }
  268. return {
  269. projectId: 0,
  270. user: {},
  271. loading: false,
  272. tabPosition: 'top',
  273. institutionArray: [],
  274. isModifyMode: false,
  275. platforms: [],
  276. resourceType: ResourceType,
  277. serviceType: [],
  278. project: {
  279. userId: 0,
  280. name: '',
  281. type: '',
  282. platform: '',
  283. desc: '',
  284. resource: '',
  285. location: '',
  286. institution: {},
  287. contactName: '',
  288. contactPhone: '',
  289. doc: [],
  290. requireDocUrl: '',
  291. file: [],
  292. fileUrl: '',
  293. budget: '',
  294. price: '',
  295. datetime: '',
  296. usage: '',
  297. status: ''
  298. },
  299. task: [],
  300. reportList: [],
  301. pickerOptions: {
  302. shortcuts: [
  303. {
  304. text: '今天',
  305. onClick (picker) {
  306. picker.$emit('pick', new Date())
  307. }
  308. },
  309. {
  310. text: '昨天',
  311. onClick (picker) {
  312. const date = new Date()
  313. date.setTime(date.getTime() - 3600 * 1000 * 24)
  314. picker.$emit('pick', date)
  315. }
  316. },
  317. {
  318. text: '一周前',
  319. onClick (picker) {
  320. const date = new Date()
  321. date.setTime(date.getTime() - 3600 * 1000 * 24 * 7)
  322. picker.$emit('pick', date)
  323. }
  324. }
  325. ]
  326. },
  327. rules: {
  328. // name: [
  329. // {required: true, message: '请输入项目名称', trigger: 'blur'}
  330. // // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
  331. // ],
  332. // type: [
  333. // {
  334. // type: 'array',
  335. // required: true,
  336. // message: '请至少选择一种服务类型',
  337. // trigger: 'change'
  338. // }
  339. // ],
  340. // platform: [
  341. // {
  342. // type: 'array',
  343. // required: true,
  344. // message: '请至少选择一个平台',
  345. // trigger: 'change'
  346. // }
  347. // ],
  348. // desc: [{required: true, message: '请填写活动形式', trigger: 'blur'}],
  349. // contact: [{validator: validatePass, trigger: 'blur'}],
  350. // resource: [
  351. // {
  352. // required: true,
  353. // message: '请选择项目可见性',
  354. // trigger: 'change'
  355. // }
  356. // ]
  357. }
  358. }
  359. },
  360. mounted () {
  361. this.$nextTick(() => {
  362. this.init()
  363. })
  364. },
  365. watch: {
  366. serviceType (val) {
  367. this.serviceType = val
  368. },
  369. institutionArray (val) {
  370. this.institutionArray = val
  371. },
  372. // 'project.institution' () {
  373. // if (this.project.institution) {
  374. // //this.$refs.addFormProvince.resetProviceCity()
  375. // this.project.location = {provinceCode: '', cityCode: ''}
  376. // }
  377. // },
  378. // 'project.location' () {
  379. // if (this.project.location.provinceCode || this.project.location.cityCode) {
  380. // this.project.institution = ''
  381. // }
  382. // },
  383. // 'project.resource' () {
  384. // if (this.project.resource == '2') {
  385. // //this.$refs.addFormProvince.resetProviceCity()
  386. // this.project.institution = ''
  387. // this.project.location = {provinceCode: '', cityCode: ''}
  388. // }
  389. // },
  390. deep: true
  391. },
  392. methods: {
  393. updateLocation (location) {
  394. //console.log(location)
  395. const loactionName = getProvinceNameByProvinceCode(location.provinceCode, location.cityCode)
  396. // var provinceName = ''
  397. // var cityName = ''
  398. // for (var item of provinceCityJSON.provinces) {
  399. // if (item.code === location.provinceCode) {
  400. // provinceName = item.name
  401. // for (var city of item.cities) {
  402. // if (city.code === location.cityCode) {
  403. // cityName = city.name
  404. // break
  405. // }
  406. // }
  407. // }
  408. // }
  409. return loactionName.provinceCode + ' / ' + loactionName.cityCode
  410. },
  411. init () {
  412. this.projectId = this.$route.params.projectId
  413. this.setServiceType()
  414. this.setPlatformType()
  415. this.setInstitutions()
  416. this.setUserInfo()
  417. this.loadData()
  418. // this.project.platform.map(item => {
  419. // this.platformType.push(PlatformType[item])
  420. // })
  421. },
  422. //提交修改
  423. submitForm (formName) {
  424. this.showLoading()
  425. const newProject = {
  426. userId: this.user.userVO.id,
  427. name: this.project.name,
  428. type: this.project.type,
  429. platform: this.project.platform,
  430. desc: this.project.desc,
  431. resource: this.project.resource,
  432. location: getProvinceNameByProvinceCode(this.project.location.provinceCode, this.project.location.cityCode),
  433. institution: this.project.institution == null ? null : this.project.institution.id,
  434. contactName: this.project.contactName,
  435. contactPhone: this.project.contactPhone,
  436. doc: this.project.requireDocUrl,
  437. file: this.project.fileUrl,
  438. budget: this.project.budget,
  439. price: this.project.price,
  440. datetime: this.project.datetime,
  441. usage: this.project.usage,
  442. }
  443. Http.put(Apis.PROJECT.UPDATE_PROJECT.replace('{projectId}', this.projectId), newProject).then((res) => {
  444. console.log('bb')
  445. console.log(res)
  446. this.projectId = res.projectDetails.id
  447. this.project.name = res.projectDetails.name
  448. this.project.contactName = res.projectDetails.contactName
  449. this.project.contactPhone = res.projectDetails.contactPhone
  450. this.project.type = res.projectDetails.type
  451. this.project.platform = res.projectDetails.platform
  452. this.project.desc = res.projectDetails.desc
  453. this.project.doc = []
  454. this.project.file = []
  455. this.project.resource = res.projectDetails.resource
  456. this.project.location = getProvinceCodeByProvinceName(res.projectDetails.location.provinceCode, res.projectDetails.location.cityCode)
  457. this.project.institution = res.projectDetails.institution
  458. this.project.datetime = new Date(res.projectDetails.datetime)
  459. this.project.price = res.projectDetails.price
  460. this.project.budget = res.projectDetails.budget
  461. this.project.usage = res.projectDetails.usage
  462. this.project.fileUrl = res.projectDetails.file
  463. this.project.requireDocUrl = res.projectDetails.doc
  464. this.task = res.taskList
  465. this.reportList = res.reportList
  466. this.isModifyMode = false
  467. this.hideLoading()
  468. notify('success', '项目修改成功')
  469. }).catch(error => {
  470. this.hideLoading()
  471. notify('error', error.data)
  472. console.log(error)
  473. })
  474. // this.$refs[formName].validate(valid => {
  475. // if (valid) {
  476. //
  477. // //提交 project
  478. // } else {
  479. // console.log('error submit!!')
  480. // return false
  481. // }
  482. // })
  483. },
  484. //重置表单
  485. resetForm (formName) {
  486. this.$refs[formName].resetFields()
  487. this.project.name = ''
  488. this.project.type = []
  489. this.project.platform = []
  490. this.project.desc = ''
  491. this.project.doc = ''
  492. this.project.file = ''
  493. this.project.contactName = ''
  494. this.project.contactPhone = ''
  495. this.project.resource = '2'
  496. this.project.institution = ''
  497. this.project.datetime = ''
  498. this.project.price = ''
  499. this.project.usage = ''
  500. this.project.budget = ''
  501. },
  502. //进入修改项目页面
  503. modifyForm () {
  504. this.isModifyMode = true
  505. console.log(this.project.doc)
  506. //this.setInstitutions()
  507. //获得update 信息
  508. //this.loadData()
  509. },
  510. //接收项目
  511. submitProjectRequest () {
  512. const data = {
  513. userId: this.user.userVO.id,
  514. projectId: this.projectId
  515. }
  516. Http.post(Apis.USER.SUBMIT_PROJECT_REQUEST, data).then((res) => {
  517. console.log(res)
  518. })
  519. },
  520. //申请项目
  521. applyProject () {
  522. const data = {
  523. userId: this.user.userVO.id,
  524. projectId: this.projectId
  525. }
  526. Http.post(Apis.USER.ACCEPT_PROJECT, data).then((res) => {
  527. console.log(res)
  528. })
  529. },
  530. cancelMode (formName) {
  531. this.isModifyMode = false
  532. this.loadData()
  533. },
  534. goToTaskDetail (projectId, taskId) {
  535. this.$router.push({
  536. name: 'Task',
  537. params: {projectId: projectId, taskId: taskId}
  538. })
  539. },
  540. createTask () {
  541. this.$router.push({name: 'TaskCreate'})
  542. },
  543. createReport () {
  544. this.$router.push({
  545. name: 'ReportCreate',
  546. params: {
  547. scope: 0,
  548. dependencyCode: this.projectId,
  549. projectId: this.projectId,
  550. taskId: null,
  551. }
  552. })
  553. },
  554. handleDelete (index, id) {
  555. this.task.splice(index, 1)
  556. },
  557. beforeApkUpload (file) {
  558. const isAPK = file.type === 'application/vnd.android.package-archive'
  559. const isDMG = file.type === 'application/octet-stream'
  560. if (!isAPK && !isDMG) {
  561. this.$message.error('上传安装包只能是 APK 或 DMG 格式!')
  562. }
  563. return isAPK || isDMG
  564. },
  565. beforeFileUpload (file) {
  566. console.log(file)
  567. const isPDF = file.type === 'application/pdf'
  568. const isDOC = file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  569. const isEXCEL = file.type === 'application/vnd.ms-excel'
  570. const isXLS = file.type === 'application/x-xls'
  571. const isTXT = file.type === 'text/plain'
  572. const isXLSX = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  573. //console.log(file)
  574. if (!(isDOC || isEXCEL || isPDF || isTXT || isXLS || isXLSX)) {
  575. this.$message.error('上传文件只能是 PDF 、 DOC 、DOCX 、XLS、TXT、XLSX 格式!')
  576. }
  577. return isDOC || isEXCEL || isPDF || isTXT || isXLS || isXLSX
  578. },
  579. analyseDemand () {
  580. this.$router.push({name: 'AnalyseDemand'})
  581. },
  582. handleAccept (index, id) {
  583. console.log('接受')
  584. },
  585. handleReject (index, id) {
  586. console.log('拒绝')
  587. },
  588. loadData () {//PROJ--2019073114009
  589. this.showLoading()
  590. Http.get(Apis.PROJECT.GET_PROJECT.replace('{projectId}', this.projectId)).then((res) => {
  591. console.log(res)
  592. this.projectId = res.projectDetails.id
  593. this.project.name = res.projectDetails.name
  594. this.project.contactName = res.projectDetails.contactName
  595. this.project.contactPhone = res.projectDetails.contactPhone
  596. this.project.type = res.projectDetails.type
  597. this.project.platform = res.projectDetails.platform
  598. this.project.desc = res.projectDetails.desc
  599. this.project.doc = []
  600. this.project.file = []
  601. this.project.resource = res.projectDetails.resource
  602. this.project.location = getProvinceCodeByProvinceName(res.projectDetails.location.provinceCode, res.projectDetails.location.cityCode)
  603. this.project.institution = res.projectDetails.institution
  604. this.project.datetime = new Date(res.projectDetails.datetime)
  605. this.project.price = res.projectDetails.price
  606. this.project.budget = res.projectDetails.budget
  607. this.project.usage = res.projectDetails.usage
  608. this.project.fileUrl = res.projectDetails.file
  609. this.project.requireDocUrl = res.projectDetails.doc
  610. this.project.userId = res.projectDetails.userId
  611. this.project.status = res.projectDetails.status
  612. this.task = res.taskList
  613. this.reportList = res.reportList
  614. this.hideLoading()
  615. }).catch((error) => {
  616. this.hideLoading()
  617. notify('error', error.data)
  618. })
  619. },
  620. locationChange (provinceId, cityId) {
  621. if (provinceId || cityId) {
  622. this.project.location = {provinceCode: provinceId, cityCode: cityId}
  623. }
  624. },
  625. handleRemove (file, fileList) {
  626. console.log(file, fileList)
  627. },
  628. handleExceed (files, fileList) {
  629. this.$message.warning(
  630. `当前限制选择 1 个文件,本次选择了 ${
  631. files.length
  632. } 个文件,共选择了 ${files.length + fileList.length} 个文件`
  633. )
  634. },
  635. beforeRemove (file, fileList) {
  636. //return this.$confirm(`确定移除 ${file.name}?`)
  637. },
  638. uploadRequireDoc (param) {
  639. this.showLoading()
  640. const formData = new FormData()
  641. let config = {
  642. //添加请求头
  643. headers: {'Content-Type': 'multipart/form-data'},
  644. }
  645. formData.append('file', param.file)
  646. Http.upload(Apis.FILE.REQUIREMENT_FILE.replace('{userId}', this.user.userVO.id), formData, config).then((res) => {
  647. this.project.requireDocUrl = res.data
  648. this.hideLoading()
  649. notify('success', '需求文档上传成功')
  650. }).catch((error) => {
  651. this.hideLoading()
  652. notify('error', '需求文档上传失败:' + error.data)
  653. })
  654. },
  655. uploadApkFile (param) {
  656. this.showLoading()
  657. const formData = new FormData()
  658. let config = {
  659. //添加请求头
  660. headers: {'Content-Type': 'multipart/form-data'},
  661. }
  662. formData.append('file', param.file)
  663. Http.upload(Apis.FILE.APK.replace('{userId}', this.user.userVO.id), formData, config).then((res) => {
  664. this.project.fileUrl = res.data
  665. this.hideLoading()
  666. notify('success', '文件上传成功')
  667. }).catch((error) => {
  668. this.hideLoading()
  669. notify('error', '文件上传失败')
  670. })
  671. },
  672. setServiceType () {
  673. getAllServiceTypes().then((res) => {
  674. this.serviceType = res
  675. }).catch((error) => {
  676. notify('error', '获取项目类型列表失败')
  677. })
  678. },
  679. setPlatformType () {
  680. this.platforms = getAllPlatformTypes()
  681. },
  682. setInstitutions () {
  683. getAllInstitutions().then((res) => {
  684. this.institutionArray = res
  685. }).catch((error) => {
  686. notify('error', '获取institution失败' + error.data)
  687. })
  688. },
  689. setUserInfo () {
  690. this.user = storageGet('user')
  691. },
  692. showLoading () {
  693. this.loading = true
  694. },
  695. hideLoading () {
  696. this.loading = false
  697. }
  698. }
  699. }
  700. </script>
  701. <style lang="less" scoped>
  702. .task-list {
  703. margin: 0 30px;
  704. }
  705. .el-col {
  706. padding: 0 !important;
  707. }
  708. .el-row {
  709. margin-bottom: 10px;
  710. }
  711. .el-input {
  712. width: 400px;
  713. }
  714. </style>
  715. <!--<div class="create-body" v-if="!isModifyMode">-->
  716. <!--<div class="title h2">分析需求</div>-->
  717. <!--<div class="task-list">-->
  718. <!--<el-table :data="analyseDemandList" style="width: 100%" max-height="400">-->
  719. <!--<el-table-column prop="institution" label="承接单位" title="承接单位"></el-table-column>-->
  720. <!--<el-table-column prop="feasibilityReport" sortable label="可行性分析报告">-->
  721. <!--<template slot-scope="scope">-->
  722. <!--<span v-if="!scope.row.feasibilityReport.url">暂无文件</span>-->
  723. <!--<a-->
  724. <!--:href="scope.row.feasibilityReport.url"-->
  725. <!--v-if="scope.row.feasibilityReport.url"-->
  726. <!--target="_blank"-->
  727. <!--&gt;-->
  728. <!--<i class="fa fa-file-text-o"></i>-->
  729. <!--{{scope.row.feasibilityReport.name}}-->
  730. <!--</a>-->
  731. <!--</template>-->
  732. <!--</el-table-column>-->
  733. <!--<el-table-column prop="priceAuditReport" sortable label="可行性分析报告">-->
  734. <!--<template slot-scope="scope">-->
  735. <!--<span v-if="!scope.row.priceAuditReport.url">暂无文件</span>-->
  736. <!--<a-->
  737. <!--:href="scope.row.priceAuditReport.url"-->
  738. <!--v-if="scope.row.priceAuditReport.url"-->
  739. <!--target="_blank"-->
  740. <!--&gt;-->
  741. <!--<i class="fa fa-file-text-o"></i>-->
  742. <!--{{scope.row.priceAuditReport.name}}-->
  743. <!--</a>-->
  744. <!--</template>-->
  745. <!--</el-table-column>-->
  746. <!--<el-table-column align="right" label="操作">-->
  747. <!--<template slot-scope="scope">-->
  748. <!--<div-->
  749. <!--class="btn btn-small btn-info"-->
  750. <!--@click="handleAccept(scope.$index, scope.row.id)"-->
  751. <!--&gt;接受-->
  752. <!--</div>-->
  753. <!--<div-->
  754. <!--class="btn btn-small btn-danger"-->
  755. <!--@click="handleReject(scope.$index, scope.row.id)"-->
  756. <!--&gt;拒绝-->
  757. <!--</div>-->
  758. <!--</template>-->
  759. <!--</el-table-column>-->
  760. <!--</el-table>-->
  761. <!--</div>-->
  762. <!--</div>-->