用户消费金额与总订单数,按标签过滤会员,订单列表会员名称与导出
6个文件已修改
105 ■■■■ 已修改文件
manager/src/api/member.js 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/api/order.js 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/views/member/list/index.vue 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/views/member/list/memberDetail.vue 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/views/order/order/orderList.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/views/video/VideoList.vue 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/api/member.js
@@ -37,7 +37,20 @@
//  获取会员列表
export const getMemberListData = (params) => {
  return getRequest("/passport/member", params);
  const processedParams = new URLSearchParams();
  Object.entries(params).forEach(([key, value]) => {
    if (key === 'tagIds' && Array.isArray(value)) {
      // 如果是tagIds数组,为每个元素添加[]后缀
      value.forEach(tagId => {
        processedParams.append('tagIds[]', tagId);
      });
    } else {
      processedParams.append(key, value);
    }
  });
  return getRequest(`/passport/member?${processedParams.toString()}`);
};
//  获取会员详情
manager/src/api/order.js
@@ -6,6 +6,9 @@
  deleteRequest
} from '@/libs/axios';
export const countByIdOrder = (id) =>{
  return getRequest(`/order/order/countOrder/${id}`,)
}
//  交由商家申诉
export const storeComplain = (params) => {
manager/src/views/member/list/index.vue
@@ -14,6 +14,12 @@
          <Form-item label="联系方式" prop="mobile">
            <Input type="text" v-model="searchForm.mobile" placeholder="请输入会员联系方式" clearable style="width: 200px" />
          </Form-item>
          <Form-item label="用户标签" prop="tags">
            <Select v-model="searchForm.tagIds" multiple filterable :loading="selectLoading" style="width:200px;">
              <Option v-for="item in options" :key="item.id" :label="item.tagName" :value="item.id"></Option>
            </Select>
          </Form-item>
          <Button @click="handleSearch" class="search-btn" type="primary" icon="ios-search">搜索</Button>
        </Form>
      </Row>
@@ -73,6 +79,9 @@
            <Option v-for="item in options" :key="item.id" :label="item.tagName" :value="item.id"></Option>
          </Select>
        </FormItem>
        <FormItem label="用户自定义标签" prop="customerTags">
          <span class="inf0o" v-for="(item,index) in memberTags" :key="index">{{item.tagName}}<span v-if="index < memberTags.length - 1">, </span></span>
        </FormItem>
        <FormItem label="性别" prop="sex">
          <RadioGroup type="button" button-style="solid" v-model="form.sex">
            <Radio :label="1">
@@ -91,10 +100,7 @@
        </FormItem>
        <FormItem label="所在地" prop="mail">
          {{ form.region || '暂无地址' }}
          <Button style="margin-left: 10px;" @click="$refs.map.open()">选择</Button>
        </FormItem>
      </Form>
    </Modal>
@@ -111,6 +117,7 @@
import ossManage from "@/views/sys/oss-manage/ossManage";
import * as RegExp from "@/libs/RegExp.js";
import { getTags } from "@/api/tag.js";
import { detailById } from "@/api/memberCustomerTag.js"
export default {
  name: "member",
@@ -120,6 +127,7 @@
  },
  data() {
    return {
      memberTags:[],
      defaultPic: require('@/assets/default.png'),
      descTitle: "", // modal标题
      descFlag: false, //编辑查看框
@@ -143,6 +151,7 @@
        username: "",
        mobile: "",
        disabled: "OPEN",
        tagIds:[],
      },
      picModelFlag: false, // 选择图片
      form: {}, // 表单数据
@@ -330,6 +339,13 @@
    },
  },
  methods: {
    getMemberTags(id){
      detailById(id).then(res =>{
        if (res.code === 200){
          this.memberTags = res.data;
        }
      });
    },
    // 回调给父级
    callback(val, index) {
      this.selectMember.forEach(item => { item.___selected = false })
@@ -387,9 +403,10 @@
    },
    //查看详情修改
    editPerm(val) {
      this.form = {};
      this.descTitle = `查看用户 ${val.username}`;
      this.descFlag = true;
      this.getMemberTags(val.id);
      this.getMemberInfo(val.id);
    },
    addMember() {
manager/src/views/member/list/memberDetail.vue
@@ -20,7 +20,7 @@
              </div>
            </div>
            <div class="bottom-info">
              <p>上次登录 {{memberInfo.lastLoginDate}}&nbsp;
              <p>上次登录 {{memberInfo.lastLoginDate}}&nbsp;</p>
              <p>
                <i-switch size="large" v-model="memberInfo.disabled" :true-value="true" :false-value="false"
                          @on-change="memberStatusChange">
@@ -56,15 +56,34 @@
                  class="info">暂未完善</span>
            <span v-else class="info">{{memberInfo.region}}</span>
          </p>
        </div>
        <div class="ant-col-md-6">
          <p class="item">
            <span class="label">注册时间:</span>
            <span class="info">{{memberInfo.createTime}}</span>
          </p>
          <p class="item">
            <span class="label">用户自定义标签:</span>
            <span class="inf0o" v-for="(item,index) in memberTags" :key="index">{{item.tagName}}<span v-if="index < memberTags.length - 1">, </span></span>
            <span  v-for="(item,index) in memberTags" :key="index">{{item.tagName}}<span v-if="index < memberTags.length - 1">, </span></span>
          </p>
          <p class="item">
            <span class="label">总完成订单数:</span>
            <span class="info">{{orderNumCount}}</span>
          </p>
          <p class="item">
            <span class="label">总消费金额:</span>
            <span class="info">{{orderPriceCount}}</span>
          </p>
          <p class="item">
            <span class="label">系统标签:</span>
            <span  v-for="(item,index) in memberInfo.tags" :key="index">{{item.tagName}}<span v-if="index < memberInfo.tags.length - 1">, </span></span>
          </p>
        </div>
        <div>
        </div>
      </div>
    </Card>
@@ -369,6 +388,7 @@
  import multipleMap from "@/components/map/multiple-map";
  import * as RegExp from '@/libs/RegExp.js';
  import * as API_Order from "@/api/order.js";
  import {countByIdOrder} from "../../../api/order";
  export default {
    name: "memberDetail",
@@ -382,6 +402,8 @@
        id: "",//会员id
        loading: true, // 表单加载状态
        memberInfo: {},//会员信息
        orderPriceCount:0,
        orderNumCount:0,
        memberWalletInfo: {},//会员预存款信息
        addressModalTitle: "",//会员地址操作标题
        addressModalVisible: false, //会员地址操作弹出框
@@ -847,6 +869,7 @@
    methods: {
      init() {
        this.getCountOrderPrice();
        //查询会员信息
        this.getMemberInfo();
        //查询会员的历史积分数据
@@ -860,6 +883,12 @@
          }
        });
      },
      getCountOrderPrice(){
        API_Order.countByIdOrder(this.id).then(res =>{
          this.$set(this, "orderPriceCount", res.result.orderPriceCount);
          this.$set(this, "orderNumCount", res.result.orderNumCount);
        })
      },
      //会员信息tab改变事件
      memberInfoChange(v) {
        if (v == "point") {
manager/src/views/order/order/orderList.vue
@@ -18,11 +18,20 @@
            style="width: 160px"
          />
        </Form-item>
        <Form-item label="会员名称" prop="buyerName">
<!--        <Form-item label="会员名称" prop="buyerName">-->
<!--          <Input-->
<!--            type="text"-->
<!--            v-model="searchForm.buyerName"-->
<!--            placeholder="请输入会员名称"-->
<!--            clearable-->
<!--            style="width: 160px"-->
<!--          />-->
<!--        </Form-item>-->
        <Form-item label="会员昵称" prop="nickName">
          <Input
            type="text"
            v-model="searchForm.buyerName"
            placeholder="请输入会员名称"
            v-model="searchForm.nickName"
            placeholder="请输入会员昵称"
            clearable
            style="width: 160px"
          />
@@ -258,6 +267,7 @@
        orderType: "",
        orderSn: "",
        buyerName: "",
        nickName:"",
        orderStatus: "",
      },
      selectDate: null,
manager/src/views/video/VideoList.vue
@@ -259,13 +259,13 @@
        :title="playVideoTitle"
        width="800"
        :mask-closable="false"
        @close="playVideoClose"
        @on-cancel="playVideoClose"
      >
        <div class="video-warp">
          <video :src="playVideoUrl" autoplay controls style="width: 768px;height: 432px"/>
        </div>
        <div slot="footer">
          <Button type="text" @click="playVideoClose">关闭</Button>
          <Button type="text" @click="playVideoClose">关闭1</Button>
        </div>
      </Modal>
@@ -1067,11 +1067,10 @@
      this.upLoadVideoShow = false;
    },
    submitVideoUpload() {
      console.log(this.uploadVideoForm.coverUrl)
      if (this.uploadVideoForm.coverUrl === null || this.uploadVideoForm.coverUrl === undefined) {
        this.$Message.error('标题不能为空');
        return;
      }
      // if (this.uploadVideoForm.coverUrl === null || this.uploadVideoForm.coverUrl === undefined) {
      //   this.$Message.error('封面不能为空');
      //   return;
      // }
      this.uploadVideoForm.goodsList = this.uploadVideoForm.goodsList.filter(item => {
        return item.goodsNum > 0;
      })