index.php 85 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-export-dialog');
  4. ComponentHelper::loadComponentView('com-image');
  5. ?>
  6. <div id="app" v-cloak>
  7. <el-card shadow="never" style="border:0;min-width: 1000px;" body-style="background-color: #f3f3f3;padding: 10px 0 0;">
  8. <div slot="header">
  9. <div class="all_flex" style="margin-bottom: 30px;align-items: flex-end;">
  10. <div class="top_title">会员管理</div>
  11. <div style="font-size:12px;color: #919191;flex:1;"></div>
  12. <div>
  13. <el-button class="all_button" type="primary" size="small" @click="addUser">添加会员</el-button>
  14. <!-- <el-button class="all_button" type="primary" size="small" @click="$navigate({r:'mall/user/relation-tree'})" style=" margin-left: 0px;" >关系树状图</el-button>-->
  15. <el-button class="all_button" type="primary" size="small" @click="importUser" style=" margin-left: 0px;" >批量导入</el-button>
  16. </div>
  17. &nbsp;
  18. <com-export-dialog
  19. style="float: right;margin-top: -5px"
  20. :field_list='exportList'
  21. :action_url='export_url'
  22. :params="searchInfo">
  23. </com-export-dialog>
  24. </div>
  25. <!--全部会员,新增会员,活跃会员,购买未支付,流水会员筛选-->
  26. <!-- <div class="stat_details">
  27. <div class="order_module" v-for="(item,index) in orderTotalArr" :key="item.type" :class="{se_module: searchInfo.user_type == index}" @click="seUserType(index)">
  28. <div class="oirder_modul_title">
  29. <div class="text">{{item.name}}</div>
  30. <el-tooltip class="item" effect="dark" v-if="item.prompt" :content="item.prompt" placement="bottom">
  31. <el-image style="width: 16px; height: 16px" src="resources/img/stat/where.png"></el-image>
  32. </el-tooltip>
  33. </div>
  34. </div>
  35. </div> -->
  36. <el-form ref="form" style="margin-bottom: 10px;" :model="searchInfo" label-width="96px" size="mini">
  37. <el-row :gutter="24">
  38. <el-col :span="5" style="padding-left: 0;" class="top_form">
  39. <el-form-item label="会员ID">
  40. <el-input v-model="searchInfo.user_id" placeholder="请输入会员ID" clearable></el-input>
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="6">
  44. <el-form-item label="关键字">
  45. <el-input v-model="searchInfo.nickname_or_mobile" placeholder="会员昵称/手机号" clearable></el-input>
  46. </el-form-item>
  47. </el-col>
  48. <el-col :span="6">
  49. <el-form-item label="浏览路径ID">
  50. <el-input v-model="searchInfo.parent_id" placeholder="请输入浏览路径ID" clearable></el-input>
  51. </el-form-item>
  52. </el-col>
  53. <el-col :span="6" style="padding-right: 0;">
  54. <el-form-item label="来源渠道">
  55. <el-select v-model="searchInfo.source" placeholder="请选择来源渠道">
  56. <!-- <el-option label="全部" value=""></el-option> -->
  57. <el-option v-for="(item,index) in channelArr" :label="item" :value="index" :key="index"></el-option>
  58. </el-select>
  59. </el-form-item>
  60. </el-col>
  61. </el-row>
  62. <el-row :gutter="24">
  63. <!-- <el-col :span="5" style="padding-left: 0;" class="top_form">-->
  64. <!-- <el-form-item label="智能标签">-->
  65. <!-- <el-select v-model="searchInfo.tag_id" placeholder="请选择智能标签">-->
  66. <!-- <el-option label="全部" value=""></el-option>-->
  67. <!-- <el-option v-for="item in userTagList" :label="item.name" :value="item.tag_id" :key="item.tag_id"></el-option>-->
  68. <!-- </el-select>-->
  69. <!-- </el-form-item>-->
  70. <!-- </el-col>-->
  71. <el-col :span="5" style="padding-left: 0;" class="top_form">
  72. <el-form-item label="注册时间">
  73. <el-date-picker
  74. v-model="addTime"
  75. type="datetimerange"
  76. range-separator="至"
  77. start-placeholder="开始日期"
  78. end-placeholder="结束日期"
  79. value-format="yyyy-MM-dd HH:mm:ss"
  80. @change="addTimeChange"
  81. :default-time="['00:00:00', '23:59:59']"
  82. >
  83. </el-date-picker>
  84. </el-form-item>
  85. </el-col>
  86. <!-- <el-col :span="6">
  87. <el-form-item label="上次消费时间">
  88. <el-date-picker
  89. v-model="lastSpendTime"
  90. type="datetimerange"
  91. range-separator="至"
  92. start-placeholder="开始日期"
  93. end-placeholder="结束日期"
  94. value-format="yyyy-MM-dd HH:mm:ss"
  95. @change="lastSpendTimeChange"
  96. :default-time="['00:00:00', '23:59:59']"
  97. >
  98. </el-date-picker>
  99. </el-form-item>
  100. </el-col> -->
  101. <el-col :span="6" style="padding-right: 0;">
  102. <el-form-item label="余额" class="value_input">
  103. <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.balance_start">
  104. <template slot="append">元</template>
  105. </el-input>
  106. <span style="margin: 0 5px;">-</span>
  107. <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.balance_end">
  108. <template slot="append">元</template>
  109. </el-input>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="6" style="padding-right: 0;">
  113. <el-form-item label="销售利润" class="value_input">
  114. <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.commission_start">
  115. <template slot="append">元</template>
  116. </el-input>
  117. <span style="margin: 0 5px;">-</span>
  118. <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.commission_end">
  119. <template slot="append">元</template>
  120. </el-input>
  121. </el-form-item>
  122. </el-col>
  123. <el-col :span="6" style="padding-right: 0;" >
  124. <el-form-item label="积分" class="value_input">
  125. <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.score_start">
  126. <template slot="append">分</template>
  127. </el-input>
  128. <span style="margin: 0 5px;">-</span>
  129. <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.score_end">
  130. <template slot="append">分</template>
  131. </el-input>
  132. </el-form-item>
  133. </el-col>
  134. </el-row>
  135. <el-row :gutter="24">
  136. <el-col :span="6" style="padding-left: 0;" class="top_form">
  137. <el-form-item label="智能标签">
  138. <el-select
  139. v-model="searchInfo.lableValue"
  140. filterable
  141. default-first-option
  142. placeholder="请选择智能标签"
  143. >
  144. <el-option
  145. v-for="item in userTagList"
  146. :key="item.tag_id"
  147. :label="item.name"
  148. :value="item.tag_id">
  149. </el-option>
  150. </el-select>
  151. </el-form-item>
  152. </el-col>
  153. <el-col :span="4" style="padding-left: 0;" class="top_form">
  154. <el-form-item label="会员标签">
  155. <el-select
  156. v-model="searchInfo.memberLabelIds"
  157. multiple
  158. filterable
  159. default-first-option
  160. placeholder="请选择会员标签"
  161. >
  162. <el-option
  163. v-for="item in memberLabelList"
  164. :label="item.name"
  165. :value="item.cate_id +'_' + item.id">
  166. </el-option>
  167. </el-select>
  168. </el-form-item>
  169. </el-col>
  170. <el-col :span="8" style="padding-right: 0;">
  171. <el-form-item label="会员等级">
  172. <el-select v-model="searchInfo.level" placeholder="请选择会员等级" clearable>
  173. <!-- <el-option label="全部" value=""></el-option> -->
  174. <el-option v-for="(item,index) in levels" :label="item" :value="index" :key="index"></el-option>
  175. </el-select>
  176. <span style="margin-left: 10px">会员数量: {{user_count}}</span>
  177. </el-form-item>
  178. </el-col>
  179. <el-col :span="6" style="padding-right: 0;">
  180. <el-form-item label="黑名单">
  181. <el-select v-model="searchInfo.black" placeholder="是否黑名单" clearable>
  182. <el-option label="是" value="1"></el-option>
  183. <el-option label="否" value="2"></el-option>
  184. </el-select>
  185. <!-- <span style="margin-left: 10px">会员数量: {{user_count}}</span> -->
  186. </el-form-item>
  187. </el-col>
  188. </el-row>
  189. <el-row :gutter="24">
  190. <el-col :span="5" style="padding-left: 0;">
  191. <el-form-item label="浏览路径手机号">
  192. <el-input v-model="searchInfo.p_mobile" placeholder="浏览路径手机号" clearable></el-input>
  193. </el-form-item>
  194. </el-col>
  195. <!-- <el-col :span="5" style="padding-left: 0;" class="top_form">-->
  196. <!-- <el-form-item label="积分" class="value_input">-->
  197. <!-- <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.score_start">-->
  198. <!-- <template slot="append">分</template>-->
  199. <!-- </el-input>-->
  200. <!-- <span style="margin: 0 5px;">-</span>-->
  201. <!-- <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.score_end">-->
  202. <!-- <template slot="append">分</template>-->
  203. <!-- </el-input>-->
  204. <!-- </el-form-item>-->
  205. <!-- </el-col>-->
  206. <!-- <el-col :span="6">-->
  207. <!-- <el-form-item label="累计消费金额" class="value_input">-->
  208. <!-- <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.price_total_start">-->
  209. <!-- <template slot="append">元</template>-->
  210. <!-- </el-input>-->
  211. <!-- <span style="margin: 0 5px;">-</span>-->
  212. <!-- <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.price_total_end">-->
  213. <!-- <template slot="append">元</template>-->
  214. <!-- </el-input>-->
  215. <!-- </el-form-item>-->
  216. <!-- </el-col>-->
  217. <!-- <el-col :span="6">-->
  218. <!-- <el-form-item label="购买次数" class="value_input">-->
  219. <!-- <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.order_total_start">-->
  220. <!-- <template slot="append">次</template>-->
  221. <!-- </el-input>-->
  222. <!-- <span style="margin: 0 5px;">-</span>-->
  223. <!-- <el-input @focus="focusInputClass" @blur="blurInputClass" v-model="searchInfo.order_total_end">-->
  224. <!-- <template slot="append">次</template>-->
  225. <!-- </el-input>-->
  226. <!-- </el-form-item>-->
  227. <!-- </el-col>-->
  228. </el-row>
  229. <div>
  230. <el-button @click="search" class="search_button all_button" size="small" type="primary">搜索</el-button>
  231. <el-button type="danger" size="small" @click="resetSearch" v-if="show_clear_search_btn">清除条件</el-button>
  232. </div>
  233. </el-form>
  234. <el-table class="table-info" ref="multipleTable" @selection-change="scFormTab" @sort-change="sortChang" stripe :data="form" highlight-current-row style="width: 100%" v-loading="listLoading">
  235. <el-table-column type="selection" width="50"></el-table-column>
  236. <el-table-column prop="user_id" label="会员ID" width="100" ></el-table-column>
  237. <el-table-column label="会员" width="200">
  238. <template slot-scope="scope">
  239. <div class="table-info-img-text">
  240. <el-image class="table-info-img circle" :src="scope.row.avatar_url">
  241. <div slot="error" class="image-slot">
  242. <com-image src="/resources/img/common/default-avatar.png"></com-image>
  243. </div>
  244. </el-image>
  245. <div class="no_user" style="width: 50px; bottom:20px;" v-if="scope.row.status == 0">黑名单</div>
  246. <div class="table-info-text">
  247. <div style="color:#000;">{{scope.row.nickname}}</div>
  248. <div style="font-size: 12px;">渠道:{{scope.row.platform}}</div>
  249. </div>
  250. </div>
  251. </template>
  252. </el-table-column>
  253. <el-table-column prop="mobile" label="手机号" width="120" align="center"></el-table-column>
  254. <el-table-column prop="level_name" label="会员等级" width="120" align="center"></el-table-column>
  255. <el-table-column label="浏览路径" width="200">
  256. <template slot-scope="scope">
  257. <div class="table-info-img-text" v-if="scope.row.parent">
  258. <el-image class="table-info-img circle" :src="scope.row.parent.avatar_url">
  259. <div slot="error" class="image-slot">
  260. <el-image class="table-info-img" src="/resources/img/common/default-avatar.png"></el-image>
  261. </div>
  262. </el-image>
  263. <div class="table-info-text">
  264. <div>{{scope.row.parent.nickname}}</div>
  265. <div v-if="scope.row.parent.id > 0">ID:{{scope.row.parent.id}}</div>
  266. <div v-else>--</div>
  267. </div>
  268. </div>
  269. </template>
  270. </el-table-column>
  271. <!-- <el-table-column prop="pay_order_price_total" sortable="custom" label="累计消费金额" width="150" align="center"></el-table-column>-->
  272. <!-- <el-table-column prop="average_price" label="平均客单价" width="130" align="center"></el-table-column>-->
  273. <el-table-column prop="last_pay_at" label="上次消费时间" width="160px" align="center">
  274. <template slot-scope="scope">
  275. <div>{{scope.row.last_pay_at}}</div>
  276. </template>
  277. </el-table-column>
  278. <el-table-column label="余额/销售利润" width="180px" >
  279. <template slot-scope="scope">
  280. <div class="title_bu" @click="typeGoTo(1,scope.row.user_id)">余额:{{scope.row.balance ? scope.row.balance : 0}}</div>
  281. <div class="title_bu" @click="typeGoTo(2,scope.row.user_id)">销售利润:{{scope.row.income ? scope.row.income : 0}}</div>
  282. </template>
  283. </el-table-column>
  284. <el-table-column label="积分" width="80px" align="center">
  285. <template slot-scope="scope">
  286. <div class="title_bu" @click="typeGoTo(3,scope.row.user_id)">{{scope.row.score}}</div>
  287. </template>
  288. </el-table-column>
  289. <el-table-column prop="score" label="注册时间" width="180px" align="center">
  290. <template slot-scope="scope">
  291. {{scope.row.created_at}}
  292. </template>
  293. </el-table-column>
  294. <el-table-column prop="score" label="推广资格" width="80px" align="center">
  295. <template slot-scope="scope">
  296. <span v-if="scope.row.is_inviter==1">有</span>
  297. <span v-if="scope.row.is_inviter==0">无</span>
  298. </template>
  299. </el-table-column>
  300. <el-table-column prop="score" label="会员到期时间" width="150px" align="center">
  301. <template slot-scope="scope">
  302. {{ scope.row.expired_at_text }}
  303. </template>
  304. </el-table-column>
  305. <template v-if="isFreezeCommission">
  306. <el-table-column prop="freeze_scale" label="冻结比例" min-width="150px" align="center">
  307. <template slot-scope="scope">
  308. <div style="width:100%">
  309. <div v-if="editRowId == scope.row.id && editColumnId == scope.column.id">
  310. <el-input size="small" style="width:65%;" type="number" min="0" v-model="scope.row.userFreezeCommission.freeze_scale" placeholder="请输入冻结上限"></el-input>
  311. <el-button class="change-quit" type="text" style="color: #F56C6C;padding: 0 2px;margin:0;" icon="el-icon-error" circle @click="handleCancelEdit()"></el-button>
  312. <el-button class="change-success" type="text" style="margin-left: 0;color: #67C23A;padding: 0 2px;margin:0;" icon="el-icon-success" circle @click="submitRowChange(scope.row)">
  313. </div>
  314. <div v-else>
  315. <span>{{scope.row.userFreezeCommission.freeze_scale}}%</span>
  316. <el-button class="edit-sort" type="text" @click="handleEditRow(scope.row, scope)">
  317. <img src="resources/img/mall/order/edit.png" alt="">
  318. </el-button>
  319. </div>
  320. </div>
  321. </template>
  322. </el-table-column>
  323. <el-table-column prop="freeze_cap" label="冻结上限" min-width="150px" align="center">
  324. <template slot-scope="scope">
  325. <div style="width:100%">
  326. <div v-if="editRowId == scope.row.id && editColumnId == scope.column.id">
  327. <el-input size="small" style="width:65%;" type="number" min="0" v-model="scope.row.userFreezeCommission.freeze_cap" placeholder="请输入冻结上限"></el-input>
  328. <el-button class="change-quit" type="text" style="color: #F56C6C;padding: 0 2px;margin:0;" icon="el-icon-error" circle @click="handleCancelEdit()"></el-button>
  329. <el-button class="change-success" type="text" style="margin-left: 0;color: #67C23A;padding: 0 2px;margin:0;" icon="el-icon-success" circle @click="submitRowChange(scope.row)">
  330. </div>
  331. <div v-else>
  332. <span>{{scope.row.userFreezeCommission.freeze_cap}}</span>
  333. <el-button class="edit-sort" type="text" @click="handleEditRow(scope.row, scope)">
  334. <img src="resources/img/mall/order/edit.png" alt="">
  335. </el-button>
  336. </div>
  337. </div>
  338. </template>
  339. </el-table-column>
  340. <el-table-column prop="score" label="冻结详情" min-width="160px" align="center">
  341. <template slot-scope="scope">
  342. <div style="display:flex;justify-content:center;">
  343. <div style="min-width:100%;">
  344. <div class="order-status-container">
  345. <span style="display:inline-block;min-width:60px;">已冻结:</span>
  346. <span style="display:inline-block;min-width:100px;">
  347. <span>{{scope.row.userFreezeCommission.freeze_amount}}</span>
  348. </span>
  349. </div>
  350. <div class="order-status-container">
  351. <span style="display:inline-block;min-width:60px;">未冻结:</span>
  352. <span style="display:inline-block;min-width:100px;">
  353. <span>{{scope.row.userFreezeCommission.not_freeze_amount}}</span>
  354. </span>
  355. </div>
  356. </div>
  357. </div>
  358. </template>
  359. </el-table-column>
  360. </template>
  361. <el-table-column label="操作" min-width="170px" align="center" fixed="right">
  362. <template slot-scope="scope">
  363. <el-button type="text" @click="navUserDetail(scope.row.user_id)" class="all_text">查看</el-button>
  364. <el-popover width="80" trigger="click">
  365. <el-button v-if="install_addons.indexOf('TeamData') != -1" class="all_text" type="text" @click="navUserInfo(scope.row.user_id)">我的客户</el-button>
  366. <el-button class="all_text" type="text" @click="handleIntegral(scope.row)">积分充值</el-button>
  367. <el-button class="all_text" type="text" @click="handleBalance(scope.row)">余额充值</el-button>
  368. <el-button class="all_text" type="text" @click="handleCommission(scope.row)">销售利润充值</el-button>
  369. <el-button v-if="redpack_is_install" class="all_text" type="text" @click="handleRedpack(scope.row)">红包充值</el-button>
  370. <!-- <el-button class="all_text" type="text" @click="handleCurrency(scope.row)">货币充值</el-button>-->
  371. <el-button class="all_text" type="text" @click="handlePassword(scope.row)">修改密码</el-button>
  372. <el-button class="all_text" type="text" @click="handleLable(scope.row)">加标签</el-button>
  373. <el-button class="all_text" type="text" @click="handleListOfNames(scope.row)">{{scope.row.status == 0?'加入白名单':'加入黑名单'}}</el-button>
  374. <template v-if="isFreezeCommission">
  375. <el-button class="all_text" type="text" @click="handleClearFreezeCommission(scope.row)">一键释放</el-button>
  376. </template>
  377. <el-button class="all_text" slot="reference" type="text" @click="addMore(scope.row.user_id)">更多</el-button>
  378. </el-popover>
  379. </template>
  380. </el-table-column>
  381. </el-table>
  382. <!-- 底部按钮操作 -->
  383. <div style="margin: 10px 20px 0;">
  384. <el-checkbox class="up_checkbox_color" style="margin-right: 10px;" v-model="checkedAll" @change="tabAll"><div :class="{all_text:checkedAll}">全选当前页</div></el-checkbox>
  385. <el-button class="bottom_but" plain @click="addLables" :disabled="selFormArr.length <= 0">加标签</el-button>
  386. <el-dropdown class="bottom_but" plain @command="addIntegral" :disabled="selFormArr.length <= 0">
  387. <span class="el-dropdown-link">
  388. 充值积分<i class="el-icon-arrow-down el-icon--right"></i>
  389. </span>
  390. <el-dropdown-menu slot="dropdown">
  391. <el-dropdown-item command="normal" :disabled="selFormArr.length <= 0">对选中的人充值积分</el-dropdown-item>
  392. <el-dropdown-item command="cel" :disabled="selFormArr.length <= 0">对选中的人清空积分</el-dropdown-item>
  393. </el-dropdown-menu>
  394. </el-dropdown>
  395. <el-dropdown class="bottom_but" plain @command="addBalance" :disabled="selFormArr.length <= 0">
  396. <span class="el-dropdown-link">
  397. 充值余额<i class="el-icon-arrow-down el-icon--right"></i>
  398. </span>
  399. <el-dropdown-menu slot="dropdown">
  400. <el-dropdown-item command="normal" :disabled="selFormArr.length <= 0">对选中的人充值余额</el-dropdown-item>
  401. <el-dropdown-item command="cel" :disabled="selFormArr.length <= 0">对选中的人清空余额</el-dropdown-item>
  402. </el-dropdown-menu>
  403. </el-dropdown>
  404. <el-dropdown class="bottom_but" plain @command="addCommission" :disabled="selFormArr.length <= 0">
  405. <span class="el-dropdown-link">
  406. 充值销售利润<i class="el-icon-arrow-down el-icon--right"></i>
  407. </span>
  408. <el-dropdown-menu slot="dropdown">
  409. <el-dropdown-item command="normal" :disabled="selFormArr.length <= 0">对选中的人充值销售利润</el-dropdown-item>
  410. <el-dropdown-item command="cel" :disabled="selFormArr.length <= 0">对选中的人清空销售利润</el-dropdown-item>
  411. </el-dropdown-menu>
  412. </el-dropdown>
  413. <el-button class="bottom_but" plain @click="blacklistList" :disabled="selFormArr.length <= 0">加入黑名单</el-button>
  414. <el-button class="bottom_but" plain @click="whitelistList" :disabled="selFormArr.length <= 0">加入白名单</el-button>
  415. <el-button class="bottom_but" plain @click="batchAddLevel" :disabled="selFormArr.length <= 0">批量修改等级</el-button>
  416. <div id="bottom_t" style="text-align: right;">
  417. <el-input v-model="page" placeholder="" size="small" @keyup.enter.native="pageSearch" style="width:50px; float: right; text-align: center; margin: 0;padding: 0;"></el-input>
  418. <el-pagination @current-change="pagination" background layout="prev, pager, next"
  419. :page-count="pageCount" :current-page="currentPage"></el-pagination>
  420. </div>
  421. </div>
  422. </div>
  423. <!-- 充值积分 -->
  424. <el-dialog :close-on-click-modal="false" :title="hintBoo?'提示':'充值积分'" :visible.sync="dialogIntegral" width="30%" @close="closePop">
  425. <div v-if="hintBoo">
  426. 选择清空积分,是否还要继续
  427. </div>
  428. <el-form v-else :model="integralForm" label-width="80px" :rules="integralFormRules" ref="integralForm">
  429. <el-form-item label="积分数量" prop="num" size="small">
  430. <el-input type="number" v-model="integralForm.num" placeholder="请输入要加/减的积分值(-1代表减1积分)"></el-input>
  431. </el-form-item>
  432. <el-form-item label="备注" prop="remark" size="small">
  433. <el-input v-model="integralForm.remark" placeholder="备注原因"></el-input>
  434. </el-form-item>
  435. </el-form>
  436. <div slot="footer" class="dialog-footer">
  437. <el-button @click="dialogIntegral = false">取消</el-button>
  438. <el-button :loading="btnLoading" type="primary" @click="integralSubmit">确定</el-button>
  439. </div>
  440. </el-dialog>
  441. <!-- 充值余额 -->
  442. <el-dialog :close-on-click-modal="false" :title="hintBoo?'提示':'充值余额'" :visible.sync="dialogBalance" width="30%" @close="closePop">
  443. <div v-if="hintBoo">
  444. 选择清空余额,是否还要继续
  445. </div>
  446. <el-form v-else :model="balanceForm" label-width="80px" :rules="balanceFormRules" ref="integralForm">
  447. <el-form-item label="余额数量" prop="price" size="small">
  448. <el-input type="number" v-model="balanceForm.price" placeholder="请输入要加/减的余额(-1代表减1余额)"></el-input>
  449. </el-form-item>
  450. <el-form-item label="备注" prop="remark" size="small">
  451. <el-input v-model="balanceForm.remark"></el-input>
  452. </el-form-item>
  453. </el-form>
  454. <div slot="footer" class="dialog-footer">
  455. <el-button @click="dialogBalance = false">取消</el-button>
  456. <el-button :loading="btnLoading" type="primary" @click="balanceSubmit">确定</el-button>
  457. </div>
  458. </el-dialog>
  459. <el-dialog :close-on-click-modal="false" :title="hintBoo?'提示':'充值销售利润'" :visible.sync="dialogCommission" width="30%" @close="closePop">
  460. <div v-if="hintBoo">
  461. 选择清空销售利润,是否还要继续
  462. </div>
  463. <el-form v-else :model="commissionForm" label-width="80px" :rules="commissionFormRules" ref="commissionForm">
  464. <el-form-item label="销售利润数量" prop="price" size="small">
  465. <el-input type="number" v-model="commissionForm.price" placeholder="请输入要加/减的余额(-1代表减1余额)"></el-input>
  466. </el-form-item>
  467. <el-form-item label="备注" prop="remark" size="small">
  468. <el-input v-model="commissionForm.remark"></el-input>
  469. </el-form-item>
  470. </el-form>
  471. <div slot="footer" class="dialog-footer">
  472. <el-button @click="dialogCommission = false">取消</el-button>
  473. <el-button :loading="btnLoading" type="primary" @click="commissionSubmit">确定</el-button>
  474. </div>
  475. </el-dialog>
  476. <!-- 红包充值 -->
  477. <el-dialog :close-on-click-modal="false" :title="hintBoo?'提示':'红包充值'" :visible.sync="dialogRedpack" width="30%" @close="closePop">
  478. <div v-if="hintBoo">
  479. 选择清空余额,是否还要继续
  480. </div>
  481. <el-form v-else :model="redpackForm" label-width="80px" :rules="redpackFormRules" ref="integralForm">
  482. <el-form-item label="红包金额" prop="redpack_money" size="small">
  483. <el-input onInput="value = toNumber(value, 2, true)" v-model="redpackForm.redpack_money" placeholder="请输入要加/减的余额(-1代表减1余额)"></el-input>
  484. </el-form-item>
  485. <el-form-item label="红包类型" prop="redpack_type" size="small">
  486. <el-radio-group v-model="redpackForm.redpack_type">
  487. <el-radio label="frozen_redpack">冻结红包</el-radio>
  488. <el-radio label="redpack">激活红包</el-radio>
  489. </el-radio-group>
  490. </el-form-item>
  491. <el-form-item label="备注" prop="remark" size="small">
  492. <el-input v-model="redpackForm.remark"></el-input>
  493. </el-form-item>
  494. </el-form>
  495. <div slot="footer" class="dialog-footer">
  496. <el-button @click="dialogBalance = false">取消</el-button>
  497. <el-button :loading="btnLoading" type="primary" @click="redpackSubmit">确定</el-button>
  498. </div>
  499. </el-dialog>
  500. <!-- 货币充值 -->
  501. <el-dialog :close-on-click-modal="false" title="货币充值" :visible.sync="currencyBoo" width="30%">
  502. <el-form :model="currencyForm" label-width="80px" :rules="currencyFormRules" ref="integralForm">
  503. <el-form-item label="货币类型" prop="code" size="small">
  504. <el-select v-model="currencyForm.code" placeholder="请选择货币类型">
  505. <!-- <el-option label="全部" value=""></el-option> -->
  506. <el-option v-for="(item,index) in currencyList" :label="item.name" :value="item.code" :key="index"></el-option>
  507. </el-select>
  508. </el-form-item>
  509. <el-form-item label="货币数量" prop="money" size="small">
  510. <el-input type="number" v-model="currencyForm.money" placeholder="请输入要加/减的货币值(-1代表减1货币)"></el-input>
  511. </el-form-item>
  512. <el-form-item label="备注" prop="desc" size="small">
  513. <el-input v-model="currencyForm.desc"></el-input>
  514. </el-form-item>
  515. </el-form>
  516. <div slot="footer" class="dialog-footer">
  517. <el-button @click="currencyBoo = false">取消</el-button>
  518. <el-button :loading="btnLoading" type="primary" @click="currencySubmit">确定</el-button>
  519. </div>
  520. </el-dialog>
  521. <!-- 加标签 -->
  522. <el-dialog :close-on-click-modal="false" title="加标签" :visible.sync="labelBoo" width="30%" @close="labelClose">
  523. <el-select
  524. v-model="lableValue"
  525. multiple
  526. filterable
  527. allow-create
  528. default-first-option
  529. placeholder="请选择智能标签"
  530. >
  531. <el-option
  532. v-for="item in userTagList"
  533. :key="item.tag_id"
  534. :label="item.name"
  535. :value="item.tag_id">
  536. </el-option>
  537. </el-select>
  538. <div slot="footer" class="dialog-footer">
  539. <el-button @click="labelBoo = false">取消</el-button>
  540. <el-button :loading="btnLoading" type="primary" @click="labelSubmit">确定</el-button>
  541. </div>
  542. </el-dialog>
  543. <!-- 加入黑白名单 -->
  544. <el-dialog :close-on-click-modal="false" title="提示" :visible.sync="listOfNamesBoo" width="30%">
  545. <div>
  546. {{this.balanceForm.status == 1?'您确认加入黑名单吗':'您确认加入白名单吗'}}
  547. </div>
  548. <div style="line-height: 30px;color: #FA6565;" v-if="this.balanceForm.is_blacklist == 0">
  549. 拉黑后,该账号将无法访问商城
  550. </div>
  551. <div slot="footer" class="dialog-footer">
  552. <el-button @click="listOfNamesBoo = false">取消</el-button>
  553. <el-button :loading="btnLoading" type="primary" @click="listOfNamesBooSubmit">确定</el-button>
  554. </div>
  555. </el-dialog>
  556. <!-- 修改密码 -->
  557. <el-dialog :close-on-click-modal="false" title="修改登录密码" :visible.sync="passwordBoo" width="30%" @close="closePop">
  558. <el-form :model="passwordForm" label-width="80px" :rules="passwordFormRules" ref="integralForm" @submit.native.prevent>
  559. <el-form-item label="新密码" prop="price" size="small">
  560. <el-input type="password" v-model="passwordForm.password" placeholder="请输入新密码" @keyup.enter.native="passwordSubmit"></el-input>
  561. </el-form-item>
  562. </el-form>
  563. <div slot="footer" class="dialog-footer">
  564. <el-button @click="passwordBoo = false">取消</el-button>
  565. <el-button :loading="btnLoading" type="primary" @click="passwordSubmit">确定</el-button>
  566. </div>
  567. </el-dialog>
  568. <!-- 批量修改等级 -->
  569. <el-dialog :close-on-click-modal="false" title="批量修改等级" :visible.sync="batchAddLevelBoo" width="30%" @close="batchAddLevelClose">
  570. <el-select
  571. v-model="batchAddLevelValue"
  572. placeholder="请选择用户等级"
  573. >
  574. <el-option
  575. v-for="(item,index) in levels"
  576. :key="index"
  577. :label="item"
  578. :value="index">
  579. </el-option>
  580. </el-select>
  581. <div slot="footer" class="dialog-footer">
  582. <el-button @click="batchAddLevelBoo = false">取消</el-button>
  583. <el-button :loading="btnLoading" type="primary" @click="batchAddLevelSubmit">确定</el-button>
  584. </div>
  585. </el-dialog>
  586. </el-card>
  587. </div>
  588. <script>
  589. const app = new Vue({
  590. el: '#app',
  591. props: {
  592. edit_user_url: {
  593. type: String,
  594. default: 'mall/user/edit'
  595. },
  596. import_user_url: {
  597. type: String,
  598. default: 'mall/user/import-users'
  599. },
  600. },
  601. data() {
  602. return {
  603. searchData: {
  604. keyword: '',
  605. keyword_user_id: '',
  606. lableValue:271,
  607. },
  608. label_id:'',
  609. platform: '0',
  610. member_level: '0',
  611. mall_members: [],
  612. keyword: '',
  613. keyword_user_id: '',
  614. form: [],
  615. member: [],
  616. pageCount: 0,
  617. page: 1,
  618. member_page: 1,
  619. currentPage: null,
  620. listLoading: false,
  621. btnLoading: false,
  622. user_count: 0,
  623. // 导出
  624. exportList: {},
  625. export_url: 'mall/user/index',
  626. //积分
  627. dialogIntegral: false,
  628. integralForm: {
  629. type: '1',
  630. num: '',
  631. pic_url: '',
  632. remark: '',
  633. },
  634. integralFormRules: {
  635. num: [
  636. {required: true, message: '积分数量不能为空', trigger: 'blur'},
  637. ],
  638. },
  639. //余额
  640. dialogBalance: false,
  641. balanceForm: {
  642. type: '1',
  643. price: '',
  644. pic_url: '',
  645. remark: '',
  646. },
  647. balanceFormRules: {
  648. price: [
  649. {required: true, message: '金额不能为空', trigger: 'blur'},
  650. ],
  651. },
  652. dialogCommission: false,
  653. commissionForm: {
  654. type: '1',
  655. price: '',
  656. pic_url: '',
  657. remark: '',
  658. },
  659. commissionFormRules: {
  660. price: [
  661. {required: true, message: '销售利润不能为空', trigger: 'blur'},
  662. ],
  663. },
  664. //红包
  665. dialogRedpack: false,
  666. redpackForm: {
  667. redpack_type: "frozen_redpack",
  668. redpack_money: '',
  669. user_id:'',
  670. remark: '',
  671. },
  672. redpackFormRules: {
  673. redpack_money: [
  674. {required: true, message: '红包金额不能为空', trigger: 'blur'},
  675. ],
  676. },
  677. redpack_type:[],//红包类型
  678. // 货币
  679. currencyBoo: false,
  680. currencyFormRules: {
  681. money: [
  682. {required: true, message: '货币数量不能为空', trigger: 'blur'},
  683. ],
  684. desc: [
  685. {required: true, message: '备注不能为空', trigger: 'blur'},
  686. ],
  687. code: [
  688. {required: true, message: '货币类型不能为空', trigger: 'blur'},
  689. ]
  690. },
  691. currencyForm: {
  692. type: '1',
  693. code:'',
  694. money: '',
  695. desc: '',
  696. },
  697. // 标签
  698. labelBoo: false,
  699. lableValue: [],
  700. //批量修改等级
  701. batchAddLevelBoo:false,
  702. batchAddLevelValue:[],
  703. // 黑白名单
  704. listOfNamesBoo: false,
  705. orderTotalArr: [
  706. {
  707. type: 'user_total',
  708. name: '全部会员',
  709. value: "0",
  710. prompt: '',
  711. },{
  712. type: 'new_user_total',
  713. name: '新增会员',
  714. value: '0',
  715. prompt: '近七天新增会员数量',
  716. },{
  717. type: 'active_user_total',
  718. name: '活跃会员',
  719. value: '0',
  720. prompt: '近7天有访问过商城的会员',
  721. },{
  722. type: 'no_pay_user_total',
  723. name: '购买未支付',
  724. value: "0",
  725. prompt: '近7天有购买行为,但没有成功付款的客户',
  726. },{
  727. type: 'loss_user_total',
  728. name: '流失会员',
  729. value: '0',
  730. prompt: '近30天无访问无购买的会员',
  731. },
  732. // {
  733. // type: 'o2o_user_total',
  734. // name: '线下会员',
  735. // value: '0',
  736. // prompt: '通过O2O门店进入的会员',
  737. // }
  738. ],
  739. // 提示
  740. hintBoo: false,
  741. passwordBoo: false,//修改密码
  742. passwordForm: {
  743. password: '',
  744. },
  745. passwordFormRules: {
  746. password: [
  747. {required: true, message: '密码不能为空', trigger: 'blur'},
  748. ],
  749. },
  750. updateTime: '',
  751. searchInfo: {
  752. user_id: '',
  753. nickname_or_mobile: '', //会员昵称/手机号
  754. parent_id: '', //浏览路径ID
  755. source: '',//用户来源
  756. tag_id: '',//标签筛选
  757. user_type: 0,//会员类型
  758. register_start: '',//注册开始时间
  759. register_end: '',//注册结束时间
  760. pay_start: '',//上次消费开始时间
  761. pay_end: '',// 上次消费结束时间
  762. balance_start: '',//余额开始
  763. balance_end: '',//余额结束
  764. commission_start:'',//开始销售利润
  765. commission_end:'',//结束销售利润
  766. score_start: '',//积分开始
  767. score_end: '',//积分结束
  768. price_total_start: '',//累计消费金额开始
  769. price_total_end: '',//累计消费金额结束
  770. order_total_start: '',//购买次数开始
  771. order_total_end: '',//购买次数结束
  772. r: 'mall/user/index',//购买次数结束
  773. lableValue:'',//智能标签
  774. memberLabelIds:[],//会员标签
  775. black: '', // 是否黑名单
  776. p_mobile: '', // 浏览路径的手机号
  777. },
  778. addTime: '',//注册时间
  779. lastSpendTime: '',//上次消费时间
  780. visibleUserId: 0,
  781. userTagList: [],//智能标签列表
  782. memberLabelList: [],//会员标签列表
  783. channelArr: [],//渠道
  784. levels:[],//等级
  785. checkedAll: false,
  786. selFormArr: [],//表格选中的元素
  787. labelSubmitBoo: false,//加标签是否能多个用户添加
  788. batchAddLevelSubmitBoo:false,//批量修改等级是否能多个用户添加
  789. integralOrBalanceType: 1, //积分或余额充值状态,1:加或减 2:标识清零
  790. blacklistType: 1,//批量黑名单状态: 1:单个 2:批量
  791. currencyList: [],//币种列表
  792. sortFo: '', //排序方向:asc升序 desc降序 ''不排序
  793. sortPorp: '',//排序的元素属性名
  794. dataRenewBoo: false,
  795. redpack_is_install:false,//如果是true红包拓客的插件是已经安装了
  796. userUrl: 'mall/user/index',
  797. install_addons: [],
  798. isFreezeCommission: 0,
  799. editRowId: 0,
  800. editColumnId: -1,
  801. };
  802. },
  803. computed: {
  804. show_clear_search_btn: function() {
  805. return !isEmpty(this.searchInfo.user_id) || !isEmpty(this.searchInfo.nickname_or_mobile) ||
  806. !isEmpty(this.searchInfo.parent_id)
  807. ||!isEmpty(this.searchInfo.source)
  808. || !isEmpty(this.searchInfo.tag_id)
  809. ||!isEmpty(this.searchInfo.register_start)
  810. ||!isEmpty(this.searchInfo.register_end)
  811. ||!isEmpty(this.searchInfo.pay_start)
  812. ||!isEmpty(this.searchInfo.pay_end)
  813. ||!isEmpty(this.searchInfo.user_type)
  814. ||!isEmpty(this.searchInfo.balance_start)
  815. ||!isEmpty(this.searchInfo.balance_end)
  816. ||!isEmpty(this.searchInfo.score_start)
  817. ||!isEmpty(this.searchInfo.score_end)
  818. ||!isEmpty(this.searchInfo.price_total_start)
  819. ||!isEmpty(this.searchInfo.price_total_end)
  820. ||!isEmpty(this.searchInfo.order_total_start)
  821. ||!isEmpty(this.searchInfo.order_total_end)
  822. ||!isEmpty(this.searchInfo.level)
  823. ||!isEmpty(this.label_id)
  824. ||!isEmpty(this.searchInfo.lableValue)
  825. ||!isEmpty(this.searchInfo.p_mobile);
  826. }
  827. },
  828. methods: {
  829. labelClose() {// 关闭标签框
  830. this.lableValue = [];
  831. },
  832. openId(index) {
  833. let item = this.form;
  834. item[index].is_open_id = !item[index].is_open_id;
  835. this.form = JSON.parse(JSON.stringify(this.form));
  836. },
  837. exportConfirm() {
  838. this.searchData.keyword = this.keyword;
  839. this.searchData.keyword_user_id = this.keyword_user_id;
  840. },
  841. //积分
  842. integralPicUrl(e) {
  843. if (e.length) {
  844. this.integralForm.pic_url = e[0].url;
  845. }
  846. },
  847. handleIntegral(row) {
  848. // console.log(row);
  849. this.integralForm = Object.assign(this.integralForm, {user_id: row.user_id});
  850. this.integralForm.num = "";
  851. this.integralForm.remark = "";
  852. this.dialogIntegral = true;
  853. },
  854. // 积分充值验证
  855. integralSubmit() {
  856. if(this.integralOrBalanceType == 2){
  857. this.integralRequest();
  858. return;
  859. }
  860. this.$refs.integralForm.validate((valid) => {
  861. if (valid) {
  862. this.integralRequest();
  863. }
  864. });
  865. },
  866. // 请求积分充值接口
  867. integralRequest(){
  868. let num = Number(this.integralForm.num);
  869. num >= 0 ?this.integralForm.type = 1:this.integralForm.type = 2;
  870. if(this.selFormArr.length > 0){
  871. let userArr = []
  872. this.selFormArr.forEach(v => {
  873. userArr.push(v.user_id);
  874. })
  875. // this.integralForm.user_id = JSON.stringify(userArr);
  876. this.integralForm.user_id = userArr.join();
  877. if(this.integralOrBalanceType == 2) {
  878. this.integralForm.type = 3;
  879. this.integralForm.num = 0;
  880. }
  881. }
  882. let para = Object.assign({}, this.integralForm);
  883. this.btnLoading = true;
  884. request({
  885. params: {
  886. r: 'mall/user/score',
  887. },
  888. method: 'post',
  889. data: para,
  890. }).then(e => {
  891. if (e.data.code === 0) {
  892. // location.reload();
  893. this.integralForm.num = "";
  894. this.getList();
  895. } else {
  896. this.$message.error(e.data.msg);
  897. }
  898. this.dialogIntegral = false;
  899. this.btnLoading = false;
  900. this.hintBoo = false;
  901. }).catch(e => {
  902. this.dialogIntegral = false;
  903. this.btnLoading = false;
  904. this.hintBoo = false;
  905. });
  906. },
  907. //余额
  908. balancePicUrl(e) {
  909. if (e.length) {
  910. this.balanceForm.pic_url = e[0].url;
  911. }
  912. },
  913. handleBalance(row) {
  914. this.balanceForm = Object.assign(this.balanceForm, {user_id: row.user_id});
  915. this.balanceForm.price = "";
  916. this.balanceForm.remark = "";
  917. this.dialogBalance = true;
  918. },
  919. handleCommission(row) {
  920. this.commissionForm = Object.assign(this.commissionForm, {user_id: row.user_id});
  921. this.commissionForm.price = "";
  922. this.commissionForm.remark = "";
  923. this.dialogCommission = true;
  924. },
  925. handleRedpack(row){
  926. this.redpackForm.redpack_money = "";
  927. this.redpackForm.remark = "";
  928. this.dialogRedpack = true;
  929. this.redpackForm.user_id = row.id;
  930. },
  931. // 币种
  932. handleCurrency(row){
  933. this.currencyForm = {
  934. type: '1',
  935. code:'',
  936. money: '',
  937. desc: '',
  938. }
  939. this.currencyForm = Object.assign(this.currencyForm, {user_id: row.user_id});
  940. this.currencyBoo = true;
  941. },
  942. // 密码
  943. handlePassword(row){
  944. this.passwordForm = Object.assign(this.passwordForm, {user_id: row.user_id});
  945. this.passwordBoo = true;
  946. },
  947. // 标签
  948. handleLable(row){
  949. this.balanceForm = Object.assign(this.balanceForm, {user_id: row.user_id});
  950. let key = [];
  951. row.userLabel.forEach(v => {
  952. key.push(v.id);
  953. })
  954. this.lableValue = key;
  955. this.labelBoo = true;
  956. },
  957. // 黑白名单
  958. handleListOfNames(row){
  959. console.info(row)
  960. if(row.status==0){
  961. this.balanceForm.is_blacklist = 1;
  962. }else{
  963. this.balanceForm.is_blacklist = 0;
  964. }
  965. this.balanceForm = Object.assign(this.balanceForm, {
  966. user_id: row.user_id,
  967. status: row.status,
  968. });
  969. this.blacklistType = 1;
  970. this.listOfNamesBoo = true;
  971. },
  972. // 批量加入黑名单
  973. blacklistList(){
  974. this.blacklistType = 2;
  975. this.balanceForm.is_blacklist = 0;
  976. this.balanceForm.status = 1;
  977. this.listOfNamesBoo = true;
  978. },
  979. whitelistList(){
  980. this.blacklistType = 2;
  981. this.balanceForm.is_blacklist = 1;
  982. this.balanceForm.status = 0;
  983. this.listOfNamesBoo = true;
  984. },
  985. // 余额验证
  986. balanceSubmit() {
  987. // 批量清零
  988. if(this.integralOrBalanceType == 2){
  989. this.balanceRequest();
  990. return;
  991. }
  992. // 表单验证
  993. this.$refs.integralForm.validate((valid) => {
  994. if (valid) {
  995. this.balanceRequest();
  996. }
  997. });
  998. },
  999. commissionSubmit() {
  1000. // 批量清零
  1001. if(this.integralOrBalanceType == 2){
  1002. this.commissionRequest();
  1003. return;
  1004. }
  1005. // 表单验证
  1006. this.$refs.commissionForm.validate((valid) => {
  1007. if (valid) {
  1008. this.commissionRequest();
  1009. }
  1010. });
  1011. },
  1012. // 余额验证
  1013. redpackSubmit() {
  1014. this.btnLoading = true;
  1015. request({
  1016. params: {
  1017. r: 'mall/user/redpack',
  1018. },
  1019. method: 'post',
  1020. data: {
  1021. user_id:this.redpackForm.user_id,
  1022. type:this.redpackForm.redpack_type,
  1023. money:this.redpackForm.redpack_money,
  1024. desc:this.redpackForm.remark},
  1025. }).then(e => {
  1026. if (e.data.code === 0) {
  1027. this.dialogRedpack = false;
  1028. // location.reload();
  1029. this.getList();
  1030. } else {
  1031. this.$message.error(e.data.msg);
  1032. }
  1033. this.dialogBalance = false;
  1034. this.btnLoading = false;
  1035. }).catch(e => {
  1036. this.dialogBalance = false;
  1037. this.btnLoading = false;
  1038. });
  1039. },
  1040. //余额充值请求接口
  1041. balanceRequest(){
  1042. let num = Number(this.balanceForm.price);
  1043. num >= 0 ?this.balanceForm.type = 1:this.balanceForm.type = 2;
  1044. if(this.selFormArr.length > 0){
  1045. let userArr = []
  1046. this.selFormArr.forEach(v => {
  1047. userArr.push(v.user_id);
  1048. })
  1049. this.balanceForm.user_id = userArr.join();
  1050. if(this.integralOrBalanceType == 2) {
  1051. this.balanceForm.type = 3;
  1052. this.balanceForm.price = 0;
  1053. }
  1054. }
  1055. let para = Object.assign({}, this.balanceForm);
  1056. this.btnLoading = true;
  1057. request({
  1058. params: {
  1059. r: 'mall/user/balance',
  1060. },
  1061. method: 'post',
  1062. data: para,
  1063. }).then(e => {
  1064. if (e.data.code === 0) {
  1065. // location.reload();
  1066. this.getList();
  1067. } else {
  1068. this.$message.error(e.data.msg);
  1069. }
  1070. this.dialogBalance = false;
  1071. this.btnLoading = false;
  1072. }).catch(e => {
  1073. this.dialogBalance = false;
  1074. this.btnLoading = false;
  1075. });
  1076. },
  1077. commissionRequest(){
  1078. let num = Number(this.balanceForm.price);
  1079. num >= 0 ?this.commissionForm.type = 1:this.commissionForm.type = 2;
  1080. if(this.selFormArr.length > 0){
  1081. let userArr = []
  1082. this.selFormArr.forEach(v => {
  1083. userArr.push(v.user_id);
  1084. })
  1085. this.commissionForm.user_id = userArr.join();
  1086. if(this.integralOrBalanceType == 2) {
  1087. this.commissionForm.type = 3;
  1088. this.commissionForm.price = 0;
  1089. }
  1090. }
  1091. let para = Object.assign({}, this.commissionForm);
  1092. this.btnLoading = true;
  1093. request({
  1094. params: {
  1095. r: 'mall/user/commission',
  1096. },
  1097. method: 'post',
  1098. data: para,
  1099. }).then(e => {
  1100. if (e.data.code === 0) {
  1101. // location.reload();
  1102. this.getList();
  1103. } else {
  1104. this.$message.error(e.data.msg);
  1105. }
  1106. this.dialogCommission = false;
  1107. this.btnLoading = false;
  1108. }).catch(e => {
  1109. this.dialogCommission = false;
  1110. this.btnLoading = false;
  1111. });
  1112. },
  1113. // 货币充值
  1114. currencySubmit(){
  1115. // 表单验证
  1116. this.$refs.integralForm.validate((valid) => {
  1117. if (valid) {
  1118. let para = Object.assign({}, this.currencyForm);
  1119. this.btnLoading = true;
  1120. request({
  1121. params: {
  1122. r: 'mall/user/add-currency',
  1123. },
  1124. method: 'post',
  1125. data: para,
  1126. }).then(res => {
  1127. // console.info(res);
  1128. if(res.data.code == 0){
  1129. this.getList();
  1130. }else {
  1131. this.$message.error(e.data.msg);
  1132. }
  1133. this.currencyBoo = false;
  1134. this.btnLoading = false;
  1135. }).catch(err => {
  1136. this.currencyBoo = false;
  1137. this.btnLoading = false;
  1138. })
  1139. }
  1140. })
  1141. },
  1142. // 修改密码
  1143. passwordSubmit(){
  1144. this.$refs.integralForm.validate((valid) => {
  1145. let para = Object.assign({}, this.passwordForm);
  1146. this.btnLoading = true;
  1147. if(this.passwordForm.password.length<6) {
  1148. this.$message.error('密码长度至少6位');
  1149. this.btnLoading = false;
  1150. return false;
  1151. }
  1152. if (valid) {
  1153. request({
  1154. params: {
  1155. r: 'mall/user/update-password',
  1156. },
  1157. method: 'post',
  1158. data: para,
  1159. }).then(res => {
  1160. if(res.data.code == 0){
  1161. this.getList();
  1162. this.passwordForm.password = '';
  1163. }else {
  1164. this.$message.error(res.data.msg);
  1165. }
  1166. this.passwordBoo = false;
  1167. this.btnLoading = false;
  1168. }).catch(err => {
  1169. this.passwordBoo = false;
  1170. this.btnLoading = false;
  1171. })
  1172. }
  1173. })
  1174. },
  1175. search() {
  1176. // console.info(this.searchInfo);
  1177. this.page = 1;
  1178. this.getList();
  1179. },
  1180. pageSearch(){
  1181. this.page_count = 1;
  1182. this.getList();
  1183. },
  1184. pagination(currentPage) {
  1185. this.checkedAll = false;
  1186. this.selFormArr = [];
  1187. this.page = currentPage;
  1188. this.getList();
  1189. },
  1190. getList() {
  1191. this.listLoading = true;
  1192. let sort = '';
  1193. let data = {
  1194. page: this.page,
  1195. search: JSON.stringify(this.searchInfo),
  1196. }
  1197. if(this.sortFo){
  1198. sort = this.sortPorp + ' ' + this.sortFo;
  1199. data.sort = sort;
  1200. }
  1201. let params = {
  1202. r: 'mall/user/index',
  1203. };
  1204. params = Object.assign(params, data);
  1205. request({
  1206. params: params,
  1207. method: 'get',
  1208. }).then(e => {
  1209. //console.info(e);
  1210. if (e.data.code === 0) {
  1211. //console.log(e.data.data.user_list.list);
  1212. this.form = e.data.data.user_list.list;
  1213. this.redpack_is_install = e.data.data.redpack_is_install;
  1214. this.exportList = e.data.data.export_list;
  1215. this.install_addons = e.data.data.install_addons;
  1216. console.log(this.install_addons.indexOf('TeamData'));
  1217. this.pageCount = e.data.data.user_list.page_count;
  1218. this.currentPage = e.data.data.user_list.page;
  1219. this.user_count = e.data.data.user_list.row_count
  1220. if(this.page_count !=1) this.pageCount = e.data.data.user_list.page_count;
  1221. this.currentPage = parseInt(this.page);
  1222. this.isFreezeCommission = e.data.data.is_freeze_commission
  1223. //console.info(this.checkedAll);
  1224. if(this.checkedAll){
  1225. this.$nextTick(rrr => {
  1226. this.form.forEach(v => {
  1227. this.$refs.multipleTable.toggleRowSelection(v);
  1228. })
  1229. })
  1230. }
  1231. if(this.currentPage == 1){
  1232. this.updateTime = e.data.data.mall_data.updated_at;
  1233. this.userTagList = e.data.data.tag_list;
  1234. this.memberLabelList = e.data.data.member_label_List;
  1235. this.channelArr = e.data.data.channel;
  1236. this.levels = e.data.data.levels;
  1237. this.currencyList = e.data.data.currency_list;
  1238. for (const key in e.data.data.mall_data) {
  1239. let info = this.orderTotalArr.filter(v => v.type == key); //订单概况
  1240. if(info.length){
  1241. let index = this.orderTotalArr.findIndex(v => v.type==info[0].type);
  1242. this.orderTotalArr[index].value = e.data.data.mall_data[key];
  1243. }
  1244. }
  1245. }
  1246. } else {
  1247. this.$message.error(e.data.msg);
  1248. }
  1249. this.listLoading = false;
  1250. }).catch(e => {
  1251. this.listLoading = false;
  1252. });
  1253. },
  1254. addUser() {
  1255. navigateTo({
  1256. r: 'mall/user/add',
  1257. page: this.page
  1258. });
  1259. },
  1260. importUser() {
  1261. navigateTo({
  1262. r: this.import_user_url,
  1263. page: this.page
  1264. });
  1265. },
  1266. addMore(id){
  1267. this.visibleUserId = id;
  1268. },
  1269. seUserType(index){
  1270. if(this.searchInfo.user_type == index) return;
  1271. this.searchInfo.user_type = index;
  1272. this.search();
  1273. },
  1274. addTimeChange(v){
  1275. this.searchInfo.register_start = v?v[0]:'';
  1276. this.searchInfo.register_end = v?v[1]:'';
  1277. },
  1278. lastSpendTimeChange(v){
  1279. this.searchInfo.pay_start = v?v[0]:'';
  1280. this.searchInfo.pay_end = v?v[1]:'';
  1281. },
  1282. labelSubmit(boo){
  1283. let that = this;
  1284. let url = 'mall/user/add-user-label'
  1285. let user_label_arr = {};
  1286. let userId = this.balanceForm.user_id;
  1287. let is_batch = 0;
  1288. if(this.labelSubmitBoo == true){
  1289. this.selFormArr.forEach(v => {
  1290. user_label_arr = Object.assign(user_label_arr, {[v.user_id]: JSON.stringify(this.lableValue)});
  1291. })
  1292. is_batch = 1;
  1293. } else {
  1294. user_label_arr = {[this.balanceForm.user_id]: JSON.stringify(this.lableValue)};
  1295. }
  1296. let data = {
  1297. user_label_arr: user_label_arr,
  1298. is_batch: is_batch,
  1299. }
  1300. console.info(data);
  1301. request({
  1302. params: {
  1303. r: url
  1304. },
  1305. method: 'post',
  1306. data: data
  1307. }).then(res => {
  1308. that.labelSubmitBoo = false;
  1309. if(res.data.code == 0){
  1310. that.lableValue = [];
  1311. that.checkedAll = false;
  1312. that.getList();
  1313. }
  1314. that.labelBoo = false;
  1315. }).catch(e => {
  1316. that.labelSubmitBoo = false;
  1317. that.labelBoo = false;
  1318. console.log(e);
  1319. });
  1320. },
  1321. batchAddLevelSubmit(boo){
  1322. let that = this;
  1323. let url = 'mall/user/batch-edit-user-level'
  1324. // let user_level_arr = {};
  1325. let level = 0;
  1326. let userArr = [];
  1327. let userId = this.balanceForm.user_id;
  1328. // let is_batch = 0;
  1329. if(this.batchAddLevelSubmitBoo == true){
  1330. // this.selFormArr.forEach(v => {
  1331. // user_label_arr = Object.assign(user_level_arr, {[v.user_id]: JSON.stringify(this.batchAddLevelValue)});
  1332. // })
  1333. this.selFormArr.forEach(v => {
  1334. userArr.push(v.user_id);
  1335. })
  1336. level = this.batchAddLevelValue;
  1337. // is_batch = 1;
  1338. } else {
  1339. user_level_arr = {[this.balanceForm.user_id]: JSON.stringify(this.batchAddLevelValue)};
  1340. }
  1341. let data = {
  1342. level: level,
  1343. user_id : userArr.join(),
  1344. // is_batch: is_batch,
  1345. }
  1346. console.info(data);
  1347. request({
  1348. params: {
  1349. r: url
  1350. },
  1351. method: 'post',
  1352. data: data
  1353. }).then(res => {
  1354. that.batchAddLevelSubmitBoo = false;
  1355. if(res.data.code == 0){
  1356. that.batchAddLevelValue = [];
  1357. that.checkedAll = false;
  1358. that.getList();
  1359. }
  1360. that.batchAddLevelBoo = false;
  1361. }).catch(e => {
  1362. that.batchAddLevelSubmitBoo = false;
  1363. that.batchAddLevelBoo = false;
  1364. console.log(e);
  1365. });
  1366. },
  1367. listOfNamesBooSubmit(){
  1368. let that = this;
  1369. let data = "";
  1370. let status = this.balanceForm.status;
  1371. if(this.balanceForm.status == 0){
  1372. status = 1;
  1373. this.balanceForm.is_blacklist = 1;
  1374. }else if(this.balanceForm.status == 1){
  1375. status = 0;
  1376. this.balanceForm.is_blacklist = 0;
  1377. }
  1378. if(this.blacklistType == 2){
  1379. let userArr = []
  1380. this.selFormArr.forEach(v => {
  1381. userArr.push(v.user_id);
  1382. })
  1383. data = {
  1384. user_id: userArr.join(),
  1385. status: status
  1386. }
  1387. } else {
  1388. data = {
  1389. user_id: this.balanceForm.user_id,
  1390. status: status
  1391. }
  1392. }
  1393. // debugger;
  1394. request({
  1395. params: {
  1396. r: 'mall/user/add-blacklist'
  1397. },
  1398. method: 'post',
  1399. data: data
  1400. }).then(res => {
  1401. if(res.data.code == 0){
  1402. that.getList();
  1403. that.listOfNamesBoo = false;
  1404. }else{
  1405. this.$message.error(res.data.msg);
  1406. }
  1407. }).catch(e => {
  1408. console.log(e);
  1409. });
  1410. },
  1411. resetSearch(){
  1412. this.searchInfo = {
  1413. user_id: '',
  1414. nickname_or_mobile: '', //会员昵称/手机号
  1415. parent_id: '', //浏览路径ID
  1416. source: '',//用户来源
  1417. tag_id: '',//标签筛选
  1418. user_type: 0,//会员类型
  1419. register_start: '',//注册开始时间
  1420. register_end: '',//注册结束时间
  1421. pay_start: '',//上次消费开始时间
  1422. pay_end: '',// 上次消费结束时间
  1423. balance_start: '',//余额开始
  1424. balance_end: '',//余额结束
  1425. score_start: '',//积分开始
  1426. score_end: '',//积分结束
  1427. price_total_start: '',//累计消费金额开始
  1428. price_total_end: '',//累计消费金额结束
  1429. order_total_start: '',//购买次数开始
  1430. order_total_end: '',//购买次数结束
  1431. p_mobile: '',//浏览路径手机号
  1432. }
  1433. this.addTime = '';//注册时间
  1434. this.lastSpendTime = '';//上次消费时间
  1435. },
  1436. tabAll(){
  1437. // console.info(this.checkedAll);
  1438. // console.info(this.$refs.multipleTable);
  1439. this.form.forEach(v => {
  1440. this.$refs.multipleTable.toggleRowSelection(v);
  1441. })
  1442. // this.$refs.multipleTable.clearSelection();
  1443. },
  1444. scFormTab(sel){
  1445. // console.info(sel);
  1446. if(sel.length == this.form.length){
  1447. this.checkedAll = true;
  1448. }else {
  1449. this.checkedAll = false;
  1450. }
  1451. this.selFormArr = sel;
  1452. },
  1453. addLables(){
  1454. // this.balanceForm = Object.assign(this.balanceForm, {user_id: row.user_id});
  1455. // console.info( this.balanceForm);
  1456. /* let key = [];
  1457. row.tag_name.forEach(v => {
  1458. key.push(v.tag_id);
  1459. })
  1460. this.lableValue = key; */
  1461. this.labelSubmitBoo = true;
  1462. this.labelBoo = true;
  1463. },
  1464. batchAddLevel(){
  1465. this.batchAddLevelBoo = true;
  1466. this.batchAddLevelSubmitBoo = true;
  1467. },
  1468. //批量积分操作
  1469. addIntegral(command){
  1470. // console.info(command);
  1471. this.integralForm.num = "";
  1472. if(command == 'cel'){
  1473. this.integralOrBalanceType = 2;
  1474. this.hintBoo = true;
  1475. }else {
  1476. this.integralOrBalanceType = 1;
  1477. }
  1478. this.dialogIntegral = true;
  1479. },
  1480. //批量余额操作
  1481. addBalance(command){
  1482. this.balanceForm.price = "";
  1483. if(command == 'cel'){
  1484. this.integralOrBalanceType = 2;
  1485. this.hintBoo = true;
  1486. }else {
  1487. this.integralOrBalanceType = 1;
  1488. }
  1489. this.dialogBalance = true;
  1490. },
  1491. addCommission(command){
  1492. this.commissionForm.price = "";
  1493. if(command == 'cel'){
  1494. this.integralOrBalanceType = 2;
  1495. this.hintBoo = true;
  1496. }else {
  1497. this.integralOrBalanceType = 1;
  1498. }
  1499. this.dialogCommission = true;
  1500. },
  1501. // 关闭积分余额窗口
  1502. closePop(){
  1503. this.hintBoo = false;
  1504. this.integralOrBalanceType = 1;
  1505. },
  1506. navUserInfo(id){
  1507. this.$navigate({
  1508. r: 'team-data/default/my-customer',
  1509. user_id: id
  1510. })
  1511. },
  1512. navUserDetail(id) {
  1513. navigateTo({
  1514. r: 'mall/user/user-detail',
  1515. id: id
  1516. }, true);
  1517. },
  1518. // 排序
  1519. sortChang(column){
  1520. // console.info(column);
  1521. if(column.order == 'ascending'){
  1522. this.sortFo = 'asc';
  1523. } else if(column.order == 'descending'){
  1524. this.sortFo = 'desc';
  1525. } else {
  1526. this.sortFo = '';
  1527. }
  1528. this.sortPorp = column.prop;
  1529. this.page = 1;
  1530. this.getList();
  1531. },
  1532. // 跳转明细
  1533. typeGoTo(type,id){
  1534. let url = "";
  1535. if(type == 1){
  1536. url = "mall/finance/balance-log";
  1537. }else if(type == 2){
  1538. url = "mall/finance/commission-log";
  1539. }else if(type == 3){
  1540. url = "mall/finance/score-log";
  1541. }else if(type == 4){
  1542. // url = "plugin/red_packet/admin/red-packet/wallet-log";
  1543. url = "mall/currency/wallet-log";
  1544. // red_packet
  1545. this.$navigate({
  1546. r: url,
  1547. user_id: id,
  1548. currency_code: 'red_packet'
  1549. })
  1550. return;
  1551. }
  1552. if(!url){
  1553. return;
  1554. }
  1555. this.$navigate({
  1556. r: url,
  1557. user_id: id
  1558. })
  1559. },
  1560. manualUpdate() {
  1561. this.dataRenewBoo = true;
  1562. request({
  1563. params: {
  1564. r: 'mall/user/manual-execute',
  1565. },
  1566. method: 'post',
  1567. }).then(e => {
  1568. if (e.data.code == 0) {
  1569. this.page = 1;
  1570. this.getList();
  1571. }
  1572. this.dataRenewBoo = false;
  1573. }).catch(e => {
  1574. this.dataRenewBoo = false;
  1575. console.log(e);
  1576. });
  1577. },
  1578. // input表单获取焦点
  1579. focusInputClass(event){
  1580. // console.info(event)
  1581. event.target.parentNode.classList.add("sel_input");
  1582. },
  1583. // input表单失去焦点
  1584. blurInputClass(event){
  1585. // console.info(event)
  1586. event.target.parentNode.classList.remove("sel_input");
  1587. },
  1588. // 修改表格表头样式
  1589. tableStyle({row, column, rowIndex, columnIndex}){
  1590. if(rowIndex === 0){
  1591. // #FAFAFA #F0F7FF
  1592. return "background: #F0F7FF;"
  1593. }
  1594. },
  1595. rowStyle({row, rowIndex}){
  1596. console.info(rowIndex);
  1597. if((rowIndex+1) %2 == 0){
  1598. return "background: #F5F7FB;"
  1599. }
  1600. },
  1601. handleEditRow(row, scope){
  1602. console.log('scope',scope);
  1603. this.editRowId = row.id
  1604. this.editColumnId = scope.column.id
  1605. },
  1606. submitRowChange(row){
  1607. request({
  1608. params: {
  1609. r: 'mall/user/handle-freeze-commission',
  1610. },
  1611. method: 'post',
  1612. data: row.userFreezeCommission
  1613. }).then(e => {
  1614. if (e.data.code == 0) {
  1615. this.$message.success(e.data.msg)
  1616. this.page = 1
  1617. this.getList()
  1618. this.handleCancelEdit()
  1619. }else{
  1620. this.$message.error(e.data.msg)
  1621. }
  1622. }).catch(e => {
  1623. console.log(e);
  1624. });
  1625. },
  1626. handleCancelEdit(){
  1627. this.editRowId = 0
  1628. this.editColumnId = -1
  1629. },
  1630. handleClearFreezeCommission(row) {
  1631. let _this = this
  1632. _this.listLoading = true
  1633. _this.$confirm('此操作将永久清除冻结佣金且不可逆, 是否继续?', '提示', {
  1634. confirmButtonText: '确定',
  1635. cancelButtonText: '取消',
  1636. type: 'warning'
  1637. }).then(() => {
  1638. request({
  1639. params: {
  1640. r: 'mall/user/handle-clear-freeze-commission',
  1641. },
  1642. method: 'post',
  1643. data: {
  1644. id: row.id
  1645. },
  1646. }).then(e => {
  1647. if (e.data.code == 0) {
  1648. _this.$message.success(e.data.msg)
  1649. _this.page = 1
  1650. _this.getList()
  1651. } else {
  1652. _this.$message.error(e.data.msg)
  1653. }
  1654. _this.listLoading = false
  1655. }).catch(e => {
  1656. console.log(e);
  1657. _this.listLoading = false
  1658. });
  1659. }).catch(() => {
  1660. _this.$message({
  1661. type: 'info',
  1662. message: '已取消删除'
  1663. });
  1664. });
  1665. }
  1666. },
  1667. mounted: function () {
  1668. getQuery('memberLabelIds')? this.searchInfo.memberLabelIds.push( getQuery('memberLabelIds') ):0;
  1669. this.page = getQuery('page') ? getQuery('page') : 1;
  1670. this.label_id = getQuery('label_id');
  1671. if(this.label_id){
  1672. this.$set(this.searchInfo,'lableValue',parseInt(this.label_id));
  1673. }
  1674. this.getList();
  1675. },
  1676. });
  1677. </script>
  1678. <style>
  1679. @media screen and (max-width: 1500px) {
  1680. #app {
  1681. min-width: 1270px;
  1682. }
  1683. }
  1684. .top_title{
  1685. font-weight: 600;
  1686. font-size: 18px;
  1687. margin-right: 12px;
  1688. }
  1689. .table-body {
  1690. padding: 20px;
  1691. background-color: #fff;
  1692. }
  1693. .table-info .el-button {
  1694. /* padding: 0; */
  1695. border: 0;
  1696. margin: 0 5px;
  1697. }
  1698. .input-item {
  1699. display: inline-block;
  1700. width: 250px;
  1701. margin: 0 0 20px;
  1702. }
  1703. .input-item .el-input__inner {
  1704. border-right: 0;
  1705. }
  1706. .input-item .el-input__inner:hover {
  1707. border: 1px solid #dcdfe6;
  1708. border-right: 0;
  1709. outline: 0;
  1710. }
  1711. .input-item .el-input__inner:focus {
  1712. border: 1px solid #dcdfe6;
  1713. border-right: 0;
  1714. outline: 0;
  1715. }
  1716. .input-item .el-input-group__append {
  1717. background-color: #fff;
  1718. border-left: 0;
  1719. width: 10%;
  1720. padding: 0;
  1721. }
  1722. .input-item .el-input-group__append .el-button {
  1723. padding: 0;
  1724. }
  1725. .input-item .el-input-group__append .el-button {
  1726. margin: 0;
  1727. }
  1728. .select {
  1729. float: left;
  1730. width: 100px;
  1731. margin-right: 10px;
  1732. }
  1733. .el-table th>.cell{
  1734. color: #333;
  1735. font-weight: bold;
  1736. font-size: 14px;
  1737. }
  1738. /* .el-table__footer-wrapper, .el-table__header-wrapper{
  1739. border-bottom: 1.4px solid #D6D6D6;
  1740. } */
  1741. .stat_details{
  1742. padding: 5px 0 20px;
  1743. display: flex;
  1744. }
  1745. .order_module{
  1746. flex: 1;
  1747. background: #F5F7FA;;
  1748. margin: 0 5px;
  1749. padding: 20px 25px;
  1750. border-radius: 3px;
  1751. text-align: center;
  1752. border: 1px solid #F5F7FA;
  1753. }
  1754. .se_module{
  1755. background: #E8F3FE;
  1756. border: 1px solid #2E8FF4;
  1757. color: #2E8FF4;
  1758. }
  1759. .order_module:last-child{
  1760. margin-right: 0;
  1761. }
  1762. .order_module:first-child{
  1763. margin-left: 0;
  1764. }
  1765. .price{
  1766. font-size: 22px;
  1767. font-weight: bold;
  1768. }
  1769. .oirder_modul_title{
  1770. font-size: 12px;
  1771. margin-bottom: 10px;
  1772. display: flex;
  1773. align-items: center;
  1774. justify-content: center;
  1775. }
  1776. .oirder_modul_title .text{
  1777. margin-right: 4px;
  1778. }
  1779. .stat_icon{
  1780. font-size: 19px;
  1781. color: #BFBFBF;
  1782. }
  1783. .el-col {
  1784. padding: 0;
  1785. }
  1786. .all_flex{
  1787. display: flex;
  1788. }
  1789. .value_input .el-form-item__content{
  1790. display: flex;
  1791. }
  1792. .value_input .el-input-group input{
  1793. width: 58px;
  1794. border-right: 0;
  1795. }
  1796. .value_input .el-input-group{
  1797. display: flex;
  1798. width: 100px;
  1799. }
  1800. .value_input .el-input-group__append{
  1801. display: flex;
  1802. align-items: center;
  1803. justify-content: center;
  1804. background: #FFF;
  1805. }
  1806. .sel_input .el-input-group__append{
  1807. border: 1px solid #03C5FF;
  1808. border-left: 0;
  1809. }
  1810. .search_button{
  1811. /* margin-left: 108px; */
  1812. margin-right: 10px;
  1813. width: 80px;
  1814. }
  1815. .el-table_1_column_3 .cell{
  1816. display: flex;
  1817. }
  1818. .user_img{
  1819. position: relative;
  1820. margin-right: 8px;
  1821. height: 50px;
  1822. width: 50px;
  1823. }
  1824. .no_user{
  1825. position: absolute;
  1826. bottom: 0;
  1827. width: 100%;
  1828. text-align: center;
  1829. white-space: nowrap;
  1830. line-height: normal;
  1831. background: #0000006b;
  1832. color: #FFF;
  1833. border-radius: 30px;
  1834. }
  1835. .el-popover{
  1836. display: flex;
  1837. flex-direction: column;
  1838. align-items: flex-start;
  1839. /* min-width: 80px; */
  1840. }
  1841. .el-button+.el-button{
  1842. margin-left: 0;
  1843. }
  1844. .el-popover .el-button--text{
  1845. color: #2E8FF4;
  1846. }
  1847. .bottom_but{
  1848. margin-right: 20px;
  1849. border: 1px solid #DCDFE6;
  1850. padding: 12px 20px;
  1851. border-radius: 4px;
  1852. line-height: 14px;
  1853. }
  1854. .bottom_but:hover{
  1855. cursor:pointer
  1856. }
  1857. .title_bu:hover{
  1858. cursor:pointer;
  1859. }
  1860. .el-form-item .el-form-item__label{
  1861. font-size: 12px;
  1862. }
  1863. .top_form .el-form-item__label{
  1864. width: 64px !important;
  1865. }
  1866. .top_form .el-form-item__content{
  1867. margin-left: 64px !important;
  1868. }
  1869. .el-form-item__content .el-range-editor{
  1870. width: 100%;
  1871. }
  1872. .el-form-item__content .el-range-editor .el-icon-time{
  1873. display: none;
  1874. }
  1875. .el-form-item__content .el-range-editor .el-range-separator{
  1876. padding: 0;
  1877. width: 8%;
  1878. }
  1879. .el-form-item__content .el-range-editor input{
  1880. width: 49%;
  1881. }
  1882. .default-avatar{
  1883. width: 50px;
  1884. height: 50px;
  1885. border-radius: 50%;
  1886. }
  1887. .order-status-container {
  1888. display: flex;
  1889. justify-content: flex-start;
  1890. text-align: left;
  1891. }
  1892. </style>