index.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. <template>
  2. <div class="app-container">
  3. <div class="filter-container filter-view">
  4. <el-select
  5. class="filter-view-item"
  6. clearable
  7. v-model="filters.pageCriteria.contractStatus"
  8. placeholder="Contract Status"
  9. @change="toSearch">
  10. <el-option
  11. v-for="(item, index) in statusContracts"
  12. :key="index"
  13. :label="item"
  14. :value="item"/>
  15. </el-select>
  16. <el-select
  17. class="filter-view-item"
  18. clearable
  19. v-model="filters.pageCriteria.auditStatus"
  20. placeholder="Approval Status"
  21. @change="toSearch">
  22. <el-option
  23. v-for="(item, index) in statusOptions"
  24. :key="index"
  25. :label="item.key"
  26. :value="item.value"/>
  27. </el-select>
  28. <div style="flex: 1; max-width: 300px;">
  29. <el-input
  30. v-model="filters.pageCriteria.criteria"
  31. class="filter-view-item"
  32. prefix-icon="el-icon-search"
  33. placeholder="Search by Group Name"
  34. @keyup.enter.native="toSearch"
  35. @change="toSearch"
  36. clearable/>
  37. </div>
  38. <div class="filter-flex-button">
  39. <el-button
  40. v-if="!$route.meta.onlyView"
  41. class="filter-item"
  42. type="primary"
  43. icon="el-icon-plus"
  44. @click="creatLimit">
  45. Credit Limit Contract
  46. </el-button>
  47. </div>
  48. </div>
  49. <el-table
  50. v-loading="table.loading"
  51. :data="table.list">
  52. <el-table-column
  53. align="center"
  54. label="Group"
  55. prop="groupName"
  56. min-width="120">
  57. <template slot-scope="{row}">
  58. <span
  59. class="link-type"
  60. @click="editLimit(row)"
  61. v-if="!$route.meta.onlyView">
  62. {{ row.groupName }}
  63. </span>
  64. <span v-else>{{ row.groupName }}</span>
  65. </template>
  66. </el-table-column>
  67. <el-table-column
  68. align="center"
  69. label="Service Provider"
  70. prop="providerName"
  71. min-width="140"/>
  72. <el-table-column
  73. align="center"
  74. label="Monthly Credit Set"
  75. prop="creditLimitAmount"
  76. min-width="150"/>
  77. <el-table-column
  78. align="center"
  79. label="Current Useage"
  80. prop="creditLimitUsagedAmount"
  81. min-width="140"/>
  82. <el-table-column
  83. align="center"
  84. label="Approved Users"
  85. prop="approvedUsers"
  86. min-width="140"/>
  87. <el-table-column
  88. align="center"
  89. label="Effective Period"
  90. prop="effectivePeriod"
  91. min-width="140"/>
  92. <el-table-column
  93. align="center"
  94. label="Contract Status"
  95. prop="contractStatus"
  96. min-width="130">
  97. <template slot-scope="{row}">
  98. <div :class="'status-' + row.contractStatus">
  99. {{row.contractStatus}}
  100. </div>
  101. </template>
  102. </el-table-column>
  103. <el-table-column
  104. align="center"
  105. label="Approval Status"
  106. prop="auditStatusName"
  107. min-width="130">
  108. <template slot-scope="{row}">
  109. <div
  110. class="link-type"
  111. :class="'status-' + row.auditStatusName"
  112. @click="viewApproval(row)">
  113. {{row.auditStatusName}}
  114. </div>
  115. </template>
  116. </el-table-column>
  117. <el-table-column
  118. align="center"
  119. label="Action"
  120. min-width="80"
  121. v-if="!$route.meta.onlyView">
  122. <template slot-scope="{row}">
  123. <el-dropdown
  124. class="action-dropdown"
  125. @command="(v) => handleCommand(v, row)"
  126. v-if="row.dataStatus == 'Active'">
  127. <i class="el-icon-more icon-action"></i>
  128. <el-dropdown-menu slot="dropdown">
  129. <el-dropdown-item
  130. command="editLimit"
  131. v-if="row.auditStatusName != 'Approved'">
  132. Edit
  133. </el-dropdown-item>
  134. <el-dropdown-item
  135. command="editLimit"
  136. v-else>
  137. View
  138. </el-dropdown-item>
  139. <el-dropdown-item
  140. command="viewApproval">
  141. View Approval
  142. </el-dropdown-item>
  143. <el-dropdown-item
  144. command="deleteLimit"
  145. v-if="row.auditStatusName != 'Approved'">
  146. Set Inactive
  147. </el-dropdown-item>
  148. </el-dropdown-menu>
  149. </el-dropdown>
  150. </template>
  151. </el-table-column>
  152. </el-table>
  153. <div class="right">
  154. <Pagination
  155. v-show="table.total > 0"
  156. :total="table.total"
  157. :page.sync="filters.pageNum"
  158. :limit.sync="filters.pageSize"
  159. @pagination="getTableData" />
  160. </div>
  161. <approval
  162. v-bind="approvalDialog"
  163. @hide="hideApproval"/>
  164. </div>
  165. </template>
  166. <script>
  167. import apiBase from '@/api/apiBase';
  168. import limit from '@/api/limit';
  169. import Approval from './approval.vue';
  170. import Pagination from '@/components/Pagination';
  171. export default {
  172. data() {
  173. return {
  174. table: {
  175. loading: false,
  176. total: 0,
  177. list: []
  178. },
  179. filters: {
  180. pageNum: 1,
  181. pageSize: 10,
  182. pageCriteria: {
  183. dataStatus: "A",
  184. auditStatus: "",
  185. contractStatus: "",
  186. criteria: ""
  187. }
  188. },
  189. statusOptions: [],
  190. statusContracts: [],
  191. approvalDialog: {
  192. id: "",
  193. visible: false,
  194. isApproval: false
  195. }
  196. };
  197. },
  198. components: { Approval, Pagination },
  199. created() {
  200. this.getStatusOptions();
  201. this.getContractStatus();
  202. this.toSearch();
  203. },
  204. methods: {
  205. toSearch() {
  206. this.filters.pageNum = 1;
  207. this.getTableData();
  208. },
  209. getStatusOptions() {
  210. apiBase.getAuditStatusOptions().then(res => {
  211. if (res.data && res.data.length > 0) {
  212. this.statusOptions = res.data
  213. }
  214. }).catch(err => {
  215. //this.$message.error(err);
  216. })
  217. },
  218. getContractStatus() {
  219. limit.getContractStatusOptions().then(res => {
  220. if (res.data && res.data.length > 0) {
  221. this.statusContracts = res.data
  222. }
  223. }).catch(err => {
  224. //this.$message.error(err);
  225. })
  226. },
  227. handleCommand(fuc, item) {
  228. this[fuc](item)
  229. },
  230. getTableData() {
  231. this.table.loading = true;
  232. limit.getCreditLimitPages(this.filters).then(res => {
  233. if (res.data.totalRow && res.data.records) {
  234. this.table.list = res.data.records
  235. this.table.total = res.data.totalRow
  236. } else {
  237. this.table.list = []
  238. this.table.total = 0
  239. }
  240. }).catch(err => {
  241. this.$message({
  242. type: 'error',
  243. message: err
  244. });
  245. this.table.list = []
  246. this.table.total = 0
  247. }).finally(() => {
  248. this.table.loading = false;
  249. });
  250. },
  251. creatLimit() {
  252. this.$router.push({
  253. path: '/partnership-management/monthly-credit-limit/add'
  254. });
  255. },
  256. editLimit(row) {
  257. this.$router.push({
  258. path: '/partnership-management/monthly-credit-limit/edit/' + row.groupCreditPk
  259. });
  260. },
  261. viewApproval(row) {
  262. this.approvalDialog.id = row.groupCreditPk;
  263. this.approvalDialog.visible = true;
  264. },
  265. hideApproval(e) {
  266. this.approvalDialog.id = "";
  267. this.approvalDialog.visible = false;
  268. if (e) {
  269. this.getTableData();
  270. }
  271. },
  272. deleteLimit(row) {
  273. this.$confirm('Are you sure you want set inactive to this credit limit?', 'Set Inactive', {
  274. confirmButtonText: 'OK',
  275. cancelButtonText: 'Cancel',
  276. type: 'warning'
  277. }).then(res => {
  278. this.handleDeleteLimit(row.groupCreditPk)
  279. })
  280. },
  281. handleDeleteLimit(id) {
  282. limit.deleteCreditLimit(id).then(res => {
  283. this.$message({
  284. message: 'Set inactive credit limit successfully',
  285. type: 'success'
  286. });
  287. this.getTableData();
  288. }).catch(err => {
  289. this.$message({
  290. message: err,
  291. type: 'error'
  292. })
  293. })
  294. }
  295. }
  296. }
  297. </script>
  298. <style lang="scss" scoped>
  299. .status-Pending {
  300. color: #ffa028;
  301. &::before {
  302. background-color: #ffa028;
  303. }
  304. }
  305. .status-Approved,
  306. .status-Active {
  307. color: #07a378;
  308. &::before {
  309. background-color: #07a378;
  310. }
  311. }
  312. .status-Rejected,
  313. .status-Expired {
  314. color: #ed3f3f;
  315. &::before {
  316. background-color: #ed3f3f;
  317. }
  318. }
  319. </style>