zxl
2025-10-10 e417c17e9141a5121b76ed769852b14ff67d7028
店铺标签
2个文件已修改
2个文件已添加
464 ■■■■■ 已修改文件
manager/src/api/store-tag.js 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/views/seller/shop/shopDetail.vue 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/views/store-tag/store-tag.vue 272 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller/src/views/store-coupon/coupon_store.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
manager/src/api/store-tag.js
New file
@@ -0,0 +1,66 @@
import service from "@/libs/axios";
export const getPageList = (data) =>{
  return service({
    url: "/lmk/store-tag/page",
    method: "GET",
    params: data
  })
}
export const getTag = (data) =>{
  return service({
    url: "/lmk/store-tag/list",
    method: "GET",
    params: data
  })
}
export const addStoreTag =(data) =>{
  return service({
    url: "/lmk/store-tag",
    method: "POST",
    data: data
  })
}
export const bind =(data) =>{
  return service({
    url: "/lmk/store-tag/bind",
    method: "POST",
    data: data
  })
}
export const editTag = (data)=>{
  return service({
    url: "/lmk/store-tag",
    method: "PUT",
    data: data
  })
}
export const delTag = (data)=>{
  return service({
    url: "/lmk/store-tag/" + data,
    method: "DELETE",
  })
}
export const removeBatch = (data) =>{
  return service({
    url: "/lmk/store-tag/batch",
    method: "DELETE",
    data:data
  })
}
export const getStoreTagsById =(data) =>{
  return service({
    url: "/lmk/store-tag/storeTags/" + data,
    method: "GET",
  })
}
export const delTagByStoreTagRefId = (data)=>{
  return service({
    url: "/lmk/store-tag/delTagByStoreTagRefId/" + data,
    method: "DELETE",
  })
}
manager/src/views/seller/shop/shopDetail.vue
@@ -121,6 +121,29 @@
            </span>
          </p>
          <p class="item">
            <span class="label">店铺标签:</span>
            <span class="info">
              <template v-if="tagList?.length > 0">
              <!-- 遍历标签列表 -->
                <span v-for="(tag, index) in tagList" :key="tag.id">
                  {{ tag.tagName }}
                    <button
                      style="width: 20px; height: 20px; line-height: 1; border: none; background: #f0f0f0; border-radius: 50%; cursor: pointer; margin-left: 4px; font-size: 12px; display: inline-flex; align-items: center; justify-content: center;"
                      @click.stop="handleDeleteTag(tag.id, index)"
                      title="删除标签"
                    >
                    ×
                  </button>
                  <template v-if="index !== tagList.length - 1">、</template>
                </span>
              </template>
            <template v-else>暂无标签</template>
            </span>
          </p>
          <div style="display: flex;align-items: center;justify-content: center;">
            <Button type="primary"  @click="addStoreTag(storeInfo)">新增标签</Button>
          </div>
          <p class="item">
            <span class="label">店铺简介:</span>
            <span class="info">
              {{storeInfo.storeDesc?storeInfo.storeDesc:'暂未完善'}}
@@ -559,6 +582,22 @@
            </Row>
          </div>
        </TabPane>
        <Modal
          v-model="showModal"
          title="新增标签"
          width="800"
          :mask-closable="false"
        >
          <Select v-model="tagForm.storeTagId" placeholder="请选择" @on-query-change="searchChange" filterable
                  clearable style="width: 150px">
            <Option v-for="item in tagOptions" :value="item.id" :key="item.id">{{ item.tagName }}</Option>
          </Select>
          <div slot="footer">
            <Button @click="showModal = false">取消</Button>
            <Button type="primary" @click="handleSubmit" :loading="submitLoading">确定</Button>
          </div>
        </Modal>
      </Tabs>
    </Card>
@@ -566,7 +605,7 @@
</template>
<script>
  import { getTag,bind,getStoreTagsById,delTagByStoreTagRefId } from "@/api/store-tag"
  import ossManage from "@/views/sys/oss-manage/ossManage";
  import * as RegExp from '@/libs/RegExp.js';
  import {getCategoryTree} from "@/api/goods";
@@ -577,15 +616,23 @@
  export default {
    name: "member",
    components: {
      ossManage,
    },
    data() {
      return {
        tagOptions:[],
        submitLoading:false,
        tagForm:{
          storeId:null,
          storeTagId:"",
        },
        showModal:false,
        id: "",//店铺id
        categories: [], //店铺静音范围
        loading: true, // 表单加载状态
        storeInfo: {},//店铺信息
        storeInfo: {
        },//店铺信息
        tagList:[],
        checkAllGroup: [], //选中的经营分类
        selectDate: null, // 申请时间
@@ -846,7 +893,69 @@
      };
    },
    methods: {
      handleDeleteTag(storeTagRefId){
        console.log(storeTagRefId)
        delTagByStoreTagRefId(storeTagRefId).then(res=>{
          if (res.code === 200){
            this.$Message.success("删除成功")
          }
          this.getStoreTags();
        })
      },
      getStoreTags(){
        getStoreTagsById(this.id).then(res =>{
          if (res.code === 200){
            this.$set(this, "tagList", res.data);
          }
        })
      },
      searchChange(val){
        this.getStoreTag(val)
      },
      getStoreTag(val){
        const params = {
          tagName: ''
        }
        if (val) {
          params.tagName = val;
        } else {
          params.tagName = ''
        }
        getTag(params).then(res =>{
          if (res.code ===200){
            this.tagOptions = res.data
          }
        })
      },
      handleSubmit(){
        if (this.tagForm.storeTagId === null || this.tagForm.storeTagId ===""){
          this.$Message.error("请选择标签")
         return
        }
        this.showModal = false;
          bind(this.tagForm).then(res =>{
            if (res.code === 200){
          }
          this.getStoreTags();
            this.getStoreTag();
        })
      },
      addStoreTag(info){
        console.log(info)
        this.tagForm.storeId = info.storeId;
        this.tagForm.storeTagId = "";
        this.showModal = true;
      },
      init() {
        this.getStoreTags();
        this.getStoreTag();
        //查店铺基本信息
        this.getStoreInfo();
        //查询店铺分类
manager/src/views/store-tag/store-tag.vue
New file
@@ -0,0 +1,272 @@
<template>
  <div>
    <card>
      <Form
        ref="searchForm"
        @keydown.enter.native="handleSearch"
        :model="searchForm"
        inline
        :label-width="70"
        class="search-form"
      >
        <Form-item label="标签名称" prop="tagName">
          <Input
            type="text"
            v-model="searchForm.tagName"
            clearable
            @on-clear="handleSearch"
            @on-change="handleSearch"
            style="width: 160px"
          />
        </Form-item>
        <Button
          @click="handleSearch"
          type="primary"
          icon="ios-search"
          class="search-btn"
        >搜索</Button
        >
      </Form>
      <Row class="operation padding-row">
        <Button @click="openAdd" type="info">添加</Button>
        <Button @click="delBatch" type="error">批量删除</Button>
      </Row>
      <Table
        :loading="loading"
        border
        :columns="columns"
        :data="tagList"
        ref="table"
        sortable="custom"
        @on-sort-change="changeSort"
        @on-selection-change="showSelect"
      >
        <template slot-scope="{ row, index }" slot="action">
          <Button type="info" size="small" style="margin-right: 5px" @click="openEdit(row)">编辑标签</Button>
          <Button type="error" size="small" style="margin-right: 5px" @click="del(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>
      <Modal
        v-model="modelShow"
        :title="modelTitle"
      >
        <Form ref="form" :model="form" :label-width="70" :rules="rules">
          <FormItem label="标签名称" prop="tagName">
            <Input v-model="form.tagName" autocomplete="off"/>
          </FormItem>
        </Form>
        <div slot="footer">
          <Button type="text" @click="modelClose">取消</Button>
          <Button type="primary" :loading="submitLoading" @click="saveOrUpdate">提交</Button>
        </div>
      </Modal>
    </card>
  </div>
</template>
<script>
import { getPageList,addStoreTag,editTag,delTag,removeBatch } from "@/api/store-tag"
  export default {
    name: "store-tag",
    data(){
      return{
        loading:false,
        columns:[
          {
            type: 'selection',
            width: 60,
            align: 'center'
          },
          {
            title:'标签名称',
            key: 'tagName',
            minWidth: 60,
            tooltip: true,
          },
          {
            title: '操作',
            key: 'action',
            slot: 'action',
            minWidth: 150,
            align: 'center'
          }
        ],
        total:0,
        tagList:[],
        searchForm: {
          // 搜索框初始化对象
          pageNumber: 1, // 当前页数
          pageSize: 10, // 页面大小
          tagName: '', // 标签名称
        },
        // 对话框标题
        modelTitle:'',
        modelShow:false,
        submitLoading:false,
        // 表单
        form: {
          id: '',
          tagName: '',
        },
        rules: {
          tagName: [
            {required: true, message: "标签名称不能为空", trigger: "blur"}
          ],
        },
        //多选
        selectCount: 0, // 已选数量
        selectList: [], // 已选数据列表
      }
    },
    mounted(){
      this.init();
    },
    methods:{
      init(){
        this.getTagList()
      },
      openAdd(){
        this.modelTitle = "新增标签";
        this.modelShow = true;
        this.form={
          id: '',
          tagName: '',
        }
      },
      openEdit(row){
        this.form.id = row.id;
        this.form.tagName = row.tagName;
        this.modelTitle= "修改标签";
        this.modelShow = true;
      },
      saveOrUpdate() {
        this.$refs.form.validate(valid => {
          if (valid) {
            this.submitLoading = true
            if (this.form.id) {
              // 修改
              editTag(this.form).then(res => {
                if (res.code === 200) {
                  this.$Message.success("修改成功");
                  this.modelClose()
                  this.getTagList()
                }
              })
            } else {
              // 新增
              addStoreTag(this.form).then(res => {
                if (res.code === 200) {
                  this.$Message.success("添加成功");
                  this.modelClose()
                  this.getTagList()
                }
              })
            }
          }
        });
      },
      del(row){
        delTag(row.id).then(res =>{
          if (res.code === 200){
            this.$Message.success("删除成功")
          }
          this.getTagList();
        })
      },
      delBatch() {
        if (this.selectCount <= 0) {
          this.$Message.warning("您还未选择要删除的数据");
          return;
        }
        // 显示确认对话框
        this.$Modal.confirm({
          title: '确认删除',
          content: `您确定要删除选中的 ${this.selectCount} 条数据吗?`,
          onOk: () => {
            // 用户点击确认后执行删除
            this.removeBatch();
          },
          onCancel: () => {
            this.$Message.info('已取消删除');
          }
        });
      },
      async removeBatch() {
        try {
          const res = await removeBatch(this.selectList);
          if (res.code === 200) {
            this.getTagList();
            this.selectedRows = [];
            this.selectCount = 0;
            this.$Message.success('删除成功');
          } else {
            this.$Message.error(res.message || '删除失败');
          }
        } catch (err) {
          console.log(err);
          this.$Message.error('请求失败,请重试');
        }
      },
      // 关闭弹窗
      modelClose() {
        this.submitLoading = false
        this.modelShow = false
      },
      getTagList(){
        this.loading = true;
        getPageList(this.searchForm).then((res) => {
          this.loading = false;
          if (res.code === 200) {
            this.tagList = res.data;
            this.total = res.total;
          }
        });
        this.loading = false;
      },
      handleSearch(){
        this.searchForm.pageNumber = 1;
        this.searchForm.pageSize = 10;
        this.getTagList();
      },
      // 分页 改变页码
      changePage(v) {
        this.searchForm.pageNumber = v;
        this.getTagList();
      },
      // 分页 改变页数
      changePageSize(v) {
        this.searchForm.pageNumber = 1;
        this.searchForm.pageSize = v;
        this.getTagList();
      },
      changeSort(){
      },
      showSelect(e){
        this.selectList = e.map(d => d.id);
        this.selectCount = e.length;
      },
    },
  }
</script>
<style scoped lang="scss">
</style>
seller/src/views/store-coupon/coupon_store.vue
@@ -28,17 +28,6 @@
              <Option value="GENERATE">生成</Option>
            </Select>
          </FormItem>
          <FormItem label="启用状态:">
            <Select
              v-model="listQuery.status"
              placeholder="全部状态"
              clearable
              style="width: 180px"
            >
              <Option value="ENABLE">启用</Option>
              <Option value="DISABLE">禁用</Option>
            </Select>
          </FormItem>
        </Form>
      </div>
    </Card>