AgencyDetail.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  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 prop="file" label="机构logo">
  7. <span>
  8. <el-image
  9. style="width: 100px;"
  10. :src="agency.agencyPhoto"
  11. fit="scale-down"></el-image>
  12. </span>
  13. </el-form-item>
  14. <el-form-item label="机构名称" prop="name">
  15. <!--<el-input size="small" v-if="isModifyMode" v-model="agency.name"></el-input>-->
  16. <span>{{agency.evaluationAgencyName}}</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>{{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>{{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">
  34. <span v-for="(item,index) in agency.evaluationAgencyAbilityList" :key="index">
  35. <el-tag>{{item}}</el-tag>&nbsp;
  36. </span>
  37. </span>
  38. </el-form-item>
  39. <el-form-item label="机构资源" prop="evaluationAgencyResourceList">
  40. <span v-if="isModifyMode" v-for="item in agency.evaluationAgencyResourceList" :key="item.id">
  41. 资源类型:&nbsp;<el-select size="small" v-model="item.type" placeholder="请选择"
  42. style="width: 15%;margin-bottom: 10px"
  43. :value="item.type">
  44. <el-option
  45. v-for="item in resourceTypes"
  46. :key="item"
  47. :label="item"
  48. :value="item">
  49. </el-option>
  50. </el-select>
  51. 资源名称:&nbsp;<el-input size="small" v-model="item.name" style="width: 15%" prop="resourceName"></el-input>
  52. 总量:&nbsp;<el-input-number size="small" :min="0" v-model="item.totalNum"></el-input-number>
  53. 可用数量:&nbsp;<el-input-number size="small" :min="0" :max="item.totalNum"
  54. v-model="item.availableNum"></el-input-number>
  55. <el-button size="small" type="danger" icon="el-icon-delete"
  56. @click="removeAgencyResource(item.id)"></el-button>
  57. <br/>
  58. </span>
  59. <el-button v-if="isModifyMode" type="primary" icon="el-icon-circle-plus" plain size="mini"
  60. @click="addAgencyResource">添加资源
  61. </el-button>
  62. <span v-if="!isModifyMode" v-for="item in agency.evaluationAgencyResourceList" :key="item.id">
  63. 资源类型:{{item.type}};&nbsp;&nbsp;资源名称:{{item.name}};&nbsp;&nbsp;资源总量:{{item.totalNum}};&nbsp;&nbsp;可用资源:{{item.availableNum}}<br/>
  64. </span>
  65. </el-form-item>
  66. <!--<el-form-item v-if="!isModifyMode">-->
  67. <!--<div class="btn btn-medium btn-info" @click="modifyInfo()">修改</div>-->
  68. <!--<div class="btn btn-medium" @click="cancelModify()">返回</div>-->
  69. <!--</el-form-item>-->
  70. <el-form-item>
  71. <el-button v-if="isModifyMode" type="primary" size="small" @click="submitInfo()">提交</el-button>
  72. <el-button v-if="isModifyMode" type="info" size="small" @click="cancelModify()">取消</el-button>
  73. <el-button v-if="!isModifyMode" type="primary" size="small" @click="modifyInfo()">修改</el-button>
  74. <!--<div class="btn btn-primary" @click="cancelModify()">取消</div>-->
  75. </el-form-item>
  76. </el-form>
  77. </div>
  78. </div>
  79. </template>
  80. <script>
  81. import {notify} from '@/constants/index'
  82. import {
  83. getAllAbilities,
  84. getAllAgencyResourceTypes,
  85. getCurrentAgencyAuthInfo,
  86. storageGet,
  87. updateAgencyResourceAndAbility
  88. } from '@/js/index'
  89. export default {
  90. name: 'Agency',
  91. data () {
  92. return {
  93. user: {},
  94. userId: 0,
  95. loading: false,
  96. isModifyMode: false,
  97. dialogVisible: false,
  98. serviceTypes: [],
  99. resourceTypes: [],
  100. agency: {
  101. evaluationAgencyName: '',
  102. bankAccount: '',
  103. address: '',
  104. evaluationAgencyAbilityList: [],
  105. evaluationAgencyResourceList: [
  106. {
  107. id: 0,
  108. type: '',
  109. name: '',
  110. totalNum: 0,
  111. availableNum: 0,
  112. }
  113. ],
  114. agencyPhoto: '',
  115. },
  116. rules: {
  117. evaluationAgencyAbilityList: [
  118. {type: 'array', required: true, message: '请至少选择一个机构能力', trigger: 'change'}
  119. // { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
  120. ],
  121. evaluationAgencyResourceList: [
  122. {
  123. validator: (rule, value, callback) => {
  124. var isError = false
  125. for (var i = 0; i < value.length; i++) {
  126. if (value[i].name == '') {
  127. isError = true
  128. break
  129. }
  130. }
  131. if (isError) {
  132. callback(new Error('资源名称不可为空'))
  133. } else {
  134. callback()
  135. }
  136. }, trigger: 'blur'
  137. },
  138. ],
  139. resourceName: [
  140. {required: true, message: '请输入地址', trigger: 'blur'}
  141. ]
  142. },
  143. }
  144. },
  145. mounted () {
  146. this.$nextTick(() => {
  147. this.init()
  148. })
  149. },
  150. methods: {
  151. //初始化
  152. init () {
  153. this.setServiceTypes()
  154. this.setResourceTypes()
  155. this.setUserInfo()
  156. this.getAgencyInfo()
  157. },
  158. getAgencyInfo () {
  159. this.showLoading()
  160. getCurrentAgencyAuthInfo(this.user.userVO.id, this.getAgencyInfoSuccess, this.getAgencyInfoFail)
  161. },
  162. getAgencyInfoSuccess (res) {
  163. this.hideLoading()
  164. this.agency.evaluationAgencyName = res.evaluationAgencyName
  165. this.agency.bankAccount = res.bankAccount
  166. this.agency.address = res.address
  167. this.agency.evaluationAgencyAbilityList = res.evaluationAgencyAbilityList
  168. this.agency.evaluationAgencyResourceList = res.evaluationAgencyResourceList
  169. this.agency.agencyPhoto = res.agencyPhoto
  170. },
  171. getAgencyInfoFail (error) {
  172. this.hideLoading()
  173. notify('error', '获取机构信息失败:' + error.data)
  174. },
  175. //表单进入可编辑状态,可修改表单,不再使用
  176. modifyInfo () {
  177. this.isModifyMode = true
  178. },
  179. //提交表单
  180. submitInfo () {
  181. this.$refs['agency'].validate(valid => {
  182. if (valid) {
  183. this.showLoading()
  184. const data = {
  185. evaluationAgencyAbilityList: this.agency.evaluationAgencyAbilityList,
  186. evaluationAgencyResourceList: this.agency.evaluationAgencyResourceList
  187. }
  188. updateAgencyResourceAndAbility(this.user.userVO.id, data, this.submitInfoSuccess, this.submitInfoFail)
  189. } else {
  190. notify('error', '表单填写错误!')
  191. return false
  192. }
  193. })
  194. },
  195. submitInfoSuccess (res) {
  196. this.hideLoading()
  197. notify('success', '修改成功')
  198. this.cancelModify()
  199. },
  200. submitInfoFail (error) {
  201. this.hideLoading()
  202. notify('error', '修改资源能力失败:' + error.data)
  203. },
  204. //取消修改表单,表单进入不可编辑状态,不再使用
  205. cancelModify () {
  206. this.isModifyMode = false
  207. this.getAgencyInfo()
  208. },
  209. //TODO 跳转到登录页面
  210. toLogin () {
  211. this.hideDialog()
  212. this.$router.push({
  213. name: 'Home',
  214. // params: {projectId: projectId, taskId: taskId}
  215. })
  216. },
  217. //设置服务类型
  218. setServiceTypes () {
  219. this.serviceTypes = getAllAbilities()
  220. },
  221. //添加一项测评机构资源
  222. addAgencyResource () {
  223. const tmpResource = {
  224. id: this.agency.evaluationAgencyResourceList.length,
  225. type: this.resourceTypes[0],
  226. name: '',
  227. totalNum: 0,
  228. availableNum: 0,
  229. }
  230. this.agency.evaluationAgencyResourceList.push(tmpResource)
  231. },
  232. //删除一项测评机构资源
  233. removeAgencyResource (id) {
  234. this.agency.evaluationAgencyResourceList.splice(id, 1)
  235. for (var i = 0; i < this.agency.evaluationAgencyResourceList.length; i++) {
  236. this.agency.evaluationAgencyResourceList[i].id = i
  237. }
  238. },
  239. //设置测评机构资源类型
  240. setResourceTypes () {
  241. this.resourceTypes = getAllAgencyResourceTypes()
  242. },
  243. //检测测评机构资源填写是否有效
  244. checkAgencyResourceVaild () {
  245. if (this.agency.evaluationAgencyResourceList.length === 0) {
  246. return true
  247. }
  248. for (var i = 0; i < this.agency.evaluationAgencyResourceList.length; i++) {
  249. const item = this.agency.evaluationAgencyResourceList[i]
  250. if (item.type === '') {
  251. notify('error', '资源类型不能为空')
  252. return false
  253. }
  254. if (item.name === '') {
  255. notify('error', '资源名称不能为空')
  256. return false
  257. }
  258. if (item.totalNum < item.availableNum) {
  259. notify('error', '资源总数量不能低于可用数量')
  260. return false
  261. }
  262. }
  263. return true
  264. },
  265. //获取用户信息
  266. setUserInfo () {
  267. this.user = storageGet('user')
  268. },
  269. //显示loading
  270. showLoading () {
  271. this.loading = true
  272. },
  273. //隐藏loading
  274. hideLoading () {
  275. this.loading = false
  276. }
  277. },
  278. created: function () {
  279. }
  280. }
  281. </script>
  282. <style scoped>
  283. .el-radio {
  284. margin: 10px 20px 10px 0;
  285. }
  286. .el-form-item /deep/ .el-tabs__content {
  287. max-height: 120px !important;
  288. overflow: auto;
  289. }
  290. .el-row {
  291. margin-bottom: 10px;
  292. }
  293. .el-input {
  294. width: 400px;
  295. }
  296. .avatar-uploader .el-upload {
  297. border: 1px dashed #d9d9d9;
  298. border-radius: 6px;
  299. cursor: pointer;
  300. position: relative;
  301. overflow: hidden;
  302. }
  303. .avatar-uploader .el-upload:hover {
  304. border-color: #409EFF;
  305. }
  306. .avatar-uploader-icon {
  307. font-size: 28px;
  308. color: #8c939d;
  309. width: 178px;
  310. height: 178px;
  311. line-height: 178px;
  312. text-align: center;
  313. border: 1px dashed #d9d9d9;
  314. border-radius: 6px;
  315. cursor: pointer;
  316. position: relative;
  317. overflow: hidden;
  318. }
  319. .avatar {
  320. width: 178px;
  321. height: 178px;
  322. display: block;
  323. }
  324. .el-input-number {
  325. width: 150px;
  326. }
  327. </style>