details.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <div>
  3. <el-dialog :title="exData.id ? '编辑': '新增'"
  4. :visible.sync="dialog"
  5. width="50%"
  6. :close-on-click-modal="false"
  7. top="50px">
  8. <el-form ref="form"
  9. :model="form"
  10. :rules="formRules"
  11. label-width="160px">
  12. <el-form-item prop="user_name"
  13. :rules="formRules.required"
  14. label="吧台姓名:">
  15. <el-col :span="16">
  16. <el-input v-model="form.user_name"
  17. placeholder="请输入吧台姓名"
  18. clearable></el-input>
  19. </el-col>
  20. </el-form-item>
  21. <el-form-item prop="phone"
  22. :rules="formRules.mobile"
  23. label="手机号:">
  24. <el-col :span="10">
  25. <el-input v-model="form.phone"
  26. disabled
  27. placeholder="请输入手机号"
  28. @input="form.phone = form.phone.replace(/[^\d]/g, '').slice(0, 11)"
  29. clearable></el-input>
  30. </el-col>
  31. <el-col :span="5" :offset="1">
  32. <el-button
  33. type="primary"
  34. @click="validatePhone('form')"
  35. :disabled="[0, 60].findIndex(item => item === numCount) < 0">
  36. 获取验证码<span>{{ [0, 60].findIndex(item => item === numCount) > -1 ? '' : numCount + '秒' }}</span>
  37. </el-button>
  38. </el-col>
  39. </el-form-item>
  40. <el-form-item prop="code"
  41. :rules="formRules.code"
  42. label="短信验证码:">
  43. <el-col :span="16">
  44. <el-input v-model="form.code"
  45. placeholder="请输入短信验证码"
  46. @input="form.code=form.code.replace(/[^\d]/g, '').slice(0, 6)"
  47. clearable></el-input>
  48. </el-col>
  49. </el-form-item>
  50. <el-form-item prop="user_sign_status"
  51. :rules="formRules.required"
  52. label="状态:">
  53. <el-radio v-model="form.user_sign_status"
  54. label="0">关闭
  55. </el-radio>
  56. <el-radio v-model="form.user_sign_status"
  57. label="1">启用
  58. </el-radio>
  59. </el-form-item>
  60. <el-form-item>
  61. <p>关闭后,登录“听邦App”不能核销订座</p>
  62. </el-form-item>
  63. </el-form>
  64. <div slot="footer" class="dialog-footer text-center">
  65. <el-button @click="dialog = false">取 消</el-button>
  66. <el-button type="primary" @click="handleSubmit">确 定</el-button>
  67. </div>
  68. </el-dialog>
  69. </div>
  70. </template>
  71. <script>
  72. import getCode from '@/views/ums/mixin/getCode'
  73. export default {
  74. mixins: [getCode],
  75. components: {},
  76. props: {
  77. value: {
  78. type: Boolean,
  79. default: true
  80. },
  81. exData: {
  82. type: Object,
  83. default: function () {
  84. return {}
  85. }
  86. }
  87. },
  88. data () {
  89. return {
  90. dialog: !!this.value,
  91. form: {
  92. user_name: '', // 用户姓名
  93. phone: '', // 手机号码
  94. code: '', // 验证码
  95. user_sign_status: '1', // 艺人签约状态(0未签约1已签约)
  96. }
  97. }
  98. },
  99. methods: {
  100. handleSubmit () {
  101. const url = this.exData.id ? '/v1/user/member/song/modify' : ''
  102. this.$refs.form.validate(async valid => {
  103. if (valid) {
  104. const data = await this.$fetch(url, {
  105. ...this.form
  106. })
  107. if (data.code === 200) {
  108. this.$message.success('提交成功')
  109. this.$emit('success')
  110. this.dialog = false
  111. }
  112. }
  113. })
  114. }
  115. },
  116. mounted () {
  117. if (this.exData.id) {
  118. this.$set(this.form, 'id', this.exData.id)
  119. this.$set(this.form, 'phone', this.exData.user_phone)
  120. for (const key in this.exData) {
  121. if (this.form.hasOwnProperty(key)) {
  122. let value = this.exData[key]
  123. if ((Array.isArray(value) && value.length >= 1) || (Object.prototype.toString.call(value) === '[object Object]') || (typeof value === 'string' && value) || typeof value === 'number') {
  124. if (key === 'user_sign_status') {
  125. value = value.toString()
  126. }
  127. this.$set(this.form, key, value)
  128. }
  129. }
  130. }
  131. }
  132. },
  133. watch: {
  134. dialog (val) {
  135. if (!val) this.$emit('input', val)
  136. }
  137. }
  138. }
  139. </script>
  140. <style lang="scss" scoped>
  141. .top-tip {
  142. margin-top: -20px;
  143. margin-bottom: 20px;
  144. }
  145. </style>