detail.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. <?php
  2. use common\helpers\ComponentHelper;
  3. ComponentHelper::loadComponentView('com-select-cat');
  4. ComponentHelper::loadComponentView('com-dialog-select');
  5. ?>
  6. <script src="/resources/js/Sortable.min.js"></script>
  7. <script src="/resources/unpkg/vuedraggable@2.18.1/dist/vuedraggable.umd.min.js"></script>
  8. <div id="app" v-cloak>
  9. <div class="user_info">
  10. <div class="user_detail">
  11. <el-image style="height:50px;width:50px;border-radius: 50%;margin-right: 20px;" :src="detailInfo.avatar_url ? detailInfo.avatar_url : '/resources/img/common/default-avatar.png'" lazy></el-image>
  12. <div style="flex:1;">
  13. <div style="margin-bottom: 20px;" class="my_flex">
  14. <div style="flex:1;">
  15. <div class="user_name">
  16. <span>{{detailInfo.nickname}}</span>
  17. <div style="float: right;">
  18. <el-switch
  19. v-model="detailInfo.status"
  20. @change="((val)=>{switchFun(val,detailInfo.id,'status')})"
  21. :active-value="1"
  22. :inactive-value="0"
  23. active-text="开放"
  24. inactive-text="禁用"
  25. >
  26. </el-switch>
  27. </div>
  28. </div>
  29. <div class="info">
  30. <div>
  31. <span>ID:</span>
  32. <span class="text">{{detailInfo.user_id || ' '}}</span>
  33. </div>
  34. <div>
  35. <span>手机号:</span>
  36. <span class="text">{{detailInfo.mobile || ' '}}</span>
  37. </div>
  38. </div>
  39. </div>
  40. </div>
  41. <el-row :gutter="24" style="margin-bottom: 20px;">
  42. <el-col :span="6">等级:{{detailInfo.level_name}}</el-col>
  43. <el-col :span="6">分红比例:{{detailInfo.bonus_rate}}%</el-col>
  44. <el-col :span="6">成为招商员时间:{{detailInfo.register_time_format}}</el-col>
  45. </el-row>
  46. <el-row :gutter="24" style="margin-bottom: 20px;">
  47. <el-col :span="6">门店数量:{{detailInfo.store_number}}</el-col>
  48. <el-col :span="6">商户数量:{{detailInfo.mch_number}}</el-col>
  49. <!-- <el-col :span="6">消费金额:</el-col>-->
  50. <!-- <el-col :span="6">下单时间:</el-col>-->
  51. </el-row>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="table-body">
  56. <div style="display: flex;align-items: center;">
  57. <div style="width: 5px;height: 20px;background-color: #409eff;margin-right: 5px;"></div>
  58. <div>升级记录</div>
  59. </div>
  60. <el-tabs>
  61. <el-table :data="list" stripe v-loading="loading" size="small" style="margin-bottom: 15px;">
  62. <el-table-column prop="id" label="序号" align="center"></el-table-column>
  63. <el-table-column prop="level_info.level_name" label="招商员等级" align="center"></el-table-column>
  64. <el-table-column label="分红比例" align="center">
  65. <template slot-scope="scope">
  66. {{ scope.row.bonus_rate}}%
  67. </template>
  68. </el-table-column>
  69. <!-- 升级方式:0未知,1无条件,2前端申请,3购买知道商品,4后台添加,5后台调整-->
  70. <el-table-column label="升级方式" align="center">
  71. <template slot-scope="scope">
  72. <span v-if="scope.row.upgrade_type == 1">无条件</span>
  73. <span v-if="scope.row.upgrade_type == 2">前端申请</span>
  74. <span v-if="scope.row.upgrade_type == 3">购买指定商品</span>
  75. <span v-if="scope.row.upgrade_type == 4">后台添加</span>
  76. <span v-if="scope.row.upgrade_type == 5">后台调整</span>
  77. <span v-if="scope.row.upgrade_type == 6">购买门店商品</span>
  78. <span v-if="scope.row.upgrade_type == 7">条件升级</span>
  79. </template>
  80. </el-table-column>
  81. <el-table-column label="详情" align="left" min-width="125">
  82. <template slot-scope="scope">
  83. <span v-if="scope.row.upgrade_type == 1 || scope.row.upgrade_type == 7">
  84. <p>备注:{{scope.row.extra_data.mark}}</p>
  85. </span>
  86. <span v-if="scope.row.upgrade_type == 2">
  87. <p>备注:{{scope.row.extra_data.mark}}</p>
  88. <p v-if="scope.row.extra_data.audit_admin">管理员账号:{{scope.row.extra_data.audit_admin}}</p>
  89. <p v-if="scope.row.extra_data.audit_account">管理员姓名:{{scope.row.extra_data.audit_account}}</p>
  90. </span>
  91. <span v-if="scope.row.upgrade_type == 3">
  92. <p>备注:{{scope.row.extra_data.mark}}</p>
  93. <p>商品ID:{{scope.row.extra_data.goods_id}}</p>
  94. <div style="display: flex;align-items: center;">
  95. <el-image fit="cover" :src="scope.row.extra_data.pic_url" style="width: 40px;height: 40px;display: block;margin-right: 5px;flex-shrink: 0;"></el-image>
  96. <div>
  97. <div style="max-height: 40px; overflow-y: hidden;">{{scope.row.extra_data.goods_name}}</div>
  98. <div v-if="scope.row.extra_data.goods_price">¥{{scope.row.extra_data.goods_price}} ×{{scope.row.extra_data.num}}</div>
  99. <div v-else>¥{{scope.row.extra_data.price}} ×{{scope.row.extra_data.num}}</div>
  100. </div>
  101. </div>
  102. </span>
  103. <span v-if="scope.row.upgrade_type == 4 || scope.row.upgrade_type == 5">
  104. <p>备注:{{scope.row.extra_data.mark}}</p>
  105. <p>管理员账号:{{scope.row.extra_data.username}}</p>
  106. <p>管理员姓名:{{scope.row.extra_data.account}}</p>
  107. </span>
  108. </template>
  109. </el-table-column>
  110. <el-table-column label="升级时间" min-width="105" align="center">
  111. <template slot-scope="scope">
  112. {{ scope.row.upgrade_time | dateTimeFormat('Y-m-d H:i') }}
  113. </template>
  114. </el-table-column>
  115. </el-table>
  116. <div style="text-align: right;margin: 20px 0;">
  117. <el-pagination @current-change="pagination" background layout="prev, pager, next" :page-count="pageCount"></el-pagination>
  118. </div>
  119. </el-tabs>
  120. </div>
  121. </div>
  122. <script>
  123. const app = new Vue({
  124. el: '#app',
  125. data() {
  126. return {
  127. diy_img_prefix: '<?= Yii::getAlias('@attachurl') ?>',
  128. titleName:"查看招商员信息",
  129. loading:false,
  130. page: 1,
  131. pageCount: 0,
  132. list: [],
  133. submitData:{
  134. },
  135. detailInfo: {
  136. 'id': 0,
  137. "user_id": '',
  138. "status": 0,
  139. "business_bonus_level": 1,
  140. "store_number": 0,
  141. "mch_number": 0,
  142. "register_time": 0,
  143. "nickname": '',
  144. "mobile": '',
  145. "avatar_url": "",
  146. "level_name": "",
  147. "bonus_rate": 0
  148. },
  149. rules: {
  150. business_bonus_level: [
  151. { required: true, message: '请选择招商员等级', trigger: 'blur' }
  152. ],
  153. },
  154. btnLoading:false,
  155. };
  156. },
  157. mounted() {
  158. this.submitData.updated_at = Date.parse(new Date()) / 1000; // 新建数据的更新时间
  159. if (getQuery('id')) {
  160. this.loadData(getQuery('id'));
  161. } else {
  162. this.submitData.created_at = Date.parse(new Date()) / 1000; // 新建数据的创建时间
  163. }
  164. },
  165. watch:{
  166. },
  167. computed: {
  168. },
  169. methods: {
  170. pagination(currentPage) {
  171. let self = this;
  172. self.page = currentPage;
  173. self.getList();
  174. },
  175. getList(search = {}) {
  176. let self = this;
  177. self.loading = true;
  178. let basic_params = {
  179. page: self.page,
  180. user_id: self.detailInfo.user_id,
  181. };
  182. let params = Object.assign(basic_params, search);
  183. request({
  184. params: {
  185. r: 'business-bonus/default/upgrade-record'
  186. },
  187. method: 'post',
  188. data: params
  189. }).then(e => {
  190. self.loading = false;
  191. if (e.data.code == 0) {
  192. self.list = e.data.data.page_data.list;
  193. self.pageCount = e.data.data.page_data.page_count;
  194. } else {
  195. self.$message.error(e.data.msg);
  196. }
  197. }).catch(e => {
  198. self.loading = false;
  199. });
  200. },
  201. saveFun(){
  202. this.$refs['ruleForm'].validate((valid) => {
  203. if (valid) {
  204. if (!this.submitData.user_id) {
  205. this.$message.error('请选择一个用户作为招商员!');
  206. return false;
  207. }
  208. let data =JSON.parse(JSON.stringify(this.submitData));
  209. this.btnLoading = true;
  210. let url = 'business-bonus/default/edit';
  211. request({
  212. params: {
  213. r:url,
  214. },
  215. method: 'post',
  216. data: data
  217. }).then(e => {
  218. this.btnLoading = false;
  219. if (e.data.code == 0) {
  220. this.$message.success(e.data.msg);
  221. setTimeout(function () {
  222. navigateTo({
  223. r: 'business-bonus/default/index',
  224. });
  225. }, 1500);
  226. } else {
  227. this.$message.error(e.data.msg);
  228. }
  229. }).catch(e => {
  230. this.$message.error(e);
  231. this.btnLoading = false;
  232. })
  233. } else {
  234. this.$message.error('请填写必要的参数!');
  235. return false;
  236. }
  237. });
  238. },
  239. formatTime(timeStamp) {
  240. var date = new Date();
  241. date.setTime(timeStamp * 1000);
  242. var y = date.getFullYear();
  243. var m = date.getMonth() + 1;
  244. m = m < 10 ? ('0' + m) : m;
  245. var d = date.getDate();
  246. d = d < 10 ? ('0' + d) : d;
  247. var h = date.getHours();
  248. h = h < 10 ? ('0' + h) : h;
  249. var minute = date.getMinutes();
  250. var second = date.getSeconds();
  251. minute = minute < 10 ? ('0' + minute) : minute;
  252. second = second < 10 ? ('0' + second) : second;
  253. return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
  254. },
  255. loadData(id){
  256. let that = this;
  257. this.loading = true;
  258. request({
  259. params: {
  260. r:'business-bonus/default/detail',
  261. inc_id: id
  262. },
  263. method: 'get',
  264. }).then(e => {
  265. that.loading = false;
  266. if (e.data.code == 0) {
  267. if (e.data.data.is_null == 0) {
  268. that.detailInfo = e.data.data.info;
  269. that.getList();
  270. }
  271. } else {
  272. that.$message.error(e.data.msg);
  273. }
  274. }).catch(e => {
  275. that.loading = false;
  276. });
  277. },
  278. switchFun(val, id, field) {
  279. if (field == 'status') {
  280. let param = {id: id, status: val};
  281. this.send('business-bonus/default/handle',param)
  282. }
  283. },
  284. send(url, params, callback = null) {
  285. let self = this;
  286. request({
  287. params: {
  288. r: url,
  289. },
  290. method: 'post',
  291. data: params
  292. }).then(e => {
  293. if (e.data.code == 0) {
  294. self.$message.success(e.data.msg);
  295. self.getList();
  296. } else {
  297. self.$message.error(e.data.msg);
  298. }
  299. }).catch(e => {
  300. console.log(e);
  301. });
  302. if(callback) return e.data;
  303. },
  304. }
  305. });
  306. </script>
  307. <style>
  308. .user_info{
  309. background: #FFF;
  310. padding: 20px;
  311. margin-bottom: 10px;
  312. }
  313. .user_detail{
  314. display: flex;
  315. /* align-items: center; */
  316. }
  317. .user_detail .info{
  318. display: flex;
  319. font-size: 12px;
  320. color: #939393;
  321. }
  322. .user_detail .info .text{
  323. color: #000;
  324. margin-right: 40px;
  325. }
  326. .user_detail .user_name{
  327. font-size: 15px;
  328. margin-bottom: 10px;
  329. }
  330. </style>