浏览代码

优惠金额功能开发 新增菜单

ly 1 年之前
父节点
当前提交
0926772a07

+ 62 - 0
src/api/business/lable.js

@@ -0,0 +1,62 @@
+import request from '@/utils/request'
+
+// 查询客户标签列表
+export function listLable(query) {
+  request.defaults.baseURL = '/ezhizao-yzbh-crm'
+  return request({
+    url: '/business/lable/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询客户标签详细
+export function getLable(id) {
+  request.defaults.baseURL = '/ezhizao-yzbh-crm'
+  return request({
+    url: '/business/lable/' + id,
+    method: 'get'
+  })
+}
+
+
+
+// 新增客户标签
+export function addLable(data) {
+  request.defaults.baseURL = '/ezhizao-yzbh-crm'
+  return request({
+    url: '/business/lable',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改客户标签
+export function updateLable(data) {
+  request.defaults.baseURL = '/ezhizao-yzbh-crm'
+  return request({
+    url: '/business/lable',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除客户标签
+export function delLable(id) {
+  request.defaults.baseURL = '/ezhizao-yzbh-crm'
+  return request({
+    url: '/business/lable/' + id,
+    method: 'delete'
+  })
+}
+
+
+
+// 查询客户标签列表
+export function listLableNoPage() {
+  request.defaults.baseURL = '/ezhizao-yzbh-crm'
+  return request({
+    url: '/business/lable/getList',
+    method: 'get',
+  })
+}

+ 133 - 0
src/utils/match.js

@@ -0,0 +1,133 @@
+/**
+* floatObj 包含加减乘除四个方法,能确保浮点数运算不丢失精度
+*
+* 精度丢失问题(或称舍入误差,其根本原因是二进制和实现位数限制有些数无法有限表示
+* 以下是十进制小数对应的二进制表示
+*      0.1 >> 0.0001 1001 1001 1001…(1001无限循环)
+*      0.2 >> 0.0011 0011 0011 0011…(0011无限循环)
+* 计算机里每种数据类型的存储是一个有限宽度,比如 JavaScript
+  使用 64 位存储数字类型,因此超出的会舍去。舍去的部分就是精度丢失的部分。
+*
+* ** method **
+*  add / subtract / multiply /divide
+*
+* ** explame **
+*  0.1 + 0.2 == 0.30000000000000004 (多了 0.00000000000004)
+*  0.2 + 0.4 == 0.6000000000000001  (多了 0.0000000000001)
+*  19.9 * 100 == 1989.9999999999998 (少了 0.0000000000002)
+*
+* floatObj.add(0.1, 0.2) === 0.3
+* floatObj.multiply(19.9, 100) === 1990
+*
+*/
+var floatObj = function () {
+
+    /*
+     * 判断obj是否为一个整数 整数取整后还是等于自己。利用这个特性来判断是否是整数
+     */
+    function isInteger (obj) {
+        // 或者使用 Number.isInteger()
+        return Math.floor(obj) === obj
+    }
+    /*
+     * 将一个浮点数转成整数,返回整数和倍数。如 3.14 >> 314,倍数是 100
+     * @param floatNum {number} 小数
+     * @return {object}
+     *   {times:100, num: 314}
+     */
+    function toInteger (floatNum) {
+        // 初始化数字与精度 times精度倍数  num转化后的整数
+        var ret = { times: 1, num: 0 }
+        var isNegative = floatNum < 0  //是否是小数
+        if (isInteger(floatNum)) {  // 是否是整数
+            ret.num = floatNum
+            return ret  //是整数直接返回
+        }
+        var strfi = floatNum + ''  // 转换为字符串
+        var dotPos = strfi.indexOf('.')
+        var len = strfi.substr(dotPos + 1).length // 拿到小数点之后的位数
+        var times = Math.pow(10, len)  // 精度倍数
+        /* 为什么加0.5?
+            前面讲过乘法也会出现精度问题
+            假设传入0.16344556此时倍数为100000000
+            Math.abs(0.16344556) * 100000000=0.16344556*10000000=1634455.5999999999 
+            少了0.0000000001
+            加上0.5 0.16344556*10000000+0.5=1634456.0999999999 parseInt之后乘法的精度问题得以矫正
+        */
+        var intNum = parseInt(Math.abs(floatNum) * times + 0.5, 10)
+        ret.times = times
+        if (isNegative) {
+            intNum = -intNum
+        }
+        ret.num = intNum
+        return ret
+    }
+
+    /*
+     * 核心方法,实现加减乘除运算,确保不丢失精度
+     * 思路:把小数放大为整数(乘),进行算术运算,再缩小为小数(除)
+     * @param a {number} 运算数1
+     * @param b {number} 运算数2
+     */
+    function operation (a, b, op) {
+        var o1 = toInteger(a)
+        var o2 = toInteger(b)
+        var n1 = o1.num  // 3.25+3.153
+        var n2 = o2.num
+        var t1 = o1.times
+        var t2 = o2.times
+        var max = t1 > t2 ? t1 : t2
+        var result = null
+        switch (op) {
+            // 加减需要根据倍数关系来处理
+            case 'add':
+                if (t1 === t2) { // 两个小数倍数相同
+                    result = n1 + n2
+                } else if (t1 > t2) {
+                    // o1 小数位 大于 o2
+                    result = n1 + n2 * (t1 / t2)
+                } else {  // o1小数位小于 o2
+                    result = n1 * (t2 / t1) + n2
+                }
+                return result / max
+            case 'subtract':
+                if (t1 === t2) {
+                    result = n1 - n2
+                } else if (t1 > t2) {
+                    result = n1 - n2 * (t1 / t2)
+                } else {
+                    result = n1 * (t2 / t1) - n2
+                }
+                return result / max
+            case 'multiply':
+                // 325*3153/(100*1000) 扩大100倍 ==>缩小100倍
+                result = (n1 * n2) / (t1 * t2)
+                return result
+            case 'divide':
+                // (325/3153)*(1000/100)  缩小100倍 ==>扩大100倍
+                result = (n1 / n2) * (t2 / t1)
+                return result
+        }
+    }
+
+    // 加减乘除的四个接口
+    function add (a, b) {
+        return operation(a, b, 'add')
+    }
+    function subtract (a, b) {
+        return operation(a, b, 'subtract')
+    }
+    function multiply (a, b) {
+        return operation(a, b, 'multiply')
+    }
+    function divide (a, b) {
+        return operation(a, b, 'divide')
+    }
+    return {
+        add: add,
+        subtract: subtract,
+        multiply: multiply,
+        divide: divide
+    }
+}();
+export default floatObj;

+ 75 - 30
src/views/business/crm/order/form.vue

@@ -236,6 +236,23 @@
                 />
               </el-form-item>
             </el-col>
+            <el-col :span="4">
+              <el-form-item label="客户标签" prop="customerLabelId">
+                <el-select v-model="form.customerLabelId" 
+                style="width: 100%"
+                v-if="editStatus"
+                size="small">
+                <el-option
+                v-for="item in options"
+                :key="item.id"
+                :label="item.lable"
+                :value="item.id"
+              />
+              </el-select>
+              <span v-else>{{ selectedOptionLabel }}</span>
+              </el-form-item>
+            
+            </el-col>
             <el-col :span="14">
               <el-form-item label="备注" prop="remark">
                 <el-input
@@ -287,12 +304,12 @@
                           margin-bottom: 10px;
                         "
                       >
-                        <el-col :span="5" style="padding-top: 18px">
+                        <el-col :span="4" style="padding-top: 18px">
                           <el-form-item label="服务项目">
                             {{ item.taskTypeName }}
                           </el-form-item>
                         </el-col>
-                        <el-col :span="5" style="padding-top: 18px">
+                        <el-col :span="4" style="padding-top: 18px">
                           <el-form-item label="月单价">
                             <el-input-number
                               v-if="editStatus"
@@ -309,7 +326,7 @@
                             <div v-else>{{ rowNum(item.price) }}</div>
                           </el-form-item>
                         </el-col>
-                        <el-col :span="5" style="padding-top: 18px">
+                        <el-col :span="4" style="padding-top: 18px">
                           <el-form-item label="服务月数">
                             <el-input-number
                               v-if="editStatus"
@@ -331,7 +348,7 @@
                             <div v-else>{{ item.serviceNum }}</div>
                           </el-form-item>
                         </el-col>
-                        <el-col :span="5" style="padding-top: 18px">
+                        <el-col :span="4" style="padding-top: 18px">
                           <el-form-item label="赠送月数">
                             <el-input-number
                               v-if="editStatus"
@@ -354,7 +371,24 @@
                           </el-form-item>
                         </el-col>
                         <el-col :span="4" style="padding-top: 18px">
-                          <el-form-item label="总金额">
+                          <el-form-item label="优惠金额">
+                            <el-input-number
+                              v-if="editStatus"
+                              v-model="item.discountAmount"
+                              :precision="2"
+                              :step="0.1"
+                              :min="0"
+                              :controls="false"
+                              @change="
+                                (arg) =>
+                                  inputChangeHandler('loop', 'discountAmount', item, arg)
+                              "
+                            />
+                            <div v-else>{{ rowNum(item.discountAmount) }}</div>
+                          </el-form-item>
+                        </el-col>
+                        <el-col :span="4" style="padding-top: 18px">
+                          <el-form-item label="合计金额">
                             <div>{{ rowNum(item.amount) }}</div>
                           </el-form-item>
                         </el-col>
@@ -985,18 +1019,7 @@
             </el-col>
             <el-col :span="6">
               <el-form-item label="优惠金额:">
-                <el-input-number
-                  v-if="editStatus"
-                  v-model="form.discountAmount"
-                  :precision="2"
-                  :step="0.1"
-                  :controls="false"
-                  @change="
-                    (arg) =>
-                      inputChangeHandler('default', 'discountAmount', form, arg)
-                  "
-                />
-                <div v-else>{{ rowNum(form.discountAmount) }}</div>
+                <span>{{ rowNum(form.discountAmount) }}</span>
               </el-form-item>
             </el-col>
             <el-col :span="6">
@@ -1019,9 +1042,8 @@
                     :show-file-list="false"
                     multiple
                   >
-                    <el-button size="small" type="primary" icon="Upload"
-                      >点击上传</el-button
-                    >
+                    <el-button style="margin-top: 10px; margin-bottom:10px;" size="small" type="primary" icon="Upload"
+                      >点击上传</el-button>
                   </el-upload>
                 </div>
               </div>
@@ -1176,7 +1198,9 @@
 </template>
 <script setup>
 import { uploadFile } from "@/api/tool/file";
+import { listLableNoPage } from "@/api/business/lable";
 import AddCompanyDialog from "../AddCompanyDialog";
+import match from "@/utils/match";
 import {
   getOrder,
   initTaskTypes,
@@ -1281,7 +1305,7 @@ const provinces = ref(proxy.region.getProvinces());
 provinces.value.unshift({ code: "", name: "全部" });
 const cities = ref([]);
 const districts = ref([]);
-
+const options = ref([]);
 const contractEmpty = {
   serviceType: 1,
   contractType: 0,
@@ -1338,6 +1362,7 @@ function open(id) {
       editStatus.value = false;
       title.value = "修改订单信息";
       initRegion();
+      
     });
     // getOrder(id).then(response => {
     // })
@@ -1350,7 +1375,17 @@ function open(id) {
     editStatus.value = true;
     title.value = "添加订单信息";
   }
+  getOption()
 }
+function getOption(){
+  listLableNoPage().then(res =>{
+     options.value = res.data
+  })
+}
+const selectedOptionLabel = computed(() => {
+      const selectedOption = options.value.find(option => option.id === form.value.customerLabelId);
+      return selectedOption ? selectedOption.lable : '';
+    });
 
 function openSimple(id, optionType) {
   reset();
@@ -1669,6 +1704,7 @@ function changeDetails(type, arg) {
 }
 
 function inputChangeHandler(type, field, item, value, parent) {
+  console.log(111,type, field, item, value, parent);
   let amount = 0;
   switch (type) {
     case "loop":
@@ -1676,22 +1712,27 @@ function inputChangeHandler(type, field, item, value, parent) {
         case "price":
           amount =
             (item.serviceNum ? Number(item.serviceNum) : 0) *
-            (value ? Number(value) : 0);
+            (value ? Number(value) : 0) -(item.discountAmount?Number(item.discountAmount):0);
           item.amount = amount;
           break;
         case "serviceNum":
           amount =
-            (item.price ? Number(item.price) : 0) * (value ? Number(value) : 0);
+            (item.price ? Number(item.price) : 0) * (value ? Number(value) : 0)  -(item.discountAmount?Number(item.discountAmount):0);
           item.amount = amount;
 
           break;
         case "freeNum":
           amount =
             (item.price ? Number(item.price) : 0) *
-            (item.serviceNum ? Number(item.serviceNum) : 0);
+            (item.serviceNum ? Number(item.serviceNum) : 0)  -(item.discountAmount?Number(item.discountAmount):0);
           item.amount = amount;
           break;
-      }
+        case "discountAmount":
+          amount =
+            (item.price ? Number(item.price) : 0) *
+            (item.serviceNum ? Number(item.serviceNum) : 0)  -(value ? Number(value) : 0);
+            item.amount = amount;
+          }
       break;
     case "once":
       computedItem(item);
@@ -1724,14 +1765,19 @@ function computedItem(parent) {
 }
 
 function computedService() {
+  //子表中的实际金额
   let amount = 0;
+  let discountAmount = 0;
+  let trueAmount = 0;
   switch (form.value.serviceType) {
     case 1:
       loopDetails.value.forEach((l) => {
         amount += l.amount;
+        discountAmount += l.discountAmount;
+        trueAmount += l.trueAmount;
       });
       amount = amount >= 0 ? amount : 0;
-
+      discountAmount = discountAmount >= 0 ? discountAmount : 0;
       break;
     case 2:
       onceDetails.value.forEach((l) => {
@@ -1745,10 +1791,9 @@ function computedService() {
       });
       break;
   }
-  form.value.amount = amount;
-  form.value.trueAmount =
-    amount -
-    (form.value.discountAmount ? Number(form.value.discountAmount) : 0);
+  form.value.discountAmount = discountAmount;
+  form.value.trueAmount =amount
+  form.value.amount =  match.add(amount,discountAmount);
 }
 
 /** 输入框输出建议 */

+ 166 - 0
src/views/business/source/lable/form.vue

@@ -0,0 +1,166 @@
+<template>
+    <!-- 添加或修改项目信息对话框 -->
+    <div class="el-drawer__wrapper">
+        <el-drawer :title="title" v-model="visible" direction="rtl" size="100%">
+            <div class="page-container form-container">
+            <div class="form-btns-container">
+                    <span class="title-label"><el-icon>
+                            <Document />
+                        </el-icon> 项目信息</span>
+                <el-button-group>
+                    <el-button v-if="editStatus" type="primary" size="small" icon="Finished"
+                               @click="submitForm">保存</el-button>
+                    <el-button v-else type="warning" size="small" icon="Edit" @click="editStatus = true">编辑</el-button>
+                    <el-button v-if="form.id && editStatus" type="info" size="small" icon="Close"
+                               @click="editStatus = false">取消编辑</el-button>
+                    <el-button v-if="form.id" type="success" size="small" @click="getForm">
+                        <i class="fa fa-refresh" aria-hidden="true" /> 刷新
+                    </el-button>
+                </el-button-group>
+                <div class="screen-btn" @click="handleScreen">
+                    <template v-if="!isFullscreen">
+                        <i class="fa fa-window-maximize" aria-hidden="true" />
+                        <!-- <span>全屏</span> -->
+                    </template>
+                    <template v-else>
+                        <i class="fa fa-window-restore" aria-hidden="true" />
+                        <!-- <span>还原</span> -->
+                    </template>
+                </div>
+                <div class="close-btn" @click="cancel">
+                    <i class="fa fa-times" aria-hidden="true" />
+                    <!-- <span>关闭</span> -->
+                </div>
+            </div>
+            <div class="Y-scrollbar" style="position: absolute; top: 32px; bottom: 0; width: 100%; overflow: auto">
+            </div>
+            <el-form ref="lableRef" class="master-container" :model="form" :rules="rules" label-width="120px" > 
+                <el-row :gutter="30">
+                                    <el-col :span="6">
+                                        <el-form-item label="客户标签" prop="lable" required>
+                                            <el-input  v-if="editStatus" v-model="form.lable" placeholder="请输入客户标签" />
+                                            <span v-else>{{ form.lable }}</span>
+                                        </el-form-item>
+                                    </el-col>
+                                    <el-col :span="6">
+                                        <el-form-item label="备注" prop="remark">
+                                            <el-input  v-if="editStatus" v-model="form.remark" placeholder="请输入备注" />
+                                            <span v-else>{{ form.remark }}</span>
+                                        </el-form-item>
+                                    </el-col>
+                </el-row>
+            </el-form>
+            </div>
+        </el-drawer>
+    </div>
+</template>
+<script setup>
+    import {getLable,addLable,updateLable} from "@/api/business/lable";
+    const { proxy } = getCurrentInstance()
+    /** 父组件传参 */
+    const props = defineProps({
+        getList: {
+            type: Function,
+            default: () => { }
+        }
+    })
+    const { getList } = toRefs(props)
+    /** 字典数组区 */
+    /** 表单抽屉 页变量 */
+    const title = ref("")
+    const loading = ref(false)
+    const multiple = ref(true)
+    const visible = ref(false)
+    const editStatus = ref(false)
+    const isFullscreen = ref(false)
+    const webHost = import.meta.env.VITE_APP_BASE_API
+    const data = reactive({
+        form: {},
+        rules: {
+            lable: [{ required: true, message: "标签名称不能为空", trigger: "blur" }],
+        }
+    });
+    const { form, rules } = toRefs(data);
+/***********************  方法区  ****************************/
+    /** 打开抽屉 */
+    function open(id) {
+        reset();
+        visible.value = true;
+        if (id) {
+            getLable(id).then(response => {
+                form.value = response.data;
+                editStatus.value = false
+                title.value = "修改项目信息"
+            })
+        } else {
+            editStatus.value = true
+            title.value = "添加项目信息"
+        }
+    }
+
+    /** 取消按钮 */
+    function cancel() {
+        visible.value = false;
+        reset();
+    }
+
+    /** 表单重置 */
+    function reset() {
+        form.value = {
+                        id: null,
+                        lable: null,
+                        remark: null,
+                        createTime: null,
+                        creatorId: null,
+                        updateTime: null,
+                        updaterId: null,
+                        deleted: null,
+                        version: null,
+                        tenantId: null
+        };
+        proxy.resetForm("lableRef");
+    }
+
+    /** 全屏缩放 */
+    function handleScreen() {
+    const dom = document.querySelector('.list-container > .el-drawer__wrapper > .el-overlay')
+    isFullscreen.value = !isFullscreen.value
+    dom.style.position = isFullscreen.value ? 'fixed' : 'absolute'
+    }
+
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["lableRef"].validate(valid => {
+    if (valid) {
+      if (form.value.id != null) {
+        updateLable(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功");
+          visible.value = false;
+          getList.value()
+        });
+      } else {
+        addLable(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功");
+          visible.value = false;
+          getList.value()
+        });
+      }
+    }
+  });
+}
+
+    /** 查询表单信息  */
+    function getForm() {
+    loading.value = true
+    getLable(form.value.id).then(response => {
+        loading.value = false
+        form.value = response.data
+    })
+    }
+
+    /** 暴露给父组件的方法 */
+    defineExpose({
+        open
+    })
+</script>

+ 160 - 0
src/views/business/source/lable/index.vue

@@ -0,0 +1,160 @@
+<template>
+    <div class="page-container list-container">
+        <!-- 功能按钮区 -->
+        <div class="list-btns-container">
+            <el-button
+                    type="primary"
+                    size="small"
+                    icon="Plus"
+                    @click="handleAdd"
+                    v-hasPermi="['business:lable:add']"
+            >新增</el-button>
+
+            <el-button
+                    type="success"
+                    size="small"
+                    icon="Edit"
+                    :disabled="single"
+                    @click="handleUpdate"
+                    v-hasPermi="['business:lable:edit']"
+            >修改</el-button>
+
+            <el-button
+                    type="danger"
+                    size="small"
+                    icon="Delete"
+                    :disabled="multiple"
+                    @click="handleDelete"
+                    v-hasPermi="['business:lable:remove']"
+            >删除</el-button>
+
+            <el-button
+                    type="warning"
+                    size="small"
+                    icon="Download"
+                    @click="handleExport"
+                    v-hasPermi="['business:lable:export']"
+            >导出</el-button>
+            <!--<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>-->
+        </div>
+        <!-- 搜索区 -->
+        <el-form class="list-search-container" size="small" :model="queryParams" ref="queryRef" :inline="true" label-width="68px">
+                        <el-form-item label="客户标签:" prop="lable">
+                            <el-input
+                                    v-model="queryParams.lable"
+                                    placeholder="请输入客户标签"
+                                    clearable
+                                    @keyup.enter="handleQuery"
+                            />
+                        </el-form-item>
+            <el-form-item>
+                <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+                <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+            </el-form-item>
+        </el-form>
+
+        <!-- 列表区 -->
+        <el-table v-loading="loading" :data="lableList" size="small" border height="100%" @selection-change="handleSelectionChange">
+            <el-table-column type="selection" width="55" align="center" />
+                    <el-table-column label="客户标签" align="center" prop="lable" />
+                    <el-table-column label="添加时间" align="center" prop="createTime" />
+                    <el-table-column label="备注" align="center" prop="remark" />
+            <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                <template #default="scope">
+                    <el-button link type="warning" size="small" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['business:lable:edit']">修改</el-button>
+                    <el-button link type="danger" size="small" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['business:lable:remove']">删除</el-button>
+                </template>
+            </el-table-column>
+        </el-table>
+
+        <!-- 分页 -->
+        <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList"/>
+
+        <!-- 表单 -->
+        <lable-form ref="lableRef" :get-list="getList"></lable-form>
+    </div>
+</template>
+
+<script setup name="Lable">
+    import { listLable, delLable } from "@/api/business/lable";
+    import lableForm from "./form"
+    const { proxy } = getCurrentInstance()
+    /** 字典数组区 */
+    /** 查询 对象 */
+
+    const lableList = ref([]);
+    const loading = ref(true);
+    const ids = ref([])
+    const single = ref(true);
+    const multiple = ref(true);
+    const total = ref(0);
+    /** 查询对象 */
+   const queryParams=ref({
+        pageNum: 1,
+        pageSize: 10,
+                    lable: null,
+    })
+
+  /***********************  方法区  ****************************/
+
+    /** 查询客户标签列表 */
+   function getList() {
+        loading.value = true;
+        listLable(queryParams.value).then(response => {
+                lableList.value = response.rows;
+            total.value = response.total;
+            loading.value = false;
+        });
+    }
+
+    /** 搜索按钮操作 */
+    function handleQuery() {
+        queryParams.value.pageNum = 1;
+        getList();
+    }
+
+    /** 重置按钮操作 */
+    function resetQuery() {
+        proxy.resetForm("queryRef");
+        handleQuery();
+    }
+
+    // 多选框选中数据
+    function handleSelectionChange(selection) {
+        ids.value = selection.map(item => item.id);
+        single.value = selection.length != 1;
+        multiple.value = !selection.length;
+    }
+
+    /** 新增按钮操作 */
+    function handleAdd() {
+         proxy.$refs.lableRef.open()
+    }
+
+    /** 修改按钮操作 */
+    function handleUpdate(row) {
+        const id = row.id || ids.value
+        proxy.$refs.lableRef.open(id)
+    }
+
+
+    /** 删除按钮操作 */
+    function handleDelete(row) {
+        const _ids = row.id || ids.value;
+        proxy.$modal.confirm('是否确认删除选中的数据项?').then(function() {
+            return delLable(_ids);
+        }).then(() => {
+            getList();
+            proxy.$modal.msgSuccess("删除成功!");
+        }).catch(() => {});
+    }
+
+    /** 导出按钮操作 */
+    function handleExport() {
+        proxy.download('business/lable/export', {
+            ...queryParams.value
+        }, `lable_${new Date().getTime()}.xlsx`)
+    }
+
+   getList();
+</script>