Browse Source

Project Init

yigeren911 2 years ago
parent
commit
d21cc159ed

+ 4 - 2
src/api/controllerUrls.ts

@@ -36,7 +36,6 @@ export const document = "/document/"; //文档管理
 export const advertisement = "/ad/"; //广告管理
 export const illustration = "/help/type/"; //帮助清单
 export const classification = "/help/"; //帮助分类
-export const coupon = "/coupon/"; //优惠卷
 export const recommend = "/recommend/"; //好物
 export const recommendPartner = "/recommend/partner/"; //好物伙伴
 export const product = "/product/"; //智由屏
@@ -63,5 +62,8 @@ export const community = "/community/"; //小区管理
 export const building = "/community/building/"; //楼宇管理
 export const map = "/map/"; //地图管理
 export const parking = "/parking/"; //车位管理
+export const mapMark = "/map/mark/"; //图上标定车位
+
 
-export const buildingTree = "/common/tree";//楼宇位置树
+export const buildingTree = "/common/tree";//获取楼宇位置树
+export const coupon = "/coupon/"; //优惠卷

+ 1 - 1
src/api/request.ts

@@ -24,7 +24,7 @@ export default {
             data: data
         })
     },
-    delete: (url: string, data: anyObj = {}, action: string = 'delete') => {
+    delete: (url: string, data: anyObj = {}, action: string = 'del') => {
         return createAxios({
             url: url + action,
             method: 'delete',

File diff suppressed because it is too large
+ 1 - 320
src/views/backend/dashboard.vue


+ 96 - 96
src/views/backend/dashboard/index.vue

@@ -23,98 +23,98 @@
                 </el-col>
             </el-row>
         </div>
-        <div class="small-panel-box">
-            <el-row :gutter="20">
-                <el-col :sm="12" :lg="8">
-                    <div class="small-panel user-reg suspension">
-                        <div class="small-panel-title">用户总数/当日注册会员数</div>
-                        <div class="small-panel-content">
-                            <div class="content-left">
-                                <Icon color="#8595F4" size="20" name="fa fa-users"/>
-                                <span id="user_reg_number">{{echartsData.memberCount}}</span>
-                            </div>
-                            <div class="content-right">+{{echartsData.todayMemberCount}}</div>
-                        </div>
-                    </div>
-                </el-col>
-                <el-col :sm="12" :lg="8">
-                    <div class="small-panel file suspension">
-                        <div class="small-panel-title">营业额总金额/当日销售总金额</div>
-                        <div class="small-panel-content">
-                            <div class="content-left">
-                                <Icon color="#AD85F4" size="23" name="fa fa-cny"/>
-                                <span id="file_number">{{echartsData.saleAmount}}</span>
-                            </div>
-                            <div class="content-right">+{{echartsData.todaySaleAmount}}</div>
-                        </div>
-                    </div>
-                </el-col>
-                <el-col :sm="12" :lg="8">
-                    <div class="small-panel users suspension">
-                        <div class="small-panel-title">销售台数/当日销售台数</div>
-                        <div class="small-panel-content">
-                            <div class="content-left">
-                                <Icon color="#74A8B5" size="20" name="fa fa-line-chart"/>
-                                <span id="users_number">{{echartsData.saleCount}}</span>
-                            </div>
-                            <div class="content-right">+{{echartsData.todaySaleCount}}</div>
-                        </div>
-                    </div>
-                </el-col>
-            </el-row>
-        </div>
-        <div class="growth-chart">
-            <el-row :gutter="20">
-                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="8">
-                    <el-card shadow="hover" header="每月注册用户数量">
-                        <template #header>
-                            <div style="display: flex;justify-content: space-between">
-                                <span>{{ year }}年每月注册用户数量</span>
-                                <el-select size="small" style="width: 100px" v-model="year" @change="getEchartData()">
-                                    <el-option v-for="(item,index) in (d.getFullYear()-2020)"
-                                               :value="d.getFullYear()-item+1" :key="index"></el-option>
-                                </el-select>
-                            </div>
-                        </template>
-                        <userMouth :data="echartsData.memberList"></userMouth>
-                    </el-card>
-                </el-col>
-                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="8">
-                    <el-card shadow="hover" header="一周用户访问量">
-                        <userWeek :data="echartsData.weekData"></userWeek>
-                    </el-card>
-                </el-col>
-                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="8">
-                    <el-card class="new-user-card" shadow="hover" header="最新注册的会员">
-                        <div class="new-user-growth">
-                            <el-scrollbar>
-                                <div class="new-user-item" :key="index" v-for="(item,index) in echartsData.lastMember">
-                                    <el-image class="new-user-avatar" :src="item.headPortrait==='/'?defaultAvatar:item.headPortrait" />
-                                    <div class="new-user-base">
-                                        <div class="new-user-name">{{item.nickName}}</div>
-                                        <div class="new-user-time">{{item.createTime}} 注册</div>
-                                    </div>
-                                </div>
-                            </el-scrollbar>
-                        </div>
-                    </el-card>
-                </el-col>
-            </el-row>
-        </div>
-        <div class="growth-chart">
-            <el-row :gutter="20">
-                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="12">
-                    <el-card shadow="hover" :header="year+'年每月营业额统计'">
-                        <saleAmount :data="echartsData.orderList"></saleAmount>
-                    </el-card>
-                </el-col>
-                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="12">
-                    <el-card shadow="hover" :header="year+'每月销售台数统计'">
-                        <saleCount :data="echartsData.orderList"></saleCount>
-                    </el-card>
-                </el-col>
-            </el-row>
-        </div>
+<!--        <div class="small-panel-box">-->
+<!--            <el-row :gutter="20">-->
+<!--                <el-col :sm="12" :lg="8">-->
+<!--                    <div class="small-panel user-reg suspension">-->
+<!--                        <div class="small-panel-title">用户总数/当日注册会员数</div>-->
+<!--                        <div class="small-panel-content">-->
+<!--                            <div class="content-left">-->
+<!--                                <Icon color="#8595F4" size="20" name="fa fa-users"/>-->
+<!--                                <span id="user_reg_number">{{echartsData.memberCount}}</span>-->
+<!--                            </div>-->
+<!--                            <div class="content-right">+{{echartsData.todayMemberCount}}</div>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </el-col>-->
+<!--                <el-col :sm="12" :lg="8">-->
+<!--                    <div class="small-panel file suspension">-->
+<!--                        <div class="small-panel-title">营业额总金额/当日销售总金额</div>-->
+<!--                        <div class="small-panel-content">-->
+<!--                            <div class="content-left">-->
+<!--                                <Icon color="#AD85F4" size="23" name="fa fa-cny"/>-->
+<!--                                <span id="file_number">{{echartsData.saleAmount}}</span>-->
+<!--                            </div>-->
+<!--                            <div class="content-right">+{{echartsData.todaySaleAmount}}</div>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </el-col>-->
+<!--                <el-col :sm="12" :lg="8">-->
+<!--                    <div class="small-panel users suspension">-->
+<!--                        <div class="small-panel-title">销售台数/当日销售台数</div>-->
+<!--                        <div class="small-panel-content">-->
+<!--                            <div class="content-left">-->
+<!--                                <Icon color="#74A8B5" size="20" name="fa fa-line-chart"/>-->
+<!--                                <span id="users_number">{{echartsData.saleCount}}</span>-->
+<!--                            </div>-->
+<!--                            <div class="content-right">+{{echartsData.todaySaleCount}}</div>-->
+<!--                        </div>-->
+<!--                    </div>-->
+<!--                </el-col>-->
+<!--            </el-row>-->
+<!--        </div>-->
+<!--        <div class="growth-chart">-->
+<!--            <el-row :gutter="20">-->
+<!--                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="8">-->
+<!--                    <el-card shadow="hover" header="每月注册用户数量">-->
+<!--                        <template #header>-->
+<!--                            <div style="display: flex;justify-content: space-between">-->
+<!--                                <span>{{ year }}年每月注册用户数量</span>-->
+<!--                                <el-select size="small" style="width: 100px" v-model="year" @change="getEchartData()">-->
+<!--                                    <el-option v-for="(item,index) in (d.getFullYear()-2020)"-->
+<!--                                               :value="d.getFullYear()-item+1" :key="index"></el-option>-->
+<!--                                </el-select>-->
+<!--                            </div>-->
+<!--                        </template>-->
+<!--                        <userMouth :data="echartsData.memberList"></userMouth>-->
+<!--                    </el-card>-->
+<!--                </el-col>-->
+<!--                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="8">-->
+<!--                    <el-card shadow="hover" header="一周用户访问量">-->
+<!--                        <userWeek :data="echartsData.weekData"></userWeek>-->
+<!--                    </el-card>-->
+<!--                </el-col>-->
+<!--                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="8">-->
+<!--                    <el-card class="new-user-card" shadow="hover" header="最新注册的会员">-->
+<!--                        <div class="new-user-growth">-->
+<!--                            <el-scrollbar>-->
+<!--                                <div class="new-user-item" :key="index" v-for="(item,index) in echartsData.lastMember">-->
+<!--                                    <el-image class="new-user-avatar" :src="item.headPortrait==='/'?defaultAvatar:item.headPortrait" />-->
+<!--                                    <div class="new-user-base">-->
+<!--                                        <div class="new-user-name">{{item.nickName}}</div>-->
+<!--                                        <div class="new-user-time">{{item.createTime}} 注册</div>-->
+<!--                                    </div>-->
+<!--                                </div>-->
+<!--                            </el-scrollbar>-->
+<!--                        </div>-->
+<!--                    </el-card>-->
+<!--                </el-col>-->
+<!--            </el-row>-->
+<!--        </div>-->
+<!--        <div class="growth-chart">-->
+<!--            <el-row :gutter="20">-->
+<!--                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="12">-->
+<!--                    <el-card shadow="hover" :header="year+'年每月营业额统计'">-->
+<!--                        <saleAmount :data="echartsData.orderList"></saleAmount>-->
+<!--                    </el-card>-->
+<!--                </el-col>-->
+<!--                <el-col class="lg-mb-20" :xs="24" :sm="24" :md="12" :lg="12">-->
+<!--                    <el-card shadow="hover" :header="year+'每月销售台数统计'">-->
+<!--                        <saleCount :data="echartsData.orderList"></saleCount>-->
+<!--                    </el-card>-->
+<!--                </el-col>-->
+<!--            </el-row>-->
+<!--        </div>-->
 
 
     </div>
@@ -292,10 +292,10 @@ function getEchartData(){
 
 
 onMounted(() => {
-    startWork()
-    greetingsFun()
-    initCountUp()
-    getEchartData()
+    // startWork()
+    // greetingsFun()
+    // initCountUp()
+    // getEchartData()
 })
 
 //字动画

+ 83 - 79
src/views/backend/enterprise/coupons/couponstheme/index.vue

@@ -1,96 +1,100 @@
 <template>
-    <div class="default-main ba-table-box">
-        <el-alert class="ba-table-alert" v-if="baTable.table.remark" :title="baTable.table.remark" type="info"
-                  show-icon/>
-        <el-row>
-            <el-col :span="24">
-                <!-- 表格顶部菜单 -->
-                <TableHeader :buttons="['refresh', 'add', 'edit', 'delete', 'comSearch']"
-                             quick-search-placeholder="通过标题模糊搜索"
-                             @action="baTable.onTableHeaderAction"/>
-                <!-- 表格 -->
-                <!-- 要使用`el-table`组件原有的属性,直接加在Table标签上即可 -->
-                <Table @action="baTable.onTableAction"/>
+  <div class="default-main ba-table-box">
+    <el-alert class="ba-table-alert" v-if="baTable.table.remark" :title="baTable.table.remark" type="info"
+              show-icon />
+    <el-row>
+      <el-col :span="24">
+        <!-- 表格顶部菜单 -->
+        <TableHeader :buttons="['refresh', 'add', 'edit', 'delete', 'comSearch']"
+                     quick-search-placeholder="通过标题模糊搜索"
+                     @action="baTable.onTableHeaderAction" />
+        <!-- 表格 -->
+        <!-- 要使用`el-table`组件原有的属性,直接加在Table标签上即可 -->
+        <Table @action="baTable.onTableAction" />
 
-            </el-col>
-        </el-row>
+      </el-col>
+    </el-row>
 
-        <!-- 表单 -->
-        <PopupForm ref="formRef"/>
+    <!-- 表单 -->
+    <PopupForm ref="formRef" />
 
-    </div>
+  </div>
 </template>
 
 <script setup lang="ts">
-import {ref, onMounted, provide} from 'vue'
-import {advertisement, coupon, document} from '/@/api/controllerUrls'
-import Table from '/@/components/table/index.vue'
-import TableHeader from '/@/components/table/header/index.vue'
-import {defaultOptButtons} from '/@/components/table'
-import PopupForm from './popupForm.vue'
-import {baTableApi} from '/@/api/common'
-import baTableClass from '/@/utils/baTable'
+import { ref, onMounted, provide } from "vue";
+import { advertisement, coupon, document } from "/@/api/controllerUrls";
+import Table from "/@/components/table/index.vue";
+import TableHeader from "/@/components/table/header/index.vue";
+import { defaultOptButtons } from "/@/components/table";
+import PopupForm from "./popupForm.vue";
+import { baTableApi } from "/@/api/common";
+import baTableClass from "/@/utils/baTable";
 
 
-const tableRef = ref()
+const tableRef = ref();
 const baTable = new baTableClass(
-    new baTableApi(coupon),
-    {
-        dblClickNotEditColumn: [undefined, 'status'],
-        column: [
-            {type: 'selection', align: 'center', operator: false},
-            {label: '标题', prop: 'couponName', align: 'left', operator: 'LIKE'},
-            {label: '金额', prop: 'discountAmount', align: 'center', operator: false},
-            {label: '已发放', prop: 'issuedCount', align: 'left', operator: false},
-            {label: '有效天数', prop: 'validityPeriod', align: 'center', operator: false},
-            {
-                label: '类型',
-                prop: 'sceneType',
-                align: 'center',
-                width: '120',
-                render: 'tag',
-                operator: '=',
-                replaceValue:{0:'首次注册',1:'邀请好友',2:'上架活动'}
-            },
-            {
-                label: '状态',
-                prop: 'couponStatus',
-                align: 'center',
-                width: '120',
-                render: 'tag',
-                operator: '=',
-                custom: { 0: 'success', 1: 'info' },
-                replaceValue:{0:'启用',1:'停用'}
-            },
-            {label: '创建人', prop: 'creatorName', align: 'center', width: '120', operator: false},
-            {label: '创建时间', prop: 'createTime', align: 'center', width: '160', operator: false},
-            {
-                label: '操作',
-                align: 'center',
-                width: '160',
-                render: 'buttons',
-                buttons: defaultOptButtons(),
-                operator: false
-            },
-        ],
-    },
-    {
-        defaultItems: {},
-    },
-    {
-        // 获得编辑数据后
-        requestEdit: () => {
-            if (baTable.form.items && !baTable.form.items.icon) baTable.form.items.icon = 'el-icon-Minus'
-        },
+  new baTableApi(coupon),
+  {
+    dblClickNotEditColumn: [undefined, "status"],
+    column: [
+      { type: "selection", align: "center", operator: false },
+      { label: "优惠卷名称", prop: "couponName", align: "left", operator: "LIKE" },
+      {
+        label: "优惠券类型",
+        prop: "couponType",
+        align: "center",
+        render: "tag",
+        operator: "=",
+        replaceValue: { 0: "抵扣券", 1: "折扣券", 2: "特价券"}
+      },
+      {
+        label: "使用场景",
+        prop: "sceneType",
+        align: "center",
+        render: "tag",
+        operator: "=",
+        replaceValue: { 0: "不限定", 1: "首页投放", 2: "商家派发", 3: "营销活动" }
+      },
+      { label: "发行数量", prop: "issuesNumber", align: "center", operator: "LIKE" },
+      {
+        label: "状态",
+        prop: "couponStatus",
+        align: "center",
+        render: "tag",
+        operator: "=",
+        custom: { 0: "success", 1: "info" },
+        replaceValue: { 0: "可用", 1: "停用" }
+      },
+      { label: "创建人", prop: "creatorName", align: "center", width: "120", operator: false },
+      { label: "创建时间", prop: "createTime", align: "center", width: "160", operator: false },
+      {
+        label: "操作",
+        align: "center",
+        width: "160",
+        render: "buttons",
+        buttons: defaultOptButtons(),
+        operator: false
+      }
+    ]
+  },
+  {
+    defaultItems: {}
+  },
+  {
+    // 获得编辑数据后
+    requestEdit: () => {
+      if (baTable.form.items && !baTable.form.items.icon) baTable.form.items.icon = "el-icon-Minus";
     }
-)
+  }
+);
 
-provide('baTable', baTable)
+provide("baTable", baTable);
 
 onMounted(() => {
-    baTable.mount()
-    baTable.getIndex()
-})
+  baTable.mount();
+  baTable.getIndex();
+});
 </script>
 
 

+ 170 - 143
src/views/backend/enterprise/coupons/couponstheme/popupForm.vue

@@ -1,176 +1,203 @@
 <template>
-    <!-- 对话框表单 -->
-    <el-dialog
-        custom-class="ba-operate-dialog"
-        :close-on-click-modal="false"
-        :model-value="baTable.form.operate ? true : false"
-        @close="baTable.toggleForm"
-    >
-        <template #header>
-            <div class="title" v-drag="['.ba-operate-dialog', '.el-dialog__header']" v-zoom="'.ba-operate-dialog'">
-                {{ baTable.form.operate ? baTable.form.operate == 'edit' ? '编辑' : '添加' : '无标题' }}
-            </div>
-        </template>
-        <el-scrollbar v-loading="baTable.form.loading" class="ba-table-form-scrollbar">
-            <div
-                class="ba-operate-form"
-                :class="'ba-' + baTable.form.operate + '-form'"
-                :style="'width: calc(100% - ' + baTable.form.labelWidth! / 2 + 'px)'"
-            >
-                <el-form
-                    ref="formRef"
-                    @keyup.enter="baTable.onSubmit(formRef)"
-                    :model="baTable.form.items"
-                    label-position="right"
-                    :label-width="baTable.form.labelWidth + 'px'"
-                    :rules="rules"
-                    v-if="!baTable.form.loading"
-                >
-                    <el-form-item prop="couponName" label="标题">
-                        <el-input v-model="baTable.form.items!.couponName" placeholder="请输入标题"></el-input>
-                    </el-form-item>
-                    <el-form-item prop="discountAmount" label="金额">
-                        <el-input type="number" style="width: 100%" v-model="baTable.form.items!.discountAmount" placeholder="请输入金额"></el-input>
-                    </el-form-item>
-                    <el-form-item prop="validityPeriod" label="有效期(天)">
-                        <el-input type="number"  style="width: 100%;text-align: left" v-model="baTable.form.items!.validityPeriod" placeholder="请输入有效期"></el-input>
-                    </el-form-item>
-                    <el-form-item prop="sceneType" label="场景">
-                        <el-select v-model="baTable.form.items!.sceneType" placeholder="请选择场景"
-                                   style="width: 100%"
-                                   clearable>
-                            <el-option label="首次注册" :value="0"/>
-                            <el-option label="邀请好友" :value="1"/>
-                            <el-option label="上架活动" :value="2"/>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item prop="couponStatus" label="状态">
-                        <el-select v-model="baTable.form.items!.couponStatus" placeholder="请选择状态"
-                                   style="width: 100%"
-                                   clearable>
-                            <el-option label="启用" :value="0"/>
-                            <el-option label="停用" :value="1"/>
-                        </el-select>
-                    </el-form-item>
-                </el-form>
-            </div>
-        </el-scrollbar>
-        <template #footer>
-            <div :style="'width: calc(100% - ' + baTable.form.labelWidth! / 1.8 + 'px)'">
-                <el-button @click="baTable.toggleForm('')">取消</el-button>
-                <el-button v-blur :loading="baTable.form.submitLoading" @click="baTable.onSubmit(formRef)"
-                           type="primary">
-                    {{ baTable.form.operateIds && baTable.form.operateIds.length > 1 ? '保存并编辑下一项' : '保存' }}
-                </el-button>
-            </div>
-        </template>
-    </el-dialog>
+  <!-- 对话框表单 -->
+  <el-dialog
+    custom-class="ba-operate-dialog"
+    :close-on-click-modal="false"
+    :model-value="baTable.form.operate ? true : false"
+    @close="baTable.toggleForm"
+    width="800px"
+  >
+    <template #header>
+      <div class="title" v-drag="['.ba-operate-dialog', '.el-dialog__header']" v-zoom="'.ba-operate-dialog'">
+        {{ baTable.form.operate ? baTable.form.operate == "edit" ? "编辑" : "添加" : "无标题" }}
+      </div>
+    </template>
+    <el-scrollbar v-loading="baTable.form.loading" class="ba-table-form-scrollbar">
+      <div
+        class="ba-operate-form"
+        :class="'ba-' + baTable.form.operate + '-form'"
+        :style="'width: calc(100% - ' + baTable.form.labelWidth! / 2 + 'px)'"
+      >
+        <el-form
+          ref="formRef"
+          @keyup.enter="baTable.onSubmit(formRef)"
+          :model="baTable.form.items"
+          label-position="right"
+          :label-width="baTable.form.labelWidth + 'px'"
+          :rules="rules"
+          v-if="!baTable.form.loading"
+        >
+          <el-form-item prop="couponType" label="优惠券类型">
+            <el-radio-group class="couponType" v-model="baTable.form.items!.couponType">
+              <el-radio :label="0" border>抵扣券</el-radio>
+              <el-radio :label="1" border>折扣券</el-radio>
+              <el-radio :label="2" border>特价券</el-radio>
+              <!--              <el-radio :label="3" border>满减券</el-radio>-->
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item prop="couponName" label="优惠券标题">
+            <el-input v-model="baTable.form.items!.couponName" placeholder="请输入优惠券标题"></el-input>
+          </el-form-item>
+          <el-form-item prop="sceneType" label="使用场景">
+            <el-radio-group v-model="baTable.form.items!.sceneType">
+              <el-radio :label="0">不限定</el-radio>
+              <el-radio :label="1">首页投放</el-radio>
+              <el-radio :label="2">商家派发</el-radio>
+              <el-radio :label="3">营销活动</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item v-if="baTable.form.items!.couponType==0" prop="deductionAmount" label="抵扣金额">
+            <el-input v-model="baTable.form.items!.deductionAmount" placeholder="请输入数字"></el-input>
+          </el-form-item>
+          <el-form-item v-if="baTable.form.items!.couponType==1" prop="discountValue" label="折扣值">
+            <el-input v-model="baTable.form.items!.discountValue"
+                      placeholder="请输入0-1数字,最多保留2位小数"></el-input>
+          </el-form-item>
+          <el-form-item v-if="baTable.form.items!.couponType==2" prop="specialOffer" label="特价金额">
+            <el-input v-model="baTable.form.items!.specialOffer" placeholder="请输入数字"></el-input>
+          </el-form-item>
+          <el-form-item prop="issuesNumber" label="发行量">
+            <el-input v-model="baTable.form.items!.issuesNumber" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item prop="minimumCharge" label="最低消费">
+            <el-radio-group v-model="baTable.form.items!.minimumCharge">
+              <el-radio :label="0">无门槛</el-radio>
+              <el-radio :label="baTable.form.items!.minimumCharge==0?1:baTable.form.items!.minimumCharge">满
+                <el-input style="width: 100px"
+                          v-model="baTable.form.items!.minimumCharge" placeholder="请输入数字"></el-input>
+                元可用
+              </el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item prop="limitedUse" label="是否限定使用">
+            <el-radio-group v-model="baTable.form.items!.limitedUse">
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item prop="validityType" label="有效期类型">
+            <el-radio-group v-model="baTable.form.items!.validityType">
+              <el-radio :label="0">自定义</el-radio>
+              <el-radio :label="1">当日计时</el-radio>
+              <el-radio :label="2">次日计时</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item v-if="baTable.form.items!.validityType==0" label="有效时间">
+            <el-date-picker value-format="YYYY-MM-DD hh:mm:ss" format="YYYY-MM-DD hh:mm:ss"
+                            v-model="baTable.form.items!.validityBeginTime" placeholder="开始时间"></el-date-picker>
+            <span style="margin: 0px 10px">--</span>
+            <el-date-picker value-format="YYYY-MM-DD hh:mm:ss" format="YYYY-MM-DD hh:mm:ss"
+                            v-model="baTable.form.items!.validityEndTime" placeholder="结束时间"></el-date-picker>
+          </el-form-item>
+          <el-form-item v-else prop="validityPeriod" label="有效期天数">
+            <el-input v-model="baTable.form.items!.validityPeriod" placeholder="请输入"></el-input>
+          </el-form-item>
+          <el-form-item prop="couponStatus" label="状态">
+            <el-radio-group v-model="baTable.form.items!.couponStatus">
+              <el-radio :label="0">可用</el-radio>
+              <el-radio :label="1">停用</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="使用说明">
+            <el-input type="textarea" v-model="baTable.form.items!.instruction" placeholder="请输入"></el-input>
+          </el-form-item>
+        </el-form>
+      </div>
+    </el-scrollbar>
+    <template #footer>
+      <div :style="'width: calc(100% - ' + baTable.form.labelWidth! / 1.8 + 'px)'">
+        <el-button @click="baTable.toggleForm('')">取消</el-button>
+        <el-button v-blur :loading="baTable.form.submitLoading" @click="baTable.onSubmit(formRef)"
+                   type="primary">
+          {{ baTable.form.operateIds && baTable.form.operateIds.length > 1 ? "保存并编辑下一项" : "保存" }}
+        </el-button>
+      </div>
+    </template>
+  </el-dialog>
 </template>
 
 <script setup lang="ts">
-import {ref, reactive, inject, onMounted, watch} from 'vue'
-
-import type baTableClass from '/@/utils/baTable'
-import {regularPassword, validatorAccount, validatorMobile} from '/@/utils/validate'
-import type {ElForm, FormItemRule} from 'element-plus'
-import FormItem from '/@/components/formItem/index.vue'
-import {getOrgTree, getEmployees} from '/@/api/backend/auth/account'
-import {authGroup, sysConfig} from '/@/api/controllerUrls'
-import editor from '/@/components/editor/index.vue'
+import { ref, reactive, inject, onMounted, watch } from "vue";
+
+import type baTableClass from "/@/utils/baTable";
+import { regularPassword, validatorAccount, validatorMobile } from "/@/utils/validate";
+import type { ElForm, FormItemRule } from "element-plus";
+import FormItem from "/@/components/formItem/index.vue";
+import { getOrgTree, getEmployees } from "/@/api/backend/auth/account";
+import { authGroup, sysConfig } from "/@/api/controllerUrls";
+import editor from "/@/components/editor/index.vue";
 import request from "/@/api/request";
-import {ElNotification} from "element-plus/es";
-import {document} from '/@/api/controllerUrls'
-import pictureUpload from '/@/components/pictureUpload/index.vue'
+import { ElNotification } from "element-plus/es";
+import { document } from "/@/api/controllerUrls";
+import pictureUpload from "/@/components/pictureUpload/index.vue";
 
-const formRef = ref<InstanceType<typeof ElForm>>()
-const baTable = inject('baTable') as baTableClass
+const formRef = ref<InstanceType<typeof ElForm>>();
+const baTable = inject("baTable") as baTableClass;
 
 onMounted(() => {
-    getDocList()
-})
+  // getDocList()
+});
 
-let docList = ref([])
+let docList = ref([]);
+
+let minimumCharge = ref();
 
 function getDocList() {
-    request.index(document, undefined, 'list').then(res => {
-        docList.value = res.data
-    })
+  request.index(document, undefined, "list").then(res => {
+    docList.value = res.data;
+  });
 }
 
 
+const rules: Partial<Record<string, FormItemRule[]>> = reactive({
+  couponName: [{ required: true, message: "请输入", trigger: "blur" }],
+  sceneType: [{ required: true, message: "请输入", trigger: "blur" }],
+  couponType: [{ required: true, message: "请输入", trigger: "blur" }],
+  issuesNumber: [{ required: true, message: "请输入", trigger: "blur" }],
+  minimumCharge: [{ required: true, message: "请输入", trigger: "blur" }],
+  limitedUse: [{ required: true, message: "请输入", trigger: "blur" }],
+  validityType: [{ required: true, message: "请输入", trigger: "blur" }],
+  couponStatus: [{ required: true, message: "请输入", trigger: "blur" }],
 
 
-const rules: Partial<Record<string, FormItemRule[]>> = reactive({
-    couponName: [
-        {
-            required: true,
-            message: '请输入',
-            trigger: 'blur',
-        },
-    ],
-    discountAmount: [
-        {
-            required: true,
-            message: '请输入',
-            trigger: 'blur',
-        },
-    ],
-    validityPeriod: [
-        {
-            required: true,
-            message: '请输入',
-            trigger: 'blur',
-        },
-    ],
-    sceneType: [
-        {
-            required: true,
-            message: '请选择',
-            trigger: 'blur',
-        },
-    ],
-    couponStatus: [
-        {
-            required: true,
-            message: '请选择',
-            trigger: 'blur',
-        },
-    ],
-
-})
+});
 
 
 </script>
 
 <style scoped lang="scss">
 .avatar-uploader {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    position: relative;
-    border-radius: var(--el-border-radius-small);
-    box-shadow: var(--el-box-shadow-light);
-    border: 1px dashed var(--color-sub-1);
-    cursor: pointer;
-    overflow: hidden;
-    width: 110px;
-    height: 110px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  position: relative;
+  border-radius: var(--el-border-radius-small);
+  box-shadow: var(--el-box-shadow-light);
+  border: 1px dashed var(--color-sub-1);
+  cursor: pointer;
+  overflow: hidden;
+  width: 110px;
+  height: 110px;
 }
 
 .avatar-uploader:hover {
-    border-color: var(--color-primary);
+  border-color: var(--color-primary);
 }
 
 .avatar {
-    width: 110px;
-    height: 110px;
-    display: block;
+  width: 110px;
+  height: 110px;
+  display: block;
 }
 
 .image-slot {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    height: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 100%;
+}
+
+:deep(.couponType .el-radio__input ) {
+  display: none;
 }
 </style>

+ 24 - 8
src/views/backend/enterprise/project/building/popupForm.vue

@@ -16,10 +16,15 @@
                  label-position="right" :label-width="'80px'" :rules="rules"
                  v-if="!baTable.form.loading">
           <el-form-item prop="communityId" label="小区名称">
-            <el-select v-model="baTable.form.items!.communityId" placeholder="请选择" style="width: 100%"
-                       clearable>
-              <el-option :label="item.communityName" :value="item.id"
-                         v-for="item in communityList" />
+<!--            <el-tree-select v-model="baTable.form.items!.communityId" placeholder="请选择" :data="treeDate"-->
+<!--                            :props="defaultProps"-->
+<!--                            style="width: 100%"-->
+<!--                            clearable>-->
+<!--            </el-tree-select>-->
+            <el-select v-model="baTable.form.items!.communityId" placeholder="请选择" style="width: 100%">
+              <el-option-group v-for="i in treeDate" :label="i.label">
+                <el-option v-for="j in i.children" :label="j.label" :value="j.id"></el-option>
+              </el-option-group>
             </el-select>
           </el-form-item>
           <el-form-item prop="buildingNumber" label="楼号">
@@ -46,7 +51,7 @@ import { ref, reactive, inject, onMounted } from "vue";
 import type baTableClass from "/@/utils/baTable";
 import type { ElForm, FormItemRule } from "element-plus";
 import FormItem from "/@/components/formItem/index.vue";
-import { community_list, district, orderExpress } from "/@/api/controllerUrls";
+import { buildingTree, community_list, district, orderExpress } from "/@/api/controllerUrls";
 import { ElNotification } from "element-plus/es";
 import request from "/@/api/request";
 
@@ -68,7 +73,7 @@ const rules: Partial<Record<string, FormItemRule[]>> = reactive({
       message: "请输入",
       trigger: "blur"
     }
-  ],
+  ]
 });
 
 onMounted(() => {
@@ -77,11 +82,22 @@ onMounted(() => {
 
 //区县列表
 let communityList = ref([]);
+let treeDate = ref<array>([]);
+let defaultProps = {
+  label: "label",
+  value: "id"
+};
+
 
 function getInitData() {
-  request.index(community_list, {}, "").then((res: any) => {
+  request.index(buildingTree, {}, "").then((res: any) => {
     if (res.code == 1) {
-      communityList.value = res.data;
+      treeDate.value = [];
+      for (let i in res.data) {
+        if (res.data[i].children.length > 0) {
+          treeDate.value.push(res.data[i]);
+        }
+      }
     }
   });
 }

+ 10 - 10
src/views/backend/enterprise/project/map/popupForm.vue

@@ -16,13 +16,14 @@
                  label-position="right" :label-width="'100px'" :rules="rules"
                  v-if="!baTable.form.loading">
           <el-form-item label="所在区(县)">
-            <el-select v-model="districtId" placeholder="请选择" style="width: 100%" @change="selectDstrict">
+            <el-select v-model="districtId" placeholder="请选择" style="width: 100%" @change="selectDstrict"
+                       :disabled="baTable.form.operate == 'edit' ">
               <el-option v-for="item in districtList" :label="item.districtName" :value="item.id"></el-option>
             </el-select>
           </el-form-item>
           <el-form-item prop="communityId" label="所在小区">
             <el-select v-model="baTable.form.items!.communityId" placeholder="请选择" style="width: 100%"
-                       @change="selectCommunity">
+                       @change="selectCommunity" :disabled="baTable.form.operate == 'edit' ">
               <el-option v-for="item in communityList" :label="item.communityName" :value="item.id"></el-option>
             </el-select>
           </el-form-item>
@@ -64,8 +65,6 @@ const formRef = ref<InstanceType<typeof ElForm>>();
 const baTable = inject("baTable") as baTableClass;
 
 
-
-
 const rules: Partial<Record<string, FormItemRule[]>> = reactive({
   communityId: [
     {
@@ -94,13 +93,14 @@ onMounted(() => {
   getInitData();
 });
 
-watch(() => baTable.form.operate ? true : false, (nValue, oValue) => {
-  console.log(nValue);
-  if(nValue){
-    console.log(baTable.form.items);
-  }
 
-});
+defineExpose({
+  editInit
+})
+
+function editInit(){
+
+}
 
 //区县列表
 let districtList = ref([]);

+ 53 - 54
src/views/backend/enterprise/project/parking/editDialog.vue

@@ -1,19 +1,19 @@
 <template>
   <el-dialog title="车位登记" v-model="showDialog" width="800px" @close="closeDialog">
     <el-form ref="formRef" :model="formData" label-position="right" :label-width="'100px'" :rules="formRules"
-      label-width="100px">
+             label-width="100px">
       <el-row>
         <el-col :span="12">
-          <el-form-item label="车位类型" prop="parkingType">
-            <el-radio-group v-model="formData.parkingType">
-              <el-radio-button :label="0" border>车位</el-radio-button>
-              <el-radio-button :label="1" border>车库</el-radio-button>
-            </el-radio-group>
+          <el-form-item label="车位编号" prop="parkingNumber">
+            <el-input v-model="formData.parkingNumber"></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="车位编号" prop="parkingNumber">
-            <el-input v-model="formData.parkingNumber"></el-input>
+          <el-form-item label="车位类型" prop="parkingType">
+            <el-radio-group v-model="formData.parkingType">
+              <el-radio :label="0" >车位</el-radio>
+              <el-radio :label="1" >车库</el-radio>
+            </el-radio-group>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -29,16 +29,16 @@
         <el-col :span="12">
           <el-form-item label="是否特价" prop="isSpecial">
             <el-radio-group v-model="formData.isSpecial">
-              <el-radio-button :label="0" border>否</el-radio-button>
-              <el-radio-button :label="1" border>是</el-radio-button>
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
             </el-radio-group>
           </el-form-item>
         </el-col>
         <el-col :span="12">
           <el-form-item label="是否置顶" prop="isTop">
             <el-radio-group v-model="formData.isTop">
-              <el-radio-button :label="0" border>否</el-radio-button>
-              <el-radio-button :label="1" border>是</el-radio-button>
+              <el-radio :label="0">否</el-radio>
+              <el-radio :label="1">是</el-radio>
             </el-radio-group>
           </el-form-item>
         </el-col>
@@ -88,15 +88,9 @@
         </el-col>
 
 
-
-
-
-
       </el-row>
 
 
-
-
     </el-form>
 
     <template #footer>
@@ -113,42 +107,39 @@
 <script setup>
 import { reactive, ref } from "vue";
 import request from "/@/api/request";
-import { parking } from "/@/api/controllerUrls";
-import { ElMessage } from 'element-plus'
+import { district_list, parking } from "/@/api/controllerUrls";
+import { ElMessage } from "element-plus";
 
 let showDialog = ref(false);
 
-let formRef = ref()
+let formRef = ref();
 
-let type = ref('add')
+let type = ref("add");
 
-let emit = defineEmits(['close'])
+let emit = defineEmits(["close"]);
 
 defineExpose({
   open
 });
 
 function open(type1, data, districtId, communityId, buildingId) {
-  type.value = type1
+  type.value = type1;
   if (type1 == "add") {
-    formRef.value?.resetFields()
-    formData.districtId = districtId
-    formData.communityId = communityId
-    formData.buildingId = buildingId
+    formRef.value?.resetFields();
+    formData.districtId = districtId;
+    formData.communityId = communityId;
+    formData.buildingId = buildingId;
   } else {
-    for (let key in formData) {
-      formData[key] = data[key]
-    }
-    formData.id = data.id
+    getInitData(data.id)
   }
 
   showDialog.value = true;
 }
 
 let formData = reactive({
-  districtId: '',
-  communityId: '',
-  buildingId: '',
+  districtId: "",
+  communityId: "",
+  buildingId: "",
   parkingType: 0,
   parkingNumber: "",
   area: "",
@@ -161,64 +152,72 @@ let formData = reactive({
   isSale: 0,//是否出售
   salePrice: 0,//售价
   saleStatus: 0,//出售状态
-  contactNumber: "",//联系电话
+  contactNumber: ""//联系电话
 
 });
 
 let formRules = {
   parkingNumber: [
-    { required: true, message: '不能为空' }
+    { required: true, message: "不能为空" }
   ],
   area: [
-    { required: true, message: '不能为空' },
+    { required: true, message: "不能为空" }
     // { type: 'number', message: '必须为数字' }
   ],
   contactNumber: [
-    { required: true, message: '不能为空' },
+    { required: true, message: "不能为空" }
     // { type: 'number', message: '必须为数字' }
   ],
   hirePrice: [
-    { required: true, message: '不能为空' },
+    { required: true, message: "不能为空" }
     // { type: 'number', message: '必须为数字' }
   ],
   salePrice: [
-    { required: true, message: '不能为空' },
+    { required: true, message: "不能为空" }
     // { type: 'number', message: '必须为数字' }
-  ],
+  ]
 };
 
 
-
-function getInitData() {
-
+function getInitData(event) {
+  request.index(parking, {
+    id:event
+  }, "detail").then((res) => {
+    if (res.code == 1) {
+      for (let key in formData) {
+        formData[key] = res.data[key];
+      }
+      formData.id = event;
+    }
+  });
 }
 
 function submit() {
   formRef.value.validate((valid) => {
     if (valid) {
-      if(formData.isHire==0&&formData.isSale==0) {
-        ElMessage({type:'warning',message:'请选择售卖类型',grouping:true})
-        return
+      if (formData.isHire == 0 && formData.isSale == 0) {
+        ElMessage({ type: "warning", message: "请选择售卖类型", grouping: true });
+        return;
       }
-      if (type.value == 'add') {
+      if (type.value == "add") {
         request.add(parking, formData).then((res) => {
           if (res.code == 1) {
-            showDialog.value = false
+            showDialog.value = false;
           }
         });
       } else {
         request.edit(parking, formData).then((res) => {
           if (res.code == 1) {
-            showDialog.value = false
+            showDialog.value = false;
           }
         });
       }
     }
-  })
+  });
 }
 
-function closeDialog(){
-  emit('close');
+function closeDialog() {
+  emit("close");
 }
 
 

+ 1 - 1
src/views/backend/enterprise/project/parking/index.vue

@@ -178,7 +178,7 @@ function openDialog(type: string, data: any = {}) {
 
 function deleteRow(row: any) {
   request.delete(parking, {
-    id: row.id
+    ids: [row.id]
   }).then((res: any) => {
     if (res.code == 1) {
       getData()

+ 182 - 139
src/views/backend/enterprise/project/parking/mapSetting.vue

@@ -3,58 +3,35 @@
     <div style="margin-bottom: 10px">
       <el-button type="primary" @click="setBigger">放大</el-button>
       <el-button type="primary" @click="setSmaller">缩小</el-button>
+      <el-button type="primary" @click="resetSize">复位</el-button>
     </div>
     <div id="mapContainer" :style="{width:props.width,height:props.height}" @touchstart="moveOn" @touchmove="dragMove"
          @mousedown="moveOn"
-         @mouseup="moveOff" @mousemove="dragMove" @mouseleave="moveOff" @dblclick="dbClick">
+         @mouseup="moveOff" @mousemove="dragMove" @mouseleave="moveOff" @dblclick="dbClick" @wheel.prevent="wheel">
       <div id="labelMap" :style="mapStyle">
         <div :key="index" class="labelItem "
-             :style="{left: item.x+'px',top:item.y+'px',backgroundColor:statusList[item.status].backGround,width:item.size+'px',height:item.size+'px',fontSize:item.size/3+'px'}"
-             v-for="(item,index) in itemList">
-          <span :style="{color:statusList[item.status].color}">{{ statusList[item.status].label }}</span>
+             :style="{left: item.mapX+'px',top:item.mapY+'px',backgroundColor:setMarkStyle(item)?.backGround,width:item.mapSize+'px',height:item.mapSize+'px',fontSize:item.mapSize/3+'px'}"
+             v-for="(item,index) in mapData" @dblclick="dbClickItem(item)">
+          <span :style="{color:setMarkStyle(item)?.color}">{{ setMarkStyle(item)?.label }}</span>
         </div>
       </div>
     </div>
 
 
-    <el-dialog :title="dialogTitle" v-model="showDialog" width="600px">
+    <el-dialog :title="dialogTitle" v-model="showDialog" width="400px">
       <el-form ref="formRef" :model="formData" :rules="formRules" label-width="100px">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="车位编号" prop="positionID">
-              <el-input v-model="formData.positionID">
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="销售状态" prop="status">
-              <el-select v-model="formData.status">
-                <el-option v-for="(item,index) in statusList" :value="index" :label="item.label"></el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="售价" prop="price">
-              <el-input-number style="width: 100%" v-model="formData.price" :min="0" controls-position="right">
-              </el-input-number>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="标记尺寸" prop="size">
-              <el-radio-group v-model="formData.size">
-                <el-radio :label="60">大</el-radio>
-                <el-radio :label="30">中</el-radio>
-                <el-radio :label="21">小</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-          <el-col :span="24">
-            <el-form-item label="说明" prop="remark">
-              <el-input type="textarea" v-model="formData.remark">
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
+        <el-form-item label="标记尺寸" prop="mapSize">
+          <el-radio-group v-model="formData.mapSize">
+            <el-radio :label="51">大</el-radio>
+            <el-radio :label="27">中</el-radio>
+            <el-radio :label="15">小</el-radio>
+          </el-radio-group>
+        </el-form-item>
+        <el-form-item label="选择车位" prop="id">
+          <el-select v-model="formData.id">
+            <el-option v-for="(item,index) in unMapData" :value="item.id" :label="item.parkingNumber"></el-option>
+          </el-select>
+        </el-form-item>
       </el-form>
       <template #footer>
         <el-button type="info" @click="showDialog=false">取消</el-button>
@@ -66,77 +43,94 @@
 
 </template>
 <script setup>
-import {computed, onMounted, reactive, ref, watch} from "vue";
+import { computed, onMounted, reactive, ref, watch } from "vue";
+import request from "/@/api/request";
+import { building, mapMark } from "/@/api/controllerUrls";
+import { ElMessageBox } from "element-plus";
 
-const emit = defineEmits(['update:value', 'change'])
+const emit = defineEmits(["update:value", "change"]);
 
 const props = defineProps({
-  imgUrl: {//地图地址,后期可以不用
+  imgUrl: {
     type: String,
-    default: ''
+    default: ""
   },
-  imgID: {//地图id,后期通过地图Id动态获取地图地址
+  mapId: {
     type: String,
-    default: ''
+    default: ""
   },
   width: {//外边框尺寸
     type: String,
-    default: '100%'
+    default: "100%"
   },
   height: {//外边框尺寸
     type: String,
-    default: '400px'
+    default: "400px"
   },
   value: {//标记点列表
     type: Array,
     default: []
   }
-})
-
-let itemList = ref([])
+});
 
 
 //图片高度
-let height = ref(0)
-let width = ref(0)
+let height = ref(0);
+let width = ref(0);
 
 //图层样式
 let mapStyle = computed(() => {
   return {
     backgroundImage: `url(${props.imgUrl})`,
-    width: width.value + 'px',
-    height: height.value + 'px',
-    left: dragOption.x1 + 'px',
-    top: dragOption.y1 + 'px'
-  }
-})
+    width: width.value + "px",
+    height: height.value + "px",
+    left: dragOption.x1 + "px",
+    top: dragOption.y1 + "px"
+  };
+});
 
 
 //图层实例
-let labelMap
+let labelMap;
 
 onMounted(() => {
-  itemList.value = props.value
-  labelMap = document.getElementById('labelMap')
-  setTimeout(() => {
-    setImgSize()
-  }, 100)
+  labelMap = document.getElementById("labelMap");
+});
 
-})
-
-watch(props.value, (n, o) => {
-  itemList.value = n
-})
 
 //根据容器宽度和原始图片长宽比例设置图层高度
 function setImgSize() {
-  const m = document.getElementById('mapContainer')
-  let img = new Image()
-  img.src = props.imgUrl
-  width.value = m.clientWidth
-  height.value = m.clientWidth * (img.height / img.width)
+  const m = document.getElementById("mapContainer");
+  let img = new Image();
+  img.src = props.imgUrl;
+  width.value = m.clientWidth;
+  height.value = m.clientWidth * (img.height / img.width);
 }
 
+watch(() => props.imgUrl, () => {
+  setImgSize();
+});
+
+let unMapData = computed(() => {
+  let res = [];
+  for (let i in props.value) {
+    if (props.value[i].mapId == 0) {
+      res.push(props.value[i]);
+    }
+  }
+  return res;
+});
+
+let mapData = computed(() => {
+  let res = [];
+  for (let i in props.value) {
+    if (props.value[i].mapId != 0) {
+      res.push(props.value[i]);
+    }
+  }
+  return res;
+});
+
 
 //拖拽参数
 let dragOption = reactive({
@@ -145,115 +139,166 @@ let dragOption = reactive({
   x: 0,
   y: 0,
   status: false
-})
+});
 
 
 //启动拖拽
 function moveOn(event) {
-  dragOption.status = true
-  dragOption.x = event.clientX
-  dragOption.y = event.clientY
+  dragOption.status = true;
+  dragOption.x = event.clientX;
+  dragOption.y = event.clientY;
 }
 
 //关闭拖拽
 function moveOff() {
-  dragOption.status = false
+  dragOption.status = false;
 }
 
 //拖拽
 function dragMove(event) {
   if (dragOption.status) {
-    dragOption.x1 += event.clientX - dragOption.x
-    dragOption.y1 += event.clientY - dragOption.y
+    dragOption.x1 += event.clientX - dragOption.x;
+    dragOption.y1 += event.clientY - dragOption.y;
 
-    dragOption.x = event.clientX
-    dragOption.y = event.clientY
+    dragOption.x = event.clientX;
+    dragOption.y = event.clientY;
 
   }
 
 }
 
 
-let showDialog = ref(false)
-let dialogTitle = ref('')
-let formRef = ref()
+let showDialog = ref(false);
+let dialogTitle = ref("");
+let formRef = ref();
 let formData = ref({
-  x: 0,
-  y: 0,
-  size: 30,
-  status: 0,
-  price: 0,
-  positionID: '',
-  remark: '',
-  imgID: props.imgID,
-  pWidth: 0
-})
+  id: "",
+  mapX: 0,
+  mapY: 0,
+  mapId: "",
+  mapSize: 27,
+  mapInitWidth: 0
+});
+
 let formRules = reactive({
-  status: [{required: true, message: '不能为空', trigger: 'blur'}],
-  price: [{required: true, message: '不能为空', trigger: 'blur'}],
-  positionID: [{required: true, message: '不能为空', trigger: 'blur'}],
-})
+  mapSize: [{ required: true, message: "不能为空", trigger: "blur" }],
+  id: [{ required: true, message: "不能为空", trigger: "blur" }]
+});
 
 let statusList = [
-  {label: '可售', backGround: '#0bc933', color: '#000000'},
-  {label: '已售', backGround: '#fd0002', color: '#ffffff'},
-  {label: '待租', backGround: '#fde801', color: '#000000'},
-  {label: '已租', backGround: '#006efd', color: '#ffffff'},
-]
+  { label: "可售", backGround: "#0bc933", color: "#000000" },
+  { label: "已售", backGround: "#fd0002", color: "#ffffff" },
+  { label: "待租", backGround: "#fde801", color: "#000000" },
+  { label: "已租", backGround: "#006efd", color: "#ffffff" }
+];
+
+function setMarkStyle(row) {
+  if (row.saleStatus == 1) {
+    return { label: "已售", backGround: "#fd0002", color: "#ffffff" };
+  } else if (row.isSale == 1) {
+    return { label: "待售", backGround: "#0bc933", color: "#000000" };
+  } else if (row.isHire == 1) {
+    return { label: "已租", backGround: "#006efd", color: "#ffffff" };
+  } else {
+    return { label: "待租", backGround: "#fde801", color: "#000000" };
+  }
+
+}
 
 
 //双击设置标记
 function dbClick(event, item) {
-  showDialog.value = true
+  if (props.imgUrl == "") return;
   //点击地图
-  if (event.target.id == 'labelMap') {
-    formRef.value?.resetFields()
-    formData.value.x = event.layerX - 15
-    formData.value.y = event.layerY - 15
-    formData.value.pWidth = width.value
-    dialogTitle.value = '添加'
-
+  if (event.target.id == "labelMap") {
+    formRef.value?.resetFields();
+    formData.value.mapInitWidth = width.value;
+    formData.value.mapX = event.layerX;
+    formData.value.mapY = event.layerY;
+    dialogTitle.value = "添加";
+    showDialog.value = true;
   }
-  //点击标记
-  else {
 
-    dialogTitle.value = '编辑'
-  }
-  //清除校验结果
-  formRef.value?.clearValidate()
 }
 
-//提交表单
-function submit() {
 
-  if (dialogTitle.value == '添加') {
-    let n = Object.assign({}, formData.value)
-    itemList.value.push(n)
-    showDialog.value = false
-  } else {
+//双击标记
+function dbClickItem(item) {
+  ElMessageBox.confirm(
+    "是否确定清除该标记?",
+    "warning",
+    {
+      confirmButtonText: "确定",
+      cancelButtonText: "取消",
+      type: "warning"
+    }
+  ).then(() => {
+    console.log(item);
+    for (let key in formData.value) {
+      formData.value[key] = item[key];
+    }
+    formData.value.mapId = "0";
+    postMark();
+  }).catch(() => {
+  });
+
+}
 
+//提交表单
+function submit() {
+  if (dialogTitle.value == "添加") {
+    formData.value.mapX = (formData.value.mapX - formData.value.mapSize / 2).toFixed(0);
+    formData.value.mapY = (formData.value.mapY - formData.value.mapSize / 2).toFixed(0);
+    formData.value.mapId = props.mapId;
+    postMark();
+    showDialog.value = false;
   }
+}
 
-  emit('update:value', itemList)
+function postMark() {
+  request.edit(mapMark, {
+    id: formData.value.id,
+    entity: formData.value
+  }, "").then((res) => {
+    if (res.code == 1) {
+      emit("change");
+    }
+  });
 }
 
 
-let size = 1
+let size = 1;
 
 //缩小
 function setSmaller() {
   //边界条件
-  if (size < 0.3) return
-  size -= 0.1
-  labelMap.style.transform = `scale(${size})`
+  if (size < 0.3) return;
+  size -= 0.1;
+  labelMap.style.transform = `scale(${size})`;
 }
 
+
 //放大
 function setBigger() {
   //边界条件
-  if (size > 2) return
-  size += 0.1
-  labelMap.style.transform = `scale(${size})`
+  if (size > 3) return;
+  size += 0.1;
+  labelMap.style.transform = `scale(${size})`;
+}
+
+function resetSize() {
+  size = 1;
+  labelMap.style.transform = `scale(${size})`;
+  dragOption.x1 = 0;
+  dragOption.y1 = 0;
+}
+
+function wheel(event) {
+  if (event.wheelDeltaY > 0) {
+    setBigger();
+  } else {
+    setSmaller();
+  }
 }
 
 </script>
@@ -282,10 +327,8 @@ function setBigger() {
   font-size: 13px;
   user-select: none;
   position: absolute;
+  cursor: pointer;
 
-  &:hover {
-    cursor: pointer;
-  }
 
 }
 

Some files were not shown because too many files changed in this diff