index.vue 93 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593
  1. <template>
  2. <div class="bgcolor">
  3. <div class="navBarTOP">
  4. <!-- 顶部条-->
  5. <van-nav-bar class="navBar" title="计划外">
  6. <template #right>
  7. <span @click="searchFn">筛选<van-icon name="arrow-down" /></span>
  8. </template>
  9. </van-nav-bar>
  10. <div class="searchDiv">
  11. <van-search
  12. v-model="storeName"
  13. left-icon="search"
  14. show-action
  15. placeholder="搜索名称/编号/地址"
  16. @clear="clearFn">
  17. <template #action>
  18. <div @click="onSearchm">搜索</div>
  19. </template>
  20. </van-search>
  21. </div>
  22. <van-tabs class="myTab" type="card" v-model="tabVal" color="#0057ba" @change="tabChange">
  23. <van-tab title="销售部" name="0" :disabled="disabled"></van-tab>
  24. <van-tab title="我的" name="1" :disabled="disabled"></van-tab>
  25. </van-tabs>
  26. </div>
  27. <!-- 主体内容-->
  28. <div class="container" style="margin-top: 144px">
  29. <van-list
  30. class="myList"
  31. v-model="loading"
  32. :finished="finished"
  33. finished-text="--已经到底了--"
  34. @load="onLoad">
  35. <div class="cellcontent" v-for="(item, index) in list" :key="index">
  36. <van-cell>
  37. <div class="card">
  38. <div class="title titlero btn" :data-clipboard-text="item.storeCode">
  39. {{ item.storeName }}(<span style="color: #0057ba">{{ item.storeCode }}</span
  40. >)<van-icon
  41. :name="paste"
  42. color="#ee0a24"
  43. size="20"
  44. style="top: 6px; margin-left: 4px" />
  45. </div>
  46. <div class="info" style="position: relative">
  47. 联系人:{{ item.contactName }}
  48. <div style="position: absolute; bottom: 0px; right: 0px">
  49. <el-popover
  50. popper-class="zpover zpover6"
  51. placement="bottom-start"
  52. trigger="click">
  53. <div>
  54. <p>
  55. 本店{{ timeData }}下单SKU数:<a
  56. @click="linkList(item)"
  57. style="text-decoration: underline"
  58. >点击查看详情</a
  59. >
  60. </p>
  61. </div>
  62. <div
  63. class="visitStoreIco"
  64. v-if="item.storeLabels.zysslNums"
  65. style="background-color: #fff; position: relative"
  66. slot="reference">
  67. <p
  68. style="
  69. width: 100%;
  70. position: absolute;
  71. z-index: 1;
  72. top: 0.2px;
  73. width: 22px;
  74. margin: 0;
  75. margin-left: 3.6px;
  76. text-align: center;
  77. font-size: 12px;
  78. ">
  79. {{ item.storeLabels.zysslNums }}
  80. </p>
  81. <van-icon :name="ord" size="26" />
  82. </div>
  83. </el-popover>
  84. <el-popover
  85. popper-class="zpover zpover5"
  86. placement="bottom"
  87. width="200"
  88. trigger="click">
  89. <div v-if="item.storeLabels">
  90. <p>已参加:</p>
  91. <p v-for="tt in (item.storeLabels.targetOne + '').split(';')">
  92. {{ tt }}
  93. </p>
  94. </div>
  95. <div
  96. class="visitStoreIco"
  97. v-if="item.storeLabels.targetOne"
  98. style="background-color: #fff"
  99. slot="reference">
  100. <van-icon :name="targetOne" size="26" />
  101. </div>
  102. </el-popover>
  103. <el-popover
  104. popper-class="zpover"
  105. placement="bottom"
  106. width="200"
  107. trigger="click"
  108. content="金牌店调色机5天未联网">
  109. <div
  110. v-if="item.storeLabels.ccmOffline"
  111. class="visitStoreIco"
  112. style="background-color: #fff"
  113. slot="reference">
  114. <van-icon :name="Network" size="26" />
  115. </div>
  116. </el-popover>
  117. <el-popover
  118. popper-class="zpover"
  119. placement="bottom"
  120. width="200"
  121. trigger="click"
  122. content="同城店近60天未下单">
  123. <div
  124. v-if="item.storeLabels.fxNoOrder"
  125. class="visitStoreIco"
  126. style="background-color: #fff"
  127. slot="reference">
  128. <van-icon :name="order60" size="26" />
  129. </div>
  130. </el-popover>
  131. <el-popover
  132. popper-class="zpover"
  133. placement="bottom"
  134. width="200"
  135. trigger="click"
  136. content="金牌店近30天未下单">
  137. <div
  138. v-if="item.storeLabels.noOrder"
  139. class="visitStoreIco"
  140. style="background-color: #fff"
  141. slot="reference">
  142. <van-icon :name="order" size="26" />
  143. </div>
  144. </el-popover>
  145. <el-popover
  146. popper-class="zpover"
  147. placement="bottom"
  148. width="200"
  149. trigger="click"
  150. content="本店本月进过专业时时丽">
  151. <div
  152. class="visitStoreIco"
  153. v-if="item.storeLabels.zyssl"
  154. style="background-color: #ed5c68"
  155. slot="reference">
  156. </div>
  157. </el-popover>
  158. <el-popover
  159. popper-class="zpover zpover1"
  160. placement="bottom"
  161. width="200"
  162. trigger="click"
  163. content="本店本月进过超好贴">
  164. <div
  165. v-if="item.storeLabels.chtczj"
  166. class="visitStoreIco"
  167. style="background-color: #0057ba"
  168. slot="reference">
  169. </div>
  170. </el-popover>
  171. <el-popover
  172. placement="bottom"
  173. popper-class="zpover zpover1 zpover1sb"
  174. :disabled="!item.userVisitTimesMap"
  175. trigger="click">
  176. <div
  177. v-if="item.storeLabels.visitTimes && item.storeLabels.visitTimes > 0"
  178. class="visitStoreIco"
  179. slot="reference"
  180. style="background-color: #fff; position: relative">
  181. <p
  182. style="
  183. width: 100%;
  184. position: absolute;
  185. z-index: 10;
  186. top: -2px;
  187. margin: 0;
  188. text-align: center;
  189. font-size: 12px;
  190. ">
  191. {{ item.storeLabels.visitTimes }}
  192. </p>
  193. <van-icon :name="ordernum" size="26" />
  194. </div>
  195. <el-table :data="item.userVisitTimesMap" border max-height="180px">
  196. <el-table-column label="业务员" prop="userName" />
  197. <el-table-column label="拜访次数" prop="visitTimes" width="110px" />
  198. </el-table>
  199. </el-popover>
  200. </div>
  201. </div>
  202. <div class="info">
  203. 类型:{{ item.storeCategory }}&nbsp;
  204. <el-popover popper-class="zpover zpover6" placement="bottom-start" trigger="click">
  205. <div>
  206. <p>
  207. 本店经营品项指导:
  208. <a @click="linkimg(item)" style="text-decoration: underline">点击查看</a>
  209. </p>
  210. </div>
  211. <van-icon name="question-o" size="18" slot="reference" />
  212. </el-popover>
  213. </div>
  214. <div class="info" v-if="item.telephone" @click="buryingPointFn(item)">
  215. 联系电话:<a
  216. style="color: #0057ba; font-weight: bold; text-decoration: underline"
  217. :href="'tel:' + item.telephone"
  218. >{{ item.telephone }}<van-icon name="phone"
  219. /></a>
  220. </div>
  221. <div class="info">
  222. 地址:{{ item.addressLine }}
  223. <img v-if="item.lon" style="width: 36px" :src="sbpmdh" @click="linkapp(item)" />
  224. </div>
  225. <div class="info" v-if="typeShow">经销商:{{ item.chainName }}</div>
  226. <div class="info">距离:{{ Micrometer(item.distance) }}m</div>
  227. </div>
  228. <div
  229. class="statstext"
  230. v-if="item.stateString == '未拜访'"
  231. style="background-color: #ed5c68">
  232. 未拜访
  233. </div>
  234. <div
  235. class="statstext"
  236. v-if="item.stateString == '拜访中'"
  237. style="background-color: white">
  238. <van-icon :name="times" color="#ee0a24" size="32" />
  239. </div>
  240. <div class="statstext" v-if="item.stateString == '已拜访'">已拜访</div>
  241. <div class="btnbox">
  242. <van-row>
  243. <van-col
  244. span="5"
  245. v-if="item.stateString != '已拜访' && customerVisits"
  246. @click="storeVisit(item)">
  247. <img :src="call" style="margin: 0 auto; height: 18px; display: block" />
  248. <p style="text-align: center; margin: 0; font-size: 12px">进入拜访</p>
  249. </van-col>
  250. <van-col
  251. span="5"
  252. v-if="item.storeCategory == '公装经销商'"
  253. @click="projectOutVisit(item)">
  254. <img :src="xmgj" style="margin: 0 auto; height: 18px; display: block" />
  255. <p style="text-align: center; margin: 0; font-size: 12px">项目跟进</p>
  256. </van-col>
  257. <van-col
  258. span="5"
  259. v-if="
  260. item.stateString != '已拜访' &&
  261. item.storeCategory != '公装经销商' &&
  262. customerVisits
  263. "
  264. @click="abnormalVisit(item)">
  265. <img :src="yichang" style="margin: 0 auto; height: 18px; display: block" />
  266. <p style="text-align: center; margin: 0; margin-top: 1px; font-size: 12px">
  267. 异常拜访
  268. </p>
  269. </van-col>
  270. <van-col span="4" v-if="item.showOrderButton" @click="orderFn(item)">
  271. <img :src="xiadan" style="margin: 0 auto; height: 18px; display: block" />
  272. <p style="text-align: center; margin: 0; margin-top: 1px; font-size: 12px">
  273. 去下单
  274. </p>
  275. </van-col>
  276. <van-col span="5" v-if="item.stateString == '已拜访'" @click="Visit(item)">
  277. <img :src="bfxx" style="margin: 0 auto; height: 18px; display: block" />
  278. <p style="text-align: center; margin: 0; margin-top: 1px; font-size: 12px">
  279. 拜访信息
  280. </p>
  281. </van-col>
  282. <van-col span="5" @click="visitFn(item)">
  283. <img :src="kehuxinxi" style="margin: 0 auto; width: 18px; display: block" />
  284. <p style="text-align: center; margin: 0; margin-top: 1px; font-size: 12px">
  285. 客户信息
  286. </p>
  287. </van-col>
  288. <van-col span="5" v-if="tabVal == 1" @click="storeJoinVisit(item)">
  289. <img :src="jiarujihua" style="margin: 0 auto; height: 18px; display: block" />
  290. <p style="text-align: center; margin: 0; font-size: 12px">加入计划内</p>
  291. </van-col>
  292. </van-row>
  293. </div>
  294. </van-cell>
  295. <div class="lineGrey"></div>
  296. </div>
  297. <van-empty v-if="list.length == 0" />
  298. </van-list>
  299. <br />
  300. <br />
  301. <br />
  302. <br />
  303. <br />
  304. </div>
  305. <van-popup v-model="showPicker" position="bottom" class="textsize">
  306. <van-row
  307. style="
  308. position: fixed;
  309. top: 0;
  310. width: 100%;
  311. z-index: 998;
  312. background-color: #fff;
  313. border-bottom: 1px solid #ccc;
  314. ">
  315. <van-col span="3" style="text-align: center; margin: 14px 0" @click="showPicker = false">
  316. <van-icon name="cross" size="20" color="#909399" />
  317. </van-col>
  318. <van-col span="13"> </van-col>
  319. <van-col span="4" style="text-align: center; line-height: 36px" @click="onConfirm">
  320. <div style="color: #0057ba">
  321. <van-button type="info" size="small" color="#0057ba">筛选</van-button>
  322. </div></van-col
  323. >
  324. <van-col span="4" style="text-align: center; line-height: 36px" @click="onsets">
  325. <van-button type="default" size="small" style="height: 28px">重置</van-button>
  326. </van-col>
  327. </van-row>
  328. <div style="height: 48px; width: 100%"></div>
  329. <div class="searchcheck">
  330. <p class="searchchecktitle">&nbsp;经销商</p>
  331. <van-row>
  332. <van-col span="24">
  333. <div @click="moreTypeShowFn">
  334. <van-field
  335. style="
  336. margin-top: -6px;
  337. border-radius: 6px;
  338. border: 1px solid #ccc;
  339. overflow: hidden;
  340. "
  341. readonly
  342. v-model="chainName"
  343. label=""
  344. placeholder="请选择经销商" />
  345. </div>
  346. </van-col>
  347. </van-row>
  348. <p class="searchchecktitle" @click="otherbqShow = !otherbqShow">
  349. &nbsp;门店标签<van-icon name="arrow-down" style="float: right" />
  350. </p>
  351. <van-checkbox-group v-model="storeLabelTypes" direction="horizontal">
  352. <div v-if="otherbqShow" style="width: 100%">
  353. <div class="checkbox" v-for="(item, index) in StoreLabels" :key="index">
  354. <van-checkbox :name="item.dictValue">{{ item.dictLabel }}</van-checkbox>
  355. </div>
  356. <div style="height: 2px; background-color: #f5f5f5; width: 100%; clear: both"></div>
  357. </div>
  358. </van-checkbox-group>
  359. <van-checkbox-group v-model="result" direction="horizontal">
  360. <p class="searchchecktitle" @click="otherkkdShow = !otherkkdShow">
  361. &nbsp;可控店<van-icon name="arrow-down" style="float: right" />
  362. </p>
  363. <div v-if="otherkkdShow">
  364. <div v-for="(item, index) in storeTypeLists" :key="index" class="checkbox1">
  365. <div v-if="item.groupType == 'kkd'" class="child">
  366. <van-checkbox :name="item.dictValue">{{ item.dictLabel }}</van-checkbox>
  367. </div>
  368. </div>
  369. </div>
  370. <div style="height: 2px; background-color: #f5f5f5; width: 100%; clear: both"></div>
  371. <p class="searchchecktitle" @click="otherfxdShow = !otherfxdShow">
  372. &nbsp;分销店<van-icon name="arrow-down" style="float: right" />
  373. </p>
  374. <div v-if="otherfxdShow" style="margin: 0 14px; width: 100%">
  375. <div style="height: 2px; background-color: #f5f5f5; width: 100%; clear: both"></div>
  376. <p class="searchchecktitle1" @click="otherfxdShow1 = !otherfxdShow1">
  377. 金牌店<van-icon name="arrow-down" style="float: right" />
  378. </p>
  379. <div v-if="otherfxdShow1">
  380. <div v-for="(item1, index1) in storeTypeLists" :key="200 + index1" class="checkbox1">
  381. <div v-if="item1.groupType == 'fxd' && item1.remark == 'jp'" class="child">
  382. <van-checkbox :name="item1.dictValue">{{ item1.dictLabel }}</van-checkbox>
  383. </div>
  384. </div>
  385. <div style="height: 2px; background-color: #f5f5f5; width: 100%; clear: both"></div>
  386. </div>
  387. <p class="searchchecktitle1" @click="otherfxdShow2 = !otherfxdShow2">
  388. 同城分销店<van-icon name="arrow-down" style="float: right" />
  389. </p>
  390. <div v-if="otherfxdShow2">
  391. <div
  392. v-for="(itemlj, indexlj) in storeTypeLists"
  393. :key="400 + indexlj"
  394. class="checkbox1">
  395. <div v-if="itemlj.groupType == 'fxd' && itemlj.remark == 'tcfx'" class="child">
  396. <van-checkbox :name="itemlj.dictValue">{{ itemlj.dictLabel }}</van-checkbox>
  397. </div>
  398. </div>
  399. <div style="clear: both"></div>
  400. </div>
  401. </div>
  402. <div style="height: 2px; background-color: #f5f5f5; width: 100%; clear: both"></div>
  403. <p class="searchchecktitle" @click="otherShow = !otherShow">
  404. &nbsp;其他 <van-icon name="arrow-down" style="float: right" />
  405. </p>
  406. <div v-if="otherShow">
  407. <div v-for="(item2, index2) in storeTypeLists" :key="100 + index2" class="checkbox1">
  408. <div v-if="item2.groupType == 'other'" class="child">
  409. <van-checkbox :name="item2.dictValue">{{ item2.dictLabel }}</van-checkbox>
  410. </div>
  411. </div>
  412. </div>
  413. </van-checkbox-group>
  414. </div>
  415. </van-popup>
  416. <van-popup v-model="moreTypeShow" position="bottom" style="height: 80%">
  417. <van-row style="background-color: #f5f5f5">
  418. <van-col span="20">
  419. <van-field
  420. left-icon="search"
  421. style="margin-top: 2px; border-radius: 6px; overflow: hidden"
  422. v-model="CustomerName"
  423. label=""
  424. placeholder="请输入关键词"
  425. clearable />
  426. </van-col>
  427. <van-col span="4" style="text-align: center; line-height: 48px" @click="getCustomer">
  428. <div style="background-color: #0057ba; color: #fff">搜索</div></van-col
  429. >
  430. </van-row>
  431. <van-picker
  432. show-toolbar
  433. :columns="chainsData"
  434. value-key="chainName"
  435. @confirm="onConfirmChainsList"
  436. @cancel="moreTypeShow = false"
  437. visible-item-count="10" />
  438. </van-popup>
  439. <tab-bar tabBarActive="outsidelist"></tab-bar>
  440. <div class="positionContent" @click="rangeStoreFn()" v-if="mapShows">
  441. <van-icon class="img" :name="mpimg" size="50" />
  442. </div>
  443. </div>
  444. </template>
  445. <script>
  446. import tabBar from '@/components/tabBar';
  447. import {
  448. getUserOutPlaList,
  449. getUserOrgStoreList,
  450. stopVisit,
  451. checkVisit,
  452. addVisitsPosition,
  453. mobileReposition,
  454. getStoreyslTypeList,
  455. getStoreTypeListlp,
  456. joinInPlan,
  457. getStoreLabels,
  458. getCustomerList,
  459. buryingPoint,
  460. ProductItemImge,
  461. } from '@/api/index';
  462. import times from '@/assets/Icon/times.png';
  463. import order60 from '@/assets/order60.png';
  464. import targetOne from '@/assets/targetOne.png';
  465. import Network from '@/assets/Network.png';
  466. import ord from '@/assets/ord.png';
  467. import timeico from '@/assets/Icon/datatims.png';
  468. import location from '@/assets/location.png';
  469. import paste from '@/assets/paste.png';
  470. import visitTimes from '@/assets/visitTimes.png';
  471. import mpimg from '@/assets/mpimg.png';
  472. import axios from 'axios';
  473. import mapmarker from '@/components/mapMarkerDouble';
  474. import order from '@/assets/order.png';
  475. import ordernum from '@/assets/ordernum.png';
  476. import sbpmdh from '@/assets/sbpmdh.png';
  477. import request from '@/utils/request';
  478. import call from '@/assets/call.png';
  479. import jiarujihua from '@/assets/jiarujihua.png';
  480. import kehuxinxi from '@/assets/kehuxinxi-2.png';
  481. import xiadan from '@/assets/xiadan.png';
  482. import yichang from '@/assets/yichang.png';
  483. import bfxx from '@/assets/bfxx.png';
  484. import xmgj from '@/assets/xmgj.png';
  485. import { getOrderUrlByStoreId } from '@/api/inventory';
  486. import { checkStoreAddressByStoreCode } from '@/api/visitstore';
  487. import { getPosition, getMapPoi, getkeywordPoi, getTicketFun } from '@/utils/TXApiFun';
  488. export default {
  489. name: 'outsidelist',
  490. components: { tabBar, mapmarker },
  491. data() {
  492. return {
  493. yichang: yichang,
  494. xmgj: xmgj,
  495. bfxx: bfxx,
  496. xiadan: xiadan,
  497. kehuxinxi: kehuxinxi,
  498. jiarujihua: jiarujihua,
  499. call: call,
  500. times: times,
  501. searchShows: false,
  502. paste: paste,
  503. visitTimess: visitTimes,
  504. sbpmdh: sbpmdh,
  505. ordernum: ordernum,
  506. typeShow: false,
  507. mpimg: mpimg,
  508. order: order,
  509. ord: ord,
  510. mapShow: false,
  511. otherShow: false,
  512. Network: Network,
  513. order60: order60,
  514. targetOne: targetOne,
  515. chainName: '',
  516. chainCode: '',
  517. mapShows: false,
  518. activeNames: '1',
  519. showPopover: false,
  520. moreTypeShow: false,
  521. showPopoverVNUM: [],
  522. showPopoverC: [],
  523. showPopoverZ: [],
  524. zyssl: [],
  525. chtczj: [],
  526. noVisit: [],
  527. noOrder: [],
  528. fxNoOrder: [],
  529. storeLabelTypes: [],
  530. // showPopover:false,
  531. location: location,
  532. timeico: timeico,
  533. disabled: false,
  534. timer: null,
  535. flag: true,
  536. show: false,
  537. tabVal: '1',
  538. list: [],
  539. cont: 0,
  540. loading: false,
  541. showPicker: false,
  542. finished: false,
  543. otherbqShow: true,
  544. otherkkdShow: true,
  545. otherfxdShow: true,
  546. otherfxdShow2: true,
  547. otherfxdShow1: true,
  548. typeName: '搜索',
  549. visitEndId: '',
  550. pageSize: 12,
  551. pageNum: 1,
  552. listActive: null,
  553. query: '',
  554. storeName: '',
  555. genDate: '',
  556. storeType: '',
  557. endShow: false,
  558. storeCategory: '',
  559. fromValue: {},
  560. storeTypeList: [],
  561. storeTypeLists: [],
  562. chainsData: [],
  563. serachstype: '',
  564. addShow1: false,
  565. storeCategoryList: '',
  566. result: [],
  567. StoreLabels: [],
  568. CustomerName: '',
  569. lat: '',
  570. lon: '',
  571. timeData: '',
  572. customerVisits: true,
  573. };
  574. },
  575. watch: {
  576. $route(to, from) {
  577. this.storeName = localStorage.getItem('outvstoreName');
  578. this.chainName = localStorage.getItem('outvchainName');
  579. if (localStorage.getItem('lat') != null) {
  580. this.lat = localStorage.getItem('lat');
  581. this.lon = localStorage.getItem('lon');
  582. } else {
  583. this.lat = '';
  584. this.lon = '';
  585. }
  586. if (localStorage.getItem('outvstoreLabelTypes') != null) {
  587. this.storeLabelTypes = localStorage.getItem('outvstoreLabelTypes').split(',');
  588. } else {
  589. this.storeLabelTypes = [];
  590. }
  591. if (localStorage.getItem('outvstoreCategoryList') != null) {
  592. this.result = localStorage.getItem('outvstoreCategoryList').split(',');
  593. this.storeLabelTypes = [];
  594. this.storeCategoryList = this.result.join(',');
  595. } else {
  596. this.result = [];
  597. this.storeCategoryList = this.result.join(',');
  598. }
  599. this.chainCode = localStorage.getItem('outvchainCode');
  600. this.storeName = localStorage.getItem('outvstoreName');
  601. if (
  602. (from.path == '/My/index' && to.path == '/outsidelist/index') ||
  603. (from.path == '/home' && to.path == '/outsidelist/index') ||
  604. (from.path == '/deviceWithin/index' && to.path == '/outsidelist/index') ||
  605. (from.path == '/storemanagement/index' && to.path == '/outsidelist/index')
  606. ) {
  607. this.tabVal = '1';
  608. } else {
  609. if (localStorage.getItem('tabVal') != null) {
  610. this.tabVal = localStorage.getItem('tabVal');
  611. }
  612. }
  613. if (
  614. (from.path == '/storeDetail' && to.path == '/outsidelist/index') ||
  615. (from.path == '/storeGroup' && to.path == '/outsidelist/index') ||
  616. (from.path == '/suishenbangOutstoreVisit' && to.path == '/outsidelist/index') ||
  617. (from.path == '/outabnormalVisit' && to.path == '/outsidelist/index') ||
  618. (from.path == '/home' && to.path == '/outsidelist/index') ||
  619. (from.path == '/deviceWithin/index' && to.path == '/outsidelist/index') ||
  620. (from.path == '/storemanagement/index' && to.path == '/outsidelist/index') ||
  621. (from.path == '/My/index' && to.path == '/outsidelist/index')
  622. ) {
  623. this.onSearch();
  624. }
  625. var postType = localStorage.getItem('postType');
  626. if (postType == 'GZ') {
  627. this.addShow1 = false;
  628. this.otherShow = true;
  629. } else {
  630. this.addShow1 = true;
  631. this.otherShow = false;
  632. }
  633. if (localStorage.getItem('postType') == 'JZ' || localStorage.getItem('postType') == 'GZ') {
  634. this.mapShows = false;
  635. } else {
  636. this.mapShows = true;
  637. }
  638. this.getMonth();
  639. },
  640. },
  641. created() {
  642. this.storeName = localStorage.getItem('outvstoreName');
  643. this.chainName = localStorage.getItem('outvchainName');
  644. if (localStorage.getItem('outvstoreLabelTypes') != null) {
  645. this.storeLabelTypes = localStorage.getItem('outvstoreLabelTypes').split(',');
  646. } else {
  647. this.storeLabelTypes = [];
  648. }
  649. if (localStorage.getItem('outvstoreCategoryList') != null) {
  650. this.result = localStorage.getItem('outvstoreCategoryList').split(',');
  651. this.storeCategoryList = this.result.join(',');
  652. } else {
  653. this.result = [];
  654. this.storeCategoryList = this.result.join(',');
  655. }
  656. this.chainCode = localStorage.getItem('outvchainCode');
  657. this.storeName = localStorage.getItem('outvstoreName');
  658. if (localStorage.getItem('tabVal') == null || this.$route.query.info != 'y') {
  659. if (this.$route.query.info != undefined) {
  660. if (this.$route.query.info.indexOf('y') != -1) {
  661. this.tabVal = localStorage.getItem('tabVal');
  662. } else {
  663. this.tabVal = '1';
  664. }
  665. } else {
  666. this.tabVal = '1';
  667. }
  668. } else {
  669. this.tabVal = localStorage.getItem('tabVal');
  670. }
  671. if (localStorage.getItem('postType') == 'JZ' || localStorage.getItem('postType') == 'GZ') {
  672. this.mapShows = false;
  673. } else {
  674. this.mapShows = true;
  675. }
  676. this.query = this.$route.query;
  677. localStorage.removeItem('visitId');
  678. this.getStoreTypeList();
  679. this.getStoreLabels();
  680. var postType = localStorage.getItem('postType');
  681. if (postType == 'GZ') {
  682. this.addShow1 = false;
  683. this.otherShow = true;
  684. } else {
  685. this.addShow1 = true;
  686. this.otherShow = false;
  687. }
  688. this.getMonth();
  689. },
  690. methods: {
  691. clearFn() {
  692. this.storeName = '';
  693. localStorage.setItem('outvstoreName', '');
  694. },
  695. linkapp(val) {
  696. var poind = this.gcj02BD(val.lat, val.lon);
  697. let url = window.location.href;
  698. let that = this;
  699. let wx = this.wx;
  700. let qiyeData;
  701. const instance = axios.create();
  702. instance.defaults.headers.common['userId'] = localStorage.getItem('loginName');
  703. instance
  704. .get(process.env.VUE_APP_BASE_API + 'mobile/wx/ticket', {
  705. params: {
  706. url: url,
  707. agent: 1,
  708. },
  709. })
  710. .then((response) => {
  711. if (response.status == 200) {
  712. qiyeData = response.data.data;
  713. // wx.config({
  714. // beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  715. // debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  716. // appId: qiyeData.appId, // 必填,企业微信的corpID
  717. // timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  718. // nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  719. // signature: qiyeData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  720. // jsApiList: ["ready", "invoke"]
  721. // });
  722. // wx.ready(function() {
  723. // wx.checkJsApi({
  724. // jsApiList: ["agentConfig", "launchMiniprogram"], // 需要检测的JS接口列表
  725. // success: function(res) {}})})
  726. wx.agentConfig({
  727. corpid: qiyeData.appId, // 必填,企业微信的corpid,必须与当前登录的企业一致
  728. agentid: qiyeData.agentId, // 必填,企业微信的应用id (e.g. 1000247)
  729. timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  730. nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  731. signature: qiyeData.signature, // 必填,签名,见附录-JS-SDK使用权限签名算法
  732. jsApiList: ['launchMiniprogram'], //必填,传入需要使用的接口名称
  733. success: function (res) {
  734. wx.invoke(
  735. 'launchMiniprogram',
  736. {
  737. appid: 'wx238bbb5f6d958414',
  738. path:
  739. 'pages/relayStation/relayStation?latitude=' +
  740. poind.lat +
  741. '&longitude=' +
  742. poind.lon +
  743. '&name=' +
  744. val.addressLine,
  745. },
  746. function (res) {
  747. if (res.err_msg == 'launchMiniprogram:ok') {
  748. } else {
  749. }
  750. }
  751. );
  752. },
  753. fail: function (res) {
  754. if (res.errMsg.indexOf('function not exist') > -1) {
  755. alert('版本过低请升级');
  756. }
  757. },
  758. });
  759. }
  760. });
  761. },
  762. orderFn(val) {
  763. getOrderUrlByStoreId({
  764. storeId: val.storeId,
  765. from: 'outPlan',
  766. }).then((res) => {
  767. if (res.code == 200 && res.data) {
  768. window.location.href = res.data;
  769. } else {
  770. this.Toast({
  771. message: res.msg,
  772. duration: 5000,
  773. });
  774. }
  775. });
  776. },
  777. linkList(val) {
  778. this.$router.push({
  779. path: '/pItem',
  780. query: { id: val.storeCode, detilId: 'a' },
  781. });
  782. },
  783. linkimg(val) {
  784. ProductItemImge({ storeId: val.storeId }).then((response) => {
  785. if (response.code == 200) {
  786. if (response.data != undefined) {
  787. window.open(response.data);
  788. } else {
  789. this.$toast(response.msg);
  790. }
  791. } else {
  792. this.$toast(res.msg);
  793. }
  794. });
  795. },
  796. getMonth() {
  797. // 获取当前日期
  798. var currentDate = new Date();
  799. // 获取当前月份
  800. var currentMonth = currentDate.getMonth();
  801. // 获取当前年份
  802. // var currentYear = currentDate.getFullYear();
  803. var previousMonthDate1 = new Date();
  804. if (currentDate.getDate() == 1) {
  805. previousMonthDate1.setMonth(currentMonth - 1);
  806. } else {
  807. }
  808. var previousMonth1 = previousMonthDate1.getMonth();
  809. var previousYear1 = previousMonthDate1.getFullYear();
  810. // 计算前三个月的年份和月份
  811. var previousMonthDate = new Date();
  812. if (currentDate.getDate() == 1) {
  813. previousMonthDate.setMonth(currentMonth - 3);
  814. } else {
  815. previousMonthDate.setMonth(currentMonth - 2);
  816. }
  817. 1;
  818. var previousMonth = previousMonthDate.getMonth();
  819. var previousYear = previousMonthDate.getFullYear();
  820. //前三个月
  821. if (previousYear1 == previousYear) {
  822. var formattedPreviousMonth1 = previousYear1 + '-' + (previousMonth1 + 1);
  823. // 格式化年份和月份
  824. var formattedPreviousMonth = previousYear + '-' + (previousMonth + 1);
  825. this.timeData =
  826. formattedPreviousMonth.split('-')[1] + '-' + formattedPreviousMonth1.split('-')[1] + '月';
  827. } else {
  828. var formattedPreviousMonth1 = previousYear1 + '年' + (previousMonth1 + 1) + '月';
  829. // .toString().padStart(2, '0');
  830. // 格式化年份和月份
  831. var formattedPreviousMonth = previousYear + '年' + (previousMonth + 1) + '月';
  832. this.timeData = formattedPreviousMonth + '-' + formattedPreviousMonth1;
  833. }
  834. },
  835. moreTypeShowFn() {
  836. this.moreTypeShow = true;
  837. // this.CustomerName=""
  838. // this.chainsData=[]
  839. this.getCustomer();
  840. },
  841. buryingPoint(val) {
  842. buryingPoint(val);
  843. },
  844. getCustomer() {
  845. var name = '';
  846. if (this.tabVal != 1) {
  847. name = 'org';
  848. } else {
  849. name = 'my';
  850. }
  851. getCustomerList({ name: this.CustomerName, from: name }).then((request) => {
  852. this.chainsData = request.data;
  853. this.chainsData.push({});
  854. this.chainsData.pop();
  855. });
  856. },
  857. onConfirmChainsList(value) {
  858. if (value.chainName != undefined) {
  859. this.chainName = value.chainName;
  860. this.chainCode = value.chainCode;
  861. }
  862. this.showPickerChainsList = false;
  863. this.moreTypeShow = false;
  864. },
  865. getStoreLabels() {
  866. getStoreLabels().then((res) => {
  867. this.StoreLabels = res.data;
  868. });
  869. },
  870. searchType(val) {
  871. this.storeTypeLists = [];
  872. if (val != '') {
  873. let filterArr = this.storeTypeList.filter((item) => {
  874. return item.dictLabel.toLowerCase().includes(val.toLowerCase());
  875. });
  876. this.storeTypeLists = filterArr;
  877. } else {
  878. this.storeTypeLists = this.storeTypeList;
  879. }
  880. },
  881. onConfirm(value) {
  882. this.storeCategoryList = this.result.join(',');
  883. // this.typeName=value.dictLabel
  884. this.showPicker = false;
  885. this.onSearchm();
  886. },
  887. moreTypeShowclearableFn() {
  888. this.chainName = '';
  889. this.chainCode = '';
  890. this.chainsData = [];
  891. },
  892. onsets() {
  893. this.result = [];
  894. this.zyssl = [];
  895. this.chtczj = [];
  896. this.noVisit = [];
  897. this.noOrder = [];
  898. this.fxNoOrder = [];
  899. this.storeLabelTypes = [];
  900. this.storeCategoryList = this.result.join(',');
  901. this.chainName = '';
  902. this.chainCode = '';
  903. // this.typeName=value.dictLabel
  904. this.onSearch();
  905. },
  906. getStoreTypeList() {
  907. getStoreTypeListlp({}).then((res) => {
  908. this.storeTypeLists = res.data;
  909. this.storeTypeList = res.data;
  910. });
  911. },
  912. buryingPointFn(val) {
  913. this.buryingPoint({
  914. systemModel: '计划外',
  915. buryingPointType: 1,
  916. buryingPointValue: val.telephone,
  917. buryingPointName: '点击电话',
  918. buryingPointPosition: val.storeName + '(' + val.storeCode + ')',
  919. });
  920. },
  921. // 范围
  922. rangeStoreFn() {
  923. localStorage.setItem('tabVal', this.tabVal);
  924. let loading1 = this.$toast.loading({
  925. duration: 0,
  926. message: '加载中...',
  927. forbidClick: true,
  928. });
  929. let url = window.location.href;
  930. let wx = this.wx;
  931. var that = this;
  932. // that.$router.push({path: "/rangeStore", query: {
  933. // lon:"112.45359397440227",
  934. // lat:"34.62171814576471",
  935. // tabVal:that.tabVal
  936. // }
  937. // })
  938. let qiyeData;
  939. const instance = axios.create();
  940. instance.defaults.headers.common['userId'] = localStorage.getItem('loginName');
  941. instance
  942. .get(process.env.VUE_APP_BASE_API + 'mobile/wx/ticket', {
  943. params: {
  944. url: url,
  945. },
  946. })
  947. .then((response) => {
  948. if (response.status == 200) {
  949. this.cont = 5;
  950. var flat = true;
  951. var times = setInterval(() => {
  952. this.cont--;
  953. if (this.cont == '0') {
  954. if (flat) {
  955. loading1.clear();
  956. clearInterval(times);
  957. that.$dialog.alert({
  958. message: '定位失败,请开启企微定位权限',
  959. });
  960. } else {
  961. clearInterval(times);
  962. }
  963. }
  964. }, 1000);
  965. qiyeData = response.data.data;
  966. wx.config({
  967. beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  968. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  969. appId: qiyeData.appId, // 必填,企业微信的corpID
  970. timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  971. nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  972. signature: qiyeData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  973. jsApiList: ['ready', 'getLocation'], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  974. });
  975. wx.ready(function () {
  976. wx.getLocation({
  977. type: 'gcj02',
  978. success: function (res) {
  979. flat = false;
  980. loading1.clear();
  981. var name = '我的';
  982. if (that.tabVal != 1) {
  983. name = '销售部';
  984. }
  985. that.buryingPoint({
  986. systemModel: '计划外',
  987. buryingPointType: 3,
  988. buryingPointValue: name,
  989. buryingPointName: '计划外',
  990. buryingPointPosition: '进入地图',
  991. });
  992. that.$router.push({
  993. path: '/rangeStore',
  994. query: {
  995. lat: '',
  996. lon: '',
  997. tabVal: that.tabVal,
  998. },
  999. });
  1000. },
  1001. fail: function () {
  1002. loading1.clear();
  1003. that.$dialog.alert({
  1004. message: 'GPS未开启',
  1005. });
  1006. },
  1007. });
  1008. });
  1009. wx.error(function (res) {
  1010. loading1.clear();
  1011. that.$dialog.alert({
  1012. message: '定位失败,请开启企微定位权限',
  1013. });
  1014. });
  1015. }
  1016. });
  1017. },
  1018. //取消搜索
  1019. cancelSearch() {
  1020. this.$refs.item.toggle();
  1021. },
  1022. storeJoinVisit(val) {
  1023. joinInPlan({ storeId: val.storeId }).then((res) => {
  1024. if (res.code == 200) {
  1025. this.onSearch();
  1026. } else {
  1027. this.$dialog.alert({
  1028. title: '系统提示',
  1029. message: res.msg,
  1030. });
  1031. }
  1032. });
  1033. },
  1034. searchFn() {
  1035. this.showPicker = true;
  1036. this.CustomerName = '';
  1037. },
  1038. moreSearch() {
  1039. this.onSearch();
  1040. this.$refs.item.toggle();
  1041. },
  1042. getUserOrgStoreList() {
  1043. this.storeType = localStorage.getItem('storeType');
  1044. this.endShow = false;
  1045. if (this.refreshing) {
  1046. this.list = [];
  1047. this.refreshing = false;
  1048. }
  1049. var that = this;
  1050. this.disabled = true;
  1051. let loading2 = this.$toast.loading({
  1052. duration: 0,
  1053. message: '加载中...',
  1054. forbidClick: true,
  1055. });
  1056. getUserOrgStoreList({
  1057. lat: that.lat,
  1058. lon: that.lon,
  1059. chainCode: this.chainCode,
  1060. storeLabelTypes: this.storeLabelTypes.join(','),
  1061. pageNum: this.pageNum,
  1062. storeCategoryList: this.storeCategoryList,
  1063. pageSize: this.pageSize,
  1064. storeName: this.storeName.trim(),
  1065. genDate: this.genDate,
  1066. }).then((res) => {
  1067. this.disabled = false;
  1068. if (res.code == 200) {
  1069. loading2.clear();
  1070. this.loading = false;
  1071. if (this.pageNum == '1') {
  1072. this.list = [];
  1073. }
  1074. this.list = this.list.concat(res.rows);
  1075. if (this.list.length >= res.total) {
  1076. this.finished = true;
  1077. } else {
  1078. this.finished = false;
  1079. }
  1080. this.pageNum = this.pageNum + 1;
  1081. this.list.forEach((item) => {
  1082. if (item.stateString.indexOf('拜访中') != -1) {
  1083. this.endShow = true;
  1084. this.visitEndId = item.visitId;
  1085. return;
  1086. }
  1087. });
  1088. res.rows.forEach((item) => {
  1089. this.showPopoverVNUM.push({ showPopover: false });
  1090. this.showPopoverC.push({ showPopover: false });
  1091. this.showPopoverZ.push({ showPopover: false });
  1092. });
  1093. } else {
  1094. this.$toast(res.msg);
  1095. }
  1096. });
  1097. },
  1098. positionFn(val) {
  1099. getPosition().then((res) => {
  1100. let { TXisBD } = res;
  1101. this.lat = TXisBD.lat;
  1102. this.lon = TXisBD.lon;
  1103. localStorage.setItem('lat', TXisBD.lat);
  1104. localStorage.setItem('lon', TXisBD.lon);
  1105. if (val == 1) {
  1106. if (this.tabVal == 1) {
  1107. this.getUserOutPlaListFun();
  1108. } else {
  1109. this.getUserOrgStoreList();
  1110. }
  1111. } else {
  1112. this.getUserOutPlaListFun();
  1113. }
  1114. });
  1115. // // 本地开发 test 环境时 时跳过获取定位功能
  1116. // if (process.env.NODE_ENV === 'test') {
  1117. // this.lat = 34.62188103091605;
  1118. // this.lon = 112.45364302095416;
  1119. // localStorage.setItem('lat', this.lat);
  1120. // localStorage.setItem('lon', this.lon);
  1121. // if (this.tabVal == 1) {
  1122. // this.getUserOutPlaListFun();
  1123. // } else {
  1124. // this.getUserOrgStoreList();
  1125. // }
  1126. // return;
  1127. // }
  1128. // var that = this;
  1129. // let url = window.location.href;
  1130. // let wx = this.wx;
  1131. // let loadingmap = this.$toast.loading({
  1132. // duration: 0,
  1133. // message: '定位中...',
  1134. // forbidClick: true,
  1135. // });
  1136. // let qiyeData;
  1137. // const instance = axios.create();
  1138. // instance.defaults.headers.common['userId'] = localStorage.getItem('loginName');
  1139. // instance
  1140. // .get(process.env.VUE_APP_BASE_API + 'mobile/wx/ticket', {
  1141. // params: {
  1142. // url: url,
  1143. // },
  1144. // })
  1145. // .then((response) => {
  1146. // console.log('url=' + url);
  1147. // loadingmap.clear();
  1148. // if (response.status == 200) {
  1149. // this.cont = 5;
  1150. // var flat = true;
  1151. // var times = setInterval(() => {
  1152. // this.cont--;
  1153. // if (this.cont == '0') {
  1154. // if (flat) {
  1155. // clearInterval(times);
  1156. // if (val == 1) {
  1157. // that.$dialog.alert({
  1158. // message: '定位失败,请开启企微定位权限',
  1159. // });
  1160. // }
  1161. // loadingmap.clear();
  1162. // } else {
  1163. // clearInterval(times);
  1164. // }
  1165. // }
  1166. // }, 1000);
  1167. // qiyeData = response.data.data;
  1168. // wx.config({
  1169. // beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  1170. // debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  1171. // appId: qiyeData.appId, // 必填,企业微信的corpID
  1172. // timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  1173. // nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  1174. // signature: qiyeData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  1175. // jsApiList: ['ready', 'getLocation'], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  1176. // });
  1177. // wx.ready(function () {
  1178. // wx.getLocation({
  1179. // type: 'gcj02',
  1180. // success: function (res) {
  1181. // flat = false;
  1182. // loadingmap.clear();
  1183. // console.log('处理前');
  1184. // console.log(res.latitude, res.longitude);
  1185. // var location = that.CJ02BD(res.latitude, res.longitude);
  1186. // console.log('处理后');
  1187. // console.log(location);
  1188. // that.lat = location.lat;
  1189. // that.lon = location.lon;
  1190. // localStorage.setItem('lat', location.lat);
  1191. // localStorage.setItem('lon', location.lon);
  1192. // if (val == 1) {
  1193. // if (that.tabVal == 1) {
  1194. // that.getUserOutPlaListFun();
  1195. // } else {
  1196. // that.getUserOrgStoreList();
  1197. // }
  1198. // } else {
  1199. // that.getUserOutPlaListFun();
  1200. // }
  1201. // },
  1202. // fail: function () {
  1203. // loadingmap.clear();
  1204. // if (val == 1) {
  1205. // that.$dialog.alert({
  1206. // message: 'GPS未开启',
  1207. // });
  1208. // }
  1209. // },
  1210. // });
  1211. // });
  1212. // wx.error(function (res) {
  1213. // loadingmap.clear();
  1214. // if (val == 1) {
  1215. // that.$dialog.alert({
  1216. // message: '定位失败,请开启企微定位权限',
  1217. // });
  1218. // }
  1219. // });
  1220. // }
  1221. // });
  1222. },
  1223. getUserOutPlaListFun() {
  1224. this.storeType = localStorage.getItem('storeType');
  1225. var that = this;
  1226. this.disabled = true;
  1227. let loading3 = this.$toast.loading({
  1228. duration: 0,
  1229. message: '加载中...',
  1230. forbidClick: true,
  1231. });
  1232. this.endShow = false;
  1233. if (this.refreshing) {
  1234. this.list = [];
  1235. this.refreshing = false;
  1236. }
  1237. getUserOutPlaList({
  1238. lat: that.lat,
  1239. lon: that.lon,
  1240. chainCode: this.chainCode,
  1241. storeLabelTypes: this.storeLabelTypes.join(','),
  1242. pageNum: this.pageNum,
  1243. storeCategoryList: this.storeCategoryList,
  1244. pageSize: this.pageSize,
  1245. storeName: this.storeName.trim(),
  1246. genDate: this.genDate,
  1247. }).then((res) => {
  1248. this.disabled = false;
  1249. if (res.code == 200) {
  1250. loading3.clear();
  1251. this.loading = false;
  1252. this.list = this.list.concat(res.rows);
  1253. if (this.list.length >= res.total) {
  1254. this.finished = true;
  1255. } else {
  1256. this.finished = false;
  1257. }
  1258. this.pageNum = this.pageNum + 1;
  1259. this.list.forEach((item) => {
  1260. if (item.stateString.indexOf('拜访中') != -1) {
  1261. this.endShow = true;
  1262. this.visitEndId = item.visitId;
  1263. return;
  1264. }
  1265. });
  1266. res.rows.forEach(() => {
  1267. this.showPopoverVNUM.push({ showPopover: false });
  1268. this.showPopoverC.push({ showPopover: false });
  1269. this.showPopoverZ.push({ showPopover: false });
  1270. });
  1271. } else {
  1272. this.$toast(res.msg);
  1273. }
  1274. });
  1275. },
  1276. // 获取当前定位数据
  1277. getLocationFun() {
  1278. return new Promise((resolve, reject) => {
  1279. let url = window.location.href;
  1280. // let url = "https://ssbsfatest.nipponpaint.com.cn/mobile"
  1281. let wx = this.wx;
  1282. let qiyeData;
  1283. const instance = axios.create();
  1284. instance.defaults.headers.common['userId'] = localStorage.getItem('loginName');
  1285. instance
  1286. .get(process.env.VUE_APP_BASE_API + 'mobile/wx/ticket', {
  1287. params: {
  1288. url: url,
  1289. },
  1290. })
  1291. .then((response) => {
  1292. if (response.status == 200) {
  1293. this.cont = 5;
  1294. var flat = true;
  1295. var times = setInterval(() => {
  1296. this.cont--;
  1297. if (this.cont == '0') {
  1298. if (flat) {
  1299. clearInterval(times);
  1300. this.$dialog
  1301. .alert({
  1302. message: '定位失败,请开启企微定位权限',
  1303. })
  1304. .then(() => {});
  1305. } else {
  1306. clearInterval(times);
  1307. }
  1308. }
  1309. }, 1000);
  1310. qiyeData = response.data.data;
  1311. wx.config({
  1312. beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  1313. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  1314. appId: qiyeData.appId, // 必填,企业微信的corpID
  1315. timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  1316. nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  1317. signature: qiyeData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  1318. jsApiList: ['ready', 'getLocation'], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  1319. });
  1320. wx.ready(() => {
  1321. wx.getLocation({
  1322. type: 'gcj02',
  1323. success: (res) => {
  1324. flat = false;
  1325. var location = this.CJ02BD(res.latitude, res.longitude);
  1326. resolve({ location, res });
  1327. },
  1328. fail: () => {
  1329. this.$dialog.alert({
  1330. message: 'GPS未开启',
  1331. });
  1332. reject('GPS未开启');
  1333. },
  1334. });
  1335. });
  1336. wx.error(() => {
  1337. this.$dialog
  1338. .alert({
  1339. message: '定位失败,请开启企微定位权限',
  1340. })
  1341. .then(() => {});
  1342. reject('定位失败,请开启企微定位权限');
  1343. });
  1344. }
  1345. });
  1346. });
  1347. },
  1348. storeVisit(val) {
  1349. localStorage.setItem('tabVal', this.tabVal);
  1350. localStorage.removeItem('visitId');
  1351. checkVisit({ storeId: val.storeId }).then((res) => {
  1352. if (this.tabVal == 1) {
  1353. this.buryingPoint({
  1354. systemModel: '计划外',
  1355. buryingPointType: 1,
  1356. buryingPointValue: val.storeName + '(' + val.storeCode + ')',
  1357. buryingPointName: '进店拜访',
  1358. buryingPointPosition: '我的',
  1359. });
  1360. } else {
  1361. this.buryingPoint({
  1362. systemModel: '计划外',
  1363. buryingPointType: 1,
  1364. buryingPointValue: val.storeName + '(' + val.storeCode + ')',
  1365. buryingPointName: '进店拜访',
  1366. buryingPointPosition: '销售部',
  1367. });
  1368. }
  1369. if (res.code == 200 || val.stateString.indexOf('拜访中') != -1) {
  1370. if (localStorage.getItem('loginType') == 'cs') {
  1371. var lat = '';
  1372. var lon = '';
  1373. if (val.lat == '' || val.lat == null) {
  1374. lat = '31.2517820000';
  1375. lon = '120.5593090000';
  1376. } else {
  1377. lat = val.lat;
  1378. lon = val.lon;
  1379. }
  1380. this.$router.push({
  1381. path: '/suishenbangOutstoreVisit',
  1382. query: {
  1383. storeId: val.storeId,
  1384. rdId: val.rdId,
  1385. lat: lat,
  1386. lon: lon,
  1387. visitId: val.visitId,
  1388. pageType: 'out',
  1389. addressLine: val.addressLine,
  1390. storeCategory: val.storeCategory,
  1391. storeName: val.storeName,
  1392. hisTime: val.hisTime,
  1393. contactName: val.contactName,
  1394. storeCode: val.storeCode,
  1395. tabVal: this.tabVal,
  1396. visitModel: '1',
  1397. latNew: '31.2517820000',
  1398. lonNew: '120.5593090000',
  1399. PointSum: 0,
  1400. marklat: lat,
  1401. marklon: lon,
  1402. },
  1403. });
  1404. localStorage.setItem('startTime', new Date());
  1405. localStorage.setItem('ORGName', val.deptName);
  1406. localStorage.setItem('chainNameR', val.storeName);
  1407. } else {
  1408. if (this.flag) {
  1409. this.flag = false;
  1410. this.timer = null;
  1411. let that = this;
  1412. this.timer = setTimeout(() => {
  1413. this.flag = true;
  1414. }, 2000);
  1415. if (val.stateString.indexOf('拜访中') != -1 && val.visitSource == 1) {
  1416. localStorage.setItem('startTime', new Date());
  1417. localStorage.setItem('ORGName', val.deptName);
  1418. localStorage.setItem('chainNameR', val.storeName);
  1419. that.$router.push({
  1420. path: '/suishenbangOutstoreVisit',
  1421. query: {
  1422. storeId: val.storeId,
  1423. rdId: val.rdId,
  1424. lat: val.lat,
  1425. lon: val.lon,
  1426. visitId: val.visitId,
  1427. pageType: 'out',
  1428. addressLine: val.addressLine,
  1429. storeCategory: val.storeCategory,
  1430. storeName: val.storeName,
  1431. hisTime: val.hisTime,
  1432. contactName: val.contactName,
  1433. storeCode: val.storeCode,
  1434. tabVal: that.tabVal,
  1435. visitModel: '1',
  1436. latNew: val.lat,
  1437. lonNew: val.lon,
  1438. PointSum: '0',
  1439. marklat: val.lat,
  1440. marklon: val.lon,
  1441. },
  1442. });
  1443. } else {
  1444. getPosition().then((res) => {
  1445. let { TXisBD, resData } = res;
  1446. this.lat = TXisBD.lat;
  1447. this.lon = TXisBD.lon;
  1448. localStorage.setItem('lat', this.lat);
  1449. localStorage.setItem('lon', this.lon);
  1450. // var location = this.CJ02BD(res.latitude, res.longitude);
  1451. this.checkStoreAddressByStoreCodeFun(val, TXisBD, resData);
  1452. });
  1453. // // 本地开发 test 环境时 跳过获取定位功能
  1454. // if (process.env.NODE_ENV === 'test') {
  1455. // let res = {
  1456. // latitude: 34.615684509277344,
  1457. // longitude: 112.4474105834961,
  1458. // };
  1459. // this.lat = res.latitude;
  1460. // this.lon = res.longitude;
  1461. // localStorage.setItem('lat', this.lat);
  1462. // localStorage.setItem('lon', this.lon);
  1463. // var location = this.CJ02BD(res.latitude, res.longitude);
  1464. // this.checkStoreAddressByStoreCodeFun(val, location, res);
  1465. // } else {
  1466. // let loading1 = this.$toast.loading({
  1467. // duration: 0,
  1468. // message: '加载中...',
  1469. // forbidClick: true,
  1470. // });
  1471. // this.getLocationFun()
  1472. // .then((resData) => {
  1473. // loading1.clear();
  1474. // let { location, res } = resData;
  1475. // this.checkStoreAddressByStoreCodeFun(val, location, res);
  1476. // })
  1477. // .catch((err) => {
  1478. // console.log(err);
  1479. // loading1.clear();
  1480. // });
  1481. // }
  1482. }
  1483. }
  1484. }
  1485. } else {
  1486. this.$dialog.alert({
  1487. message: res.msg,
  1488. });
  1489. }
  1490. });
  1491. },
  1492. checkStoreAddressByStoreCodeFun(val, location, res) {
  1493. checkStoreAddressByStoreCode({
  1494. storeCode: val.storeCode,
  1495. lon: location.lon,
  1496. lat: location.lat,
  1497. }).then((response) => {
  1498. // loading1.clear();
  1499. if (val.lat == '' || val.lat == null) {
  1500. this.lat = location.lat;
  1501. this.lon = location.lon;
  1502. } else {
  1503. this.lat = val.lat;
  1504. this.lon = val.lon;
  1505. }
  1506. // let PointSum = this.twoPointSum(this.lat, this.lon, location.lat, location.lon).toFixed(2);
  1507. let PointSumval = this.twoPointSum(
  1508. location.lat,
  1509. location.lon,
  1510. location.lat,
  1511. location.lon
  1512. ).toFixed(2);
  1513. // GZ:工装店铺 直接进入拜访
  1514. if (localStorage.getItem('postType') == 'GZ') {
  1515. localStorage.setItem('startTime', new Date());
  1516. localStorage.setItem('ORGName', val.deptName);
  1517. localStorage.setItem('chainNameR', val.storeName);
  1518. this.toSuishenbangOutstoreVisit(res, val, location, PointSumval);
  1519. return;
  1520. }
  1521. // 门店校验 地址不通过
  1522. if (response.code != 200) {
  1523. // updateAddress : ,1:同城AB+金牌,去修改地址;2:非金牌店铺,非同城店铺偏差过大不允许拜访,可以重置定位;0非金牌店铺,非同城店铺 位置信息不存在 可以继续拜访
  1524. if (response.data.updateAddress == 0) {
  1525. // 非金牌店铺,非同城店铺 位置信息不存在 可以继续拜访
  1526. this.$dialog
  1527. .confirm({
  1528. confirmButtonText: '确定拜访',
  1529. cancelButtonText: '取消拜访',
  1530. title: '系统提示',
  1531. message:
  1532. '该客户没有经纬度,此次拜访会保存定位点作为客户经纬度,下次拜访时判断是否偏差过大。',
  1533. closeOnClickOverlay: true,
  1534. })
  1535. .then(() => {
  1536. this.toSuishenbangOutstoreVisit(res, val, location, PointSumval);
  1537. });
  1538. } else if (response.data.updateAddress == 1) {
  1539. // 同城AB+金牌,去修改地址
  1540. // addressUpdateTimesOver: true=已经达到最大次数,不让修改; false=没有达到可以修改
  1541. if (!response.data.addressUpdateTimesOver) {
  1542. this.$dialog
  1543. .confirm({
  1544. title: '系统提示',
  1545. message: response.msg + '请立即修改后再拜访',
  1546. messageAlign: 'left',
  1547. confirmButtonText: '立即修改',
  1548. cancelButtonText: '取消',
  1549. })
  1550. .then(() => {
  1551. this.$router.push({
  1552. path: '/storeDetail',
  1553. query: {
  1554. id: val.storeId,
  1555. type: 'address',
  1556. storeAddressId: val.storeAddressId,
  1557. },
  1558. });
  1559. });
  1560. } else {
  1561. this.$dialog.confirm({
  1562. title: '系统提示',
  1563. message: '已经达到最大修改次数',
  1564. messageAlign: 'left',
  1565. confirmButtonText: '确定',
  1566. });
  1567. }
  1568. } else if (response.data.updateAddress == 2) {
  1569. // 1.非金牌店铺,非同城店铺 位置偏差过大 重置经纬度
  1570. this.resetCoord(res, val, location, PointSumval);
  1571. return;
  1572. }
  1573. } else {
  1574. // 门店编码校验门店地址通过 进入拜访
  1575. this.toSuishenbangOutstoreVisit(res, val, location, PointSumval);
  1576. }
  1577. });
  1578. },
  1579. // 重置经纬度
  1580. resetCoord(res, val, location, PointSumval) {
  1581. this.$dialog
  1582. .confirm({
  1583. confirmButtonText: '初始化定位',
  1584. cancelButtonText: '取消拜访',
  1585. title: '系统提示',
  1586. message: '偏差过大,不允许拜访。可修改本店定位.',
  1587. closeOnClickOverlay: true,
  1588. })
  1589. .then(() => {
  1590. mobileReposition({
  1591. storeId: val.storeId,
  1592. lat: location.lat,
  1593. lon: location.lon,
  1594. }).then((res) => {
  1595. if (res.code == 200) {
  1596. this.$dialog
  1597. .alert({
  1598. title: '系统提示',
  1599. message: '本信息定位已更新成功!',
  1600. })
  1601. .then(() => {
  1602. this.toSuishenbangOutstoreVisit(res, val, location, PointSumval);
  1603. });
  1604. localStorage.setItem('startTime', new Date());
  1605. localStorage.setItem('ORGName', val.deptName);
  1606. localStorage.setItem('chainNameR', val.storeName);
  1607. } else {
  1608. this.$toast(res.msg);
  1609. }
  1610. });
  1611. });
  1612. },
  1613. // 进入拜访 router.push
  1614. toSuishenbangOutstoreVisit(res, val, location, PointSumval) {
  1615. addVisitsPosition({
  1616. storeId: val.storeId,
  1617. visitsId: '',
  1618. lon: res.longitude,
  1619. lat: res.latitude,
  1620. sourceLon: location.lon,
  1621. sourceLat: location.lat,
  1622. positionDesc: '',
  1623. accuracy: res.accuracy,
  1624. });
  1625. this.$router.push({
  1626. path: '/suishenbangOutstoreVisit',
  1627. query: {
  1628. storeId: val.storeId,
  1629. rdId: val.rdId,
  1630. lat: location.lat,
  1631. lon: location.lon,
  1632. visitId: val.visitId,
  1633. pageType: 'out',
  1634. addressLine: val.addressLine,
  1635. storeCategory: val.storeCategory,
  1636. storeName: val.storeName,
  1637. hisTime: val.hisTime,
  1638. contactName: val.contactName,
  1639. storeCode: val.storeCode,
  1640. tabVal: this.tabVal,
  1641. visitModel: '1',
  1642. latNew: location.lat,
  1643. lonNew: location.lon,
  1644. PointSum: PointSumval,
  1645. marklat: res.latitude,
  1646. marklon: res.longitude,
  1647. },
  1648. });
  1649. },
  1650. projectOutVisit(val) {
  1651. localStorage.setItem('tabVal', this.tabVal);
  1652. localStorage.removeItem('visitId');
  1653. // checkVisit({storeId:val.storeId}).then(res=>{
  1654. // if(res.code==200||val.stateString.indexOf("拜访中")!=-1){
  1655. if (localStorage.getItem('loginType') == 'cs') {
  1656. var lat = '';
  1657. var lon = '';
  1658. if (val.lat == '' || val.lat == null) {
  1659. lat = '31.2517820000';
  1660. lon = '120.5593090000';
  1661. } else {
  1662. lat = val.lat;
  1663. lon = val.lon;
  1664. }
  1665. this.$router.push({
  1666. path: '/storeGroup',
  1667. query: {
  1668. storeId: val.storeId,
  1669. rdId: val.rdId,
  1670. lat: lat,
  1671. lon: lon,
  1672. visitId: val.visitId,
  1673. pageType: 'out',
  1674. addressLine: val.addressLine,
  1675. storeCategory: val.storeCategory,
  1676. storeName: val.storeName,
  1677. hisTime: val.hisTime,
  1678. contactName: val.contactName,
  1679. storeCode: val.storeCode,
  1680. tabVal: this.tabVal,
  1681. visitModel: '1',
  1682. latNew: '31.2517820000',
  1683. lonNew: '120.5593090000',
  1684. PointSum: 0,
  1685. marklat: lat,
  1686. marklon: lon,
  1687. },
  1688. });
  1689. localStorage.setItem('startTime', new Date());
  1690. localStorage.setItem('ORGName', val.deptName);
  1691. localStorage.setItem('chainNameR', val.storeName);
  1692. } else {
  1693. if (this.flag) {
  1694. this.flag = false;
  1695. this.timer = null;
  1696. let that = this;
  1697. this.timer = setTimeout(() => {
  1698. this.flag = true;
  1699. }, 2000);
  1700. if (val.stateString.indexOf('拜访中') != -1 && val.visitSource == 1) {
  1701. localStorage.setItem('startTime', new Date());
  1702. localStorage.setItem('ORGName', val.deptName);
  1703. localStorage.setItem('chainNameR', val.storeName);
  1704. that.$router.push({
  1705. path: '/storeGroup',
  1706. query: {
  1707. storeId: val.storeId,
  1708. rdId: val.rdId,
  1709. lat: val.lat,
  1710. lon: val.lon,
  1711. visitId: val.visitId,
  1712. pageType: 'out',
  1713. addressLine: val.addressLine,
  1714. storeCategory: val.storeCategory,
  1715. storeName: val.storeName,
  1716. hisTime: val.hisTime,
  1717. contactName: val.contactName,
  1718. storeCode: val.storeCode,
  1719. tabVal: that.tabVal,
  1720. visitModel: '1',
  1721. latNew: val.lat,
  1722. lonNew: val.lon,
  1723. PointSum: '0',
  1724. marklat: val.lat,
  1725. marklon: val.lon,
  1726. },
  1727. });
  1728. } else {
  1729. let loading1 = this.$toast.loading({
  1730. duration: 0,
  1731. message: '加载中...',
  1732. forbidClick: true,
  1733. });
  1734. let url = window.location.href;
  1735. let wx = this.wx;
  1736. let qiyeData;
  1737. const instance = axios.create();
  1738. instance.defaults.headers.common['userId'] = localStorage.getItem('loginName');
  1739. instance
  1740. .get(process.env.VUE_APP_BASE_API + 'mobile/wx/ticket', {
  1741. params: {
  1742. url: url,
  1743. },
  1744. })
  1745. .then((response) => {
  1746. if (response.status == 200) {
  1747. this.cont = 3;
  1748. var flat = true;
  1749. var times = setInterval(() => {
  1750. this.cont--;
  1751. if (this.cont == '0') {
  1752. if (flat) {
  1753. loading1.clear();
  1754. clearInterval(times);
  1755. that.$dialog
  1756. .alert({
  1757. message: '定位失败,请开启企微定位权限',
  1758. })
  1759. .then(() => {});
  1760. } else {
  1761. clearInterval(times);
  1762. }
  1763. }
  1764. }, 1000);
  1765. qiyeData = response.data.data;
  1766. wx.config({
  1767. beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  1768. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  1769. appId: qiyeData.appId, // 必填,企业微信的corpID
  1770. timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  1771. nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  1772. signature: qiyeData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  1773. jsApiList: ['ready', 'getLocation'], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  1774. });
  1775. wx.ready(function () {
  1776. wx.getLocation({
  1777. type: 'gcj02',
  1778. success: function (res) {
  1779. flat = false;
  1780. loading1.clear();
  1781. var location = that.CJ02BD(res.latitude, res.longitude);
  1782. if (val.lat == '' || val.lat == null) {
  1783. that.lat = location.lat;
  1784. that.lon = location.lon;
  1785. } else {
  1786. that.lat = val.lat;
  1787. that.lon = val.lon;
  1788. }
  1789. let PointSum = that
  1790. .twoPointSum(that.lat, that.lon, location.lat, location.lon)
  1791. .toFixed(2);
  1792. if (val.lat == '' || val.lat == null) {
  1793. if (localStorage.getItem('postType') != 'GZ') {
  1794. that.$dialog
  1795. .confirm({
  1796. confirmButtonText: '确定拜访',
  1797. cancelButtonText: '取消拜访',
  1798. title: '系统提示',
  1799. message:
  1800. '该信息没有经纬度,此次拜访会保存定位点作为信息经纬度,下次拜访时判断是否偏差过大。',
  1801. closeOnClickOverlay: true,
  1802. })
  1803. .then(() => {
  1804. that.$router.push({
  1805. path: '/storeGroup',
  1806. query: {
  1807. storeId: val.storeId,
  1808. rdId: val.rdId,
  1809. lat: that.lat,
  1810. lon: that.lon,
  1811. visitId: val.visitId,
  1812. pageType: 'out',
  1813. addressLine: val.addressLine,
  1814. storeCategory: val.storeCategory,
  1815. storeName: val.storeName,
  1816. contactName: val.contactName,
  1817. hisTime: val.hisTime,
  1818. storeCode: val.storeCode,
  1819. tabVal: that.tabVal,
  1820. visitModel: '1',
  1821. latNew: location.lat,
  1822. lonNew: location.lon,
  1823. PointSum: PointSum,
  1824. marklat: res.latitude,
  1825. marklon: res.longitude,
  1826. },
  1827. });
  1828. });
  1829. } else {
  1830. that.$router.push({
  1831. path: '/storeGroup',
  1832. query: {
  1833. storeId: val.storeId,
  1834. rdId: val.rdId,
  1835. lat: that.lat,
  1836. lon: that.lon,
  1837. visitId: val.visitId,
  1838. pageType: 'out',
  1839. addressLine: val.addressLine,
  1840. storeCategory: val.storeCategory,
  1841. storeName: val.storeName,
  1842. contactName: val.contactName,
  1843. hisTime: val.hisTime,
  1844. storeCode: val.storeCode,
  1845. tabVal: that.tabVal,
  1846. visitModel: '1',
  1847. latNew: location.lat,
  1848. lonNew: location.lon,
  1849. PointSum: PointSum,
  1850. marklat: res.latitude,
  1851. marklon: res.longitude,
  1852. },
  1853. });
  1854. }
  1855. } else {
  1856. that.$router.push({
  1857. path: '/storeGroup',
  1858. query: {
  1859. storeId: val.storeId,
  1860. rdId: val.rdId,
  1861. lat: that.lat,
  1862. lon: that.lon,
  1863. visitId: val.visitId,
  1864. pageType: 'out',
  1865. addressLine: val.addressLine,
  1866. storeCategory: val.storeCategory,
  1867. storeName: val.storeName,
  1868. contactName: val.contactName,
  1869. hisTime: val.hisTime,
  1870. storeCode: val.storeCode,
  1871. tabVal: that.tabVal,
  1872. visitModel: '1',
  1873. latNew: location.lat,
  1874. lonNew: location.lon,
  1875. PointSum: PointSum,
  1876. marklat: res.latitude,
  1877. marklon: res.longitude,
  1878. },
  1879. });
  1880. }
  1881. localStorage.setItem('startTime', new Date());
  1882. localStorage.setItem('ORGName', val.deptName);
  1883. localStorage.setItem('chainNameR', val.storeName);
  1884. addVisitsPosition({
  1885. storeId: val.storeId,
  1886. visitsId: '',
  1887. lon: res.longitude,
  1888. lat: res.latitude,
  1889. sourceLon: location.lon,
  1890. sourceLat: location.lat,
  1891. positionDesc: '',
  1892. accuracy: res.accuracy,
  1893. });
  1894. },
  1895. fail: function () {
  1896. loading1.clear();
  1897. that.$dialog.alert({
  1898. message: 'GPS未开启',
  1899. });
  1900. },
  1901. });
  1902. });
  1903. wx.error(function (res) {
  1904. loading1.clear();
  1905. that.$dialog
  1906. .alert({
  1907. message: '定位失败,请开启企微定位权限',
  1908. })
  1909. .then(() => {});
  1910. });
  1911. }
  1912. });
  1913. }
  1914. }
  1915. }
  1916. // }
  1917. // })
  1918. },
  1919. abnormalVisit(val) {
  1920. localStorage.removeItem('visitId');
  1921. localStorage.setItem('tabVal', this.tabVal);
  1922. checkVisit({ storeId: val.storeId }).then((res) => {
  1923. if (res.code == 200 || val.stateString.indexOf('拜访中') != -1) {
  1924. if (localStorage.getItem('loginType') == 'cs') {
  1925. var lat = '';
  1926. var lon = '';
  1927. if (val.lat == '' || val.lat == null) {
  1928. lat = '31.2517820000';
  1929. lon = '120.5593090000';
  1930. } else {
  1931. lat = val.lat;
  1932. lon = val.lon;
  1933. }
  1934. this.$router.push({
  1935. path: '/outabnormalVisit',
  1936. query: {
  1937. storeId: val.storeId,
  1938. rdId: val.rdId,
  1939. lat: lat,
  1940. lon: lon,
  1941. visitId: val.visitId,
  1942. pageType: 'out',
  1943. addressLine: val.addressLine,
  1944. storeCategory: val.storeCategory,
  1945. storeName: val.storeName,
  1946. hisTime: val.hisTime,
  1947. contactName: val.contactName,
  1948. storeCode: val.storeCode,
  1949. tabVal: this.tabVal,
  1950. visitModel: '3',
  1951. latNew: '31.2517820000',
  1952. lonNew: '120.5593090000',
  1953. PointSum: 0,
  1954. marklat: lat,
  1955. marklon: lon,
  1956. },
  1957. });
  1958. localStorage.setItem('startTime', new Date());
  1959. localStorage.setItem('ORGName', val.deptName);
  1960. localStorage.setItem('chainNameR', val.storeName);
  1961. } else {
  1962. if (this.flag) {
  1963. this.flag = false;
  1964. this.timer = null;
  1965. this.timer = setTimeout(() => {
  1966. this.flag = true;
  1967. }, 2000);
  1968. let loading1 = this.$toast.loading({
  1969. duration: 0,
  1970. message: '加载中...',
  1971. forbidClick: true,
  1972. });
  1973. let url = window.location.href;
  1974. let that = this;
  1975. let wx = this.wx;
  1976. let qiyeData;
  1977. const instance = axios.create();
  1978. instance.defaults.headers.common['userId'] = localStorage.getItem('loginName');
  1979. instance
  1980. .get(process.env.VUE_APP_BASE_API + 'mobile/wx/ticket', {
  1981. params: {
  1982. url: url,
  1983. },
  1984. })
  1985. .then((response) => {
  1986. if (response.status == 200) {
  1987. this.cont = 3;
  1988. var flat = true;
  1989. var times = setInterval(() => {
  1990. this.cont--;
  1991. if (this.cont == '0') {
  1992. if (flat) {
  1993. loading1.clear();
  1994. clearInterval(times);
  1995. that.$dialog
  1996. .alert({
  1997. message: '定位失败,请开启企微定位权限',
  1998. })
  1999. .then(() => {
  2000. this.$router.go(-1);
  2001. });
  2002. } else {
  2003. clearInterval(times);
  2004. }
  2005. }
  2006. }, 1000);
  2007. qiyeData = response.data.data;
  2008. wx.config({
  2009. beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
  2010. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  2011. appId: qiyeData.appId, // 必填,企业微信的corpID
  2012. timestamp: qiyeData.timestamp, // 必填,生成签名的时间戳
  2013. nonceStr: qiyeData.nonceStr, // 必填,生成签名的随机串
  2014. signature: qiyeData.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
  2015. jsApiList: ['ready', 'getLocation'], // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
  2016. });
  2017. wx.ready(function () {
  2018. wx.getLocation({
  2019. type: 'gcj02',
  2020. success: function (res) {
  2021. flat = false;
  2022. loading1.clear();
  2023. var location = that.CJ02BD(res.latitude, res.longitude);
  2024. if (val.lat == '' || val.lat == null) {
  2025. that.lat = location.lat;
  2026. that.lon = location.lon;
  2027. } else {
  2028. that.lat = val.lat;
  2029. that.lon = val.lon;
  2030. }
  2031. let PointSum = that
  2032. .twoPointSum(that.lat, that.lon, location.lat, location.lon)
  2033. .toFixed(2);
  2034. if (PointSum > 500 && localStorage.getItem('postType') != 'GZ') {
  2035. that.$dialog
  2036. .confirm({
  2037. confirmButtonText: '确定',
  2038. cancelButtonText: '取消',
  2039. title: '系统提示',
  2040. message: '定位距离偏差大',
  2041. closeOnClickOverlay: true,
  2042. })
  2043. .then(() => {
  2044. that.$router.push({
  2045. path: '/outabnormalVisit',
  2046. query: {
  2047. storeId: val.storeId,
  2048. rdId: val.rdId,
  2049. lat: that.lat,
  2050. lon: that.lon,
  2051. visitId: val.visitId,
  2052. pageType: 'out',
  2053. visitModel: '5',
  2054. storeCode: val.storeCode,
  2055. tabVal: that.tabVal,
  2056. latNew: location.lat,
  2057. lonNew: location.lon,
  2058. PointSum: PointSum,
  2059. marklat: res.latitude,
  2060. marklon: res.longitude,
  2061. },
  2062. });
  2063. localStorage.setItem('startTime', new Date());
  2064. localStorage.setItem('ORGName', val.deptName);
  2065. localStorage.setItem('chainNameR', val.storeName);
  2066. })
  2067. .catch(() => {
  2068. // that.abnormalVisit(val)
  2069. });
  2070. } else {
  2071. that.$router.push({
  2072. path: '/outabnormalVisit',
  2073. query: {
  2074. storeId: val.storeId,
  2075. rdId: val.rdId,
  2076. lat: that.lat,
  2077. lon: that.lon,
  2078. visitId: val.visitId,
  2079. pageType: 'out',
  2080. visitModel: '3',
  2081. storeCode: val.storeCode,
  2082. tabVal: that.tabVal,
  2083. latNew: location.lat,
  2084. lonNew: location.lon,
  2085. PointSum: PointSum,
  2086. marklat: res.latitude,
  2087. marklon: res.longitude,
  2088. },
  2089. });
  2090. localStorage.setItem('startTime', new Date());
  2091. localStorage.setItem('ORGName', val.deptName);
  2092. localStorage.setItem('chainNameR', val.storeName);
  2093. }
  2094. addVisitsPosition({
  2095. storeId: val.storeId,
  2096. visitsId: '',
  2097. lon: res.longitude,
  2098. lat: res.latitude,
  2099. sourceLon: location.lon,
  2100. sourceLat: location.lat,
  2101. positionDesc: '',
  2102. accuracy: res.accuracy,
  2103. });
  2104. },
  2105. fail: function () {
  2106. loading1.clear();
  2107. that.$dialog
  2108. .alert({
  2109. message: 'GPS未开启',
  2110. })
  2111. .then(() => {
  2112. // that.abnormalVisit(val)
  2113. });
  2114. },
  2115. });
  2116. });
  2117. wx.error(function (res) {
  2118. loading1.clear();
  2119. that.$dialog
  2120. .alert({
  2121. message: '定位失败,请开启企微定位权限',
  2122. })
  2123. .then(() => {});
  2124. });
  2125. } else {
  2126. loading1.clear();
  2127. this.$toast.fail(dataList.msg);
  2128. }
  2129. });
  2130. // this.$router.push({path: "/outabnormalVisit", query: {
  2131. // storeId:"179792",
  2132. // rdId:"null",
  2133. // lat:"31.1882020000",
  2134. // lon:"120.6801770000",
  2135. // visitId:"null",
  2136. // visitModel:"5",
  2137. // storeCode:"0190141901",
  2138. // tabVal:"0",
  2139. // latNew:34.621855582632264,
  2140. // lonNew:112.45382530736684,
  2141. // PointSum:857246.44
  2142. // }})
  2143. localStorage.setItem('startTime', new Date());
  2144. localStorage.setItem('ORGName', val.deptName);
  2145. localStorage.setItem('chainNameR', val.storeName);
  2146. }
  2147. }
  2148. } else {
  2149. this.$dialog.alert({
  2150. title: '系统提示',
  2151. message: res.msg,
  2152. });
  2153. }
  2154. });
  2155. },
  2156. visitFn(val) {
  2157. this.$router.push({
  2158. path: '/storeDetail',
  2159. query: { id: val.storeId, detilId: 'a' },
  2160. });
  2161. },
  2162. // 大客户签约
  2163. signAdd(val) {
  2164. this.$router.push({
  2165. path: '/sign',
  2166. query: { id: val.storeId, detilId: 'a' },
  2167. });
  2168. },
  2169. Visit(val) {
  2170. this.$router.push({
  2171. path: '/historicalDetails',
  2172. query: {
  2173. visitId: val.visitId,
  2174. storeId: val.storeId,
  2175. storeCode: val.storeCode,
  2176. },
  2177. });
  2178. },
  2179. onClickLeft() {
  2180. this.$router.go(-1);
  2181. },
  2182. onSearch() {
  2183. window.scrollTo(0, 0);
  2184. this.pageNum = 1;
  2185. this.list = [];
  2186. this.finished = true;
  2187. var postType = localStorage.getItem('postType');
  2188. this.customerVisits = localStorage.getItem('customerVisits');
  2189. if (postType == 'GZ') {
  2190. this.typeShow = false;
  2191. } else {
  2192. this.typeShow = true;
  2193. }
  2194. this.onLoad();
  2195. },
  2196. onSearchm() {
  2197. var postType = localStorage.getItem('postType');
  2198. if (postType == 'GZ') {
  2199. this.typeShow = false;
  2200. } else {
  2201. this.typeShow = true;
  2202. }
  2203. var StoreLabelsArr = [];
  2204. for (var k = 0; k < this.storeLabelTypes.length; k++) {
  2205. for (var k1 = 0; k1 < this.StoreLabels.length; k1++) {
  2206. if (this.StoreLabels[k1].dictValue == this.storeLabelTypes[k]) {
  2207. StoreLabelsArr.push(this.StoreLabels[k1].dictLabel);
  2208. }
  2209. }
  2210. }
  2211. var storeCategoryList = [];
  2212. for (var q = 0; q < this.result.length; q++) {
  2213. for (var q1 = 0; q1 < this.storeTypeLists.length; q1++) {
  2214. if (this.storeTypeLists[q1].dictValue == this.result[q]) {
  2215. storeCategoryList.push(this.storeTypeLists[q1].dictLabel);
  2216. }
  2217. }
  2218. }
  2219. if (this.tabVal == 1) {
  2220. if (this.storeLabelTypes.length > 0) {
  2221. this.buryingPoint({
  2222. systemModel: '计划外',
  2223. buryingPointType: 1,
  2224. buryingPointValue: StoreLabelsArr.join(','),
  2225. buryingPointName: '标签',
  2226. buryingPointPosition: '我的筛选',
  2227. });
  2228. }
  2229. if (this.storeCategoryList.length > 0) {
  2230. this.buryingPoint({
  2231. systemModel: '计划外',
  2232. buryingPointType: 1,
  2233. buryingPointValue: storeCategoryList.join(','),
  2234. buryingPointName: '类型',
  2235. buryingPointPosition: '我的筛选',
  2236. });
  2237. }
  2238. if (this.chainName != '') {
  2239. this.buryingPoint({
  2240. systemModel: '计划外',
  2241. buryingPointType: 1,
  2242. buryingPointValue: this.chainName,
  2243. buryingPointName: '经销商筛选',
  2244. buryingPointPosition: '我的筛选',
  2245. });
  2246. }
  2247. if (this.storeName != '') {
  2248. this.buryingPoint({
  2249. systemModel: '计划外',
  2250. buryingPointType: 1,
  2251. buryingPointValue: this.storeName,
  2252. buryingPointName: '搜索名称/编号/地址',
  2253. buryingPointPosition: '我的筛选',
  2254. });
  2255. }
  2256. } else {
  2257. if (this.storeLabelTypes.length > 0) {
  2258. this.buryingPoint({
  2259. systemModel: '计划外',
  2260. buryingPointType: 1,
  2261. buryingPointValue: StoreLabelsArr.join(','),
  2262. buryingPointName: '标签',
  2263. buryingPointPosition: '销售部的门店筛选',
  2264. });
  2265. }
  2266. if (this.storeCategoryList != '') {
  2267. this.buryingPoint({
  2268. systemModel: '计划外',
  2269. buryingPointType: 1,
  2270. buryingPointValue: storeCategoryList.join(','),
  2271. buryingPointName: '类型',
  2272. buryingPointPosition: '销售部的门店筛选',
  2273. });
  2274. }
  2275. if (this.chainName != '') {
  2276. this.buryingPoint({
  2277. systemModel: '计划外',
  2278. buryingPointType: 1,
  2279. buryingPointValue: this.chainName,
  2280. buryingPointName: '经销商筛选',
  2281. buryingPointPosition: '销售部的门店筛选',
  2282. });
  2283. }
  2284. if (this.storeName != '') {
  2285. this.buryingPoint({
  2286. systemModel: '计划外',
  2287. buryingPointType: 1,
  2288. buryingPointValue: this.storeName,
  2289. buryingPointName: '搜索名称/编号/地址',
  2290. buryingPointPosition: '销售部的门店筛选',
  2291. });
  2292. }
  2293. }
  2294. localStorage.setItem('outvstoreName', this.storeName);
  2295. localStorage.setItem('outvchainName', this.chainName);
  2296. localStorage.setItem('outvstoreLabelTypes', this.storeLabelTypes);
  2297. localStorage.setItem('outvstoreCategoryList', this.result);
  2298. localStorage.setItem('outvchainCode', this.chainCode);
  2299. this.onSearch();
  2300. },
  2301. tabChange(name) {
  2302. window.scrollTo(0, 0);
  2303. this.finished = true;
  2304. this.pageNum = 1;
  2305. this.list = [];
  2306. this.tabVal = name;
  2307. localStorage.setItem('tabVal', name);
  2308. this.onLoad();
  2309. },
  2310. // 滚动条与底部距离小于 offset 时触发 初始化会触发
  2311. onLoad() {
  2312. // 授权
  2313. getTicketFun().then(() => {
  2314. var postType = localStorage.getItem('postType');
  2315. if (postType == 'GZ') {
  2316. this.typeShow = false;
  2317. } else {
  2318. this.typeShow = true;
  2319. }
  2320. if (this.lon == '' && this.tabVal != 1) {
  2321. this.positionFn(1);
  2322. } else {
  2323. if (this.tabVal == 1) {
  2324. this.positionFn();
  2325. // this.getUserOutPlaListFun();
  2326. } else {
  2327. this.getUserOrgStoreList();
  2328. }
  2329. }
  2330. });
  2331. },
  2332. },
  2333. };
  2334. </script>
  2335. <style lang="scss">
  2336. .van-dialog__confirm,
  2337. .van-dialog__confirm:active {
  2338. color: #0057ba;
  2339. }
  2340. .searchDiv {
  2341. .van-search {
  2342. background: #fff;
  2343. }
  2344. .van-search__action {
  2345. font-size: 14px;
  2346. color: #0057ba;
  2347. font-weight: bold;
  2348. background: #f1f1f1;
  2349. border-bottom-right-radius: 60px;
  2350. border-top-right-radius: 60px;
  2351. border: 1px solid #ccc;
  2352. padding: 0 20px;
  2353. }
  2354. .van-search--show-action {
  2355. padding-right: 12px;
  2356. }
  2357. .van-search__content {
  2358. border: 1px solid #ccc;
  2359. border-bottom-left-radius: 60px;
  2360. border-top-left-radius: 60px;
  2361. background: #f1f1f1;
  2362. border-right: 0;
  2363. }
  2364. }
  2365. .myTab {
  2366. .van-tabs__nav--card {
  2367. margin: 0 !important;
  2368. border-left: 0;
  2369. border-right: 0;
  2370. }
  2371. .van-tabs__wrap,
  2372. .van-tabs__nav--card {
  2373. height: 39px;
  2374. }
  2375. .van-tab {
  2376. line-height: 40px;
  2377. }
  2378. }
  2379. .myList {
  2380. .van-cell {
  2381. padding: 0;
  2382. &:after {
  2383. border-bottom: none;
  2384. }
  2385. }
  2386. }
  2387. </style>
  2388. <style lang="scss" scoped>
  2389. .bgcolor {
  2390. background-color: #f5f5f5;
  2391. }
  2392. .container {
  2393. padding-bottom: 50px;
  2394. }
  2395. .card {
  2396. padding: 10px 16px;
  2397. box-sizing: border-box;
  2398. }
  2399. .card .title {
  2400. font-size: 15px;
  2401. font-weight: bold;
  2402. color: #333;
  2403. line-height: 22px;
  2404. padding-right: 52px;
  2405. }
  2406. .card .info {
  2407. font-size: 14px;
  2408. color: #909090;
  2409. line-height: 26px;
  2410. }
  2411. .btnbox {
  2412. padding-top: 14px;
  2413. border-top: 1px solid #eee;
  2414. margin: 0 10px;
  2415. }
  2416. .navBarTOP {
  2417. position: fixed;
  2418. width: 100%;
  2419. z-index: 2;
  2420. top: 0;
  2421. }
  2422. .cellcontent .centerBtn {
  2423. margin: 0 auto 10px;
  2424. display: block;
  2425. width: 92%;
  2426. color: #0057ba;
  2427. border-radius: 5px;
  2428. padding: 0 2px;
  2429. }
  2430. .cellcontent .centerBtn1 {
  2431. background-color: #0057ba;
  2432. color: #fff;
  2433. border-color: #0057ba;
  2434. }
  2435. .cellcontent .centerBtn2 {
  2436. margin: 0 auto 10px;
  2437. display: block;
  2438. width: 92%;
  2439. color: #0057ba;
  2440. border-radius: 5px;
  2441. padding: 0;
  2442. }
  2443. .statstext {
  2444. background-color: #0057ba;
  2445. position: absolute;
  2446. right: 0;
  2447. top: 6px;
  2448. padding: 2px 6px 2px 12px;
  2449. border-bottom-left-radius: 60px;
  2450. border-top-left-radius: 60px;
  2451. color: #fff;
  2452. }
  2453. .cellcontent .van-cell {
  2454. padding: 10px 0;
  2455. }
  2456. .statstext .van-icon__image {
  2457. height: 0.7em;
  2458. }
  2459. .tipsTitle {
  2460. padding: 5px 0;
  2461. text-align: center;
  2462. font-size: 16px;
  2463. font-weight: 600;
  2464. }
  2465. </style>
  2466. <style>
  2467. .van-tabs__nav--card .van-tab.van-tab--active {
  2468. background-color: #0057ba !important;
  2469. }
  2470. .visitSearch {
  2471. width: 68px;
  2472. color: #0057ba;
  2473. font-size: 14px;
  2474. }
  2475. .visitSearch .van-dropdown-menu__bar {
  2476. box-shadow: 0 0 0 #fff;
  2477. height: 52px;
  2478. }
  2479. .visitSearch .van-dropdown-menu__item {
  2480. justify-content: normal;
  2481. }
  2482. .visitSearch .van-dropdown-menu__title {
  2483. border-left: 1px solid #ccc;
  2484. }
  2485. .visitSearch .van-cell {
  2486. border: 1px solid #ccc;
  2487. border-radius: 5px;
  2488. padding: 6px;
  2489. }
  2490. .positionContent {
  2491. position: fixed;
  2492. color: #666;
  2493. display: inline-block;
  2494. box-shadow: 0px 2px 7px -5px #000;
  2495. border-radius: 100px;
  2496. overflow: hidden;
  2497. right: 14px;
  2498. cursor: pointer;
  2499. bottom: 96px;
  2500. background-color: white;
  2501. }
  2502. .positionContent .img {
  2503. border-radius: 100px;
  2504. float: left;
  2505. }
  2506. .positionContent .img .van-icon__image {
  2507. border-radius: 100px;
  2508. }
  2509. .zDialog .van-dialog__header {
  2510. padding: 10px;
  2511. border-bottom: 1px solid #f5f5f5;
  2512. }
  2513. .zDialog .infoText {
  2514. margin: 10px;
  2515. font-size: 14px;
  2516. color: #909090;
  2517. width: 98%;
  2518. }
  2519. .visitStoreIco {
  2520. float: left;
  2521. float: left;
  2522. width: 26px;
  2523. text-align: center;
  2524. background-color: #ffba13;
  2525. color: #fff;
  2526. border-radius: 100%;
  2527. margin-left: 14px;
  2528. line-height: 26px;
  2529. height: 26px;
  2530. }
  2531. .searchcheck {
  2532. padding: 0 10px 10px;
  2533. }
  2534. .searchcheck .van-checkbox {
  2535. /*width: 44%;*/
  2536. padding-bottom: 10px;
  2537. }
  2538. .searchcheck .checkbox {
  2539. font-size: 14px;
  2540. display: inline-block;
  2541. width: 50%;
  2542. line-height: 28px;
  2543. }
  2544. .searchcheck .checkbox .van-checkbox {
  2545. margin-bottom: 2px;
  2546. }
  2547. .searchcheck .checkbox1 {
  2548. font-size: 14px;
  2549. float: left;
  2550. line-height: 28px;
  2551. width: 50%;
  2552. }
  2553. .searchcheck .checkbox1 .child {
  2554. width: 100%;
  2555. }
  2556. .searchcheck {
  2557. height: 93vh;
  2558. overflow-y: auto;
  2559. }
  2560. .searchchecktitle {
  2561. width: 100%;
  2562. margin: 20px 0;
  2563. font-size: 16px;
  2564. border-left: 3px solid #0057ba;
  2565. line-height: 18px;
  2566. }
  2567. .searchchecktitle1 {
  2568. width: 100%;
  2569. margin: 20px 0;
  2570. font-size: 16px;
  2571. line-height: 18px;
  2572. }
  2573. .textsize {
  2574. font-size: 14px;
  2575. }
  2576. </style>