zqwang 1 anno fa
parent
commit
89c3f0f72e

+ 5 - 0
src/api/customer/audience.ts

@@ -0,0 +1,5 @@
+import http from '@/api/http';
+
+export function getUserInfo (params: object) {
+  return http.get('/audienceManage/audience/detail',params);
+}

+ 83 - 0
src/views/customer/audience/index.vue

@@ -0,0 +1,83 @@
+<template>
+	<div>
+		<Search :search="search" :reset="reset">
+		  <template v-slot:body>
+		    <el-form-item label="用户id" prop="uid">
+		      <el-input v-model="id" name="uid" clearable />
+		    </el-form-item>
+		
+		  </template>
+		</Search>
+		
+		<div class="table-default">
+			<el-table  :data="tableData"  class="mt-3" v-loading="loading">
+			  <el-table-column prop="miniprogram_name" label="小程序" />
+			  <el-table-column prop="uid" label="用户id" />
+			  <el-table-column prop="user_created_at" label="小程序注册时间" />
+			  <el-table-column prop="ranse_start_at" label="最新染色时间" />
+			  <el-table-column prop="charge_coin" label="看币余额" />
+			  <el-table-column prop="reward_coin" label="充送币余额" />
+			  <el-table-column prop="total_charge_count" label="累计充值次数" />
+			  <el-table-column prop="vip_text" label="VIP状态" />
+			  <el-table-column prop="vip_end" label="VIP结束时间" />
+			  <el-table-column label="操作" fixed="right">
+					<template #default="scope">
+						<el-button v-action="'channel.orders.userDetails'" link type="primary" size="small"
+						  @click="openDetail(scope.row)">用户详情</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+		</div>
+		<Dialog v-model="userDetailVisible" width="50%" title="用户详情" :alignCenter="true" destroy-on-close>
+		  <userDetail @close="closeDetail" :primary="userDetailData"></userDetail>
+		</Dialog>
+	</div>
+</template>
+
+<script lang="ts" setup>
+import { computed, onMounted,} from 'vue';
+import userDetail from './userDetail/index.vue';
+import router from '@/router'
+import {getUserInfo} from "@/api/customer/audience"
+import { list } from 'postcss';
+const rolesIdentify = inject('rolesIdentify');
+const loading = ref(false)
+const id = ref('');	
+const tableData = ref([]);
+const userDetailData = ref({})
+const userDetailVisible = ref(false)
+const   search = async ()  => {
+	if(id.value <  1){
+		ElMessage.error("请输入用户id");
+		return false;
+	};
+	loading.value = true;
+	tableData.value = [];
+	if(rolesIdentify.value.includes('optimizer')){
+		let res = 	await getUserInfo({uid:id.value})
+		if(res.data){
+			tableData.value.push(res.data);
+		}
+	}
+	loading.value = false;
+	
+};
+
+
+const closeDetail = () =>{
+	userDetailVisible.value = false;
+}
+const openDetail = ( data: object) =>{
+	userDetailVisible.value = true;
+	userDetailData.value = data;
+}
+onMounted(() =>{
+	// tableData.push();
+	// console.log(tableData);
+})
+</script>
+
+
+
+<style>
+</style>

+ 69 - 0
src/views/customer/audience/userDetail/index.vue

@@ -0,0 +1,69 @@
+<template>
+  <el-tabs v-model="activeName" @tab-change="handChange">
+    <el-tab-pane label="阅读记录" name="readLog">
+      <readLogTable v-if="activeName == 'readLog'" :primary="props.primary"></readLogTable>
+    </el-tab-pane>
+
+    <el-tab-pane label="充值记录" name="recharge">
+      <rechargeTable v-if="activeName == 'recharge'" :primary="props.primary"></rechargeTable>
+    </el-tab-pane>
+
+    <el-tab-pane label="消耗记录" name="consume">
+      <consumeTable v-if="activeName == 'consume'" :primary="props.primary"></consumeTable>
+    </el-tab-pane>
+  </el-tabs>
+</template>
+
+<script lang="ts" setup>
+import { wechatMinUserInfo } from '@/api/orders/index';
+import { useGetList } from '@/hook/curd/useGetList';
+import rechargeTable from './tables/recharge.vue'
+import consumeTable from './tables/consume.vue'
+import readLogTable from './tables/readLog.vue'
+import {getUserInfo} from "@/api/customer/audience"
+import { ref } from 'vue'
+import type { TabsPaneContext } from 'element-plus'
+const props = defineProps({
+  primary: Object,
+});
+
+
+const activeName = ref('readLog')
+
+const handChange = (tab: TabsPaneContext, event: Event) => {
+  activeName.value = tab
+}
+onMounted(() => {
+	console.log("111111111111111111",props.primary);
+})
+
+</script>
+
+<style lang="scss" scoped>
+.wrapper {
+  display: flex;
+  flex-direction: column;
+  align-items: flex-start;
+  justify-content: center;
+  width: 100%;
+
+  .row {
+    width: 100%;
+    display: flex;
+
+    .item {
+      margin: 9px;
+
+      .label {
+        font-size: 16px;
+      }
+
+      .content {
+        font-size: 18px;
+        font-weight: 600;
+      }
+    }
+  }
+
+}
+</style>

+ 40 - 0
src/views/customer/audience/userDetail/tables/consume.vue

@@ -0,0 +1,40 @@
+<template>
+  <div class="flex flex-col justify-between w-full sm:flex-row" style="width:100%;">
+    <div class="table-default" style="width:100%;">
+      <el-table :data="tableData" height="500" class="w-full mt-3" style="width:100%;">
+        <el-table-column prop="updated_at" label="消耗时间" />
+        <el-table-column label="说明">
+          <template #default="scope">
+            <div>短剧:<span>{{ scope.row.video_name }}</span></div>
+            <div>章节名称:<span>{{ scope.row.series_name }}</span></div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="charge_coin_cost" label="看剧币支付" />
+        <el-table-column prop="reward_coin_cost" label="赠币支付" />
+      </el-table>
+      <Paginate />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { useGetList } from '@/hook/curd/useGetList';
+import { useOpen } from '@/hook/curd/useOpen';
+import { FormInstance } from 'element-plus';
+import { tuiguangPromotionAdd } from '@/api/promotion/index'
+const api = 'channel/wechat_min_user/consume_record';
+const props = defineProps({
+  primary: Object,
+});
+const { data, query, search, reset, loading } = useGetList(api);
+if (props.primary) {
+  query.value.uid = props.primary.uid
+}
+const tableData = computed(() => data.value?.data);
+
+onMounted(() => {
+  search();
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 38 - 0
src/views/customer/audience/userDetail/tables/readLog.vue

@@ -0,0 +1,38 @@
+<template>
+  <div class="flex flex-col justify-between w-full sm:flex-row" style="width:100%;">
+    <div class="table-default" style="width:100%;">
+      <el-table :data="tableData" height="500" class="w-full mt-3" style="width:100%;">
+        <el-table-column prop="watch_at" label="时间" />
+        <el-table-column prop="video_id" label="短剧ID">
+        </el-table-column>
+        <el-table-column prop="video_name" label="短剧名称" />
+        <el-table-column prop="video_series_sequence" label="章节名称" />
+      </el-table>
+      <Paginate />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { useGetList } from '@/hook/curd/useGetList';
+import { useOpen } from '@/hook/curd/useOpen';
+import { FormInstance } from 'element-plus';
+import { tuiguangPromotionAdd } from '@/api/promotion/index'
+const api = 'channel/wechat_min_user/watch_record';
+const props = defineProps({
+  primary: Object,
+});
+const { data, query, search, reset, loading } = useGetList(api);
+if (props.primary) {
+  query.value.uid = props.primary.uid
+}
+const tableData = computed(() => data.value?.data);
+
+onMounted(() => {
+  search();
+});
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 38 - 0
src/views/customer/audience/userDetail/tables/recharge.vue

@@ -0,0 +1,38 @@
+<template>
+  <div class="flex flex-col justify-between w-full sm:flex-row" style="width:100%;">
+    <div class="table-default" style="width:100%;">
+      <el-table :data="tableData"  height="500" class="w-full mt-3" style="width:100%;">
+        <el-table-column prop="pay_end_at" label="充值时间" />
+        <el-table-column prop="price" label="充值金额">
+        </el-table-column>
+        <el-table-column prop="rechare_coin" label="看币剧数量" />
+        <el-table-column prop="given" label="赠币数量" />
+        <el-table-column prop="pay_name" label="支付方式" />
+        <el-table-column prop="from_page" label="充值来源" />
+      </el-table>
+      <Paginate />
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { useGetList } from '@/hook/curd/useGetList';
+import { useOpen } from '@/hook/curd/useOpen';
+import { FormInstance } from 'element-plus';
+import { tuiguangPromotionAdd } from '@/api/promotion/index'
+const api = 'channel/wechat_min_user/order_list';
+const props = defineProps({
+  primary: Object,
+});
+const { data, query, search, reset, loading } = useGetList(api);
+if (props.primary) {
+  query.value.uid = props.primary.uid
+}
+const tableData = computed(() => data.value?.data);
+
+onMounted(() => {
+  search();
+});
+</script>
+
+<style lang="scss" scoped></style>