Project.vue 24 KB

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