enquiryModal.vue 6.9 KB

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