enquiryModal.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <!--登录弹框 @zjf-2021-01-08-->
  2. <template>
  3. <div class="enquiry_modal">
  4. <el-dialog
  5. :title="L['发送询盘']"
  6. :model-value="modalVisible"
  7. :close-on-click-modal="false"
  8. :show-close="true"
  9. @close="closeModal"
  10. >
  11. <el-form
  12. ref="ruleFormRef"
  13. :model="form"
  14. label-position="top"
  15. label-width="120px"
  16. :rules="rules"
  17. size="large"
  18. status-icon
  19. >
  20. <el-form-item :label="L['姓名']" prop="name">
  21. <el-input v-model="form.name" :placeholder="L['请输入姓名']" clearable />
  22. </el-form-item>
  23. <el-form-item :label="L['邮箱']" prop="email">
  24. <el-input v-model="form.email" :placeholder="L['请输入邮箱']" />
  25. </el-form-item>
  26. <el-form-item :label="L['电话代码']" prop="phoneCode">
  27. <el-select v-model="form.phoneCode" :placeholder="L['选择国家/地区']" filterable clearable allow-create style="width: 100%">
  28. <el-option
  29. v-for="item in countryPhone"
  30. :key="item.value"
  31. :label="item.label"
  32. :value="(item.label+'/'+item.value)">
  33. <span style="float: left">{{ item.label }}</span>
  34. <span style="float: right; color: #8492a6; font-size: 13px">{{ item.value }}</span>
  35. </el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item :label="L['电话']" prop="phone">
  39. <el-input v-model="form.phone" :placeholder="L['请输入电话']" />
  40. </el-form-item>
  41. <el-form-item :label="L['采购数量']" prop="quantity">
  42. <el-input-number
  43. v-model="form.quantity"
  44. :min="0"
  45. :max="1999999999"
  46. :controls="false"
  47. :placeholder="L['请输入数量'] + ' ( 0~1999999999 ) '"
  48. />
  49. </el-form-item>
  50. <el-form-item :label="L['公司名称']" prop="company">
  51. <el-input v-model="form.company" :placeholder="L['请输入公司名称']" />
  52. </el-form-item>
  53. <el-form-item :label="L['留言']" prop="message">
  54. <el-input
  55. v-model="form.message"
  56. type="textarea"
  57. :rows="8"
  58. :placeholder="L['请输入留言']"
  59. />
  60. </el-form-item>
  61. <el-form-item>
  62. <el-button type="primary" class="self-btn" @click="submitForm(ruleFormRef)" style="flex:48% 0 0;margin:10px 1% 0" :loading="loading"
  63. >{{ L["发送"]}}</el-button
  64. >
  65. <el-button class="cancel-btn" @click="closeModal(ruleFormRef)" style="flex:48% 0 0;margin:10px 1% 0">{{ L["取消"]}}</el-button>
  66. </el-form-item>
  67. </el-form>
  68. </el-dialog>
  69. </div>
  70. </template>
  71. <script setup>
  72. // import { lang_zn } from "@/assets/language/zh";
  73. import { getCurLanguage } from '@/composables/common.js';
  74. import {
  75. ElSelect,
  76. ElOption,
  77. ElMessage,
  78. ElForm,
  79. ElFormItem,
  80. ElButton,
  81. ElInput,
  82. ElDialog,
  83. } from "element-plus";
  84. import { useFiltersStore } from "@/store/filter.js";
  85. const filtersStore = useFiltersStore();
  86. const countryPhone = ref([]);
  87. const emit = defineEmits(["closeLoingModal"]);
  88. const props = defineProps(['itemType','itemId'])
  89. // const L = lang_zn;
  90. const L = getCurLanguage();
  91. const modalVisible = ref(true);
  92. const loading = ref(false);
  93. const ruleFormRef = ref(null);
  94. const form = reactive({
  95. name: "",
  96. email: "",
  97. phoneCode: "",
  98. phone: "",
  99. quantity: undefined,
  100. company: "",
  101. message: "",
  102. });
  103. if(filtersStore.getMemberInfo.memberEmail){
  104. form.email = filtersStore.getMemberInfo.memberEmail
  105. }
  106. if(filtersStore.getMemberInfo.memberNickName || filtersStore.getMemberInfo.memberName){
  107. form.name = filtersStore.getMemberInfo.memberNickName || filtersStore.getMemberInfo.memberName
  108. }
  109. const checkEmailFun = (rule, value, callback) => {
  110. if (checkEmail(value) !== true) {
  111. callback(new Error(checkEmail(value)))
  112. }
  113. callback()
  114. }
  115. const checkPhoneFun = (rule, value, callback) => {
  116. if (checkPhone(value) !== true) {
  117. callback(new Error(checkPhone(value)))
  118. }
  119. callback()
  120. }
  121. const rules = reactive({
  122. name: [
  123. { required: true, message: L["请输入姓名"], trigger: "blur" },
  124. ],
  125. email: [
  126. { required: true, message: L["请输入邮箱"], trigger: "blur" },
  127. { validator: checkEmailFun, trigger: 'blur'}
  128. ],
  129. phoneCode: [
  130. {
  131. required: true,
  132. message: L["请选择国家/地区"],
  133. trigger: ['blur','change'],
  134. },
  135. ],
  136. // phone: [
  137. // { required: true, message: L["请输入电话"], trigger: "blur" },
  138. // // { validator: checkPhoneFun, trigger: 'blur'}
  139. // ],
  140. company: [
  141. {
  142. required: true,
  143. message: L["请输入公司名称"],
  144. trigger: "blur",
  145. },
  146. ],
  147. message: [
  148. {
  149. required: true,
  150. message: L["请输入留言"],
  151. trigger: "blur",
  152. },
  153. ],
  154. });
  155. //关闭登录modal
  156. const closeModal = (formEl) => {
  157. emit("closeLoingModal");
  158. if (!formEl) return;
  159. formEl.resetFields();
  160. loading.value = false;
  161. };
  162. const submitForm = async (formEl) => {
  163. if (!formEl) return;
  164. await formEl.validate((valid, fields) => {
  165. if (valid) {
  166. const url = apiUrl + "v3/member/front/enquiry/save";
  167. if (!filtersStore.getLoginFlag) {
  168. return openLoginDialog({
  169. onRegister: () => {
  170. router.push({
  171. path: "/register",
  172. });
  173. },
  174. onForgot: () => {
  175. router.push({
  176. path: "/member/login/forget",
  177. });
  178. },
  179. });
  180. }
  181. loading.value = true;
  182. let d = {}
  183. d = Object.assign({},form)
  184. d.pageUrl = window.location.href
  185. d.itemId = props.itemId
  186. d.itemType = props.itemType
  187. let a = d.phoneCode
  188. d.phoneCode = a.split('/')[1] ? a.split('/')[1] : ''
  189. d.country = a.split('/')[0]
  190. post(url,d).then((res) => {
  191. if(res.state == 200){
  192. ElMessage.success(res.msg)
  193. loading.value = false;
  194. closeModal(formEl);
  195. }else{
  196. ElMessage.error(res.msg)
  197. }
  198. }).finally(()=>{
  199. loading.value = false;
  200. })
  201. } else {
  202. console.log("error submit!", fields);
  203. }
  204. });
  205. };
  206. //获取国家电话code
  207. const getPhoneCode = () => {
  208. get('v3/member/front/enquiry/phoneCode').then(res=>{
  209. countryPhone.value = res.data;
  210. })
  211. }
  212. onMounted(() => {
  213. getPhoneCode()
  214. })
  215. </script>
  216. <style lang="scss">
  217. @import "@/assets/style/enquiry.scss";
  218. </style>