ServerSkuUpdateDialog.vue 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <base-dialog @cancel="cancelDialog">
  3. <div slot="header">{{action}}</div>
  4. <div slot="body">
  5. <dialog-selected-tips :name="$t('dictionary.sku')" :count="params.data.length" :action="action" />
  6. <dialog-table :data="params.data" :columns="columns" />
  7. <a-form :form="form.fc" hideRequiredMark v-bind="formItemLayout">
  8. <a-form-item :label="$t('compute.sku.postpaid_status')">
  9. <a-radio-group v-model="postpaid">
  10. <a-radio :value="available">{{ $t('status.sku.available') }}</a-radio>
  11. <a-radio :value="soldout">{{ $t('status.sku.soldout') }}</a-radio>
  12. </a-radio-group>
  13. </a-form-item>
  14. <a-form-item :label="$t('compute.sku.prepaid_status')">
  15. <a-radio-group v-model="prepaid">
  16. <a-radio :value="available">{{ $t('status.sku.available') }}</a-radio>
  17. <a-radio :value="soldout">{{ $t('status.sku.soldout') }}</a-radio>
  18. </a-radio-group>
  19. </a-form-item>
  20. </a-form>
  21. </div>
  22. <div slot="footer">
  23. <a-button type="primary" @click="handleConfirm" :loading="loading">{{ $t('dialog.ok') }}</a-button>
  24. <a-button @click="cancelDialog">{{ $t('dialog.cancel') }}</a-button>
  25. </div>
  26. </base-dialog>
  27. </template>
  28. <script>
  29. import DialogMixin from '@/mixins/dialog'
  30. import WindowsMixin from '@/mixins/windows'
  31. export default {
  32. name: 'ServerSkuUpdateDialog',
  33. mixins: [DialogMixin, WindowsMixin],
  34. data () {
  35. return {
  36. loading: false,
  37. action: this.$t('compute.sku.setup.sell.status'),
  38. form: {
  39. fc: this.$form.createForm(this),
  40. },
  41. available: 'available',
  42. soldout: 'soldout',
  43. postpaid: 'available',
  44. prepaid: 'available',
  45. formItemLayout: {
  46. wrapperCol: {
  47. span: 20,
  48. },
  49. labelCol: {
  50. span: 4,
  51. },
  52. },
  53. }
  54. },
  55. computed: {
  56. columns () {
  57. const showFields = ['name', 'prepaid_status', 'postpaid_status']
  58. return this.params.columns.filter((item) => { return showFields.includes(item.field) })
  59. },
  60. },
  61. created () {
  62. try {
  63. const { data = [] } = this.params
  64. if (data.length === 1) {
  65. const { prepaid_status, postpaid_status } = data[0]
  66. this.postpaid = postpaid_status
  67. this.prepaid = prepaid_status
  68. }
  69. } catch (err) {}
  70. },
  71. methods: {
  72. async doUpdate () {
  73. const ids = this.params.data.map(item => item.id)
  74. return this.params.onManager('batchUpdate', {
  75. id: ids,
  76. managerArgs: {
  77. data: {
  78. prepaid_status: this.prepaid,
  79. postpaid_status: this.postpaid,
  80. },
  81. },
  82. })
  83. },
  84. async handleConfirm () {
  85. this.loading = true
  86. try {
  87. await this.doUpdate()
  88. this.loading = false
  89. this.cancelDialog()
  90. } catch (error) {
  91. this.loading = false
  92. }
  93. },
  94. },
  95. }
  96. </script>