wanghairong 5 ماه پیش
والد
کامیت
d00b491105
5فایلهای تغییر یافته به همراه181 افزوده شده و 186 حذف شده
  1. 6 0
      src/api/path/purchase.js
  2. 2 0
      src/hooks/enum.js
  3. 16 5
      src/views/order/BuyCard/index.vue
  4. 65 16
      src/views/order/ReturnCard/index.vue
  5. 92 165
      src/views/system/menu/index.vue

+ 6 - 0
src/api/path/purchase.js

@@ -18,4 +18,10 @@ export function adminUpdate(params) {
 // 平台
 export function platformUpdate(params) {
     return service.get("/admin/sim/orderModeration", { params });
+}
+
+
+// 退卡
+export function cancelOrderList(params) {
+    return service.post("/admin/sim/cancelOrderList", params);
 }

+ 2 - 0
src/hooks/enum.js

@@ -22,4 +22,6 @@ export const enum_dict = {
     DEDUCTION_MODEL: "deduction_model", // 套餐收费方式
     FLOW_PERIOD: "flow_period", // 流量包套餐时长
     ACTIVATE_METHOD: "activate_method", // 激活方式-激活计费方式
+    ORDER_AUDIT_STATUS: "order_audit_status", // 订单审核状态
+    ORDER_TYPE: "order_type", // 订单状态
 };

+ 16 - 5
src/views/order/BuyCard/index.vue

@@ -29,12 +29,12 @@
     <!-- 数据表格 -->
     <a-table :data="tableData" :pagination="pageData" :columns="columns" @page-change="evChangePage"
       :scroll="{ x: '100%', y: '800px' }">
-      <template #status="{ record }">
+      <!-- <template #status="{ record }">
         {{ record.status }}
       </template>
       <template #moderation_status="{ record }">
         {{ record.moderation_status }}
-      </template>
+      </template> -->
       <template #operate="{ record }">
         <div v-if="userType == 1 && record.moderation_status == 1">
           <a-popconfirm :content="`是否通过?`" type="warning" @ok="platformCancel(record, 2)">
@@ -241,6 +241,7 @@ import { Message } from '@arco-design/web-vue';
 import { enum_dict } from "@/hooks/enum";
 import { tariffList } from "@/api/path/tariffManagement.api";
 import { purchaseOrderList, addPurchaseOrder, platformUpdate, adminUpdate } from '@/api/path/purchase';
+
 const selectedKeys = ref([]);
 const rowSelection = reactive({
   type: 'checkbox',
@@ -255,8 +256,8 @@ const searchForm = reactive({
 const columns = [
   { title: '订单编号', dataIndex: 'id', align: 'center', width: 300 },
   { title: '客户名称', dataIndex: 'user_id', align: 'center' },
-  { title: '订阅状态', slotName: 'status', align: 'center' },
-  { title: '审核状态', slotName: 'moderation_status', align: 'center' },
+  { title: '订阅状态', dataIndex: 'statusName', align: 'center' },
+  { title: '审核状态', dataIndex: 'orderTypeName', align: 'center' },
   { title: '采购数量', dataIndex: 'quantity', align: 'center' },
   { title: '支付金额', dataIndex: 'payment_amount', align: 'center' },
   { title: '下单时间', dataIndex: 'created_at', align: 'center' },
@@ -350,7 +351,17 @@ const intData = () => {
     size: pageData.value.size,
   }
   purchaseOrderList(param).then(res => {
-    tableData.value = res.data.records;
+    tableData.value = (res.data.records || []).map(item => {
+      const dictList = JSON.parse(window.localStorage.getItem('dictList')) ?? []
+      const statusName = dictList.filter((item) => item.type_key == enum_dict.SUBSCRIPTION_RELATIONSHIP_STATUS)?.find(val => item.status == val.value)?.label
+      const orderTypeName = dictList.filter((item) => item.type_key == enum_dict.ORDER_AUDIT_STATUS)?.find(val => item.status == val.value)?.label
+
+      return {
+        ...item,
+        orderTypeName,
+        statusName,
+      }
+    });
     pageData.value.total = res.data.total;
   })
 

+ 65 - 16
src/views/order/ReturnCard/index.vue

@@ -27,8 +27,7 @@
       </a-button>
     </div>
     <!-- 数据表格 -->
-    <a-table row-key="customerName" v-model:selectedKeys="selectedKeys" :row-selection="rowSelection" :columns="columns"
-      :data="tableData" :pagination="pagination" :scroll="{ x: '100%', y: '400px' }">
+    <a-table :columns="columns" :data="tableData" :pagination="pagination" :scroll="{ x: '100%', y: '400px' }">
       <template #detail="{ record }">
         <a-button @click="openDetail(record)" type="text">订单详情</a-button>
       </template>
@@ -147,8 +146,10 @@
 </template>
 
 <script setup>
-import { ref, reactive } from 'vue';
+import { ref, reactive, onMounted } from 'vue';
 import { Message } from '@arco-design/web-vue';
+import { cancelOrderList } from '@/api/path/purchase';
+import { enum_dict } from "@/hooks/enum";
 const selectedKeys = ref([]);
 const rowSelection = reactive({
   type: 'checkbox',
@@ -162,15 +163,27 @@ const searchForm = reactive({
 
 const columns = [
   { title: '序号', dataIndex: 'index', align: 'center', render: ({ rowIndex }) => rowIndex + 1 },
-  { title: '订单编号', dataIndex: 'cardNumber' },
-  { title: '客户名称', dataIndex: 'customerName' },
-  { title: '订单状态', dataIndex: 'orderStatus' },
-  { title: '退卡张数', dataIndex: 'cardQuantity' },
-  { title: '资费', dataIndex: 'money' },
-  { title: '剩余时长(月)', dataIndex: 'outTime' },
-  { title: '退回金额', dataIndex: 'returnMoney' },
-  { title: '下单时间', dataIndex: 'orderTime' },
-  { title: '详情', slotName: 'detail', align: 'center' },
+  {
+    title: '订单ID', dataIndex: 'source_order_id', ellipsis: true,
+    tooltip: true,
+    width: 200
+  },
+  {
+    title: '资费ID', dataIndex: 'tariff_id', ellipsis: true,
+    tooltip: true,
+    width: 100
+  },
+  { title: '订单审核状态', dataIndex: 'moderationStatusName' },
+  { title: '订阅关系状态', dataIndex: 'statusName' },
+  { title: '卡类型', dataIndex: 'cardTypeName' },
+  {
+    title: '供应商名称', dataIndex: 'sourceName', ellipsis: true,
+    tooltip: true,
+    width: 150
+  },
+  { title: '退卡张数', dataIndex: 'quantity' },
+  { title: '剩余时长', dataIndex: 'period_of_silence' },
+  { title: '返回金额', dataIndex: 'payment_amount' },
 ];
 const columnsDetail = [{ title: 'ICCID', dataIndex: 'iccid' },
 { title: '池名称及编号', dataIndex: 'nameAndId' },
@@ -249,8 +262,8 @@ const tableData = ref([
   },
 
 ]);
-const pagination = reactive({
-  total: tableData.value.length,
+const pagination = ref({
+  total: 0,
   current: 1,
   pageSize: 10,
 });
@@ -261,8 +274,7 @@ const openDetail = (item) => {
   showDetail.value = true;
 }
 const handleSearch = () => {
-  console.log('Search form data:', searchForm);
-  Message.success('执行搜索操作');
+  intData()
 };
 
 const resetSearch = () => {
@@ -272,6 +284,7 @@ const resetSearch = () => {
     } else {
       searchForm[key] = null;
     }
+    intData()
   });
   Message.success('搜索条件已重置');
 };
@@ -303,6 +316,42 @@ const submitAudit = () => {
 }
 const detailCancel = () => {
 }
+
+
+
+
+// 列表-------------------------------------
+// 订单列表
+const intData = () => {
+  const param = {
+    current: pagination.value.current,
+    size: pagination.value.size,
+  }
+  cancelOrderList(param).then(res => {
+    tableData.value = (res.data.records || []).map(item => {
+      const dictList = JSON.parse(window.localStorage.getItem('dictList')) ?? []
+      const sourceName = dictList.filter((item) => item.type_key == enum_dict.SOURCE)?.find(val => item.source == val.value)?.label
+      const cardTypeName = dictList.filter((item) => item.type_key == enum_dict.CARD_TYPE)?.find(val => item.card_type == val.value)?.label
+      const statusName = dictList.filter((item) => item.type_key == enum_dict.SUBSCRIPTION_RELATIONSHIP_STATUS)?.find(val => item.status == val.value)?.label
+      const moderationStatusName = dictList.filter((item) => item.type_key == enum_dict.ORDER_AUDIT_STATUS)?.find(val => item.moderation_status == val.value)?.label
+
+      return {
+        ...item,
+        moderationStatusName,
+        statusName,
+        cardTypeName,
+        sourceName
+      }
+    });
+    pagination.value.total = res.data.total;
+  })
+
+}
+onMounted(() => {
+  intData();
+  // userName.value = localStorage.getItem('remember_user_name');
+  // userType.value = localStorage.getItem('role');
+})
 </script>
 
 <style scoped lang="less">

+ 92 - 165
src/views/system/menu/index.vue

@@ -5,129 +5,69 @@
       <a-button type="primary" @click="evAddMenu">{{ $t('global.newMenu') }}</a-button>
     </div>
 
-     <a-space direction="vertical" :style="{ width: '100%' }">
-      <a-upload  :show-file-list="false"  :custom-request="customRequest" />
- 
+    <a-space direction="vertical" :style="{ width: '100%' }">
+      <a-upload :show-file-list="false" :custom-request="customRequest" />
+
     </a-space>
     <!-- default-expand-all-rows -->
-    <a-table
-      class="table"
-      :columns="columns"
-      :data="refData.dataSource"
-      :pagination="false"
-      row-key="id"
-      :scroll="{ x: '120%' }"
-    >
-        <template #name="{ record }">
-          <span> {{ getParseLang(record.name, lang.getLang) }} </span>
-          <template v-if="record.permsArr && record.permsArr.length > 0">
-            <a-tag v-for="item in record.permsArr" :key="item.id" class="tag-name">{{ item.name }}</a-tag>
-          </template>
-        </template>
-        <template #refresh="{ record }">
-          <span v-if="['1', '2'].includes(record.type)">{{
-            record.refresh ? "是" : "否"
-          }}</span>
+    <a-table class="table" :columns="columns" :data="refData.dataSource" :pagination="false" row-key="id"
+      :scroll="{ x: '120%' }">
+      <template #name="{ record }">
+        <span> {{ getParseLang(record.name, lang.getLang) }} </span>
+        <template v-if="record.permsArr && record.permsArr.length > 0">
+          <a-tag v-for="item in record.permsArr" :key="item.id" class="tag-name">{{ item.name }}</a-tag>
         </template>
-        <template #icon="{ record }">
-          <!-- <a>123456789</a> -->
-          <span v-if="!record.icon"></span>
-          <svg-icon v-else class="icon" :icon="record.icon" />
-        </template>
-
-        <template #id="{ record }">
-          <a
-            href="javascript:;"
-            class="a-link"
-            style="margin-right: 1rem"
-            @click="evEdit(record)"
-            >编辑</a
-          >
-          <a-popconfirm
-            content="确认删除该信息?"
-            ok-text="确定"
-            cancel-text="取消"
-            @ok="evDelete(record.id)"
-          >
-            <a href="javascript:;" class="a-link">删除</a>
+      </template>
+      <template #refresh="{ record }">
+        <span v-if="['1', '2'].includes(record.type)">{{
+          record.refresh ? "是" : "否"
+        }}</span>
+      </template>
+      <template #icon="{ record }">
+        <!-- <a>123456789</a> -->
+        <span v-if="!record.icon"></span>
+        <svg-icon v-else class="icon" :icon="record.icon" />
+      </template>
+
+      <template #id="{ record }">
+        <a href="javascript:;" class="a-link" style="margin-right: 1rem" @click="evEdit(record)">编辑</a>
+        <a-popconfirm content="确认删除该信息?" ok-text="确定" cancel-text="取消" @ok="evDelete(record.id)">
+          <a href="javascript:;" class="a-link">删除</a>
         </a-popconfirm>
-        </template>
+      </template>
     </a-table>
 
-    <a-modal
-      v-model:visible="refData.visible"
-      title="菜单信息"
-      :centered="true"
-      :width="700"
-      :footer="false"
-      simple
-    >
+    <a-modal v-model:visible="refData.visible" title="菜单信息" :centered="true" :width="700" :footer="false" simple>
       <div class="form-box">
-        <a-form
-          :model="refData.fromData"
-        
-          @submit-success="evHandleSubmit"
-        >
-          <a-form-item
-            field="name"
-            label="路由名称"
-            :rules="[{ required: true, message: '请输入路由名称' }]"
-            :validate-trigger="['change', 'input', 'blur']"
-          >
+        <a-form :model="refData.fromData" @submit-success="evHandleSubmit">
+          <a-form-item field="name" label="路由名称" :rules="[{ required: true, message: '请输入路由名称' }]"
+            :validate-trigger="['change', 'input', 'blur']">
             <!-- <a-input
               v-model="refData.fromData.name"
               placeholder="请输入路由名称"
             /> -->
 
-            <MonacoEditor  v-model="refData.fromData.name"  />
+            <MonacoEditor v-model="refData.fromData.name" />
           </a-form-item>
 
-          <a-form-item
-            field="menu_id"
-            label="上级路由"
-            :validate-trigger="['change', 'input', 'blur']"
-          >
-            <a-tree-select
-              v-model="refData.fromData.menu_id"
-              placeholder="一级菜单"
-              :data="refData.menuTree"
-              :allow-clear="true"
-              :field-names="{
+          <a-form-item field="menu_id" label="上级路由" :validate-trigger="['change', 'input', 'blur']">
+            <a-tree-select v-model="refData.fromData.menu_id" placeholder="一级菜单" :data="refData.menuTree"
+              :allow-clear="true" :field-names="{
                 children: 'children',
                 title: 'name',
                 key: 'id',
-              }"
-              :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
-            />
+              }" :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" />
           </a-form-item>
 
-          <a-form-item
-            field="path"
-            label="路由标识"
-            :rules="[{ required: true, message: '请输入路由标识' }]"
-            :validate-trigger="['change', 'input', 'blur']"
-          >
-            <a-input
-              v-model="refData.fromData.path"
-              placeholder="请输入路由标识"
-            />
+          <a-form-item field="path" label="路由标识" :rules="[{ required: true, message: '请输入路由标识' }]"
+            :validate-trigger="['change', 'input', 'blur']">
+            <a-input v-model="refData.fromData.path" placeholder="请输入路由标识" />
           </a-form-item>
 
-          <a-form-item
-            v-if="!refData.fromData.menu_id"
-            field="icon"
-            label="路由图标"
-            :rules="[{ required: true, message: '请选择路由图标' }]"
-            :validate-trigger="['change', 'input', 'blur']"
-          >
-            <a-input
-              v-model="refData.fromData.icon"
-              placeholder="请设置菜单图标"
-            >
-              <template
-                v-if="refData.fromData.icon"
-                #suffix
-              >
+          <a-form-item v-if="!refData.fromData.menu_id" field="icon" label="路由图标"
+            :rules="[{ required: true, message: '请选择路由图标' }]" :validate-trigger="['change', 'input', 'blur']">
+            <a-input v-model="refData.fromData.icon" placeholder="请设置菜单图标">
+              <template v-if="refData.fromData.icon" #suffix>
                 <svg-icon class="input-icon" :icon="refData.fromData.icon" />
               </template>
               <template #append>
@@ -140,43 +80,32 @@
           <a-form-item v-if="isUrlView" field="url" label="路由地址">
             <!-- :rules="[{ required: true, message: '请输入路由名称' }]"
             :validate-trigger="['change', 'input', 'blur']" -->
-<!--      
+            <!--      
             <a-select v-model:value="refData.fromData.url" placeholder="请选择路由地址">
               <a-select-option v-for="item in refData.menuList" :key="item" :value="item"> {{  item  }}</a-select-option>
             </a-select> -->
 
-            <a-select v-model="refData.fromData.url"  :options="refData.menuList" :field-names="{ value: 'item', label: 'item' }"  placeholder="请选择路由地址" />
-           
+            <a-select v-model="refData.fromData.url" :options="refData.menuList"
+              :field-names="{ value: 'item', label: 'item' }" placeholder="请选择路由地址" allow-clear />
+
           </a-form-item>
 
 
           <a-form-item v-if="isUrlView" label="权限标识">
             <div class="flex-col-body">
-              <a-form-item
-                v-for="(item, index) in refData.fromData.permsArr"
-                :key="index"
-              >
+              <a-form-item v-for="(item, index) in refData.fromData.permsArr" :key="index">
                 <a-input v-model="item.name" placeholder="名称" />
-                <a-input
-                  v-model="item.perms"
-                  style="margin-left: 1rem"
-                  placeholder="请输入权限标识"
-                />
+                <a-input v-model="item.perms" style="margin-left: 1rem" placeholder="请输入权限标识" />
                 <div class="flex-row-icon">
-                  <icon-close-circle-fill
-                    v-if="refData.fromData.permsArr.length > 1"
-                    @click="refData.fromData.permsArr.splice(index, 1)"
-                  />
-                  <icon-plus-circle-fill
-                    v-if="refData.fromData.permsArr.length - 1 === index"
-                    class="icon-plus-circle-fill"
-                    @click="
+                  <icon-close-circle-fill v-if="refData.fromData.permsArr.length > 1"
+                    @click="refData.fromData.permsArr.splice(index, 1)" />
+                  <icon-plus-circle-fill v-if="refData.fromData.permsArr.length - 1 === index"
+                    class="icon-plus-circle-fill" @click="
                       refData.fromData.permsArr.push({
                         menuName: '',
                         perms: '',
                       })
-                    "
-                  />
+                      " />
                 </div>
               </a-form-item>
             </div>
@@ -184,30 +113,20 @@
 
 
           <a-form-item v-if="isUrlView" name="refresh" label="缓存">
-            <a-switch
-              v-model:checked="refData.fromData.refresh"
-              checked-value="1"
-              unchecked-value="0"
-            >
+            <a-switch v-model:checked="refData.fromData.refresh" checked-value="1" unchecked-value="0">
               <template #checked> ON </template>
               <template #unchecked> OFF </template>
             </a-switch>
           </a-form-item>
 
-          <a-form-item
-            name="sortNumber"
-            label="序号"
-            :rules="[{ required: true, message: '请输入序号' }]"
-            :validate-trigger="['change', 'input', 'blur']"
-          >
+          <a-form-item name="sortNumber" label="序号" :rules="[{ required: true, message: '请输入序号' }]"
+            :validate-trigger="['change', 'input', 'blur']">
             <a-input-number v-model="refData.fromData.sortNumber" :min="0" />
           </a-form-item>
 
           <a-form-item>
             <div class="modal-footer">
-              <a-button type="primary" size="large" html-type="submit"
-                >确定</a-button
-              >
+              <a-button type="primary" size="large" html-type="submit">确定</a-button>
               <a-button size="large" @click="evCancel"> 取消</a-button>
             </div>
           </a-form-item>
@@ -217,19 +136,11 @@
 
     <a-modal v-model:visible="refData.visibleIcon" simple :footer="false">
       <div class="font-view">
-        <div
-          v-for="(item, index) in refData.iconfontArr"
-          :key="index"
-          class="icon-box"
-        >
-          <svg-icon
-            :icon="item.font_class"
-            :class="{
-              icon: true,
-              'icon-active': item.font_class === refData.fromData.icon,
-            }"
-            @click="evOnIconName(item.font_class)"
-          />
+        <div v-for="(item, index) in refData.iconfontArr" :key="index" class="icon-box">
+          <svg-icon :icon="item.font_class" :class="{
+            icon: true,
+            'icon-active': item.font_class === refData.fromData.icon,
+          }" @click="evOnIconName(item.font_class)" />
         </div>
       </div>
     </a-modal>
@@ -237,14 +148,14 @@
 </template>
 
 <script setup>
-import { onMounted, reactive, computed, ref, watch} from "vue";
+import { onMounted, reactive, computed, ref, watch } from "vue";
 
 import { useRoute } from "vue-router";
 import { Message, Notification } from '@arco-design/web-vue'
 import MonacoEditor from "@/components/MonacoEditor/index.vue"
 import iconsvgJson from "@/assets/iconsvg/iconfont.json";
 import { useLangStore } from '@/store/modules/langStore'
-import {  getParseLang } from '@/utils'
+import { getParseLang } from '@/utils'
 import _ from "lodash";
 import { columns } from './config'
 import { systemSetMenu, systemFinMenuAll, systemDeleteMenu, systemUpdateMenu } from "@/api/path/system.api"
@@ -254,7 +165,7 @@ const route = useRoute();
 const lang = useLangStore()
 const systemStore = useSystemStore()
 
- 
+
 const refData = reactive({
   visible: false,
   visibleIcon: false,
@@ -319,7 +230,7 @@ const fnGetFormData = async () => {
   const comp = import.meta.glob("../../../views/**/index.vue");
   if (comp) {
     Object.keys(comp).forEach((key) => {
-      arr.push(`${comp[key]}`. replace(/^.*import\("\/src\/([^?"]+).*$/, '$1'));
+      arr.push(`${comp[key]}`.replace(/^.*import\("\/src\/([^?"]+).*$/, '$1'));
     });
     arr.push("views/system/menu/index.vue")
     refData.menuList = arr
@@ -352,7 +263,7 @@ const fnGetTreeList = (data) => {
 
 const evEdit = async (data) => {
   refData.fromData = data;
-  if(!data.permsArr || data.permsArr.length == 0){
+  if (!data.permsArr || data.permsArr.length == 0) {
     refData.fromData.permsArr = [{ name: "", perms: "" }]
   }
   refData.visible = true;
@@ -361,10 +272,10 @@ const evEdit = async (data) => {
 const evHandleSubmit = async (values) => {
   const data = JSON.parse(JSON.stringify(values));
   data.type = "1"
-  if (data.url)  data.type = "2";
-  if(data.id){
+  if (data.url) data.type = "2";
+  if (data.id) {
     await systemUpdateMenu(data)
-  }else{
+  } else {
     await systemSetMenu(data);
   }
   evInitData();
@@ -410,8 +321,8 @@ const evOnIconName = (item) => {
 };
 
 // 上传
-const customRequest = async (option) => { 
-   const { file } = option.fileItem;
+const customRequest = async (option) => {
+  const { file } = option.fileItem;
   // 上传
   const fileName = `thumbnail_${file.name}`
   const key = `test/${fileName}`
@@ -421,17 +332,17 @@ const customRequest = async (option) => {
     key: key,
     body: file
   })
-  
+
   if (resClient.statusCode === 200) {
     console.log('上传成功')
-    console.log("resClient=",resClient)
+    console.log("resClient=", resClient)
   }
 
 };
- 
+
 onMounted(() => {
   evInitData()
- 
+
 });
 </script>
 
@@ -445,9 +356,11 @@ onMounted(() => {
 
 .table {
   margin-top: 1.5rem;
+
   .tag-name {
     margin: 0.2rem;
   }
+
   .icon {
     font-size: 20px;
   }
@@ -466,18 +379,22 @@ onMounted(() => {
 
 .form-box {
   padding-left: 4rem;
+
   .flex-col-body {
     display: flex;
     flex-direction: column;
+
     .flex-row-icon {
       min-width: 35px;
       display: flex;
       justify-content: space-between;
       align-items: center;
       margin-left: 10px;
+
       .icon-plus-circle-fill {
         font-size: 16px;
         margin-left: 0.5rem;
+
         // color: @orange_1;
         &:hover {
           cursor: pointer;
@@ -485,6 +402,7 @@ onMounted(() => {
           // color: @blue_0;
         }
       }
+
       svg:hover {
         cursor: pointer;
         transform: scale(1.4);
@@ -493,6 +411,7 @@ onMounted(() => {
     }
   }
 }
+
 .modal-footer {
   width: 150px;
   margin: 0 auto 16px auto;
@@ -503,10 +422,12 @@ onMounted(() => {
 .font-view {
   display: flex;
   flex-wrap: wrap;
+
   .icon-box {
     width: 30px;
     height: 30px;
     margin: 10px;
+
     .icon {
       width: 100%;
       height: 100%;
@@ -527,24 +448,30 @@ onMounted(() => {
     }
   }
 }
+
 @keyframes mymove {
   0% {
     transform: scale(1, 1);
   }
+
   50% {
     transform: scale(1.2, 1.2);
   }
+
   100% {
     transform: scale(1.1, 1.1);
   }
 }
+
 @keyframes mymove2 {
   0% {
     transform: scale(1, 1);
   }
+
   50% {
     transform: scale(1.3, 1.3);
   }
+
   100% {
     transform: scale(1.1, 1.1);
   }