AgencyAdd.vue 16 KB

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