memberIndex.vue 57 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094
  1. <template>
  2. <view class="container column hb flex-1 hidden">
  3. <view class="headbox">
  4. <view style="padding: 10px 10px 0 10px" class="mb20">
  5. <view>
  6. <u-subsection class="subsection" :list="list" :current="current" bgColor="#e7f1fe"
  7. activeColor="#1677ff" :fontSize="15" :bold="false" @change="sectionChange"></u-subsection>
  8. </view>
  9. <!-- <view style="width: 70%;">
  10. <u-subsection class="subsection" :list="list" :current="current" bgColor="#e7f1fe" activeColor="#1677ff"
  11. :fontSize="15" :bold="false" @change="sectionChange" ></u-subsection>
  12. </view> -->
  13. <view style="margin-top: 10px" class="justify-between align-center" v-if="!viewload">
  14. <u-search placeholder="搜索微信名称、手机、标签" v-model="keyword" :showAction="false" height="30px"
  15. style="width: 90%" @search="searchKeyword"></u-search>
  16. <view v-if="current !== 0" class="fs24 ml20" @click="blackSel()">
  17. {{ !isShowSelectAll ? '批量管理' : '取消批量' }}
  18. </view>
  19. </view>
  20. <view class="x-bc" v-if="current == 0">
  21. <u-tabs :list="list2" :current="currentType" :lineWidth="40" lineColor="#1677ff"
  22. :activeStyle="activeStyle" :inactiveStyle="inactiveStyle" @click="clickTypeTab"></u-tabs>
  23. <view class="participate-order x-f">
  24. <image :src="imgPath + '/app/images/order_icon2.png'" mode="aspectFill"
  25. v-if="searchTypeIndex == 0 || searchTypeIndex == 2"></image>
  26. <image :src="imgPath + '/app/images/order_icon.png'" mode="aspectFill" v-else></image>
  27. <picker @change="bindPickerChange" :value="searchTypeIndex" :range="typeArray">
  28. {{ typeoption[searchTypeIndex] }}
  29. </picker>
  30. </view>
  31. </view>
  32. <view class="tagbox x-bc" v-if="current == 0">
  33. <view class="tagbox-left x-f">
  34. <!-- <view class="x-f" @click="openPop('search')">{{array[queryParam.typeIndex].name}}<u-icon name="arrow-down-fill" color="#2979ff" size="11" style="margin: 0 3px;"></u-icon></view> -->
  35. <view v-if="showCompanytag.length <= 0" style="color: #888" class="ml30">请点击筛选,选择标签</view>
  36. <view class="tagbox-list x-f">
  37. <view class="tagbox-item x-f" v-for="(item, index) in showCompanytag" :key="item.tagId"
  38. :class="item.checked ? 'checked-bg' : ''">
  39. {{ item.tagName }}
  40. </view>
  41. </view>
  42. </view>
  43. <view class="tagbox-right x-f" @click="openPop('tag')">
  44. 筛选
  45. <u-icon name="arrow-down" color="#1677ff" size="12"></u-icon>
  46. </view>
  47. </view>
  48. </view>
  49. <view v-if="current == 0 && !viewload">
  50. <dropdownPanel :filterData="filterData" @onClick="getactNav" :itemname="itemname" @onChange="onChange"
  51. @confirm="confirm" @reset="reset" :ispopshow="ispopshow" :top="tops">
  52. <view v-if="filterData[searchbarNav].type == 'userStatus'">
  53. <view class="boxnav x-bc">
  54. <view class="boxnav-item" v-for="(item, index) in filterData[searchbarNav].option"
  55. :key="index">
  56. <view class="boxnav-item-info one-t"
  57. :class="userStatusIndex == index ? 'boxnav-active' : ''"
  58. @click="handleParamItem('userStatus', index, item.id)">
  59. {{ item.label }}
  60. </view>
  61. </view>
  62. </view>
  63. </view>
  64. <view v-if="filterData[searchbarNav].type == 'registerTime'">
  65. <view class="boxnav x-bc">
  66. <view class="boxnav-item" style="width: 25%"
  67. v-for="(item, index) in filterData[searchbarNav].option" :key="index">
  68. <view class="boxnav-item-info one-t"
  69. :class="registerTimeIndex == index ? 'boxnav-active' : ''"
  70. @click="handleParamItem('registerTime', index)">
  71. {{ item.label }}
  72. </view>
  73. </view>
  74. <view class="boxnav-item x-ac" style="width: 100%" v-show="registerTimeIndex == 4">
  75. <view class="calendar-day x-c" @click="$refs.calendar.open()">
  76. <u-icon name="calendar" color="#999" size="20"></u-icon>
  77. {{ queryParam.startTime || '选择日期' }}
  78. </view>
  79. <view class="calendar-day x-c" @click="$refs.calendar.open()">
  80. <u-icon name="calendar" color="#999" size="20"></u-icon>
  81. {{ queryParam.endTime || '选择日期' }}
  82. </view>
  83. </view>
  84. </view>
  85. </view>
  86. <view v-if="filterData[searchbarNav].type == 'watchStatus'">
  87. <view class="boxnav x-bc">
  88. <view class="boxnav-item" v-for="(item, index) in filterData[searchbarNav].option"
  89. :key="index">
  90. <view class="boxnav-item-info one-t"
  91. :class="watchStatusIndex == index ? 'boxnav-active' : ''"
  92. @click="handleParamItem('watchStatus', index)">
  93. {{ item.label }}
  94. </view>
  95. </view>
  96. </view>
  97. </view>
  98. <view v-if="filterData[searchbarNav].type == 'courseStatus'">
  99. <view class="boxnav x-bc">
  100. <view class="boxnav-item" v-for="(item, index) in filterData[searchbarNav].option"
  101. :key="index">
  102. <view class="boxnav-item-info one-t"
  103. :class="courseStatusIndex == index ? 'boxnav-active' : ''"
  104. @click="handleParamItem('courseStatus', index)">
  105. {{ item.label }}
  106. </view>
  107. </view>
  108. </view>
  109. </view>
  110. <view v-if="filterData[searchbarNav].type == 'project'">
  111. <view class="boxnav x-bc">
  112. <view class="boxnav-item" v-for="(item, index) in filterData[searchbarNav].option"
  113. :key="index">
  114. <view class="boxnav-item-info one-t"
  115. :class="projectStatusIndex == index ? 'boxnav-active' : ''"
  116. @click="handleParamItem('project', index, item.id)">
  117. {{ item.label }}
  118. </view>
  119. </view>
  120. </view>
  121. </view>
  122. <view v-if="filterData[searchbarNav].type == 'appUser'">
  123. <view class="boxnav x-bc">
  124. <view class="boxnav-item" v-for="(item, index) in filterData[searchbarNav].option"
  125. :key="index">
  126. <view class="boxnav-item-info one-t"
  127. :class="appUserIndex == index ? 'boxnav-active' : ''"
  128. @click="handleParamItem('appUser', index)">
  129. {{ item.label }}
  130. </view>
  131. </view>
  132. </view>
  133. </view>
  134. </dropdownPanel>
  135. </view>
  136. </view>
  137. <view class="">
  138. <uni-calendar ref="calendar" :clear-date="true" :date="date" :insert="false" :lunar="false"
  139. :startDate="$u.timeFormat(new Date().getTime() - 3600 * 24 * 365 * 1000, 'yyyy-mm-dd')" :range="true"
  140. @confirm="confirmCalendar" :endDate="$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd')" />
  141. </view>
  142. <view class="">
  143. <!-- 搜索选择弹窗/标签筛选 -->
  144. <u-popup :show="showPop" :round="12" @close="closePop" class="model" style="flex: 0">
  145. <view class="popbox">
  146. <view class="popbox-head">
  147. <u-icon class="close-circle" name="close-circle" color="#ccc" size="24"
  148. @click="closePop"></u-icon>
  149. {{ popTitle }}
  150. </view>
  151. <view class="popbox-body">
  152. <view class="radiobox" v-show="popTitle == '搜索选择'">
  153. <label class="radiobox-item x-bc mbline" v-for="(item, index) in array" :key="item.value"
  154. @click="bindTypeChange(index)">
  155. <view>{{ item.name }}</view>
  156. <radio :value="item.value" :checked="index === typeIndex"
  157. style="transform: scale(0.75)" />
  158. </label>
  159. </view>
  160. <!-- <input placeholder="请输入标签 多个标签用 , 隔开" /> -->
  161. <view class="mb20" v-if="current == 0">
  162. <u-search placeholder="请输入标签 多个标签用 , 隔开" v-model="tagkeywords" :showAction="false"
  163. style="width: 100%" height="30px" @search="getcompanyTag"></u-search>
  164. </view>
  165. <scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnableds"
  166. :refresher-triggered="triggereds" refresher-background="rgba(0,0,0,0)"
  167. @refresherrefresh="pullDownRefreshs" @refresherrestore="triggereds = false"
  168. :upper-threshold="100" :lower-threshold="100" @refresherabort="triggereds = false"
  169. @scrolltolower="reachBottoms">
  170. <view class="tagbox-list x-f">
  171. <view class="tagbox-item x-f tag-active" v-if="companytag.length <= 0">暂无标签</view>
  172. <view class="mlr10 mb10" v-for="(item, index) in companytag" :key="item.tagId">
  173. <u-tag :text="item.tagName" :plain="!item.checked" :name="index"
  174. @click="chooseTag(index)"></u-tag>
  175. </view>
  176. </view>
  177. <view class="center fs24 mt20">
  178. <text class="mr20" @click="getTagpage('last')">上一页</text>
  179. <text class="base-color-red">{{ pagetag.pageNum }}/{{ pagetag.pages }}</text>
  180. <text class="ml20" @click="getTagpage('next')">下一页</text>
  181. </view>
  182. </scroll-view>
  183. </view>
  184. <view class="popbox-footer x-bc">
  185. <button class="popbox-footer-btn" @click="resetPop" v-show="popTitle == '标签筛选'">重置</button>
  186. <button class="popbox-footer-btn" @click="closePop" v-show="popTitle == '搜索选择'">取消</button>
  187. <button class="popbox-footer-btn con-btn" @click="confirmPop">确定</button>
  188. </view>
  189. </view>
  190. </u-popup>
  191. </view>
  192. <view class="userbox column hb hidden flex-1">
  193. <!-- <mescroll-body bottom="0" ref="mescrollRef" @init="mescrollInit" :down="downOption" :up="upOption" @down="downCallback" @up="upCallback"> -->
  194. <view class="userlist column hb hidden flex-1">
  195. <vipUserItem :viplist="userList" :isShowSelectAll="isShowSelectAll" @changeItem="changeItem"
  196. @getuserId="singleChange" @getlableId="singleChangeLable" @change="changesinglevip"
  197. @getuserIds="singleDelete" @pullDownRefresh="getfsuserListdata('refresh')"
  198. @changelistname="getfsuserListdata('more')" @reachBottom="getfsuserListdata()"
  199. @changePageOptions="(e) => (pageOptions = e)" :pageOptions="pageOptions" :status="status"
  200. @changeStatus="(e) => (status = e)" class="pb2 hb" />
  201. <view class="justify-between base-bg-f foot-select pb40" v-if="isShowSelectAll">
  202. <view class="align-center justify-between" v-if="isShowSelectAll">
  203. <u-checkbox-group @change="selectAll">
  204. <u-checkbox :checked="isSelectAll" shape="circle" activeColor="#FF6C47" :name="true"
  205. label="全选" labelColor="#333" />
  206. <text class="fs24 base-color-9 ml12">已选 {{ selectedCount }} 个</text>
  207. </u-checkbox-group>
  208. </view>
  209. <view class="justify-center">
  210. <button class="base-bg-red radius100 colorf h62 fs28 lh62 mlr10" @click="changeProhibit"
  211. v-if="current == 0">禁用</button>
  212. <button class="base-bg-red radius100 colorf h62 fs28 lh62 mlr10" @click="changeblack"
  213. v-else>取消禁用</button>
  214. <button class="base-bg-blue radius100 colorf h62 fs28 lh62" @click="changetagall"
  215. v-if="current == 0">改标签</button>
  216. <!-- <button class="base-bg-f radius100 base-color-red h62 ml10 fs28 lh60"
  217. style="border: #ef4c50 solid 2rpx;"
  218. @click="changevipuser" v-if="current==0">更换归属</button> -->
  219. </view>
  220. </view>
  221. </view>
  222. <!-- </mescroll-body> -->
  223. </view>
  224. <!-- <u-picker :show="showTagSelect" :columns="companytag" keyName="tag" @cancel='showTagSelect=false'
  225. @confirm='singleChangeLable' ></u-picker> -->
  226. <view>
  227. <u-popup :show="projectbox" :round="12" @close="projectbox = false" :zIndex="10074" style="flex: 0">
  228. <view class="pb120">
  229. <view class="center bold fs32 mt30">选择项目</view>
  230. <view class="p20 justify-start mb60" style="flex-wrap: wrap">
  231. <view class="plr16 ptb8 u-border mlr10 radius8"
  232. :class="projectId == item.dictValue ? 'probgsel' : 'probg'"
  233. v-for="(item, index) in projectList" :key="index" @click="selproject(item)">
  234. {{ item.dictLabel }}
  235. </view>
  236. </view>
  237. <view class="quedingpro" @click="submitPro">确定</view>
  238. </view>
  239. </u-popup>
  240. <u-popup :show="showTagSelect" @close="closetagselect" :closeOnClickOverlay="true" mode="bottom"
  241. style="z-index: 999">
  242. <view class="w100 bgf pb120">
  243. <view class="plr28 ptb16 justify-between" style="flex-direction: row-reverse">
  244. <u-icon class="" name="close-circle" color="#ccc" size="24" @click="closetagselect"></u-icon>
  245. </view>
  246. <view class="mb20">
  247. <u-search placeholder="请输入标签 多个标签用 , 隔开" v-model="tagchangekeywords" :showAction="false"
  248. style="width: 100%" height="30px" @search="getcompanyTags"></u-search>
  249. </view>
  250. <scroll-view scroll-y="true" class="hb" :refresher-enabled="isEnableds"
  251. :refresher-triggered="triggeredsA" refresher-background="rgba(0,0,0,0)"
  252. @refresherrefresh="pullDownRefreshsA" @refresherrestore="triggeredsA = false"
  253. :upper-threshold="100" :lower-threshold="100" @refresherabort="triggeredsA = false">
  254. <view class="justify-start p32 wrap">
  255. <view class="mlr10 mt10" v-for="(item, index) in changetag" :key="item.tagId">
  256. <u-tag :text="item.tag" :plain="!item.checked" :name="index"
  257. @click="choosechangeTag"></u-tag>
  258. </view>
  259. </view>
  260. <view class="center fs24 mt20">
  261. <text class="mr20" @click="getTagpageS('last')">上一页</text>
  262. <text class="base-color-red">{{ pagetagA.pageNum }}/{{ pagetagA.pages }}</text>
  263. <text class="ml20" @click="getTagpageS('next')">下一页</text>
  264. </view>
  265. </scroll-view>
  266. <view class="justify-between p32" :class="isShowSelectAll ? 'pb120' : ''">
  267. <view class="changetagbtn base-bg-f8" @click="showTagSelect = !showTagSelect">取消</view>
  268. <view class="changetagbtn colorf base-bg-blue" @click="suretagchangeAll">确定</view>
  269. </view>
  270. </view>
  271. </u-popup>
  272. </view>
  273. <view class="invite-member" :style="{ right: vipInviteshow ? '-72rpx' : '20rpx' }">
  274. <image :src="imgPath + '/app/images/invite-member-icon.png'" mode="aspectFill" @click="vipInvite"
  275. style="position: relative" class="intimg"></image>
  276. <image :src="imgPath + '/app/image/tc_close_icon.png'" class="falseimg" @click="showinimg"></image>
  277. </view>
  278. <view class="">
  279. <!-- 邀请弹窗 -->
  280. <u-popup :show="invitePop" :round="12" @close="invitePop = false" :zIndex="10074" style="flex: 0">
  281. <view class="popbox">
  282. <view class="popbox-head">
  283. <u-icon class="close-circle" name="close-circle" color="#ccc" size="24"
  284. @click="invitePop = false"></u-icon>
  285. 分享方式
  286. </view>
  287. <view class="popbox-body">
  288. <view class="choosetitle x-bc">
  289. <view>选择标签</view>
  290. <view v-if="sharetaglist" style="color: #1677ff" @click="addtag(0)">{{ zhanshitag }}</view>
  291. <view class="x-f" style="color: #1677ff" v-else @click="addtag(0)">
  292. <u-icon name="plus" color="#1677ff" size="14" style="margin-right: 5px"></u-icon>
  293. 添加标签
  294. </view>
  295. </view>
  296. <view class="invitetip">选择标签,当会员注册成功后,即可自动打标签</view>
  297. <!-- <view class="tagbox-list x-f" style="margin-top: 10px;margin-left: 0px;">
  298. <view class="tagbox-item x-f" @click="chooseTag">未打标签</view>
  299. <view class="tagbox-item x-f tag-active">未打标签</view>
  300. </view> -->
  301. <view class="justify-center" style="margin-top: 10px">
  302. <!-- <view class="sharePop-item y-f card-share" @click="inviteReg"
  303. style="text-align: center;margin-top: 10px;">
  304. <image src="@/static/images/icon_wx.png" mode="aspectFill"></image>
  305. <view style="font-weight: bold; margin-bottom: 4px">邀请注册</view>
  306. <view style="font-size: 12px; color: #888">邀请注册</view>
  307. </view> -->
  308. <view class="sharePop-item y-f card-share" @click="shareimg" style="text-align: center"
  309. v-if="false">
  310. <image :src="imgPath + '/app/images/card_icon.png'" mode="aspectFill"
  311. style="width: 80rpx; height: 80rpx; margin-top: 20rpx"></image>
  312. <view style="font-weight: bold; margin-bottom: 4px">生成卡片</view>
  313. <view style="font-size: 12px; color: #888">指导分享轻松转发</view>
  314. <!-- #ifdef MP-WEIXIN -->
  315. <button open-type="share" class="share">分享卡片</button>
  316. <!-- #endif -->
  317. </view>
  318. <!-- <view class="sharePop-item y-f card-share" @click="buildimg"
  319. style="text-align: center;margin-top: 10px;">
  320. <image :src="imgPath + '/app/images/poster_icon.png'" mode="aspectFill"></image>
  321. <view style="font-weight: bold; margin-bottom: 4px">生成海报</view>
  322. <view style="font-size: 12px; color: #888">保存海报美观宣传</view>
  323. </view> -->
  324. <view class="sharePop-item y-f" @click="copyLink" style="text-align: center">
  325. <image :src="imgPath + '/app/images/link_icon.png'" mode="aspectFill"></image>
  326. <view style="font-weight: bold; margin-bottom: 4px">复制链接</view>
  327. <view style="font-size: 12px; color: #888">生成链接一键复制</view>
  328. </view>
  329. </view>
  330. </view>
  331. </view>
  332. </u-popup>
  333. <!-- 设置链接有效时长弹窗 -->
  334. <u-modal :show="setTimeShow" content="content" class="model" @confirm="confirmTime">
  335. <view class="setTimebox">
  336. <view class="timetip">不传默认以系统参数为准</view>
  337. <view class="x-f">
  338. <text style="margin-right: 20px">链接有效时长(分钟)</text>
  339. <u-input fontSize="14px" placeholder="链接有效时长" border="none" v-model="time"
  340. maxlength="5"></u-input>
  341. </view>
  342. </view>
  343. </u-modal>
  344. <!-- 长按保存海报 -->
  345. <u-popup :show="setImg" @close="closeimg" :round="12">
  346. <view class="w100 h500 center">
  347. <image :src="codeLink.url" mode="aspectFill"></image>
  348. </view>
  349. <view class="justify-around mb40">
  350. <view class="column justify-center align-center" @click="downimg()">
  351. <image :src="imgPath + '/app/image/downicon.png'" class="w80 h80"></image>
  352. <view class="mt10">长按图片保存</view>
  353. </view>
  354. </view>
  355. </u-popup>
  356. <!-- 卡片分享引导 -->
  357. <u-overlay :show="showzhidao" @click="showzhidao = false" style="z-index: 9999">
  358. <view class="point-box">
  359. <view class="imgshe">
  360. <image :src="imgPath + '/app/image/point.png'" class="w300 h300"></image>
  361. </view>
  362. <view class="column colorf fs32 xu-box fs40 align-center justify-center">
  363. <view class="justify-center">
  364. 点击右上角
  365. <image :src="imgPath + '/app/image/wxmore.png'" class="w50 h50 mlr10"></image>
  366. </view>
  367. <view class="mt20">选择 “转发给朋友”</view>
  368. <view style="color: #cbcbcb" class="fs28 mt40">点击任意位置关闭弹窗</view>
  369. </view>
  370. </view>
  371. </u-overlay>
  372. <!-- 更改归属 -->
  373. <u-picker :show="showcol" :columns="columns" @cancel="showcol = !showcol" @confirm="receiveA"
  374. keyName="nickName"></u-picker>
  375. <u-loading-page :loading="viewload" iconSize="32" loadingColor="#3c9cff" fontSize="20"
  376. :loading-text="loadingtext"></u-loading-page>
  377. </view>
  378. <view class="">
  379. <uni-calendar ref="calendar" :clear-date="true" :date="date" :insert="false" :lunar="false"
  380. :startDate="$u.timeFormat(new Date().getTime() - 3600 * 24 * 365 * 1000, 'yyyy-mm-dd')" :range="true"
  381. @confirm="confirmCalendar" :endDate="$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd')" />
  382. </view>
  383. </view>
  384. </template>
  385. <script>
  386. import {
  387. getfsuserList,
  388. getcompanyTaglist,
  389. Addblacklist,
  390. changeLable,
  391. getvipNum,
  392. // changevipUser,
  393. getgroupList,
  394. // becomeVipuser,
  395. becomeVipuserImg,
  396. getusersales,
  397. removebalcklist,
  398. getallTags,
  399. getprojectlist,
  400. getGotoAppLink
  401. } from '../api/manageCompany.js';
  402. import vipUserItem from '../components/vipUserItem.vue';
  403. import dropdownPanel from '../components/dropdownPanel.vue';
  404. import uniCalendar from './uni-calendar/components/uni-calendar/uni-calendar.vue';
  405. // import wx from 'weixin-js-sdk'
  406. export default {
  407. components: {
  408. vipUserItem,
  409. dropdownPanel,
  410. uniCalendar
  411. },
  412. data() {
  413. return {
  414. viewload: true,
  415. loadingtext: '数据加载中...',
  416. showcol: false,
  417. setImg: false,
  418. columns: [],
  419. showTagSelect: false,
  420. list: [{
  421. name: '会员(0)'
  422. },
  423. {
  424. name: '小黑屋(0)'
  425. },
  426. {
  427. name: '黑名单(0)'
  428. }
  429. ],
  430. userList: [],
  431. current: 0,
  432. keyword: '',
  433. companytag: [],
  434. showCompanytag: [],
  435. selectedList: [], //已经选中标签列表
  436. list2: [{
  437. name: '全部'
  438. },
  439. {
  440. name: '今日新增'
  441. },
  442. {
  443. name: '今日完播'
  444. },
  445. {
  446. name: '未看过课'
  447. }
  448. ],
  449. currentType: 0,
  450. activeStyle: {
  451. color: '#1677ff',
  452. fontSize: '14px',
  453. fontWeight: 'bold'
  454. },
  455. inactiveStyle: {
  456. fontSize: '14px'
  457. },
  458. searchTypeIndex: 0,
  459. typeArrays: ['连续缺课天数多到少', '连续缺课天数少到多', '按注册时间晚到早', '会员姓名0-9-A-Z'],
  460. typeArray: ['按注册时间晚到早', '会员姓名0-9-A-Z'],
  461. typeoption: ['注册时间', '会员姓名'],
  462. array: [{
  463. value: '0',
  464. name: '关联搜索'
  465. },
  466. {
  467. value: '1',
  468. name: '精准搜索'
  469. }
  470. ],
  471. typeIndex: 0,
  472. popTitle: '搜索选择',
  473. showPop: false,
  474. filterData: [{
  475. name: '销售',
  476. value: 0,
  477. type: 'userStatus',
  478. option: [{
  479. label: '全部',
  480. id: ''
  481. }]
  482. },
  483. {
  484. name: '注册',
  485. value: 1,
  486. type: 'registerTime',
  487. option: [{
  488. label: '全部'
  489. },
  490. {
  491. label: '今天'
  492. },
  493. {
  494. label: '昨天'
  495. },
  496. {
  497. label: '近7天'
  498. },
  499. {
  500. label: '自定义'
  501. }
  502. ]
  503. },
  504. {
  505. name: '看课',
  506. value: 2,
  507. type: 'watchStatus',
  508. option: [{
  509. label: '全部'
  510. },
  511. {
  512. label: '未看过课'
  513. },
  514. {
  515. label: '正常看课'
  516. },
  517. {
  518. label: '停止看课'
  519. }
  520. ]
  521. },
  522. {
  523. name: '缺课',
  524. value: 3,
  525. type: 'courseStatus',
  526. option: [{
  527. label: '全部'
  528. },
  529. {
  530. label: '已缺课'
  531. },
  532. {
  533. label: '未缺课'
  534. }
  535. ]
  536. },
  537. {
  538. name: '项目',
  539. value: 4,
  540. type: 'project',
  541. option: [{
  542. label: '全部',
  543. id: ''
  544. }]
  545. },
  546. {
  547. name: '批量',
  548. value: 5,
  549. type: 'piliang',
  550. special: true,
  551. stopPrevent: true
  552. },{
  553. name: 'app用户',
  554. value: 3,
  555. type: 'appUser',
  556. option: [{
  557. label: '全部'
  558. },
  559. {
  560. label: '是'
  561. },
  562. {
  563. label: '否'
  564. }
  565. ]
  566. }
  567. ],
  568. searchbarNav: 0,
  569. userStatusIndex: 0,
  570. registerTimeIndex: 0,
  571. watchStatusIndex: 0,
  572. courseStatusIndex: 0,
  573. appUserIndex: 0,
  574. projectStatusIndex: 0,
  575. selprojectId: '',
  576. showCalendar: false,
  577. date: '',
  578. mode: 'range',
  579. queryParam: {
  580. typeIndex: 0,
  581. startTime: '',
  582. endTime: ''
  583. },
  584. mescroll: null,
  585. downOption: {
  586. use: true,
  587. auto: false
  588. },
  589. upOption: {
  590. onScroll: false,
  591. use: true, // 是否启用上拉加载; 默认true
  592. auto: true,
  593. page: {
  594. pae: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
  595. size: 10 // 每页数据的数量,默认10
  596. },
  597. noMoreSize: 10, // 配置列表的总数量要大于等于5条才显示'-- END --'的提示
  598. textNoMore: '已经到底了',
  599. empty: {
  600. icon: 'https://zkzh-2025.oss-cn-beijing.aliyuncs.com/fs/20240423/cf4a86b913a04341bb44e34bb4d37aa2.png',
  601. tip: '暂无数据'
  602. }
  603. },
  604. dataList: [],
  605. invitePop: false,
  606. setTimeShow: false,
  607. time: '',
  608. user: {},
  609. idx: [],
  610. todayday: uni.$u.timeFormat(new Date(), 'yyyy-mm-dd'),
  611. startTime: '',
  612. endTime: '',
  613. isShowSelectAll: false, //是否显示全选
  614. isSelectAll: false, //是否全选
  615. ispopshow: false,
  616. selectidAll: [],
  617. changetag: [],
  618. selectidtag: '',
  619. itemname: '',
  620. userid: '',
  621. groupid: [],
  622. pageOptions: {
  623. pageNum: 1,
  624. pageSize: 8
  625. },
  626. status: 'loadmore',
  627. sharetag: 1,
  628. sharetaglist: [],
  629. codeLink: [],
  630. zhanshitag: '',
  631. copyLinks: '',
  632. showzhidao: false,
  633. imgs: this.$store.getters.imgpath + '/app/image/logoshare.png',
  634. currentIsBlack: 1,
  635. tagpageNum: 1,
  636. tagpageSize: 16,
  637. triggereds: false,
  638. statusA: 'loadmore',
  639. isEnableds: true,
  640. pagetag: [],
  641. tagkeywords: '',
  642. salesid: '',
  643. tagchangekeywords: '',
  644. tagpageNums: 1,
  645. tagpageSizes: 16,
  646. triggeredsA: false,
  647. statusAs: 'loadmore',
  648. isEnabledsA: true,
  649. pagetagA: [],
  650. tops: '464rpx',
  651. showInvite: false,
  652. vipInviteshow: false,
  653. projectbox: false,
  654. projectList: {},
  655. projectId: ''
  656. };
  657. },
  658. // onLoad() {
  659. // // #ifdef MP-WEIXIN
  660. // uni.showShareMenu({
  661. // withShareTicket: true,
  662. // menus: ['shareAppMessage']
  663. // });
  664. // // #endif
  665. // },
  666. mounted() {
  667. this.getsalelist();
  668. (this.user = uni.getStorageSync('companyUserInfo') ? JSON.parse(uni.getStorageSync('companyUserInfo')) : {}),
  669. this.getvipListnum();
  670. this.userList = [];
  671. this.getfsuserListdata();
  672. this.getprojectlistsA();
  673. },
  674. onShow() {
  675. // #ifdef H5
  676. this.getjssdklist();
  677. // #endif
  678. },
  679. // 这个是分享聊天
  680. // onShareAppMessage() {
  681. // return {
  682. // title:this.$store.getters.logoname+'小程序的'+this.user.userName + '邀请您成为会员!',
  683. // path: '/pages/user/users/becomeVIP?companyId=' +
  684. // this.user.companyId + '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist,
  685. // imageUrl: this.imgs,
  686. // }
  687. // },
  688. computed: {
  689. selectedCount() {
  690. return this.userList.filter((item) => item.checked).length;
  691. },
  692. imgPath() {
  693. return this.$store.getters.imgpath;
  694. }
  695. },
  696. methods: {
  697. submitPro() {
  698. if (this.projectId == '') {
  699. uni.showToast({
  700. title: '请选择项目',
  701. icon: 'none',
  702. duration: 1000
  703. });
  704. return;
  705. }
  706. this.projectbox = false;
  707. this.invitePop = true;
  708. const pages =
  709. '/pages_course/becomeVIP?companyId=' + this.user.companyId + '&projectId=' + this.projectId +
  710. '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist;
  711. this.$emit('childEvent', pages);
  712. },
  713. pullDownRefreshsA() {},
  714. reachBottoms() {},
  715. selproject(item) {
  716. this.projectId = item.dictValue;
  717. },
  718. getprojectlistsA() {
  719. const oldlist = this.filterData[4].option;
  720. const data = {
  721. key: 'sys_course_project'
  722. };
  723. getprojectlist(data).then((res) => {
  724. if (res.code == 200) {
  725. const list = res.data;
  726. this.filterData[4].option = oldlist.concat(
  727. list.map((item) => {
  728. return {
  729. id: item.dictValue,
  730. label: item.dictLabel
  731. };
  732. })
  733. );
  734. } else {
  735. uni.showToast({
  736. title: res.msg,
  737. icon: 'none'
  738. });
  739. }
  740. });
  741. },
  742. getprojectlists() {
  743. const data = {
  744. key: 'sys_course_project'
  745. };
  746. getprojectlist(data).then((res) => {
  747. // this.projectList=res.data
  748. this.projectList = res.data.map((item) => {
  749. return {
  750. ...item,
  751. checked: false
  752. };
  753. });
  754. console.log(this.projectList);
  755. });
  756. },
  757. sharecard() {
  758. console.log(11);
  759. },
  760. changetagall() {
  761. this.showTagSelect = !this.showTagSelect;
  762. this.tagchangekeywords = '';
  763. this.selectidtag = '';
  764. this.showInvite = false;
  765. this.sharetag = 1;
  766. this.getalltagtaglist();
  767. },
  768. getTagpageS(type) {
  769. if (type == 'last') {
  770. if (this.tagpageNums >= 2) {
  771. this.tagpageNums--;
  772. this.getalltagtaglist();
  773. } else {
  774. uni.showToast({
  775. title: '已经是第一页',
  776. icon: 'none',
  777. duration: 1000
  778. });
  779. }
  780. } else {
  781. if (this.tagpageNums < this.pagetagA.pages) {
  782. this.tagpageNums++;
  783. this.getalltagtaglist();
  784. } else {
  785. uni.showToast({
  786. title: '已经是最后一页',
  787. icon: 'none',
  788. duration: 1000
  789. });
  790. }
  791. }
  792. },
  793. getcompanyTags(value) {
  794. this.tagchangekeywords = value;
  795. this.getalltagtaglist();
  796. },
  797. singleDelete(data) {
  798. this.pageOptions.pageNum = 1;
  799. this.$emit('update:parentValue', '新值');
  800. this.userList = [];
  801. this.selectidAll[0] = data;
  802. this.changeblack();
  803. },
  804. changeblack() {
  805. // console.log(this.selectidAll[0])
  806. //取消禁用
  807. if (this.selectidAll.length < 1) {
  808. uni.showToast({
  809. icon: 'none',
  810. title: '所选列表为空'
  811. });
  812. return;
  813. }
  814. removebalcklist(this.selectidAll).then((res) => {
  815. if (res.code == 200) {
  816. this.pageOptions.pageNum = 1;
  817. // console.log(this.pageOptions.pageNum)
  818. this.getfsuserListdata('refresh');
  819. // 创建一个在**秒后执行的定时器
  820. const timer = setTimeout(function() {
  821. uni.showToast({
  822. icon: 'none',
  823. title: '取消禁用成功'
  824. });
  825. }, 200);
  826. this.getvipListnum();
  827. this.isShowSelectAll = false;
  828. this.isSelectAll = false;
  829. } else {
  830. uni.showToast({
  831. icon: 'none',
  832. title: res.msg
  833. });
  834. }
  835. });
  836. },
  837. blackSel() {
  838. this.isShowSelectAll = !this.isShowSelectAll;
  839. // if (data.value == 4) {
  840. // this.itemname = data.name
  841. // this.isShowSelectAll = !this.isShowSelectAll
  842. // } else {
  843. // this.isShowSelectAll = false
  844. // }
  845. },
  846. getsalelist() {
  847. const oldlist = this.filterData[0].option;
  848. getusersales().then((res) => {
  849. if (res.code == 200) {
  850. const list = res.data;
  851. this.filterData[0].option = oldlist.concat(
  852. list.map((item) => {
  853. return {
  854. id: item.userId,
  855. label: item.nickName
  856. };
  857. })
  858. );
  859. // this.filterData[0].option=list.map(item => {
  860. // return {
  861. // id: item.userId,
  862. // label: item.nickName
  863. // };
  864. // })
  865. } else {
  866. uni.showToast({
  867. title: res.msg,
  868. icon: 'none'
  869. });
  870. }
  871. });
  872. },
  873. getTagpage(type) {
  874. if (type == 'last') {
  875. if (this.tagpageNum >= 2) {
  876. this.tagpageNum--;
  877. this.getcompanyTag();
  878. } else {
  879. uni.showToast({
  880. title: '已经是第一页',
  881. icon: 'none',
  882. duration: 1000
  883. });
  884. }
  885. } else {
  886. if (this.tagpageNum < this.pagetag.pages) {
  887. this.tagpageNum++;
  888. this.getcompanyTag();
  889. } else {
  890. uni.showToast({
  891. title: '已经是最后一页',
  892. icon: 'none',
  893. duration: 1000
  894. });
  895. }
  896. }
  897. },
  898. //标签展示下拉
  899. pullDownRefreshs() {
  900. // 下拉
  901. this.triggereds = true; //下拉了状态为true
  902. setTimeout(() => {
  903. this.triggereds = false;
  904. uni.stopPullDownRefresh();
  905. this.tagpageNum = 1;
  906. this.getcompanyTag('refresh'); //触底 不穿执行else
  907. // 请求接口里面需要判断是不是最后一页 是最后一页 status赋值为‘loadmore’没有更多了
  908. // 请求接口
  909. }, 1000);
  910. },
  911. getjssdklist() {
  912. const param = {
  913. url: window.location.href
  914. };
  915. getSDK(param).then((res) => {
  916. wx.config({
  917. appId: res.data.appId, // 必填,公众号的唯一标识
  918. timestamp: res.data.timestamp, // 必填,生成签名的时间戳
  919. nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
  920. signature: res.data.signature, // 必填,签名
  921. jsApiList: ['updateAppMessageShareData'] // 必填,需要使用的JS接口列表
  922. });
  923. });
  924. },
  925. shareimg() {
  926. //分享好友
  927. this.getlink();
  928. let self = this;
  929. // 配置--你到时候把配置全局 --就是这些东西 调接口拿
  930. wx.ready(function() {
  931. //需在用户可能点击分享按钮前就先调用
  932. wx.updateAppMessageShareData({
  933. title: self.user.userName + '邀请您成为会员', // 分享标题
  934. desc: self.user.deptName, // 分享描述
  935. link: self.copyLinks,
  936. imgUrl: self.codeLink.url || self.imgs, // 分享图标
  937. success: function(res) {
  938. self.showzhidao = true;
  939. self.setImg = false;
  940. self.showShare = false;
  941. // 设置成功
  942. uni.showToast({
  943. title: '卡片已生成',
  944. icon: 'none',
  945. duration: 1000
  946. });
  947. },
  948. fail: function(err) {
  949. console.log(err);
  950. uni.showToast({
  951. title: '卡片生成失败,请重试',
  952. icon: 'none',
  953. duration: 2000
  954. });
  955. }
  956. });
  957. });
  958. },
  959. downimg() {},
  960. closeimg() {
  961. this.setImg = false;
  962. this.invitePop = false;
  963. },
  964. buildimg() {
  965. this.setImg = !this.setImg;
  966. this.getshareimg();
  967. },
  968. addtag(add) {
  969. this.sharetag = add;
  970. this.showTagSelect = !this.showTagSelect;
  971. this.invitePop = !this.invitePop;
  972. this.showInvite = true;
  973. this.getalltagtaglist();
  974. },
  975. changevipuser() {
  976. this.showcol = !this.showcol;
  977. this.getgrouplist();
  978. },
  979. getgrouplist() {
  980. //获取群管列表
  981. getgroupList().then((res) => {
  982. if (res.code == 200) {
  983. this.columns = [res.data];
  984. // console.log(this.columns)
  985. } else {
  986. uni.showToast({
  987. icon: 'none',
  988. title: res.msg
  989. });
  990. }
  991. });
  992. },
  993. changeall() {
  994. //更换全部会员
  995. console.log(1);
  996. const param = {
  997. companyId: this.user.companyId,
  998. companyUserId: this.userid,
  999. userId: this.groupid
  1000. };
  1001. changevipUser(param).then((res) => {
  1002. if (res.code == 200) {
  1003. uni.showToast({
  1004. icon: 'none',
  1005. title: '更换会员归属成功'
  1006. });
  1007. } else {
  1008. uni.showToast({
  1009. icon: 'none',
  1010. title: res.msg
  1011. });
  1012. }
  1013. });
  1014. },
  1015. receiveA(e) {
  1016. console.log(e);
  1017. this.userid = e.value[0].userId;
  1018. if (this.isShowSelectAll == true) {
  1019. this.groupid = this.selectidAll;
  1020. this.changeall();
  1021. this.showcol = !this.showcol;
  1022. setTimeout(() => {
  1023. this.getfsuserListdata();
  1024. }, 200);
  1025. } else {
  1026. this.changeall();
  1027. this.showcol = !this.showcol;
  1028. this.getfsuserListdata();
  1029. }
  1030. this.isSelectAll = false;
  1031. },
  1032. getvipListnum() {
  1033. getvipNum().then((res) => {
  1034. if (res.code == 200) {
  1035. this.list[0].name = '会员' + '(' + res.data.number + ')';
  1036. this.list[1].name = '小黑屋' + '(' + res.data.smallBlackNum + ')';
  1037. this.list[2].name = '黑名单' + '(' + res.data.blackNum + ')';
  1038. } else {
  1039. uni.showToast({
  1040. icon: 'none',
  1041. title: res.msg
  1042. });
  1043. }
  1044. });
  1045. },
  1046. getactNav(data) {
  1047. if (data.value == 5) {
  1048. this.itemname = data.name;
  1049. this.isShowSelectAll = !this.isShowSelectAll;
  1050. } else {
  1051. this.isShowSelectAll = false;
  1052. }
  1053. },
  1054. closetagselect() {
  1055. this.showTagSelect = !this.showTagSelect;
  1056. },
  1057. suretagchangeAll() {
  1058. if (this.sharetag == 0) {
  1059. this.sharetaglist = this.changetag
  1060. .filter((item) => item.checked)
  1061. .map((v) => v.tagId)
  1062. .join(',');
  1063. this.showTagSelect = !this.showTagSelect;
  1064. this.zhanshitag = this.changetag
  1065. .filter((item) => item.checked)
  1066. .map((v) => v.tag)
  1067. .join(',');
  1068. // console.log(this.sharetaglist)
  1069. const pages =
  1070. '/pages_course/becomeVIP?companyId=' +
  1071. this.user.companyId +
  1072. '&projectId=' +
  1073. this.projectId +
  1074. '&companyUserId=' +
  1075. this.user.userId +
  1076. '&tagids=' +
  1077. this.sharetaglist;
  1078. this.$emit('childEvent', pages);
  1079. console.log(pages);
  1080. } else {
  1081. //多选改标签确认按钮
  1082. this.showTagSelect = !this.showTagSelect;
  1083. if (this.selectidAll.length == 0) {
  1084. uni.showToast({
  1085. icon: 'none',
  1086. title: '未选中用户'
  1087. });
  1088. return;
  1089. }
  1090. this.selectidtag = this.changetag.filter((item) => item.checked).map((v) => v.tagId);
  1091. this.changeLabelmore();
  1092. }
  1093. if (this.showInvite) {
  1094. this.invitePop = true;
  1095. }
  1096. },
  1097. singleChangeLable(data) {
  1098. this.showTagSelect = !this.showTagSelect;
  1099. this.selectidAll[0] = data;
  1100. this.tagchangekeywords = '';
  1101. this.selectidtag = [];
  1102. this.sharetag = 1;
  1103. this.showInvite = false;
  1104. this.getalltagtaglist();
  1105. },
  1106. getalltagtaglist(type) {
  1107. //获取公司标签列表
  1108. const data = {
  1109. pageNum: this.tagpageNums,
  1110. pageSize: this.tagpageSizes,
  1111. keyword: this.tagchangekeywords
  1112. };
  1113. getallTags(data).then((res) => {
  1114. if (res.code == 200) {
  1115. const dataList = res.data.list.map((item) => {
  1116. return {
  1117. ...item,
  1118. checked: false
  1119. };
  1120. });
  1121. if (type == 'refresh') {
  1122. this.changetag = dataList;
  1123. } else {
  1124. this.changetag = dataList;
  1125. }
  1126. if (res.data.isLastPage) {
  1127. this.statusAs = 'nomore';
  1128. } else {
  1129. this.statusAs = 'loadmore';
  1130. }
  1131. this.pagetagA = res.data;
  1132. } else {
  1133. uni.showToast({
  1134. icon: 'none',
  1135. title: res.msg
  1136. });
  1137. }
  1138. });
  1139. },
  1140. changesinglevip(data) {
  1141. this.showcol = !this.showcol;
  1142. // console.log(data)
  1143. this.groupid[0] = data;
  1144. this.getgrouplist();
  1145. },
  1146. changeLabelmore() {
  1147. //改标签选择按钮
  1148. const params = {
  1149. tagIds: this.selectidtag,
  1150. userCompanyUserIds: this.selectidAll
  1151. };
  1152. changeLable(params).then((res) => {
  1153. if (res.code == 200) {
  1154. this.userList = [];
  1155. this.getfsuserListdata('refresh');
  1156. const timer = setTimeout(function() {
  1157. uni.showToast({
  1158. icon: 'none',
  1159. title: '标签更改成功'
  1160. });
  1161. }, 500);
  1162. this.isSelectAll = false;
  1163. this.selectedCount = 0;
  1164. } else {
  1165. uni.showToast({
  1166. icon: 'none',
  1167. title: res.msg
  1168. });
  1169. }
  1170. });
  1171. },
  1172. changeOwnership() {
  1173. //更换归属(经销商功能)
  1174. },
  1175. getcompanyTag(type) {
  1176. this.companytag = [];
  1177. this.tagkeywords = this.tagkeywords.replace(/,/g, ',');
  1178. const data = {
  1179. pageNum: this.tagpageNum,
  1180. pageSize: this.tagpageSize,
  1181. keyword: this.tagkeywords
  1182. };
  1183. getcompanyTaglist(data).then((res) => {
  1184. if (res.code == 200) {
  1185. // this.showCompanytag = res.data.list
  1186. const dataList = res.data.list.map((item) => {
  1187. return {
  1188. ...item,
  1189. checked: false
  1190. };
  1191. });
  1192. if (type == 'refresh') {
  1193. this.companytag = dataList;
  1194. } else {
  1195. this.companytag = [...this.companytag, ...dataList];
  1196. }
  1197. if (res.data.isLastPage) {
  1198. this.statusA = 'nomore';
  1199. } else {
  1200. this.statusA = 'loadmore';
  1201. }
  1202. this.pagetag = res.data;
  1203. } else {
  1204. uni.showToast({
  1205. icon: 'none',
  1206. title: res.msg
  1207. });
  1208. }
  1209. });
  1210. },
  1211. getfsuserListdata(type) {
  1212. // this.userList=[]
  1213. const param = {
  1214. userId: this.user.userId,
  1215. tabValue: this.currentType,
  1216. registerStartTime: this.startTime, //注册开始
  1217. registerEndTime: this.endTime, //注册结束
  1218. watchCourseType: this.watchStatusIndex,
  1219. missCourseStatus: this.courseStatusIndex,
  1220. projectId: this.selprojectId,
  1221. keyword: this.keyword,
  1222. tagIds: this.idx,
  1223. status: this.currentIsBlack,
  1224. companyUserId: this.salesid,
  1225. continueMissCourseSort: this.searchTypeIndex,
  1226. ...this.pageOptions,
  1227. isAppUser: this.appUserIndex || '',
  1228. };
  1229. getfsuserList(param).then((res) => {
  1230. if (res.code == 200) {
  1231. this.viewload = false;
  1232. let dataList = res.data.list.map((item) => {
  1233. return {
  1234. ...item,
  1235. checked: false
  1236. };
  1237. });
  1238. if (type == 'refresh') {
  1239. this.userList = dataList;
  1240. } else if (type == 'more') {
  1241. this.userList = dataList;
  1242. } else {
  1243. this.userList = [...this.userList, ...dataList];
  1244. }
  1245. if (res.data.isLastPage) {
  1246. this.status = 'nomore';
  1247. } else {
  1248. this.status = 'loadmore';
  1249. }
  1250. } else {
  1251. uni.showToast({
  1252. icon: 'none',
  1253. title: res.msg
  1254. });
  1255. }
  1256. });
  1257. },
  1258. onChange(index) {
  1259. if (index == 5) return;
  1260. this.searchbarNav = index;
  1261. },
  1262. searchKeyword(value) {
  1263. this.keyword = value;
  1264. this.userList = [];
  1265. this.pageOptions.pageNum = 1;
  1266. this.getfsuserListdata();
  1267. },
  1268. singleChange(data) {
  1269. this.userList = [];
  1270. this.selectidAll[0] = data;
  1271. this.changeProhibit();
  1272. },
  1273. changeProhibit() {
  1274. //批量禁用选择按钮
  1275. if (this.selectidAll.length < 1) {
  1276. uni.showToast({
  1277. icon: 'none',
  1278. title: '所选列表为空'
  1279. });
  1280. return;
  1281. }
  1282. Addblacklist(this.selectidAll).then((res) => {
  1283. if (res.code == 200) {
  1284. this.pageOptions.pageNum = 1;
  1285. this.getfsuserListdata('refresh');
  1286. // 创建一个在**秒后执行的定时器
  1287. const timer = setTimeout(function() {
  1288. uni.showToast({
  1289. icon: 'none',
  1290. title: '禁用成功'
  1291. });
  1292. }, 200);
  1293. this.getvipListnum();
  1294. // this.isShowSelectAll = false
  1295. this.isSelectAll = false;
  1296. } else {
  1297. uni.showToast({
  1298. icon: 'none',
  1299. title: res.msg
  1300. });
  1301. }
  1302. });
  1303. },
  1304. // 全选
  1305. selectAll() {
  1306. // 先设置全选
  1307. this.isSelectAll = !this.isSelectAll;
  1308. // 然后设置列表 checked没得this不会报错吗 这是返回新数组
  1309. console.log(this.isSelectAll);
  1310. this.userList = this.userList.map((item) => {
  1311. // 每一项的 checked为 全选的状态
  1312. return {
  1313. ...item,
  1314. checked: this.isSelectAll
  1315. };
  1316. });
  1317. this.selectidAll = this.userList.filter((item) => item.checked).map((item) => item.userCompanyUserId);
  1318. console.log(this.isSelectAll);
  1319. },
  1320. // 单选 /反选
  1321. changeItem(i) {
  1322. let arr = {
  1323. ...this.userList[i],
  1324. checked: !this.userList[i].checked
  1325. };
  1326. this.$set(this.userList, i, arr);
  1327. this.selectidAll = this.userList.filter((item) => item.checked).map((item) => item.userCompanyUserId);
  1328. console.log(this.selectidAll);
  1329. this.isSelectAll = this.userList.every((item) => item.checked);
  1330. if (this.isSelectAll) {
  1331. this.userList = this.userList.map((item) => {
  1332. return {
  1333. ...item,
  1334. checked: this.isSelectAll
  1335. };
  1336. });
  1337. }
  1338. this.selectidAll = this.userList.filter((item) => item.checked).map((item) => item.userCompanyUserId);
  1339. },
  1340. reset() {
  1341. //重置时间选择等筛选
  1342. const type = this.filterData[this.searchbarNav].type;
  1343. console.log(this.registerTimeIndex);
  1344. if (type == 'registerTime') {
  1345. this.registerTimeIndex = '';
  1346. this.endTime = '';
  1347. this.startTime = '';
  1348. this.getfsuserListdata('refresh');
  1349. // console.log(this.getfsuserListdata())
  1350. } else if (type == 'watchStatus') {
  1351. this.watchStatusIndex = 0;
  1352. this.getfsuserListdata('refresh');
  1353. } else if (type == 'userStatus') {
  1354. this.userStatusIndex = 0;
  1355. this.salesid = '';
  1356. this.getfsuserListdata('refresh');
  1357. } else if (type == 'courseStatus') {
  1358. this.courseStatusIndex = 0;
  1359. this.getfsuserListdata('refresh');
  1360. } else if (type == 'project') {
  1361. this.selprojectId = '';
  1362. this.projectStatusIndex = 0;
  1363. this.getfsuserListdata('refresh');
  1364. } else if (type == 'appUser') {
  1365. this.courseStatusIndex = 0;
  1366. this.getfsuserListdata('refresh');
  1367. } else {}
  1368. },
  1369. confirm(e) {
  1370. this.pageOptions.pageNum = 1;
  1371. this.userList = [];
  1372. const type = this.filterData[this.searchbarNav].type;
  1373. const value = this.registerTimeIndex;
  1374. if (type == 'registerTime') {
  1375. if (value == 0) {
  1376. this.startTime = '';
  1377. this.endTime = '';
  1378. this.getfsuserListdata('refresh');
  1379. } else if (value == 1) {
  1380. this.startTime = this.todayday + ' 00:00:00';
  1381. this.endTime = this.todayday + ' 23:59:59';
  1382. this.getfsuserListdata('refresh');
  1383. } else if (value == 2) {
  1384. let yesterday = new Date();
  1385. yesterday.setDate(yesterday.getDate() - 1);
  1386. this.startTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd') + ' 00:00:00';
  1387. this.endTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd') + ' 23:59:59';
  1388. this.getfsuserListdata('refresh');
  1389. } else if (value == 3) {
  1390. let yesterday = new Date();
  1391. yesterday.setDate(yesterday.getDate() - 6);
  1392. this.startTime = uni.$u.timeFormat(yesterday, 'yyyy-mm-dd') + ' 00:00:00';
  1393. this.endTime = this.todayday + ' 23:59:59';
  1394. this.getfsuserListdata('refresh');
  1395. } else {
  1396. this.getfsuserListdata('refresh');
  1397. }
  1398. } else if (type == 'watchStatus') {
  1399. // this.watchStatusIndex=value
  1400. this.getfsuserListdata();
  1401. // console.log(this.filterData)
  1402. } else if (type == 'userStatus') {
  1403. if (this.userStatusIndex == 0) {
  1404. this.salesid = '';
  1405. this.getfsuserListdata('refresh');
  1406. } else {
  1407. this.getfsuserListdata('refresh');
  1408. }
  1409. // console.log(this.userStatusIndex)
  1410. } else if (type == 'courseStatus') {
  1411. this.getfsuserListdata('refresh');
  1412. console.log(this.courseStatusIndex);
  1413. } else if (type == 'project') {
  1414. if (this.projectStatusIndex == 0) {
  1415. this.selprojectId = '';
  1416. this.getfsuserListdata('refresh');
  1417. } else {
  1418. this.getfsuserListdata('refresh');
  1419. }
  1420. console.log(this.projectStatusIndex);
  1421. } else if (type == 'appUser') {
  1422. this.getfsuserListdata('refresh');
  1423. console.log(this.courseStatusIndex);
  1424. }
  1425. // this.mescroll.resetUpScroll()
  1426. },
  1427. handleParamItem(type, index, id) {
  1428. if (type == 'registerTime') {
  1429. this.registerTimeIndex = index;
  1430. } else if (type == 'watchStatus') {
  1431. this.watchStatusIndex = index;
  1432. // console.log('watchStatus',index)
  1433. } else if (type == 'userStatus') {
  1434. this.userStatusIndex = index;
  1435. this.salesid = id;
  1436. console.log(this.salesid);
  1437. } else if (type == 'courseStatus') {
  1438. this.courseStatusIndex = index;
  1439. } else if (type == 'project') {
  1440. this.selprojectId = id;
  1441. this.projectStatusIndex = index;
  1442. } else if (type == 'appUser') {
  1443. this.appUserIndex = index;
  1444. } else {
  1445. this.ispopshow = false;
  1446. }
  1447. },
  1448. sectionChange(index) {
  1449. this.current = index;
  1450. this.currentType = 0;
  1451. this.startTime = ''; //注册开始
  1452. this.endTime = ''; //注册结束
  1453. this.watchStatusIndex = 0;
  1454. this.salesid = '';
  1455. this.courseStatusIndex = 0;
  1456. this.selprojectId = '';
  1457. this.keyword = '';
  1458. this.idx = [];
  1459. this.pageOptions.pageNum = 1;
  1460. this.isShowSelectAll = false;
  1461. this.userList = [];
  1462. if (index == 0) {
  1463. // 0小黑屋 1正常 2拉黑
  1464. this.currentIsBlack = 1;
  1465. this.getfsuserListdata('refresh');
  1466. } else if (index == 1) {
  1467. this.currentIsBlack = 0;
  1468. this.getfsuserListdata('refresh');
  1469. } else {
  1470. this.currentIsBlack = 2;
  1471. this.getfsuserListdata('refresh');
  1472. }
  1473. this.isSelectAll = false;
  1474. this.getvipListnum();
  1475. },
  1476. clickTypeTab(e) {
  1477. this.currentType = e.index;
  1478. this.userList = [];
  1479. // 在这里更新
  1480. this.pageOptions.pageNum = 1;
  1481. this.getfsuserListdata();
  1482. },
  1483. bindPickerChange(e) {
  1484. console.log('picker发送选择改变,携带值为', e.detail.value);
  1485. this.userList = [];
  1486. this.searchTypeIndex = e.detail.value;
  1487. this.getfsuserListdata();
  1488. },
  1489. openPop(type) {
  1490. this.popTitle = type == 'search' ? '搜索选择' : type == 'tag' ? '标签筛选' : '';
  1491. this.typeIndex = this.queryParam.typeIndex;
  1492. this.showPop = true;
  1493. if (type == 'tag') {
  1494. this.getcompanyTag();
  1495. }
  1496. },
  1497. closePop() {
  1498. this.showPop = false;
  1499. },
  1500. resetPop(i) {
  1501. this.idx = [];
  1502. this.tagkeywords = '';
  1503. this.tagpageNum = 1;
  1504. this.showCompanytag = [];
  1505. this.companytag.forEach((tag) => {
  1506. tag.checked = false; // 将所有标签的show属性重置为true
  1507. });
  1508. this.showPop = false;
  1509. this.$nextTick(() => {
  1510. this.getcompanyTag();
  1511. this.getfsuserListdata();
  1512. });
  1513. },
  1514. closeCalendar() {
  1515. this.showCalendar = false;
  1516. },
  1517. confirmCalendar(e) {
  1518. this.showCalendar = false;
  1519. this.queryParam.startTime = e.range.after;
  1520. this.queryParam.endTime = e.range.before;
  1521. this.endTime = e.range.before + ' 23:59:59';
  1522. this.startTime = e.range.after + ' 00:00:00';
  1523. console.log(e);
  1524. // this.getCount()
  1525. },
  1526. bindTypeChange(i) {
  1527. this.typeIndex = i;
  1528. },
  1529. confirmPop() {
  1530. this.queryParam.typeIndex = this.typeIndex;
  1531. this.showPop = false;
  1532. this.showCompanytag = this.companytag.filter((item) => item.checked);
  1533. this.idx = this.showCompanytag.map((v) => v.tagId);
  1534. //filtter(过滤) 筛选所有checked==true的 然后map返回每一项的id
  1535. if (this.idx.length == 0) {
  1536. this.showCompanytag = this.companytag;
  1537. }
  1538. this.$nextTick(() => {
  1539. this.getfsuserListdata('refresh');
  1540. });
  1541. },
  1542. chooseTag(i) {
  1543. this.companytag[i].checked = !this.companytag[i].checked;
  1544. },
  1545. choosechangeTag(i) {
  1546. this.changetag[i].checked = !this.changetag[i].checked;
  1547. },
  1548. vipInvite() {
  1549. if (!this.vipInviteshow) {
  1550. // this.invitePop = true
  1551. // this.getlink('preload')
  1552. // this.getjssdklist()
  1553. this.getprojectlists();
  1554. // this.invitePop = true
  1555. this.projectId = '';
  1556. this.projectbox = true;
  1557. this.sharetaglist = null;
  1558. } else {
  1559. this.vipInviteshow = false;
  1560. }
  1561. },
  1562. showinimg() {
  1563. this.vipInviteshow = true;
  1564. },
  1565. async copyLink() {
  1566. let params = {
  1567. companyId: this.user.companyId,
  1568. companyUserId: this.user.userId,
  1569. tagids: this.sharetaglist || null,
  1570. projectCode: "ZKZH",
  1571. projectId: this.projectId
  1572. }
  1573. let data = {
  1574. companyId: this.user.companyId,
  1575. linkStr: "/pages_course/becomeVIP?becomeVip=" + JSON.stringify(params)
  1576. }
  1577. const res = await getGotoAppLink(data)
  1578. if (res.code == 200) {
  1579. this.invitePop = false
  1580. uni.setClipboardData({
  1581. data: String(res.data),
  1582. success: () => {
  1583. uni.showToast({
  1584. title: '复制成功',
  1585. icon: 'none',
  1586. duration: 2000
  1587. });
  1588. setTimeout(() => {
  1589. this.invitePop = false;
  1590. }, 200);
  1591. }
  1592. });
  1593. } else {
  1594. uni.showToast({
  1595. title: res.msg,
  1596. icon: "none"
  1597. })
  1598. }
  1599. // this.setTimeShow = true;
  1600. },
  1601. confirmTime() {
  1602. this.setTimeShow = false;
  1603. this.showShare = false;
  1604. console.log(this.showInvite);
  1605. this.getshareLink();
  1606. },
  1607. getshareimg() {
  1608. //生成海报
  1609. this.getlink();
  1610. this.codeLink = '';
  1611. uni.showLoading({
  1612. title: '正在生成中...'
  1613. });
  1614. const url = window.location.href.split('#')[0];
  1615. const param = {
  1616. companyId: this.user.companyId,
  1617. companyUserId: this.user.userId,
  1618. realLink: url + '#/pages/user/users/becomeVIP' + '?companyId=' + this.user.companyId +
  1619. '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist,
  1620. tagIds: this.sharetaglist
  1621. };
  1622. becomeVipuserImg(param).then((res) => {
  1623. if (res.code == 200) {
  1624. this.codeLink = res.posterImage;
  1625. console.log(res);
  1626. } else {
  1627. uni.showToast({
  1628. title: res.msg,
  1629. icon: 'none',
  1630. duration: 2000
  1631. });
  1632. }
  1633. });
  1634. },
  1635. getlink(type) {
  1636. //生成链接
  1637. const param = {
  1638. companyId: this.user.companyId,
  1639. companyUserId: this.user.userId,
  1640. tagids: this.sharetaglist,
  1641. limitTime: this.time
  1642. };
  1643. const url = window.location.href.split('#')[0];
  1644. // console.log(url)
  1645. this.copyLinks = url + '#/pages/user/users/becomeVIP' + '?companyId=' + this.user.companyId +
  1646. '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist;
  1647. },
  1648. getshareLink() {
  1649. //生成链接
  1650. this.copyLinks = [];
  1651. const param = {
  1652. code: '',
  1653. companyId: this.user.companyId,
  1654. companyUserId: this.user.userId,
  1655. tagids: this.sharetaglist,
  1656. limitTime: this.time
  1657. };
  1658. const url = window.location.href.split('#')[0];
  1659. console.log(url);
  1660. this.copyLinks = url + '#/pages/user/users/becomeVIP' + '?companyId=' + this.user.companyId +
  1661. '&companyUserId=' + this.user.userId + '&tagids=' + this.sharetaglist;
  1662. console.log(this.copyLinks);
  1663. setTimeout(() => {
  1664. uni.setClipboardData({
  1665. data: String(this.copyLinks),
  1666. success: () => {
  1667. uni.showToast({
  1668. title: '复制成功',
  1669. icon: 'none',
  1670. duration: 2000
  1671. });
  1672. setTimeout(() => {
  1673. this.invitePop = false;
  1674. }, 200);
  1675. }
  1676. });
  1677. }, 100);
  1678. },
  1679. inviteReg() {
  1680. uni.share({
  1681. provider: "weixin",
  1682. scene: "WXSceneSession",
  1683. type: 5,
  1684. imageUrl: "@/static/bindComUser.png", //分享封面图片
  1685. title: "邀请注册", // 分享标题
  1686. //summary: this.shareItem.summary, // 分享内容文字
  1687. miniProgram: {
  1688. id: getApp().globalData.miniprogamId,
  1689. path: '/pages/user/users/becomeVIP' + '?companyId=' + this.user.companyId +
  1690. '&projectId=' +
  1691. this.projectId + '&companyUserId=' + this.user.userId + '&tagids=' + this
  1692. .sharetaglist,
  1693. type: 0, //0-正式版; 1-测试版; 2-体验版。 默认值为0。
  1694. webUrl: "http://uniapp.dcloud.io"
  1695. },
  1696. success: function(res) {
  1697. uni.showToast({
  1698. title: "分享成功",
  1699. icon: 'none'
  1700. });
  1701. },
  1702. fail: function(err) {
  1703. },
  1704. complete: (e) => {
  1705. console.log("WXSceneSession", e)
  1706. }
  1707. });
  1708. },
  1709. mescrollInit(mescroll) {
  1710. this.mescroll = mescroll;
  1711. },
  1712. /*下拉刷新的回调 */
  1713. downCallback(mescroll) {
  1714. mescroll.resetUpScroll();
  1715. },
  1716. upCallback(page) {
  1717. //联网加载数据
  1718. var that = this;
  1719. var data = {
  1720. courseId: this.courseId,
  1721. status: '',
  1722. pageNum: page.num,
  1723. pageSize: page.size
  1724. };
  1725. uni.showLoading({
  1726. title: '加载中...'
  1727. });
  1728. }
  1729. }
  1730. };
  1731. </script>
  1732. <style lang="scss" scoped>
  1733. .probg {
  1734. color: #666;
  1735. }
  1736. .probgsel {
  1737. background-color: #1677ff;
  1738. color: #fff;
  1739. border: none;
  1740. }
  1741. .quedingpro {
  1742. background-color: #1677ff;
  1743. color: #fff;
  1744. border-radius: 80rpx;
  1745. height: 80rpx;
  1746. line-height: 80rpx;
  1747. width: 60%;
  1748. margin: 0 auto;
  1749. margin-top: 40rpx;
  1750. text-align: center;
  1751. }
  1752. .card-share {
  1753. position: relative;
  1754. }
  1755. .share {
  1756. display: inline-block;
  1757. position: absolute;
  1758. bottom: 0;
  1759. left: 0;
  1760. width: 100%;
  1761. height: 50%;
  1762. opacity: 0;
  1763. }
  1764. .imgshe {
  1765. display: flex;
  1766. flex-direction: row-reverse;
  1767. }
  1768. .point-box {
  1769. height: 100%;
  1770. width: 100%;
  1771. .xu-box {
  1772. border: #f5f5f5 4rpx dashed;
  1773. padding: 20rpx 20rpx;
  1774. }
  1775. }
  1776. .codeimg {
  1777. position: absolute;
  1778. z-index: 9999;
  1779. left: 40rpx;
  1780. top: 40rpx;
  1781. }
  1782. #codeurl {
  1783. position: relative;
  1784. }
  1785. .checked-bg {
  1786. border: 1px solid #1677ff !important;
  1787. color: #1677ff !important;
  1788. background-color: #e7f1fe !important;
  1789. }
  1790. .changetagbtn {
  1791. width: 45%;
  1792. height: 80rpx;
  1793. border-radius: 50rpx;
  1794. text-align: center;
  1795. line-height: 80rpx;
  1796. }
  1797. ::v-deep {
  1798. .foot-select {
  1799. width: 100%;
  1800. padding: 20rpx 20rpx;
  1801. padding-bottom: 60rpx;
  1802. z-index: 10000 !important;
  1803. position: fixed;
  1804. bottom: 0;
  1805. margin-left: -24rpx !important;
  1806. }
  1807. }
  1808. ::v-deep {
  1809. .model .u-fade-enter-active {
  1810. z-index: 10075 !important;
  1811. }
  1812. }
  1813. ::v-deep {
  1814. .uni-calendar__mask {
  1815. z-index: 999 !important;
  1816. }
  1817. .uni-calendar__content {
  1818. z-index: 999 !important;
  1819. }
  1820. }
  1821. .container {
  1822. font-family: PingFang SC, PingFang SC;
  1823. font-weight: 400;
  1824. font-size: 14px;
  1825. color: #222222;
  1826. height: 100%;
  1827. overflow: hidden;
  1828. }
  1829. .boxnav {
  1830. flex-wrap: wrap;
  1831. padding: 0 0 0 10px;
  1832. &-item {
  1833. width: 50%;
  1834. overflow: hidden;
  1835. }
  1836. &-item-info {
  1837. border: 1px solid #f5f5f5;
  1838. text-align: center;
  1839. color: #222;
  1840. background-color: #f5f5f5;
  1841. border-radius: 3px;
  1842. padding: 5px;
  1843. margin: 0 10px 10px 0;
  1844. }
  1845. &-active {
  1846. border: 1px solid #1677ff !important;
  1847. color: #1677ff !important;
  1848. background-color: #e7f1fe !important;
  1849. }
  1850. }
  1851. .calendar-day {
  1852. font-family: PingFang SC, PingFang SC;
  1853. font-weight: 400;
  1854. font-size: 12px;
  1855. color: #999;
  1856. flex: 1;
  1857. min-height: 30px;
  1858. background-color: #f5f5f5;
  1859. border-radius: 4px;
  1860. margin: 0 10px 10px 0;
  1861. }
  1862. .setTimebox {
  1863. font-family: PingFang SC, PingFang SC;
  1864. font-weight: 400;
  1865. font-size: 14px;
  1866. width: fit-content;
  1867. height: fit-content;
  1868. }
  1869. .timetip {
  1870. font-family: PingFang SC, PingFang SC;
  1871. font-weight: 400;
  1872. font-size: 14px;
  1873. color: #2979ff;
  1874. text-align: center;
  1875. margin-bottom: 5px;
  1876. }
  1877. .popbox {
  1878. background-color: #fff;
  1879. border-radius: 12px;
  1880. font-family: PingFang SC, PingFang SC;
  1881. font-weight: 400;
  1882. font-size: 14px;
  1883. color: #333;
  1884. padding-bottom: 120rpx;
  1885. &-head {
  1886. padding: 15px;
  1887. font-weight: bold;
  1888. font-size: 15px;
  1889. text-align: center;
  1890. position: relative;
  1891. }
  1892. .close-circle {
  1893. position: absolute;
  1894. right: 10px;
  1895. top: 50%;
  1896. transform: translateY(-50%);
  1897. }
  1898. &-body {
  1899. padding: 10px 10px;
  1900. }
  1901. .radiobox {
  1902. &-item {
  1903. padding: 10px 0;
  1904. border-bottom: 1px solid #f5f5f5;
  1905. &:last-child {
  1906. border-bottom: none;
  1907. }
  1908. }
  1909. }
  1910. &-footer {
  1911. padding: 15px 0;
  1912. }
  1913. &-footer-btn {
  1914. flex: 1;
  1915. height: 44px;
  1916. line-height: 44px;
  1917. margin: 0 10px;
  1918. border-radius: 50px;
  1919. border: none;
  1920. font-family: PingFang SC, PingFang SC;
  1921. font-weight: 400;
  1922. font-size: 14px;
  1923. color: #333;
  1924. &::after {
  1925. border: none;
  1926. }
  1927. }
  1928. .con-btn {
  1929. background-color: #1677ff;
  1930. color: #fff;
  1931. }
  1932. .choosetitle {
  1933. font-family: PingFang SC, PingFang SC;
  1934. font-weight: 400;
  1935. font-size: 15px;
  1936. color: #333;
  1937. }
  1938. .invitetip {
  1939. margin-top: 10px;
  1940. background-color: #ebf5fb;
  1941. color: #1677ff;
  1942. padding: 5px 10px;
  1943. border-radius: 5px;
  1944. }
  1945. .sharePop-item {
  1946. padding: 0 10px;
  1947. box-sizing: border-box;
  1948. font-family: PingFang SC, PingFang SC;
  1949. font-weight: 400;
  1950. font-size: 14px;
  1951. display: inline-flex !important;
  1952. width: calc(33%);
  1953. image {
  1954. height: 48px;
  1955. width: 48px;
  1956. margin-bottom: 10px;
  1957. }
  1958. }
  1959. }
  1960. .headbox {
  1961. background-color: #fff;
  1962. .subsection {
  1963. height: 45px;
  1964. padding: 4px;
  1965. }
  1966. .participate-order {
  1967. font-size: 12px;
  1968. image {
  1969. width: 15px;
  1970. height: 15px;
  1971. }
  1972. }
  1973. }
  1974. .tag-active {
  1975. background-color: #ffeceb !important;
  1976. color: #f93e3e !important;
  1977. border: 1px solid #f93e3e !important;
  1978. }
  1979. .tagbox {
  1980. padding-top: 10rpx;
  1981. font-size: 12px;
  1982. color: #1677ff;
  1983. &-list {
  1984. margin: 0 0 -6px 6px;
  1985. flex-wrap: wrap;
  1986. }
  1987. &-item {
  1988. height: 26px;
  1989. padding: 0 8px;
  1990. margin: 0 6px 6px 0;
  1991. border-radius: 4px;
  1992. background-color: #f5f5f5;
  1993. color: #999;
  1994. border: 1px solid #f5f5f5;
  1995. box-sizing: border-box;
  1996. font-size: 12px;
  1997. }
  1998. }
  1999. .invite-member {
  2000. height: 55px;
  2001. width: 50px;
  2002. position: fixed;
  2003. bottom: 110px;
  2004. right: 10px;
  2005. cursor: pointer;
  2006. .intimg {
  2007. width: 50px;
  2008. height: 55px;
  2009. }
  2010. }
  2011. .invite-members {
  2012. right: -68rpx;
  2013. }
  2014. .falseimg {
  2015. position: absolute;
  2016. width: 30rpx;
  2017. height: 30rpx;
  2018. top: 0rpx;
  2019. right: -8rpx;
  2020. }
  2021. .userlist {
  2022. padding: 24rpx;
  2023. }
  2024. </style>