AgencyAdd.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. <template>
  2. <div class="create-container">
  3. <div class="create-body">
  4. <div class="title">添加机构</div>
  5. <el-form :model="agency" :rules="rules" ref="agency" label-width="12%" class="demo-report">
  6. <!--<el-form-item prop="file" label="头像">-->
  7. <!--<el-row class="demo-avatar demo-basic">-->
  8. <!--<el-col :span="12">-->
  9. <!--<div class="demo-basic&#45;&#45;circle">-->
  10. <!--<div class="block">-->
  11. <!--<el-avatar :size="200" src="https://www.baidu.com/img/bd_logo1.png"></el-avatar>-->
  12. <!--</div>-->
  13. <!--</div>-->
  14. <!--</el-col>-->
  15. <!--</el-row>- -->
  16. <!--</el-form-item>-->
  17. <el-form-item label="机构名称" prop="name">
  18. <el-input v-if="isModifyMode" v-model="agency.name"></el-input>
  19. <!--<span v-if="!isModifyMode">{{agency.name}}</span>-->
  20. </el-form-item>
  21. <el-form-item label="机构电话" prop="name">
  22. <el-input v-if="isModifyMode" v-model="agency.mobile"></el-input>
  23. <!--<span v-if="!isModifyMode">{{agency.name}}</span>-->
  24. </el-form-item>
  25. <el-form-item label="机构邮箱" prop="name">
  26. <el-input v-if="isModifyMode" v-model="agency.email"></el-input>
  27. <!--<span v-if="!isModifyMode">{{agency.name}}</span>-->
  28. </el-form-item>
  29. <el-form-item label="银行卡账户" prop="name">
  30. <el-input v-if="isModifyMode" v-model="agency.bankAccount"></el-input>
  31. <!--<span v-if="!isModifyMode">{{agency.bankAccount}}</span>-->
  32. </el-form-item>
  33. <el-form-item label="地址" prop="name">
  34. <el-input v-if="isModifyMode" v-model="agency.address"></el-input>
  35. <!--<span v-if="!isModifyMode">{{agency.address}}</span>-->
  36. </el-form-item>
  37. <el-form-item label="测评机构能力" prop="name">
  38. <el-checkbox-group v-if="isModifyMode" v-model="agency.ability">
  39. <span v-for="(item,index) in serviceTypes" :key="index">
  40. <el-checkbox :label="item" name="type">{{item}}&nbsp;&nbsp;&nbsp;&nbsp;</el-checkbox>
  41. </span>
  42. </el-checkbox-group>
  43. <!--<span v-if="!isModifyMode">{{agency.ability}}</span>-->
  44. </el-form-item>
  45. <el-form-item label="测评机构资源" prop="name">
  46. <span v-for="item in agency.resource" :key="item.id">
  47. 资源类型:&nbsp;<el-select v-model="item.type" placeholder="请选择" style="width: 150px;margin-bottom: 10px" :value="item.type">
  48. <el-option
  49. v-for="item in resourceTypes"
  50. :key="item"
  51. :label="item"
  52. :value="item">
  53. </el-option>
  54. </el-select>
  55. 资源名称:&nbsp;<el-input v-model="item.name" style="width: 150px"></el-input>
  56. 总量:&nbsp;<el-input-number :min="0" v-model="item.totalNum"></el-input-number>
  57. 可用数量:&nbsp;<el-input-number :min="0" :max="item.totalNum" v-model="item.availableNum"></el-input-number>
  58. <el-button type="danger" icon="el-icon-delete" @click="removeAgencyResource(item.id)"></el-button>
  59. <br/>
  60. </span>
  61. <el-button type="primary" icon="el-icon-circle-plus" plain size="small" @click="addAgencyResource">添加资源
  62. </el-button>
  63. <!--<div>-->
  64. <!--<el-row>-->
  65. <!--<el-col :span="2">-->
  66. <!--<span>专家数量</span>-->
  67. <!--</el-col>-->
  68. <!--<el-col :span="10">-->
  69. <!--共&nbsp;&nbsp;<el-input-number :min="0" v-model="agency.professionalsCount"-->
  70. <!--placeholder="0"></el-input-number>&nbsp;&nbsp;人,-->
  71. <!--可用&nbsp;&nbsp;<el-input-number :min="0" v-model="agency.professionalsFreeCount"-->
  72. <!--placeholder="0"></el-input-number>&nbsp;&nbsp;人;-->
  73. <!--</el-col>-->
  74. <!--</el-row>-->
  75. <!--<el-row>-->
  76. <!--<el-col :span="2">-->
  77. <!--<span>服务器数量</span>-->
  78. <!--</el-col>-->
  79. <!--<el-col :span="10">-->
  80. <!--共&nbsp;&nbsp;<el-input-number :min="0" v-model="agency.serversCount" placeholder="0"></el-input-number>&nbsp;&nbsp;台,-->
  81. <!--可用&nbsp;&nbsp;<el-input-number :min="0" v-model="agency.serversFreeCount"-->
  82. <!--placeholder="0"></el-input-number>&nbsp;&nbsp;台;-->
  83. <!--</el-col>-->
  84. <!--</el-row>-->
  85. <!--<el-row>-->
  86. <!--<el-col :span="2">-->
  87. <!--<span>专用设备数量</span>-->
  88. <!--</el-col>-->
  89. <!--<el-col :span="10">-->
  90. <!--共&nbsp;&nbsp;<el-input-number :min="0" v-model="agency.devicesCount" placeholder="0"></el-input-number>&nbsp;&nbsp;台,-->
  91. <!--可用&nbsp;&nbsp;<el-input-number :min="0" v-model="agency.devicesFreeCount"-->
  92. <!--placeholder="0"></el-input-number>&nbsp;&nbsp;台。-->
  93. <!--</el-col>-->
  94. <!--</el-row>-->
  95. <!--</div>-->
  96. <!--<el-input v-if="isModifyMode" v-model="agency.resource"></el-input>-->
  97. <!--<span v-if="!isModifyMode">{{agency.resource}}</span>-->
  98. </el-form-item>
  99. <el-form-item prop="file" label="机构logo">
  100. <el-upload
  101. v-if="isModifyMode"
  102. class="avatar-uploader"
  103. :show-file-list="false"
  104. action="https://jsonplaceholder.typicode.com/posts/"
  105. :before-upload="beforeFileUpload"
  106. :http-request="uploadFile"
  107. :file-list="agency.photo"
  108. >
  109. <img v-if="agency.photoUrl" :src="agency.photoUrl" class="avatar">
  110. <i v-else class="el-icon-plus avatar-uploader-icon"></i>
  111. <!--<div class="el-upload__text">-->
  112. <!--将文件拖到此处,或-->
  113. <!--<em>点击上传</em>-->
  114. <!--</div>-->
  115. <!--<div class="el-upload__tip" slot="tip">请上传报告文件</div>-->
  116. </el-upload>
  117. <!--<div v-if="!isModifyMode">-->
  118. <!--<span v-if="agency.photo==null">暂无文件</span>-->
  119. <!--<a :href="agency.photo" v-if="agency.photo!=null"><i class="fa fa-file-text-o"></i>-->
  120. <!--{{agency.photo}}</a>-->
  121. <!--</div>-->
  122. </el-form-item>
  123. <!--<el-form-item v-if="!isModifyMode">-->
  124. <!--<div class="btn btn-medium btn-info" @click="modifyInfo()">修改</div>-->
  125. <!--<div class="btn btn-medium" @click="cancelModify()">返回</div>-->
  126. <!--</el-form-item>-->
  127. <el-form-item v-if="isModifyMode">
  128. <div class="btn btn-primary btn-info" @click="submitInfo()">提交</div>
  129. <!--<div class="btn btn-primary" @click="cancelModify()">取消</div>-->
  130. </el-form-item>
  131. </el-form>
  132. <el-dialog
  133. title="测评机构添加成功"
  134. :visible.sync="dialogVisible"
  135. width="30%"
  136. :before-close="handleDialogClose"
  137. center>
  138. <span>
  139. <el-card class="box-card" shadow="always">
  140. <div slot="header" class="clearfix">
  141. <span>您添加的机构信息</span>
  142. </div>
  143. <div class="text item">
  144. <ul style="list-style-type:none">
  145. <li>机构名称:{{ agency.name }}</li>
  146. <li>机构电话:{{ agency.mobile }}</li>
  147. <li>银行卡账户:{{ agency.bankAccount }}</li>
  148. <li>地址:{{ agency.address }}</li>
  149. <li>邮箱:{{ agency.email }}</li>
  150. </ul>
  151. </div>
  152. </el-card>
  153. <br/>
  154. <el-card class="box-card" shadow="always">
  155. <div class="text item">
  156. 您可以使用以下的账号密码登录系统:
  157. <ul style="list-style-type:none">
  158. <li>账号:{{ agency.email }}</li>
  159. <li>密码:{{ agency.mobile }}</li>
  160. </ul>
  161. 也可以使用手机号{{ agency.mobile }}验证码登录
  162. </div>
  163. </el-card>
  164. </span>
  165. <span slot="footer" class="dialog-footer">
  166. <el-button @click="handleDialogClose">返 回</el-button>
  167. <el-button type="primary" @click="toLogin">去登录</el-button>
  168. </span>
  169. </el-dialog>
  170. </div>
  171. </div>
  172. </template>
  173. <script>
  174. import Http from '@/js/http'
  175. import Apis from '@/js/api'
  176. import {notify} from '@/constants/index'
  177. import {getAllAbilities, getAllAgencyResourceTypes} from '@/js/index'
  178. export default {
  179. name: 'AgencyAdd',
  180. data () {
  181. return {
  182. userId: 0,
  183. isModifyMode: true,
  184. dialogVisible: false,
  185. serviceTypes: [],
  186. resourceTypes: [],
  187. agency: {
  188. mobile: '',
  189. email: '',
  190. name: '',
  191. bankAccount: '',
  192. address: '',
  193. ability: [],
  194. resource: [
  195. {
  196. id: 0,
  197. type: '',
  198. name: '',
  199. totalNum: 0,
  200. availableNum: 0,
  201. }
  202. ],
  203. professionalsCount: 0,
  204. professionalsFreeCount: 0,
  205. serversCount: 0,
  206. serversFreeCount: 0,
  207. devicesCount: 0,
  208. devicesFreeCount: 0,
  209. photo: [],
  210. photoUrl: '',
  211. password: '',
  212. username: '',
  213. },
  214. rules: {
  215. // name: [
  216. // {required: true, message: '请输入报告名称', trigger: 'blur'}
  217. // // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
  218. // ],
  219. // abstract: [
  220. // {
  221. // required: true,
  222. // message: '请输入摘要信息',
  223. // trigger: 'change'
  224. // }
  225. // ],
  226. // type: [
  227. // {required: true, message: '请选择报告类型', trigger: 'change'}
  228. // ],
  229. // conclusion: [
  230. // {required: true, message: '请输入报告结论', trigger: 'blur'}
  231. // ]
  232. },
  233. tableData: [{
  234. date: '2016-05-02',
  235. name: '王小虎',
  236. address: '上海市普陀区金沙江路 1518 弄'
  237. }, {
  238. date: '2016-05-04',
  239. name: '王小虎',
  240. address: '上海市普陀区金沙江路 1517 弄'
  241. }, {
  242. date: '2016-05-01',
  243. name: '王小虎',
  244. address: '上海市普陀区金沙江路 1519 弄'
  245. }, {
  246. date: '2016-05-03',
  247. name: '王小虎',
  248. address: '上海市普陀区金沙江路 1516 弄'
  249. }]
  250. }
  251. },
  252. mounted () {
  253. this.$nextTick(() => {
  254. this.init()
  255. })
  256. },
  257. methods: {
  258. //初始化
  259. init () {
  260. this.setServiceTypes()
  261. this.setResourceTypes()
  262. },
  263. //加载数据
  264. loadData: function () {
  265. },
  266. //表单进入可编辑状态,可修改表单,不再使用
  267. modifyInfo () {
  268. this.isModifyMode = true
  269. },
  270. //提交表单
  271. submitInfo () {
  272. //this.showDialog()
  273. const newAgency = {
  274. mobile: this.agency.mobile,
  275. evaluationAgencyName: this.agency.name,
  276. bankAccount: this.agency.bankAccount,
  277. address: this.agency.address,
  278. abilities: this.agency.ability,
  279. resources: this.agency.resource,
  280. agencyPhoto: this.agency.photoUrl,
  281. email: this.agency.email
  282. }
  283. Http.post(Apis.USER.ADD_AGENCY, newAgency).then((res) => {
  284. // console.log(res)
  285. // console.log(res.data)
  286. res = res.data
  287. this.agency.password = res.userVO.password
  288. this.agency.username = res.userVO.userName
  289. this.agency.mobile = res.userVO.mobileNum
  290. this.showDialog()
  291. }).catch(error => {
  292. notify('error', error.data.msg)
  293. })
  294. },
  295. //取消修改表单,表单进入不可编辑状态,不再使用
  296. cancelModify () {
  297. this.isModifyMode = false
  298. },
  299. //上传文件时移除文件的响应函数
  300. handleRemove (file, fileList) {
  301. console.log(file, fileList)
  302. },
  303. //添加文件时的响应函数
  304. handleExceed (files, fileList) {
  305. this.$message.warning(
  306. `当前限制选择 1 个文件,本次选择了 ${
  307. files.length
  308. } 个文件,共选择了 ${files.length + fileList.length} 个文件`
  309. )
  310. },
  311. //移除文件前的响应函数
  312. beforeRemove (file, fileList) {
  313. return this.$confirm(`确定移除 ${file.name}?`)
  314. },
  315. //文件上传前的响应函数
  316. beforeFileUpload () {
  317. },
  318. //上传文件,此处为上传图片
  319. uploadFile (param) {
  320. const formData = new FormData()
  321. let config = {
  322. //添加请求头
  323. headers: {'Content-Type': 'multipart/form-data'},
  324. }
  325. formData.append('file', param.file)
  326. Http.upload(Apis.FILE.UPLOAD_IMAGE.replace('{userId}', 3), formData, config).then((res) => {
  327. this.agency.photoUrl = res.data
  328. console.log(res.data)
  329. notify('success', '上传成功')
  330. sessionStorage.setItem('file', 'qweqewqweqweqweqew')
  331. sessionStorage.getItem('file')
  332. }).catch(error => {
  333. notify('error', error.data.msg)
  334. })
  335. },
  336. //关闭对话框时的响应函数
  337. handleDialogClose (done) {
  338. this.$confirm('确认退出?退出前请记录下登录账号和密码,否则无法找回!!!')
  339. .then(_ => {
  340. //done()
  341. this.hideDialog()
  342. })
  343. .catch(_ => {
  344. })
  345. },
  346. //弹出对话框
  347. showDialog () {
  348. this.dialogVisible = true
  349. },
  350. //隐藏对话框
  351. hideDialog () {
  352. this.dialogVisible = false
  353. this.resetForm()
  354. },
  355. //TODO 跳转到登录页面
  356. toLogin () {
  357. this.hideDialog()
  358. this.$router.push({
  359. name: 'Home',
  360. // params: {projectId: projectId, taskId: taskId}
  361. })
  362. },
  363. //重置表单
  364. resetForm () {
  365. this.agency = {
  366. mobile: '',
  367. email: '',
  368. name: '',
  369. bankAccount: '',
  370. address: '',
  371. ability: '',
  372. resource: '',
  373. photo: [],
  374. photoUrl: '',
  375. password: '',
  376. username: '',
  377. }
  378. },
  379. //设置服务类型
  380. setServiceTypes () {
  381. this.serviceTypes = getAllAbilities()
  382. },
  383. //添加一项测评机构资源
  384. addAgencyResource () {
  385. const tmpResource = {
  386. id: this.agency.resource.length,
  387. type: this.resourceTypes[0],
  388. name: '',
  389. totalNum: 0,
  390. availableNum: 0,
  391. }
  392. this.agency.resource.push(tmpResource)
  393. },
  394. //删除一项测评机构资源
  395. removeAgencyResource (id) {
  396. this.agency.resource.splice(id, 1)
  397. for (var i = 0; i < this.agency.resource.length; i++) {
  398. this.agency.resource[i].id = i
  399. }
  400. },
  401. //设置测评机构资源类型
  402. setResourceTypes () {
  403. this.resourceTypes = getAllAgencyResourceTypes()
  404. },
  405. //检测测评机构资源填写是否有效
  406. checkAgencyResourceVaild () {
  407. if (this.agency.resource.length === 0) {
  408. return true
  409. }
  410. for (var i = 0; i < this.agency.resource.length; i++) {
  411. const item = this.agency.resource[i]
  412. if (item.type === '') {
  413. notify('error', '资源类型不能为空')
  414. return false
  415. }
  416. if (item.name === '') {
  417. notify('error', '资源名称不能为空')
  418. return false
  419. }
  420. if (item.totalNum < item.availableNum) {
  421. notify('error', '资源总数量不能低于可用数量')
  422. return false
  423. }
  424. }
  425. return true
  426. }
  427. },
  428. created: function () {
  429. }
  430. }
  431. </script>
  432. <style scoped>
  433. .el-radio {
  434. margin: 10px 20px 10px 0;
  435. }
  436. .el-form-item /deep/ .el-tabs__content {
  437. max-height: 120px !important;
  438. overflow: auto;
  439. }
  440. .el-row {
  441. margin-bottom: 10px;
  442. }
  443. .el-input {
  444. width: 400px;
  445. }
  446. .avatar-uploader .el-upload {
  447. border: 1px dashed #d9d9d9;
  448. border-radius: 6px;
  449. cursor: pointer;
  450. position: relative;
  451. overflow: hidden;
  452. }
  453. .avatar-uploader .el-upload:hover {
  454. border-color: #409EFF;
  455. }
  456. .avatar-uploader-icon {
  457. font-size: 28px;
  458. color: #8c939d;
  459. width: 178px;
  460. height: 178px;
  461. line-height: 178px;
  462. text-align: center;
  463. border: 1px dashed #d9d9d9;
  464. border-radius: 6px;
  465. cursor: pointer;
  466. position: relative;
  467. overflow: hidden;
  468. }
  469. .avatar {
  470. width: 178px;
  471. height: 178px;
  472. display: block;
  473. }
  474. .el-input-number {
  475. width: 150px;
  476. }
  477. </style>