topStore.vue 98 KB

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