leave-info-dialog.js 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748
  1. // 模板字符串
  2. // var temp = `
  3. // <div>
  4. // <div class="user-data-dialog" id="collectUserInfoDialog" v-if="showForm">
  5. // <div class="mask"></div>
  6. // <div class="dialog-container">
  7. // <div class="dialog-header"></div>
  8. // <div class="dialog-content">
  9. // <el-form class="user-form" :model="form" :rules="rules" ref="ruleForm">
  10. // <!-- 基本信息 -->
  11. // <div class="basic clearfix">
  12. // <div class="form-title">基本信息</div>
  13. // <div class="form-main clearfix">
  14. // <div class="short-control fl" v-if="moduleShow.name">
  15. // <el-form-item label="姓名 :" prop="name">
  16. // <el-input v-model.trim="form.name" class="item-input" placeholder="请输入姓名" @focus="nameFocus" required>
  17. // </el-input>
  18. // </el-form-item>
  19. // </div>
  20. // <div class="short-control fr" v-if="moduleShow.mail">
  21. // <el-form-item label="邮箱 :" prop="mail">
  22. // <el-input v-model.trim="form.mail" class="item-input" placeholder="请输入邮箱" @focus="mailFocus"></el-input>
  23. // </el-form-item>
  24. // </div>
  25. // <div class="short-control fl" v-if="moduleShow.phone">
  26. // <el-form-item label="手机号 :" prop="phone">
  27. // <el-input v-model.trim="form.phone" maxlength="11" @input="inputPhone" class="item-input" placeholder="请输入准确的手机号" @focus="phoneFocus"></el-input>
  28. // </el-form-item>
  29. // </div>
  30. // <div class="short-control fr" v-if="showCode">
  31. // <el-form-item label="验证码 :" prop="code">
  32. // <el-input v-model.trim="form.code" maxlength="6" @change="checkCode" class="item-input code-input" placeholder="请输入手机验证码" @focus="codeFocus">
  33. // <el-button slot="append" :disabled="sendCodeBtn" @click="sendCode">@@codeText@@</el-button>
  34. // </el-input>
  35. // </el-form-item>
  36. // </div>
  37. // </div>
  38. // </div>
  39. // <div class="company clearfix">
  40. // <div class="form-title">公司信息</div>
  41. // <div class="form-main">
  42. // <div class="long-control" style="position: relative;" v-if="moduleShow.companyName">
  43. // <el-form-item label="公司名称 :" prop="companyName">
  44. // <el-input
  45. // v-model.trim="form.companyName"
  46. // data-long-input
  47. // class="item-input company-name"
  48. // @focus="companyFocus"
  49. // @input="searchCompany"
  50. // placeholder="请输入准确的公司名称">
  51. // </el-input>
  52. // </el-form-item>
  53. // <div class="company-result" v-if="showSearchResult">
  54. // <div class="company-list" v-for="item in companyList" :key="item" @click="selectCompany(item)" v-html="item"></div>
  55. // </div>
  56. // </div>
  57. // <div class="long-control" v-if="moduleShow.companyType">
  58. // <el-form-item label="公司类型 :" class="company-type" prop="companyType">
  59. // <el-checkbox-group v-model="form.companyType">
  60. // <el-checkbox label="投标企业"></el-checkbox>
  61. // <el-checkbox label="招标采购单位"></el-checkbox>
  62. // <el-checkbox label="厂商"></el-checkbox>
  63. // <el-checkbox label="招标代理机构"></el-checkbox>
  64. // <el-checkbox label="经销商"></el-checkbox>
  65. // <el-checkbox label="服务提供商"></el-checkbox>
  66. // <el-checkbox label="其他"></el-checkbox>
  67. // </el-checkbox-group>
  68. // </el-form-item>
  69. // </div>
  70. // <div class="short-control fl" v-if="moduleShow.job">
  71. // <el-form-item label="职位 :" prop="job">
  72. // <el-select v-model="form.job" placeholder="请选择职位" class="item-input" clearable>
  73. // <el-option v-for="item in jobData" :key="item.value" :label="item.label" :value="item.value">
  74. // </el-option>
  75. // </el-select>
  76. // </el-form-item>
  77. // </div>
  78. // <div class="short-control fr" v-if="showBranch">
  79. // <el-form-item label-width="0" label="" prop="branch" class="no-label">
  80. // <el-select v-model="form.branch" placeholder="请选择部门" class="item-input" clearable>
  81. // <el-option v-for="item in branchData" :key="item.value" :label="item.label" :value="item.value">
  82. // </el-option>
  83. // </el-select>
  84. // </el-form-item>
  85. // </div>
  86. // </div>
  87. // </div>
  88. // <div class="warm-prompt">
  89. // <span class="icon-warning"></span>
  90. // <span class="warm-text">温馨提示:请提供准确的信息,我们将为您推荐更准确、更个性化的商机和服务</span>
  91. // </div>
  92. // <div class="dialog-footer">
  93. // <el-button class="cancel-btn" @click="cancelForm">暂不提供</el-button>
  94. // <el-button class="submit-btn" @click="submitForm('ruleForm')">提交</el-button>
  95. // </div>
  96. // </el-form>
  97. // </div>
  98. // </div>
  99. // </div>
  100. // <div id="success-dialog" style="display: none;" v-show="showSuccess">
  101. // <div class="mask"></div>
  102. // <div class="success-dialog-container">
  103. // <div class="success-title">提交成功</div>
  104. // <div class="success-content" v-if="defaultSource">我们的客户经理会在24小时内尽快与您联系。</div>
  105. // <div class="success-content" v-else>我们稍后将以邮件的形式发送数据样例。</div>
  106. // <div class="success-footer">
  107. // <button type="button" class="custom-btn go-know" @click="showSuccess = false">我知道了</button>
  108. // </div>
  109. // <div class="dialog-adv" v-if="!defaultSource" @click="dataExport">
  110. // <img src="/common-module/pc-dialog/image/data-export.png" />
  111. // </div>
  112. // </div>
  113. // </div>
  114. // <div id="export-dialog" v-show="showExport">
  115. // <div class="mask"></div>
  116. // <div class="export-dialog-container">
  117. // <div class="export-title">
  118. // <span class="export-close" @click="showExport = false"></span>
  119. // </div>
  120. // <div class="export-content">您可以通过剑鱼标讯提供的全国招投标数据自助导出功能,指定关键词、发布时间、地区或行业等筛选条件,以Excel表格的形式打包下载,精准获取所需数据。</div>
  121. // <div class="export-footer">
  122. // <button type="button" class="custom-btn go-know" @click="dataExport">数据自助导出</button>
  123. // </div>
  124. // </div>
  125. // </div>
  126. // </div>
  127. // `
  128. var temp = "\n <div>\n <div class=\"user-data-dialog\" id=\"collectUserInfoDialog\" v-if=\"showForm\">\n <div class=\"mask\"></div>\n <div class=\"dialog-container\">\n <div class=\"dialog-header\"></div>\n <div class=\"dialog-content\">\n <el-form class=\"user-form\" :model=\"form\" :rules=\"rules\" ref=\"ruleForm\">\n <!-- \u57FA\u672C\u4FE1\u606F -->\n <div class=\"basic clearfix\">\n <div class=\"form-title\">\u57FA\u672C\u4FE1\u606F</div>\n <div class=\"form-main clearfix\">\n <div class=\"short-control fl\" v-if=\"moduleShow.name\">\n <el-form-item label=\"\u59D3\u540D :\" prop=\"name\">\n <el-input v-model.trim=\"form.name\" class=\"item-input\" placeholder=\"\u8BF7\u8F93\u5165\u59D3\u540D\" @focus=\"nameFocus\" required>\n </el-input>\n </el-form-item>\n </div>\n <div class=\"short-control fr\" v-if=\"moduleShow.mail\">\n <el-form-item label=\"\u90AE\u7BB1 :\" prop=\"mail\">\n <el-input v-model.trim=\"form.mail\" class=\"item-input\" placeholder=\"\u8BF7\u8F93\u5165\u90AE\u7BB1\" @focus=\"mailFocus\"></el-input>\n </el-form-item>\n </div>\n <div class=\"short-control fl\" v-if=\"moduleShow.phone\">\n <el-form-item label=\"\u624B\u673A\u53F7 :\" prop=\"phone\">\n <el-input v-model.trim=\"form.phone\" maxlength=\"11\" @input=\"inputPhone\" class=\"item-input\" placeholder=\"\u8BF7\u8F93\u5165\u51C6\u786E\u7684\u624B\u673A\u53F7\" @focus=\"phoneFocus\"></el-input>\n </el-form-item>\n </div>\n <div class=\"short-control fr\" v-if=\"showCode\">\n <el-form-item label=\"\u9A8C\u8BC1\u7801 :\" prop=\"code\">\n <el-input v-model.trim=\"form.code\" maxlength=\"6\" @change=\"checkCode\" class=\"item-input code-input\" placeholder=\"\u8BF7\u8F93\u5165\u624B\u673A\u9A8C\u8BC1\u7801\" @focus=\"codeFocus\">\n <el-button slot=\"append\" :disabled=\"sendCodeBtn\" @click=\"sendCode\">@@codeText@@</el-button>\n </el-input>\n </el-form-item>\n </div>\n </div>\n </div>\n <div class=\"company clearfix\">\n <div class=\"form-title\">\u516C\u53F8\u4FE1\u606F</div>\n <div class=\"form-main\">\n <div class=\"long-control\" style=\"position: relative;\" v-if=\"moduleShow.companyName\">\n <el-form-item label=\"\u516C\u53F8\u540D\u79F0 :\" prop=\"companyName\">\n <el-input\n v-model.trim=\"form.companyName\"\n data-long-input\n class=\"item-input company-name\"\n @focus=\"companyFocus\"\n @input=\"searchCompany\"\n placeholder=\"\u8BF7\u8F93\u5165\u51C6\u786E\u7684\u516C\u53F8\u540D\u79F0\">\n </el-input>\n </el-form-item>\n <div class=\"company-result\" v-if=\"showSearchResult\">\n <div class=\"company-list\" v-for=\"item in companyList\" :key=\"item\" @click=\"selectCompany(item)\" v-html=\"item\"></div>\n </div>\n </div>\n <div class=\"long-control\" v-if=\"moduleShow.companyType\">\n <el-form-item label=\"\u516C\u53F8\u7C7B\u578B :\" class=\"company-type\" prop=\"companyType\">\n <el-checkbox-group v-model=\"form.companyType\">\n <el-checkbox label=\"\u6295\u6807\u4F01\u4E1A\"></el-checkbox>\n <el-checkbox label=\"\u62DB\u6807\u91C7\u8D2D\u5355\u4F4D\"></el-checkbox>\n <el-checkbox label=\"\u5382\u5546\"></el-checkbox>\n <el-checkbox label=\"\u62DB\u6807\u4EE3\u7406\u673A\u6784\"></el-checkbox>\n <el-checkbox label=\"\u7ECF\u9500\u5546\"></el-checkbox>\n <el-checkbox label=\"\u670D\u52A1\u63D0\u4F9B\u5546\"></el-checkbox>\n <el-checkbox label=\"\u5176\u4ED6\"></el-checkbox>\n </el-checkbox-group>\n </el-form-item>\n </div>\n <div class=\"short-control fl\" v-if=\"moduleShow.job\">\n <el-form-item label=\"\u804C\u4F4D :\" prop=\"job\">\n <el-select v-model=\"form.job\" placeholder=\"\u8BF7\u9009\u62E9\u804C\u4F4D\" class=\"item-input\" clearable>\n <el-option v-for=\"item in jobData\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n </el-option>\n </el-select>\n </el-form-item>\n </div>\n <div class=\"short-control fr\" v-if=\"showBranch\">\n <el-form-item label-width=\"0\" label=\"\" prop=\"branch\" class=\"no-label\">\n <el-select v-model=\"form.branch\" placeholder=\"\u8BF7\u9009\u62E9\u90E8\u95E8\" class=\"item-input\" clearable>\n <el-option v-for=\"item in branchData\" :key=\"item.value\" :label=\"item.label\" :value=\"item.value\">\n </el-option>\n </el-select>\n </el-form-item>\n </div>\n </div>\n </div>\n <div class=\"warm-prompt\">\n <span class=\"icon-warning\"></span>\n <span class=\"warm-text\">\u6E29\u99A8\u63D0\u793A\uFF1A\u8BF7\u63D0\u4F9B\u51C6\u786E\u7684\u4FE1\u606F\uFF0C\u6211\u4EEC\u5C06\u4E3A\u60A8\u63A8\u8350\u66F4\u51C6\u786E\u3001\u66F4\u4E2A\u6027\u5316\u7684\u5546\u673A\u548C\u670D\u52A1</span>\n </div>\n <div class=\"dialog-footer\">\n <el-button class=\"cancel-btn\" @click=\"cancelForm\">\u6682\u4E0D\u63D0\u4F9B</el-button>\n <el-button class=\"submit-btn\" @click=\"submitForm('ruleForm')\">\u63D0\u4EA4</el-button>\n </div>\n </el-form>\n </div>\n </div>\n </div>\n <div id=\"success-dialog\" style=\"display: none;\" v-show=\"showSuccess\">\n <div class=\"mask\"></div>\n <div class=\"success-dialog-container\">\n <div class=\"success-title\">\u63D0\u4EA4\u6210\u529F</div>\n <div class=\"success-content\" v-if=\"defaultSource\">\u6211\u4EEC\u7684\u5BA2\u6237\u7ECF\u7406\u4F1A\u572824\u5C0F\u65F6\u5185\u5C3D\u5FEB\u4E0E\u60A8\u8054\u7CFB\u3002</div>\n <div class=\"success-content\" v-else>\u6211\u4EEC\u7A0D\u540E\u5C06\u4EE5\u90AE\u4EF6\u7684\u5F62\u5F0F\u53D1\u9001\u6570\u636E\u6837\u4F8B\u3002</div>\n <div class=\"success-footer\">\n <button type=\"button\" class=\"custom-btn go-know\" @click=\"showSuccess = false\">\u6211\u77E5\u9053\u4E86</button>\n </div>\n <div class=\"dialog-adv\" v-if=\"!defaultSource\" @click=\"dataExport\">\n <img src=\"/common-module/pc-dialog/image/data-export.png\" />\n </div>\n </div>\n </div>\n <div id=\"export-dialog\" v-show=\"showExport\">\n <div class=\"mask\"></div>\n <div class=\"export-dialog-container\">\n <div class=\"export-title\">\n <span class=\"export-close\" @click=\"showExport = false\"></span>\n </div>\n <div class=\"export-content\">\u60A8\u53EF\u4EE5\u901A\u8FC7\u5251\u9C7C\u6807\u8BAF\u63D0\u4F9B\u7684\u5168\u56FD\u62DB\u6295\u6807\u6570\u636E\u81EA\u52A9\u5BFC\u51FA\u529F\u80FD\uFF0C\u6307\u5B9A\u5173\u952E\u8BCD\u3001\u53D1\u5E03\u65F6\u95F4\u3001\u5730\u533A\u6216\u884C\u4E1A\u7B49\u7B5B\u9009\u6761\u4EF6\uFF0C\u4EE5Excel\u8868\u683C\u7684\u5F62\u5F0F\u6253\u5305\u4E0B\u8F7D\uFF0C\u7CBE\u51C6\u83B7\u53D6\u6240\u9700\u6570\u636E\u3002</div>\n <div class=\"export-footer\">\n <button type=\"button\" class=\"custom-btn go-know\" @click=\"dataExport\">\u6570\u636E\u81EA\u52A9\u5BFC\u51FA</button>\n </div>\n </div>\n </div>\n </div>\n ";
  129. var jobJson = [
  130. '总裁',
  131. '总经理',
  132. '总监',
  133. '经理',
  134. '主管',
  135. '职员'
  136. ]
  137. var branchJson = [
  138. '市场',
  139. '产品',
  140. '销售',
  141. '渠道',
  142. '其他'
  143. ]
  144. var jobData = jobJson.map(function (item) {
  145. return {
  146. value: item,
  147. label: item
  148. }
  149. })
  150. // 防抖
  151. function debounce(fn, delay) {
  152. var timer
  153. return function () {
  154. var context = this
  155. var args = arguments
  156. clearTimeout(timer)
  157. timer = setTimeout(function () {
  158. fn.apply(context, args)
  159. }, delay)
  160. }
  161. }
  162. // 部门数据处理
  163. var branchData = branchJson.map(function(item) {
  164. return {
  165. value: item,
  166. label: item
  167. }
  168. })
  169. var vm = new Vue({
  170. el: '#vue-collect-user-info',
  171. delimiters: ['@@', '@@'],
  172. props: ['type'],
  173. template: temp,
  174. data: function () {
  175. var validName = function(rule,value,callback) {
  176. if(value === '') {
  177. return callback(new Error('姓名为必填项'));
  178. } else {
  179. if (value.length < 2) {
  180. return callback(new Error('姓名填写不正确'));
  181. }
  182. callback();
  183. }
  184. }
  185. var validPhone = function(rule,value,callback) {
  186. var status = /^1[3-9]\d{9}$/.test(value)
  187. if(value === '') {
  188. return callback(new Error('手机号为必填项'));
  189. } else if (!status) {
  190. return callback(new Error('手机号填写不正确'));
  191. } else {
  192. callback();
  193. }
  194. }
  195. var validCode = function(rule,value,callback) {
  196. var status = /\d{6}/.test(value)
  197. if(value === '') {
  198. return callback(new Error('短信验证码为必填项'));
  199. } else if (!status) {
  200. return callback(new Error('验证码格式不正确'));
  201. } else {
  202. setTimeout(function() {
  203. if (!vm.codeStatus) {
  204. return callback(new Error('短信验证码不正确'));
  205. } else {
  206. callback();
  207. }
  208. }, 500)
  209. }
  210. }
  211. var validEmail = function(rule,value,callback) {
  212. var status = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(value)
  213. if (value === '') {
  214. return callback(new Error('邮箱为必填项'));
  215. } else {
  216. if (!status) {
  217. return callback(new Error('邮箱填写不正确'));
  218. } else {
  219. callback();
  220. }
  221. }
  222. }
  223. var validCompany = function(rule,value,callback) {
  224. if (value === '') {
  225. return callback(new Error('公司名称为必填项'));
  226. } else {
  227. if (value.length < 2) {
  228. return callback(new Error('公司名称至少输入2个字'));
  229. } else {
  230. callback();
  231. }
  232. }
  233. }
  234. var validComType = function(rule,value,callback) {
  235. if (value.length === 0) {
  236. return callback(new Error('公司类型为必填项'));
  237. } else {
  238. callback();
  239. }
  240. }
  241. var validJob = function(rule,value,callback) {
  242. if(value === '') {
  243. return callback(new Error('职位为必填项'));
  244. return callback();
  245. } else {
  246. if (value === '其他' && vm.form.otherJob === '') {
  247. return callback();
  248. } else {
  249. callback();
  250. }
  251. }
  252. }
  253. var validBranch = function(rule,value,callback) {
  254. if(value === '') {
  255. return callback(new Error('请选择部门'));
  256. } else {
  257. callback();
  258. }
  259. }
  260. return {
  261. dialogTitle: '为给您匹配精准的推荐信息,请完善个人信息',
  262. jobData: jobData, // 职位数据
  263. branchData: branchData,
  264. form: {
  265. oldPhone: '', // 带出来的手机号,用于判断是否需要短信验证码
  266. name: '', // 姓名
  267. phone: '', // 手机号
  268. mail: '', // 邮箱
  269. code: '', // 短信验证码
  270. companyName: '', // 公司名称
  271. companyType: [], // 公司类型
  272. job: '', // 职位值
  273. otherJob: '', //自定义职位
  274. branch: ''
  275. },
  276. codeText: '获取验证码',
  277. sendCodeBtn: false,
  278. countdown: 0,
  279. codeStatus: true,
  280. rules: {
  281. name: [
  282. {
  283. required: true,
  284. validator: validName,
  285. trigger: 'blur'
  286. }
  287. ],
  288. phone: [
  289. {
  290. required: true,
  291. validator: validPhone,
  292. trigger: 'blur'
  293. }
  294. ],
  295. mail: [
  296. {
  297. required: true,
  298. validator: validEmail,
  299. trigger: 'blur'
  300. }
  301. ],
  302. code: [
  303. {
  304. required: true,
  305. validator: validCode,
  306. message: '',
  307. trigger: 'blur'
  308. }
  309. ],
  310. companyName: [
  311. {
  312. required: true,
  313. validator: validCompany,
  314. trigger: 'blur'
  315. }
  316. ],
  317. companyType: [
  318. {
  319. required: true,
  320. validator: validComType,
  321. trigger: 'blur'
  322. }
  323. ],
  324. job: [
  325. {
  326. required: true,
  327. validator: validJob,
  328. trigger: 'blur'
  329. }
  330. ],
  331. branch: [
  332. {
  333. required: true,
  334. trigger: 'blur',
  335. validator: validBranch,
  336. message: ''
  337. }
  338. ],
  339. },
  340. showSearchResult: false,
  341. companyList: [],
  342. showForm: false, // 显示表单填写弹框
  343. showSuccess: false, // 显示提交成功弹框
  344. showExport: false,
  345. isForce: false, // 是否强制
  346. source: '', // 来源模块
  347. interest: '', // 感兴趣内容
  348. moduleShow: {
  349. name: true,
  350. phone: true,
  351. mail: true,
  352. code: false,
  353. companyName: true,
  354. companyType: true,
  355. job: true,
  356. branch: false
  357. }
  358. }
  359. },
  360. computed: {
  361. showOtherJob: function() {
  362. return this.form.job == '其他'
  363. },
  364. showCode: function () {
  365. return (this.form.phone !== this.form.oldPhone && this.form.phone.length === 11) || !this.form.oldPhone
  366. },
  367. defaultSource: function() {
  368. // 默认提交成功不显示广告图和邮箱文案 如果是结构化数据则显示
  369. var noEmailSource = ['structedData', 'pc_data_custom_export']
  370. return noEmailSource.indexOf(this.source) === -1
  371. },
  372. showBranch: function () {
  373. // 切换到总裁或总经理之后 把之前选择的部门清空
  374. if (this.form.job.indexOf('总裁') > -1 || this.form.job.indexOf('总经理') > -1) {
  375. this.form.branch = ''
  376. }
  377. var zc = this.form.job.indexOf('总裁') > -1
  378. var zjl = this.form.job.indexOf('总经理') > -1
  379. return !(zc || zjl) && this.form.job
  380. }
  381. },
  382. mounted: function() {
  383. var that = this;
  384. $(document).on('click', function (e) {
  385. let dom = $('.company-name')[0];
  386. if (dom) {
  387. // 如果点击的区域不在自定义dom范围
  388. if (!dom.contains((e.target))) {
  389. that.showSearchResult = false
  390. }
  391. }
  392. })
  393. // $(window).on('resize', this.changeTop)
  394. },
  395. beforeDestroy: function() {
  396. $(document).off('click')
  397. },
  398. methods: {
  399. getModules: function () {
  400. var source = this.source
  401. switch (source) {
  402. case 'pc_supermarket_Noresults_customization':
  403. case 'pc_market_ApplicationScenario':
  404. case 'pc_supermarket_details_customization':
  405. case 'pc_supermarket_details_buy': {
  406. this.hideModule(['mail'])
  407. break;
  408. }
  409. default:
  410. this.hideModule()
  411. break;
  412. }
  413. },
  414. hideModule: function (keys) {
  415. if (!keys) return
  416. var hideType = keys
  417. for (var k in this.moduleShow) {
  418. if (hideType.indexOf(k) !== -1) {
  419. this.moduleShow[k] = false
  420. }
  421. }
  422. },
  423. // changeTop: function () {
  424. // this.$nextTick(function () {
  425. // var dialogDom = $('#collectUserInfoDialog .dialog-container')
  426. // var diffHeight = window.innerHeight - dialogDom.height() - 240
  427. // if (diffHeight < 0) {
  428. // dialogDom.css('margin-top', diffHeight.toString() + 'px')
  429. // }
  430. // })
  431. // },
  432. nameFocus:function(){
  433. this.$refs['ruleForm'].clearValidate(['name']);
  434. },
  435. phoneFocus:function(){
  436. this.$refs['ruleForm'].clearValidate(['phone']);
  437. },
  438. mailFocus:function(){
  439. this.$refs['ruleForm'].clearValidate(['mail']);
  440. },
  441. codeFocus: function() {
  442. this.$refs['ruleForm'].clearValidate(['code']);
  443. },
  444. // 公司名称获取焦点时
  445. companyFocus: function() {
  446. this.$refs['ruleForm'].clearValidate(['companyName']);
  447. this.getResult(this.form.companyName)
  448. },
  449. otherFocus:function() {
  450. this.$refs['ruleForm'].clearValidate(['job','otherJob']);
  451. },
  452. // 发送验证码
  453. sendCode: function() {
  454. var status = /^1[3-9]\d{9}$/.test(this.form.phone)
  455. var _this = this
  456. if (!status) return
  457. $.ajax({
  458. type:'POST',
  459. url:'/salesLeads/sendMsg',
  460. data: {
  461. phoneNum: _this.form.phone
  462. },
  463. success:function (res) {
  464. if (res.data && res.data.success) {
  465. _this.sendCodeBtn = true
  466. _this.countdown = 60
  467. _this.codeText = '重新获取' + _this.countdown + 's'
  468. var timeInt = setInterval(function() {
  469. _this.countdown--
  470. _this.codeText = '重新获取' + _this.countdown + 's'
  471. if (_this.countdown <= 0) {
  472. _this.sendCodeBtn = false
  473. _this.codeText = '获取验证码'
  474. window.clearInterval(timeInt)
  475. }
  476. }, 1000)
  477. } else {
  478. _this.$message.error('短信验证码发送失败');
  479. }
  480. }
  481. })
  482. },
  483. // 校验验证码
  484. checkCode: function(val) {
  485. var _this = this
  486. if (val.length !== 6) return
  487. $.ajax({
  488. type:'POST',
  489. url:'/salesLeads/checkCode',
  490. data: {
  491. code: _this.form.code,
  492. phoneNum: _this.form.phone
  493. },
  494. success:function (res) {
  495. if (res.data && res.data.flag) {
  496. _this.$message.success('验证成功')
  497. _this.codeStatus = true
  498. } else {
  499. _this.codeStatus = false
  500. }
  501. }
  502. })
  503. },
  504. // 日志统计
  505. logAjax: function(source) {
  506. $.ajax({
  507. type:'POST',
  508. url:'/front/portraitClassify?source=' + source,
  509. success:function (res) {
  510. console.log(res)
  511. }
  512. })
  513. },
  514. // 是否留资
  515. isNeedSubmit: function(source, callback, interest) {
  516. if (!loginflag) {
  517. openLoginDig()
  518. return
  519. }
  520. this.source = source
  521. this.interest = interest
  522. this.logAjax(source)
  523. var _this = this
  524. $.ajax({
  525. type:'GET',
  526. url:'/salesLeads/retainedCapital',
  527. data: {
  528. source: source
  529. },
  530. success:function (res) {
  531. // 判断当前信息否在其他页面留资 如果全部留资 直接弹窗提交成功
  532. var checkKeys = []
  533. var requireMail = ['structedData', 'pc_data_custom_export', 'pc_data_custom_data']
  534. if (requireMail.indexOf(_this.source) > -1) {
  535. checkKeys = ['name', 'phone', 'company', 'mail', 'branch', 'position', 'companyType']
  536. } else {
  537. checkKeys = ['name', 'phone', 'company', 'branch', 'position', 'companyType']
  538. }
  539. var result = checkRequiredKeys(checkKeys, res.info)
  540. res.info.interest = interest
  541. _this.showForm = true
  542. // 当前头部背景图
  543. _this.isSelfHeader()
  544. if (res.info) {
  545. echoRequiredValues(_this.form, res.info, ['name', 'phone', 'mail', 'branch'])
  546. // 原有赋值回显逻辑
  547. _this.form.oldPhone = res.info.phone ? res.info.phone : ''
  548. _this.form.companyName = res.info.company ? res.info.company : ''
  549. _this.form.companyType = res.info.companyType ? res.info.companyType.split(',') : []
  550. if (res.info.position) {
  551. if (jobJson.indexOf(res.info.position) == -1) {
  552. _this.form.job = ''
  553. _this.form.otherJob = ''
  554. } else {
  555. _this.form.job = res.info.position
  556. }
  557. } else {
  558. _this.form.job = ''
  559. }
  560. }
  561. // if (result) {
  562. // callback && callback()
  563. // _this.formAjax(_this.source, res.info)
  564. // } else if (res.data) {
  565. // _this.isForce = res.data.fource
  566. // if (res.data.retainedCapital) {
  567. // _this.showForm = true
  568. // // 当前头部背景图
  569. // _this.isSelfHeader()
  570. // // _this.changeTop()
  571. // if (res.info) {
  572. // echoRequiredValues(_this.form, res.info, ['name', 'phone', 'mail', 'branch'])
  573. // // 原有赋值回显逻辑
  574. // _this.form.oldPhone = res.info.phone ? res.info.phone : ''
  575. // _this.form.companyName = res.info.company ? res.info.company : ''
  576. // _this.form.companyType = res.info.companyType ? res.info.companyType.split(',') : []
  577. // if (res.info.position) {
  578. // if (jobJson.indexOf(res.info.position) == -1) {
  579. // // _this.form.job = '其他'
  580. // // _this.form.otherJob = res.data.position.replace('其他/', '')
  581. // _this.form.job = ''
  582. // _this.form.otherJob = ''
  583. // } else {
  584. // _this.form.job = res.info.position
  585. // }
  586. // } else {
  587. // _this.form.job = ''
  588. // }
  589. // }
  590. // } else {
  591. // callback && callback()
  592. // // 缺陷出现场景为:在其他页面留过资,但没有邮箱信息(user表也没有存邮箱字段),当前source也已留过资(是否需要留资字段返回为false)
  593. // // 如出现改场景 则会一直提交(更新)不了留资信息, 引次此处也需要再次提交
  594. // // _this.formAjax(_this.source, res.info)
  595. // }
  596. // }
  597. }
  598. })
  599. },
  600. // 自定义弹窗头部
  601. isSelfHeader: function(){
  602. var imgUrl = '/common-module/pc-dialog/image/structed-title.png'
  603. var custom_export = this.source.indexOf('custom_export') > -1
  604. var custom_data = this.source.indexOf('custom_data') > -1
  605. var api_interface = this.source.indexOf('api_interface') > -1
  606. // 数据超市source
  607. var marketNoResult = this.source.indexOf('pc_supermarket_Noresults_customization') > -1 // 数据超市列表无数据-申请定制
  608. var marketApplicationScenario = this.source.indexOf('pc_market_ApplicationScenario') > -1 // 数据市场落地页-大数据服务应用场景-立即咨询
  609. var marketBuy = this.source.indexOf('pc_supermarket_details_buy') > -1 // 数据超市详情页-申请购买
  610. var marketDetailCustom = this.source.indexOf('pc_supermarket_details_customization') > -1 // 数据超市详情页-申请定制
  611. if (custom_export || custom_data || marketNoResult || marketDetailCustom) {
  612. imgUrl = '/common-module/pc-dialog/image/leave-title-custom.png'
  613. } else if (api_interface) {
  614. imgUrl = '/common-module/pc-dialog/image/leave-title-api.png'
  615. } else if (marketApplicationScenario) {
  616. imgUrl = '/common-module/pc-dialog/image/data-supermarket-contact.png'
  617. } else if (marketBuy) {
  618. imgUrl = '/common-module/pc-dialog/image/data-supermarket-buy.png'
  619. }
  620. this.getModules()
  621. this.$nextTick(function(){
  622. $('#collectUserInfoDialog .dialog-header').css('background-image', 'url(' + imgUrl + ')')
  623. })
  624. },
  625. // 表单提交事件
  626. submitForm: function(formName) {
  627. var _this = this
  628. this.$refs[formName].validate(function (valid) {
  629. if (valid) {
  630. _this.formAjax(_this.source)
  631. } else {
  632. console.log('error submit!!');
  633. return false;
  634. }
  635. });
  636. },
  637. // 表单提交请求
  638. formAjax: function(source, info) {
  639. var params = {
  640. source: source,
  641. name: this.form.name,
  642. phone: this.form.phone,
  643. mail: this.form.mail,
  644. company: this.form.companyName, // 公司名称
  645. companyType: this.form.companyType.join(','),
  646. position: this.form.job == '其他' ? this.form.job + '/' + this.form.otherJob : this.form.job,
  647. code: this.form.code,
  648. agree: true, // 原来留资模块的同意协议字段,,,默认传一个true 方便后端处理
  649. branch: this.form.branch.indexOf('总裁') > -1 || this.form.branch.indexOf('总经理') > -1 || !this.form.job ? '' : this.form.branch,
  650. interest: this.interest
  651. }
  652. if (info) {
  653. params = info
  654. params.source = source
  655. params.interest = info.interest // 感兴趣内容
  656. }
  657. var _this = this
  658. $.ajax({
  659. type:'POST',
  660. url: '/salesLeads/collectInfo',
  661. contentType: "application/json;charset=utf-8",
  662. data: JSON.stringify(params),
  663. success:function (res) {
  664. if (res.data) {
  665. _this.showForm = false
  666. _this.showSuccess = true
  667. } else {
  668. _this.$message.error(res.error_msg);
  669. }
  670. }
  671. })
  672. },
  673. // 手机号输入框input事件
  674. inputPhone: function(val) {
  675. this.form.phone = val.replace(/[^\d]/g,'')
  676. },
  677. // 企业名称联想
  678. getResult:function(name) {
  679. // 名称为空或长度小于2不发请求
  680. if (!name || name.length < 2) return
  681. var _this = this
  682. $.ajax({
  683. type:'POST',
  684. url:'/jypay/user/company/association',
  685. data: {
  686. name: name,
  687. companyCount:10
  688. },
  689. heads : {
  690. 'content-type': 'application/x-www-form-urlencoded'
  691. },
  692. success:function (res) {
  693. console.log(res)
  694. if (res.data && res.data.length > 0) {
  695. var result = []
  696. res.data.map(function(item){
  697. item = _this.brightKeyword(item)
  698. result.push(item)
  699. return result
  700. })
  701. _this.companyList = result
  702. _this.showSearchResult = true
  703. }
  704. }
  705. })
  706. },
  707. searchCompany: debounce(function(val){
  708. if(val === '') { this.showSearchResult = false}
  709. this.getResult(val)
  710. }, 600),
  711. // 选择联想出来的公司名称
  712. selectCompany: function(item) {
  713. this.form.companyName = item.replace(/<.*?>/ig, '')
  714. this.showSearchResult = false
  715. },
  716. // 关键词高亮
  717. brightKeyword: function (val) {
  718. var name = this.form.companyName
  719. if (val.indexOf(name) !== -1) {
  720. return val.replace(name, "<span style='color:#2ABED1;'>" + name + "</span>")
  721. } else {
  722. return val
  723. }
  724. },
  725. // 暂不提供
  726. cancelForm: function() {
  727. this.form.name = ''
  728. this.form.phone = ''
  729. this.form.mail = ''
  730. this.form.companyName = ''
  731. this.form.job = ''
  732. this.form.otherJob = ''
  733. this.form.code = ''
  734. var needExportSource = ['structedData', 'pc_data_custom_export', 'pc_data_custom_data']
  735. if (needExportSource.indexOf(this.source) > -1) {
  736. this.showForm = false
  737. this.showExport = true
  738. } else {
  739. this.showForm = false
  740. }
  741. this.showSearchResult=false
  742. },
  743. // 数据导出
  744. dataExport: function() {
  745. location.href = "/front/dataExport/toSieve"
  746. }
  747. }
  748. })