From 72454c3e8f686c1325fb265d59b8b63251bd17e2 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期五, 16 五月 2025 16:14:14 +0800
Subject: [PATCH] 黑名单列表(添加移出)

---
 manager/src/views/customer/customer-black/index.vue |  257 ++++++++++++++++++++++++++++++++++++++++++
 manager/src/api/customer-black.js                   |   27 ++++
 manager/src/views/customer/index.vue                |   30 ++--
 3 files changed, 300 insertions(+), 14 deletions(-)

diff --git a/manager/src/api/customer-black.js b/manager/src/api/customer-black.js
new file mode 100644
index 0000000..433fc16
--- /dev/null
+++ b/manager/src/api/customer-black.js
@@ -0,0 +1,27 @@
+import service from "@/libs/axios";
+
+// 鑾峰彇瀹㈡埛榛戝悕鍗曞垪琛�
+export const getCustomerBlackList = (params) => {
+  return service({
+    url: "/customer-black/page",
+    method: "GET",
+    params: params
+  })
+}
+
+// 娣诲姞瀹㈡埛榛戝悕鍗�
+export const addCustomerBlackByPC = (params) => {
+  return service({
+    url: "/customer-black",
+    method: "POST",
+    data: params
+  })
+}
+
+// 绉婚櫎瀹㈡埛榛戝悕鍗曞垪琛�
+export const delCustomerBlackById = (params) => {
+  return service({
+    url: "/customer-black/" + params,
+    method: "DELETE",
+  })
+}
diff --git a/manager/src/views/customer/customer-black/index.vue b/manager/src/views/customer/customer-black/index.vue
new file mode 100644
index 0000000..58d829d
--- /dev/null
+++ b/manager/src/views/customer/customer-black/index.vue
@@ -0,0 +1,257 @@
+<template>
+  <card>
+    <Form
+      ref="searchForm"
+      @keydown.enter.native="handleSearch"
+      :model="searchForm"
+      inline
+      :label-width="70"
+      class="search-form"
+    >
+      <Form-item label="鐢ㄦ埛鍚�" prop="username">
+        <Input
+          type="text"
+          v-model="searchForm.username"
+          clearable
+          @on-clear="handleSearch"
+          @on-change="handleSearch"
+          style="width: 160px"
+        />
+      </Form-item>
+      <Form-item label="鏄电О" prop="nickname">
+        <Input
+          type="text"
+          v-model="searchForm.nickName"
+          clearable
+          @on-clear="handleSearch"
+          @on-change="handleSearch"
+          style="width: 160px"
+        />
+      </Form-item>
+      <Form-item label="鍟嗗" prop="storeId">
+        <Select
+          v-model="searchForm.storeId"
+          style="width:160px"
+          :loading="storeSelectLoading"
+          class="custom-select"
+          clearable
+          @on-clear="handleSearch"
+          @on-change="handleSearch"
+        >
+          <Option
+            v-for="item in selectOptions"
+            :value="item.id"
+            :key="item.id"
+          >
+            {{ item.storeName }}
+          </Option>
+        </Select>
+      </Form-item>
+      <Button
+        @click="handleSearch"
+        type="primary"
+        icon="ios-search"
+        class="search-btn"
+      >鎼滅储</Button
+      >
+    </Form>
+    <Table
+      :loading="loading"
+      border
+      :columns="columns"
+      :data="customerBlackList"
+      ref="table"
+      sortable="custom"
+      @on-sort-change="changeSort"
+      @on-selection-change="showSelect"
+    >
+      <template slot-scope="{ row, index }" slot="action">
+        <Button type="error" size="small" style="margin-right: 5px" @click="removeBlack(row)">绉诲嚭榛戝悕鍗�</Button>
+      </template>
+    </Table>
+    <Row type="flex" justify="end" class="mt_10">
+      <Page
+        :current="searchForm.pageNumber"
+        :total="total"
+        :page-size="searchForm.pageSize"
+        @on-change="changePage"
+        @on-page-size-change="changePageSize"
+        :page-size-opts="[10, 20, 50]"
+        size="small"
+        show-total
+        show-elevator
+        show-sizer
+      ></Page>
+    </Row>
+  </card>
+</template>
+<script>
+import JsonExcel from "vue-json-excel";
+import {addCustomerBlackByPC,getCustomerBlackList,delCustomerBlackById} from "@/api/customer-black.js"
+import {getStoreSelectOptions} from "@/api/customer";
+export default {
+  name: 'customer-black',
+  components:{
+    "download-excel": JsonExcel,
+  },
+  data(){
+    return{
+      searchForm:{
+        storeId: '', //鍟嗗
+        username:'', //鐢ㄦ埛鍚�
+        nickName:'', // 鏄电О
+        pageNumber: 1, // 褰撳墠椤垫暟
+        pageSize: 10, // 椤甸潰澶у皬
+      },
+
+      loading:false,
+      columns: [
+        {
+          type: 'selection',
+          width: 60,
+          align: 'center'
+        },
+        {
+          title:'鐢ㄦ埛鍚�',
+          key: 'username',
+          minWidth: 60,
+          tooltip: true,
+        },
+        {
+          title:'鏄电О',
+          key: 'nickName',
+          minWidth: 60,
+          tooltip: true,
+        },
+        {
+          title:'鎬у埆',
+          key: 'sex',
+          tooltip: true,
+          render: (h, params) => {
+            const sexText = params.row.sex === 1 ? '鐢�' : '濂�';
+            return h('span', sexText);
+          }
+        },
+        {
+          title:'鍦板潃',
+          key: 'region',
+          minWidth: 60,
+          tooltip: true,
+        },
+        {
+          title:'鐘舵��',
+          key: 'disabled',
+          tooltip: true,
+          render: (h, params) => {
+            const sexText = params.row.disabled === true ? '绂佺敤' : '姝e父';
+            return h('span', sexText);
+          }
+        },
+        {
+          title: '鎿嶄綔',
+          key: 'action',
+          slot: 'action',
+          minWidth: 150,
+          align: 'center'
+        }
+
+      ],
+      total:0,
+      customerBlackList:[],
+      selectCount: 0, // 宸查�夋暟閲�
+      selectList: [], // 宸查�夋暟鎹垪琛�
+
+      //鍟嗗涓嬫媺妗嗘暟鎹�
+      selectOptions:[],
+      storeSelectLoading: false,
+    }
+  },
+  mounted() {
+    this.init()
+  },
+  methods:{
+    init(){
+      this.getCustomerBlackList()
+      this.getStoreSelectOptions()
+    },
+    getStoreSelectOptions(){
+      this.storeSelectLoading = true;
+      getStoreSelectOptions().then(res =>{
+        this.storeSelectLoading = false;
+        if (res.code === 200){
+          this.selectOptions = res.data;
+        }
+      })
+    },
+    getCustomerBlackList(){
+      this.loading = true;
+      getCustomerBlackList(this.searchForm).then(res =>{
+        this.loading = false;
+        if (res.code === 200) {
+          this.customerBlackList = res.data;
+          this.total = res.total;
+        }
+      })
+    },
+    handleSearch(){
+      this.searchForm.pageNumber = 1;
+      this.searchForm.pageSize = 10;
+      this.getCustomerBlackList();
+    },
+    changePage(v){
+      this.searchForm.pageNumber = v
+      this.getCustomerBlackList()
+    },
+    // 淇敼size
+    changePageSize(v){
+      this.searchForm.pageNumber = 1;
+      this.searchForm.pageSize = v;
+      this.getCustomerBlackList()
+    },
+    changeSort(){
+
+    },
+    showSelect(){
+      this.selectList = e.map(d => d.id);
+      this.selectCount = e.length;
+    },
+    removeBlack(row){
+      console.log(row)
+      delCustomerBlackById(row.id).then(res =>{
+        if (res.code === 200){
+          this.$Message.success("绉婚櫎鎴愬姛");
+        }
+        this.getCustomerBlackList();
+      })
+    }
+
+  }
+}
+</script>
+<style lang="scss" scoped>
+.export {
+  margin: 10px 20px 10px 0;
+}
+.export-excel-wrapper {
+  display: inline;
+}
+.order-tab {
+  width: 950px;
+  height: 36px;
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  background-color: #f0f0f0;
+  padding: 0 10px;
+  margin-bottom: 10px;
+  div {
+    text-align: center;
+    padding: 4px 12px;
+    border-radius: 4px;
+    cursor: pointer;
+  }
+  .current {
+    background-color: #ffffff;
+  }
+}
+</style>
diff --git a/manager/src/views/customer/index.vue b/manager/src/views/customer/index.vue
index 0076c30..40112e7 100644
--- a/manager/src/views/customer/index.vue
+++ b/manager/src/views/customer/index.vue
@@ -126,6 +126,7 @@
 <script>
 import JsonExcel from "vue-json-excel";
 import {getCustomerList,addCustomerTag,saveCustomerTagById,getTagList,getStoreSelectOptions} from "@/api/customer";
+import {addCustomerBlackByPC} from "@/api/customer-black.js"
 
 export default {
   name:"customer",
@@ -243,7 +244,13 @@
       },
       //鍟嗗涓嬫媺妗嗘暟鎹�
       selectOptions:[],
-      storeSelectLoading: false
+      storeSelectLoading: false,
+
+      //榛戝悕鍗曡姹傚璞�
+      blackParam:{
+        storeId:'',
+        userId:'',
+      }
 
     }
   },
@@ -309,17 +316,6 @@
       this.searchForm.pageSize = 10;
       this.getCustomerList();
     },
-    // 鏂板鎴栦慨鏀�
-    // saveOrUpdate() {
-    //   this.$refs.form.validate(valid => {
-    //     if (valid) {
-    //       this.submitLoading = true
-    //         // 鏂板
-    //         console.log(this.tagForm)
-    //
-    //     }
-    //   });
-    // },
     handleSelectChange(newVal){
       console.log(newVal)
       this.getCustomerList()
@@ -348,8 +344,14 @@
       this.searchForm.pageSize = v;
       this.getCustomerList()
     },
-    joinBlack(){
-
+    joinBlack(row){
+      this.blackParam.storeId = row.storeId;
+      this.blackParam.userId = row.id;
+      addCustomerBlackByPC(this.blackParam).then(res =>{
+        if (res.code === 200){
+          this.$Message.success(res.msg);
+        }
+      })
     },
 
 

--
Gitblit v1.8.0