Edit.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. <template>
  2. <div class="card-container">
  3. <div class="card-content">
  4. <el-form
  5. :model="editForm"
  6. :rules="rule"
  7. v-loading="loading"
  8. ref="editForm"
  9. label-position="right"
  10. label-width="180px">
  11. <div class="section-title">Monthly Credit Limit:</div>
  12. <el-row :gutter="20">
  13. <el-col :xs="24" :md="12">
  14. <el-form-item
  15. label="Fleet Company:"
  16. prop="fleetCompanyId">
  17. <el-select
  18. class="add-text"
  19. remote
  20. filterable
  21. :remote-method="filterCompany"
  22. v-model="editForm.fleetCompanyId"
  23. placeholder="Select with search">
  24. <el-option
  25. v-for="(item, index) in companyOptions"
  26. :key="index"
  27. :label="item.fleetCompanyName"
  28. :value="item.fleetCompanyId"/>
  29. </el-select>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :xs="24" :md="12">
  33. <el-form-item
  34. label="Status:"
  35. prop="registrationStatus">
  36. <el-select
  37. class="add-text"
  38. v-model="editForm.creditLimitStatus"
  39. placeholder="Select">
  40. <el-option
  41. v-for="(item, index) in statusOptions"
  42. :key="index"
  43. :label="item.name"
  44. :value="item.value"/>
  45. </el-select>
  46. </el-form-item>
  47. </el-col>
  48. </el-row>
  49. <el-row :gutter="20">
  50. <el-col :xs="24" :md="12">
  51. <el-form-item
  52. label="Monthly Credit Limit:"
  53. prop="creditLimitAmount">
  54. <span class="item-unit">(S$)</span>
  55. <el-input
  56. class="add-text"
  57. v-model="editForm.creditLimitAmount"
  58. placeholder="Add text"
  59. maxlength="10"/>
  60. </el-form-item>
  61. </el-col>
  62. <el-col :xs="24" :md="12">
  63. <el-form-item
  64. label="Effective Start Date:"
  65. prop="effectiveStartDate">
  66. <el-date-picker
  67. class="add-text"
  68. v-model="editForm.effectiveStartDate"
  69. type="date"
  70. format="yyyy-MM-dd"
  71. value-format="yyyy-MM-dd"
  72. placeholder="Select date"/>
  73. </el-form-item>
  74. </el-col>
  75. </el-row>
  76. <el-row :gutter="20">
  77. <el-col :xs="24" :md="12">
  78. <el-form-item
  79. label="Used Credit Limit:">
  80. <span class="item-unit">(S$)</span>
  81. <el-input
  82. class="add-text"
  83. v-model="editForm.usedCreditLimitAmount"
  84. readonly
  85. maxlength="10"/>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :xs="24" :md="12">
  89. <el-form-item
  90. label="Effective End Date:"
  91. prop="effectiveEndDate">
  92. <el-date-picker
  93. class="add-text"
  94. v-model="editForm.effectiveEndDate"
  95. type="date"
  96. format="yyyy-MM-dd"
  97. value-format="yyyy-MM-dd"
  98. placeholder="Select date"/>
  99. </el-form-item>
  100. </el-col>
  101. </el-row>
  102. <el-row :gutter="20">
  103. <el-col :xs="24" :md="12">
  104. <el-form-item
  105. label="Remaining Credit Limit:">
  106. <span class="item-unit">(S$)</span>
  107. <el-input
  108. class="add-text"
  109. v-model="editForm.creditLimitRemainingAmount"
  110. readonly
  111. maxlength="10"/>
  112. </el-form-item>
  113. </el-col>
  114. <el-col :xs="24" :md="12">
  115. <el-form-item
  116. label="Deposit Received:"
  117. prop="depositReceivedAmount">
  118. <span class="item-unit">(S$)</span>
  119. <el-input
  120. class="add-text"
  121. v-model="editForm.depositReceivedAmount"
  122. placeholder="Add text"
  123. maxlength="10"/>
  124. </el-form-item>
  125. </el-col>
  126. </el-row>
  127. <div class="hr-full"/>
  128. <div class="buttons">
  129. <el-button
  130. type="primary"
  131. class="cancel-button"
  132. @click="handleClickCancleButton">
  133. Cancel
  134. </el-button>
  135. <el-button
  136. style="margin-left: 20px;"
  137. type="primary"
  138. native-type="submit"
  139. @click="handleClickSaveButton">
  140. Save
  141. </el-button>
  142. </div>
  143. </el-form>
  144. </div>
  145. </div>
  146. </template>
  147. <script>
  148. import { mapState } from 'vuex'
  149. import limit from '../../http/api/limit.js'
  150. import fleet from '../../http/api/fleetCompany.js'
  151. export default {
  152. data() {
  153. return {
  154. loading: false,
  155. companyOptions: [],
  156. statusOptions: [],
  157. rule: {
  158. "fleetCompanyId": {
  159. required: true,
  160. trigger: 'change',
  161. message: 'Please select a fleet company'
  162. },
  163. "creditLimitStatus": {
  164. required: true,
  165. trigger: 'change',
  166. message: 'Please select a status'
  167. },
  168. "creditLimitAmount": [{
  169. required: true,
  170. trigger: 'blur',
  171. message: 'Please type Monthly Credit Limit'
  172. }, {
  173. pattern: /^\d+(.{0,1}\d{1,})?$/,
  174. trigger: 'blur',
  175. message: 'Please type a number of amount'
  176. }],
  177. "effectiveStartDate": {
  178. required: true,
  179. trigger: 'change',
  180. message: 'Please select effective start date'
  181. },
  182. "effectiveEndDate": {
  183. required: true,
  184. trigger: 'change',
  185. message: 'Please select effective end date'
  186. },
  187. "depositReceivedAmount": [{
  188. required: true,
  189. trigger: 'blur',
  190. message: 'Please type deposit received'
  191. }, {
  192. pattern: /^\d+(.{0,1}\d{1,})?$/,
  193. trigger: 'blur',
  194. message: 'Please type a number of amount'
  195. }],
  196. },
  197. editForm: {
  198. creditLimitId: 0,
  199. fleetCompanyId: '',
  200. creditLimitAmount: '',
  201. depositReceivedAmount: '',
  202. effectiveStartDate: "",
  203. effectiveEndDate: "",
  204. creditLimitStatus: ""
  205. },
  206. companyParams: {
  207. "pageSize": 20,
  208. "pageNo": 1,
  209. "pageVo": {
  210. "criteria": ""
  211. }
  212. }
  213. }
  214. },
  215. computed: {
  216. ...mapState('provider', ['creditLimit'])
  217. },
  218. created() {
  219. this.loading = true;
  220. this.getLimitInfo();
  221. this.getCompanyList();
  222. },
  223. methods: {
  224. getLimitInfo() {
  225. console.log('sdds', this.creditLimit);
  226. limit.viewCreditLimit(this.creditLimit.creditLimitId).then(res => {
  227. if (res.data) {
  228. this.editForm = res.data
  229. }
  230. }).catch(err => {
  231. this.loading = false;
  232. this.$message({
  233. message: err,
  234. type: 'error'
  235. })
  236. });
  237. },
  238. filterCompany(word) {
  239. this.companyParams.pageVo.criteria = word;
  240. this.getCompanyList();
  241. },
  242. getCompanyList() {
  243. fleet.fetchFleetCompanyPages(this.companyParams).then(res => {
  244. if (res.data) {
  245. this.companyOptions = res.data
  246. }
  247. this.getLimitStatus();
  248. }).catch(err => {
  249. this.loading = false;
  250. this.$message({
  251. message: err,
  252. type: 'error'
  253. })
  254. });
  255. },
  256. getLimitStatus() {
  257. limit.getLimitStatus().then(res => {
  258. this.loading = false;
  259. if (res.data) {
  260. this.statusOptions = res.data
  261. }
  262. }).catch(err => {
  263. this.loading = false;
  264. this.$message({
  265. message: err,
  266. type: 'error'
  267. })
  268. });
  269. },
  270. handleClickCancleButton() {
  271. this.$router.go(-1)
  272. },
  273. handleClickSaveButton() {
  274. this.$refs['editForm'].validate(result => {
  275. if (result) {
  276. this.updateLimites();
  277. }
  278. })
  279. },
  280. updateLimites() {
  281. this.loading = true;
  282. limit.updateCreditLimit(this.editForm).then(res => {
  283. this.loading = false;
  284. this.$message({
  285. message: 'Update credit limit successfully',
  286. type: 'success'
  287. })
  288. this.$router.go(-1);
  289. }).catch(err => {
  290. this.loading = false;
  291. this.$message({
  292. message: err,
  293. type: 'error'
  294. })
  295. });
  296. }
  297. }
  298. }
  299. </script>
  300. <style scoped="scoped" lang='scss'>
  301. @import '../../styles/variables.scss';
  302. .card-container {
  303. width: 100%;
  304. padding: 20px 60px;
  305. min-height: $mainAppMinHeight;
  306. background-color: #F0F5FC;
  307. }
  308. .card-content {
  309. padding: 15px 80px;
  310. border-radius: 6px;
  311. background-color: white;
  312. }
  313. .section-title {
  314. color: #333;
  315. margin-top: 20px;
  316. margin-bottom: 30px;
  317. font-size: 16px;
  318. user-select: none;
  319. line-height: 24px;
  320. font-weight: 500;
  321. font-family: sans-serif;
  322. text-transform: uppercase;
  323. }
  324. .add-text {
  325. width: 100%;
  326. max-width: 300px;
  327. }
  328. .add-text ::v-deep .el-textarea__inner {
  329. font-family: sans-serif;
  330. }
  331. .hr {
  332. height: 2px;
  333. margin: 10px -40px;
  334. background-color: #F0F5FC;
  335. }
  336. .hr-full {
  337. height: 2px;
  338. margin: 20px -80px;
  339. background-color: #F0F5FC;
  340. }
  341. .rate-list-view {
  342. display: flex;
  343. align-items: center;
  344. }
  345. .rate-text {
  346. max-width: 150px;
  347. padding-right: 14px;
  348. }
  349. .list-item-icon {
  350. width: 30px;
  351. height: 30px;
  352. cursor: pointer;
  353. margin: 0 10px 22px;
  354. }
  355. .buttons {
  356. padding-top: 15px;
  357. padding-bottom: 30px;
  358. }
  359. @media screen and (max-width: 500px) {
  360. .card-container {
  361. padding: 0px;
  362. }
  363. .card-content {
  364. padding: 15px 30px;
  365. }
  366. }
  367. .item-unit {
  368. top: 12px;
  369. left: -40px;
  370. font-size: 12px;
  371. user-select: none;
  372. position: absolute;
  373. }
  374. </style>