baseInfoModule.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <!-- 基本信息 -->
  3. <el-form ref="form" :model="form" :rules="rules" label-width="126px" class="order-base-info-container">
  4. <el-form-item label="购买主体" :required="required.buySubject">
  5. <RadioGroup
  6. :value="form.buySubject"
  7. @input="onElInput($event, 'buySubject')"
  8. :options="conf.buySubjectOptions"
  9. />
  10. </el-form-item>
  11. <el-form-item label="公司名称" :required="companyRequired">
  12. <el-input
  13. :value="form.companyName"
  14. @input="onElInput($event, 'companyName')"
  15. placeholder="请输入完整的公司名称"
  16. size="medium"
  17. maxlength="50"
  18. ></el-input>
  19. </el-form-item>
  20. <el-row :gutter="2">
  21. <el-col :span="12">
  22. <el-form-item label="联系人姓名">
  23. <el-input
  24. :value="form.username"
  25. @input="onElInput($event, 'username')"
  26. placeholder="请输入联系人姓名"
  27. size="medium"
  28. maxlength="50"
  29. ></el-input>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="12">
  33. <el-form-item label="联系人手机号" :required="required.userTel">
  34. <el-input
  35. :value="form.userTel"
  36. @input="onElInput($event, 'userTel')"
  37. placeholder="请输入联系人手机号,非权益开通手机号"
  38. size="medium"
  39. maxlength="11"
  40. ></el-input>
  41. </el-form-item>
  42. </el-col>
  43. </el-row>
  44. <el-row :gutter="2">
  45. <el-col :span="12">
  46. <el-form-item label="开通权益手机号" :required="required.accountTel">
  47. <el-input
  48. :value="form.accountTel"
  49. @input="onElInput($event, 'accountTel')"
  50. placeholder="请输入开通权益手机号"
  51. size="medium"
  52. maxlength="11"
  53. ></el-input>
  54. </el-form-item>
  55. </el-col>
  56. </el-row>
  57. </el-form>
  58. </template>
  59. <script>
  60. import RadioGroup from '@/views/create-order/components/product-info-submodule/RadioGroup'
  61. import { buySubjectOptions } from '@/views/create-order/data/index.js'
  62. import { selectorVModelMixin } from '@/utils/mixins/selector-v-model'
  63. import { checkPhonePass } from '@/utils/utils'
  64. import { phoneRegExp } from '@/utils/data'
  65. import { mapState, mapMutations, mapActions } from 'vuex'
  66. export default {
  67. name: 'OrderBaseInfo',
  68. mixins: [selectorVModelMixin],
  69. components: {
  70. RadioGroup
  71. },
  72. data() {
  73. return {
  74. conf: {
  75. buySubjectOptions,
  76. },
  77. required: {
  78. buySubject: true,
  79. userTel: true,
  80. accountTel: true,
  81. },
  82. // form: {
  83. // buySubject: 1,
  84. // companyName: '',
  85. // username: '',
  86. // userTel: '',
  87. // accountTel: '',
  88. // },
  89. }
  90. },
  91. computed: {
  92. ...mapState({
  93. form: state => state.order.pageForm,
  94. }),
  95. requiredList() {
  96. return [
  97. {
  98. field: 'buySubject',
  99. message: '购买主体为必填项', // 错误提示文案
  100. rank: 1, // 提示优先级,值越小优先级越高
  101. required: this.required.buySubject,
  102. },
  103. {
  104. field: 'companyName',
  105. message: '公司名称为必填项', // 错误提示文案
  106. rank: 1, // 提示优先级,值越小优先级越高
  107. required: this.companyRequired,
  108. },
  109. {
  110. field: 'userTel',
  111. message: '联系人手机号为必填项', // 错误提示文案
  112. rank: 1, // 提示优先级,值越小优先级越高
  113. required: this.required.userTel,
  114. validator: () => {}
  115. },
  116. {
  117. field: 'accountTel',
  118. message: '开通权益手机号为必填项', // 错误提示文案
  119. rank: 1, // 提示优先级,值越小优先级越高
  120. required: this.required.accountTel,
  121. },
  122. ].filter(f => f.required)
  123. },
  124. rules() {
  125. const companyRequired = this.companyRequired
  126. return {
  127. companyName: [
  128. { required: companyRequired, message: '请输入公司名称', trigger: 'blur' },
  129. { required: companyRequired, message: '请输入公司名称', trigger: 'change' },
  130. ],
  131. userTel: [
  132. { required: true, message: '请输入联系人手机号', trigger: 'blur' },
  133. { required: true, message: '请输入联系人手机号', trigger: 'change' },
  134. { type: 'string', pattern: phoneRegExp, message: '手机号格式不正确', trigger: 'blur'}
  135. ],
  136. accountTel: [
  137. { required: true, message: '请输入开通权益手机号', trigger: 'blur' },
  138. { required: true, message: '请输入开通权益手机号', trigger: 'change' },
  139. { type: 'string', pattern: phoneRegExp, message: '手机号格式不正确', trigger: 'blur'}
  140. ]
  141. }
  142. },
  143. companyRequired() {
  144. return this.form.buySubject === 2
  145. },
  146. },
  147. watch: {
  148. companyRequired() {
  149. setTimeout(() => {
  150. this.$refs.form.clearValidate()
  151. }, 0)
  152. }
  153. },
  154. methods: {
  155. ...mapMutations('order', [
  156. 'setPageForm',
  157. 'setOrderProductInfoList',
  158. 'addOrderProductItem',
  159. ]),
  160. ...mapActions('order', [
  161. 'getProductList'
  162. ]),
  163. validate() {
  164. return new Promise((resolve, reject) => {
  165. this.$refs.form.validate((valid) => {
  166. if (valid) {
  167. resolve()
  168. } else {
  169. reject()
  170. }
  171. })
  172. })
  173. },
  174. getState() {
  175. return Object.assign({}, this.form)
  176. },
  177. setState(t) {
  178. if (!t) return
  179. Object.assign(this.form, t)
  180. },
  181. phoneCheck(text) {
  182. return checkPhonePass(text)
  183. },
  184. onElInput(e, key) {
  185. this.onInputChange(e, key)
  186. this.setPageForm({
  187. key,
  188. data: e
  189. })
  190. },
  191. onInputChange(e, key) {
  192. if (key === 'buySubject') {
  193. // 清空产品列表
  194. this.setOrderProductInfoList([])
  195. this.addOrderProductItem()
  196. this.$nextTick(() => {
  197. // 重新获取可选产品列表
  198. this.getProductList()
  199. })
  200. } else if (key === 'accountTel') {
  201. // 清空产品列表
  202. this.setOrderProductInfoList([])
  203. this.addOrderProductItem()
  204. }
  205. }
  206. }
  207. }
  208. </script>
  209. <style lang="scss" scoped>
  210. </style>