From fe7c2fff004e4a64dae5f0982ab28663c600c778 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期四, 03 四月 2025 15:20:17 +0800
Subject: [PATCH] Merge branch '2.0' of http://120.76.84.145:10101/gitblit/r/java/PlayPai into 2.0

---
 cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html | 1011 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 978 insertions(+), 33 deletions(-)

diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html
index bf93e48..86d4f84 100644
--- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html
+++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html
@@ -1,45 +1,990 @@
 @layout("/common/_container.html"){
-<div class="ibox float-e-margins">
-    <div class="ibox-content">
-        <div class="form-horizontal">
+<body>
+<div id="app0" class="form-container">
+    <el-form :rules="rules" label-position="left" ref="formRef" label-width="120px" :model="huiminCard" size="small">
+        <el-form-item label="惠民卡名称" prop="huiMinName">
+            <el-input v-model="huiminCard.huiMinName"></el-input>
+        </el-form-item>
 
-            <div class="row">
-                <div class="col-sm-6 b-r">
-                            <#input id="id" name="主键id" underline="true"/>
-                            <#input id="huiMinName" name="惠民卡名称" underline="true"/>
-                            <#input id="huiMinType" name="惠民卡类型1年度2年内" underline="true"/>
-                            <#input id="salesMoney" name="售卖金额" underline="true"/>
-                            <#input id="buyCover" name="已购买封面" underline="true"/>
-                            <#input id="unBuyCover" name="未购买封面" underline="true"/>
-                            <#input id="buyRemark" name="已购买使用说明" underline="true"/>
-                            <#input id="unBuyRemark" name="未购买使用说明" underline="true"/>
-                            <#input id="banner" name="轮播图 逗号分隔" underline="true"/>
-                            <#input id="grantCount" name="发放数量 为空表示不限"/>
-                </div>
 
-                <div class="col-sm-6">
-                            <#input id="limitCount" name=" 限购数量 为空表示不限" underline="true"/>
-                            <#input id="endTime" name="有效期 不填表示永久" underline="true"/>
-                            <#input id="useWeeks" name="可使用时间段,周,多个逗号分隔" underline="true"/>
-                            <#input id="useTimes" name="可使用时间段,时分秒,多个逗号分隔" underline="true"/>
-                            <#input id="unUseTimes" name="不可用时间段,yyyy-MM-dd HH:mm:ss,多个逗号分隔" underline="true"/>
-                            <#input id="useScope" name="使用范围1门店2场地" underline="true"/>
-                            <#input id="useIds" name="根据适用范围,存储门店id或场地id,多个逗号分隔" underline="true"/>
-                            <#input id="introduce" name="惠民卡介绍" underline="true"/>
-                            <#input id="sort" name="排序" underline="true"/>
-                            <#input id="storeId" name="门店id" underline="true"/>
+        <!-- 惠民卡类型 -->
+        <el-form-item label="惠民卡类型" prop="huiMinType">
+            <el-radio-group v-model="huiminCard.huiMinType">
+                <el-radio :label="1">年度卡</el-radio>
+                <el-radio :label="2">年内卡</el-radio>
+            </el-radio-group>
+        </el-form-item>
+
+        <!-- 售卖金额 -->
+        <el-form-item label="售卖金额" prop="salesMoney">
+            <el-input placeholder="请输入内容" v-model="huiminCard.salesMoney">
+                <template slot="append">¥</template>
+            </el-input>
+        </el-form-item>
+
+        <!-- 封面图片 -->
+        <el-row>
+            <el-form-item label="封面图片2" prop="cover">
+                <el-col :span="12">
+                    <div class="upload-area text-center">
+                        <el-upload
+                                :limit="1"
+                                action="/tCouponManage/uploadPic"
+                                list-type="picture-card"
+                                :multiple="false"
+                                accept="."
+                                :on-success="handleUnBuyCoverSuccess"
+                                :before-upload="beforeUpload"
+                                :on-exceed="handleUnBuyCoverExceed"
+                                :on-remove="handleUnBuyCoverRemove">
+                            <i class="el-icon-plus avatar-uploader-icon"></i>
+                        </el-upload>
+                        <span>未购买封面</span>
+                    </div>
+
+                </el-col>
+                <el-col :span="12">
+                    <div class="upload-area text-center" style="display: flex">
+                        <el-upload
+                                :limit="1"
+                                class="avatar-uploader"
+                                action="/tCouponManage/uploadPic"
+                                list-type="picture-card"
+                                :multiple="false"
+                                accept="."
+                                :on-success="handleBuyCoverSuccess"
+                                :before-upload="beforeUpload"
+                                :on-remove="handleBuyCoverRemove">
+                            <i class="el-icon-plus avatar-uploader-icon"></i>
+                        </el-upload>
+                        <span>已购买封面</span>
+                    </div>
+                </el-col>
+            </el-form-item>
+        </el-row>
+
+
+        <!-- 使用说明 -->
+        <el-form-item label="使用说明" prop="unBuyRemark">
+            <el-input
+                    type="textarea"
+                    :autosize="{ minRows: 2, maxRows: 4}"
+                    placeholder="请输入少于200字使用说明"
+                    v-model="huiminCard.unBuyRemark">
+            </el-input>
+        </el-form-item>
+
+
+        <!-- 使用期限 -->
+        <el-form-item label="使用期限" prop="buyRemark">
+            <el-input
+                    type="textarea"
+                    :autosize="{ minRows: 2, maxRows: 4}"
+                    placeholder="请输入少于200字使用说明"
+                    v-model="huiminCard.buyRemark">
+            </el-input>
+        </el-form-item>
+
+
+        <!-- 轮播介绍图 -->
+        <el-form-item label="轮播介绍图" prop="banner">
+            <div class="upload-area">
+                <div class="d-flex align-items-center justify-content-between">
+                    <el-upload
+                            :limit="5"
+                            class="avatar-uploader"
+                            action="/tCouponManage/uploadPic"
+                            list-type="picture-card"
+                            accept="."
+                            :on-success="handleSuccess"
+                            :before-upload="beforeUpload"
+                            :on-remove="handleRemove">
+                        <i class="el-icon-plus avatar-uploader-icon"></i>
+                    </el-upload>
+                    <span>点击上传,最多5张</span>
                 </div>
             </div>
+        </el-form-item>
 
-            <div class="row btn-group-m-t">
-                <div class="col-sm-10">
-                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="THuiminCardInfoDlg.addSubmit()"/>
-                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="THuiminCardInfoDlg.close()"/>
+
+        <!-- 发放数量 -->
+        <el-form-item label="发放数量">
+            <el-input v-model="huiminCard.grantCount"></el-input>
+        </el-form-item>
+
+
+        <!-- 限购数量 -->
+        <el-form-item label="限购数量">
+            <el-input v-model="huiminCard.limitCount"></el-input>
+        </el-form-item>
+
+
+        <!-- 有效期 -->
+        <el-form-item label="有效期">
+            <el-date-picker
+                    v-model="huiminCard.endTime"
+                    type="date"
+                    placeholder="选择日期">
+            </el-date-picker>
+        </el-form-item>
+
+
+        <!-- 可用时间 -->
+        <el-form-item label="可用时间" prop="weeks">
+            <el-card
+                    shadow="never"
+                    v-for="(weekGroup, groupIndex) in huiminCard.weeks"
+                    :key="'weekGroup_' + groupIndex">
+                <div slot="header"
+                     style="display: flex;
+                align-items: center;
+                height: 18px;
+                padding: 0 16px;">
+                    <el-button type="text" v-on:click="addWeek()">添加</el-button>
                 </div>
+
+                <div class="form-group" style="display: flex; justify-content: space-between;">
+                    <div
+                            class="col-md-1"
+                            style="flex: 1 0 calc(100% / 7);"
+                            v-for="(day, dayIndex) in weekGroup.days"
+                            :key="dayIndex">
+                        <input
+                                class="form-check-input"
+                                type="checkbox"
+                                :name="'week_'+''+groupIndex"
+                                :value="day.value"
+                                v-model="day.checked">
+                        <label class="form-check-label">
+                            {{ day.label }}
+                        </label>
+                    </div>
+                </div>
+                <!-- 时间输入和删除按钮 -->
+                <div class="row g-3">
+                    <div class="col-md-6" style="display: flex">
+                        <el-time-select
+                                placeholder="起始时间"
+                                v-model="weekGroup.startTime"
+                                :picker-options="{
+                                                start: '00:00',
+                                                step: '01:00',
+                                                end: '23:00'}"
+                        >
+                        </el-time-select>
+                        <el-time-select
+                                placeholder="结束时间"
+                                v-model="weekGroup.endTime"
+                                :picker-options="{
+                                              start: '00:00',
+                                              step: '01:00',
+                                              end: '23:00',
+                                              minTime: weekGroup.startTime}">
+                        </el-time-select>
+                    </div>
+                    <div class="col-md-6">
+                        <button
+                                type="button"
+                                class="btn btn-danger"
+                                style="float: right"
+                                v-on:click="removeWeek(groupIndex)"
+                        >
+                            <i class="fa fa-trash"></i> 删除
+                        </button>
+                    </div>
+                </div>
+            </el-card>
+        </el-form-item>
+
+        <!-- 不可用时间 -->
+        <el-form-item label="不可用时间" prop="unUseTimes">
+            <el-button type="text" v-on:click="addUnUseTime()">添加</el-button>
+            <div v-for="(item, dayIndex) in times"
+                 :key="dayIndex"
+                 class="date-picker-item mb-2">
+                <el-date-picker
+                        type="datetime"
+                        placeholder="选择日期"
+                        v-model="item.date">
+                </el-date-picker>
+                <button
+                        type="button"
+                        class="btn btn-danger btn-sm ml-2"
+                        v-on:click="removeUnUseTime(dayIndex)">
+                    删除
+                </button>
+            </div>
+        </el-form-item>
+
+        <!-- 适用范围 -->
+        <el-form-item label="适用范围" prop="useScope">
+            <el-radio v-model="huiminCard.useScope" label="1">指定门店</el-radio>
+            <el-radio v-model="huiminCard.useScope" label="2">指定场地</el-radio>
+        </el-form-item>
+
+        <!-- 指定门店 -->
+        <el-form-item label="指定门店" v-if="huiminCard.useScope === '1'" prop="storeIds">
+            <el-button type="text" v-on:click="handleSelectStore()">选择门店</el-button>
+            <el-table
+                    :data="tableData"
+                    height="250"
+                    border>
+                <el-table-column
+                        prop="province"
+                        label="所在省市">
+                </el-table-column>
+                <el-table-column
+                        prop="operatorName"
+                        label="所属运营商">
+                </el-table-column>
+                <el-table-column
+                        prop="storeName"
+                        label="门店名称">
+                </el-table-column>
+                <el-table-column
+                        prop="ids"
+                        label="闸机ID">
+                </el-table-column>
+                <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                    <template slot-scope="scope">
+                        <el-button
+                                size="mini"
+                                type="text"
+                                v-on:click="handleRemoveStore(scope.$index)"
+                                icon="el-icon-delete"
+                        >删除
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-form-item>
+
+        <!-- 指定场地 -->
+        <el-form-item label="指定场地" v-if="huiminCard.useScope === '2'" prop="siteIds">
+            <el-button type="text" v-on:click="handleSelectStore()">选择场地</el-button>
+            <el-table
+                    :data="tableData"
+                    height="250"
+                    border>
+                <el-table-column
+                        prop="province"
+                        label="所在省市">
+                </el-table-column>
+                <el-table-column
+                        prop="operatorName"
+                        label="所属运营商">
+                </el-table-column>
+                <el-table-column
+                        prop="storeName"
+                        label="门店名称">
+                </el-table-column>
+                <el-table-column
+                        prop="ids"
+                        label="闸机ID">
+                </el-table-column>
+                <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+                    <template slot-scope="scope">
+                        <el-button
+                                size="mini"
+                                type="text"
+                                v-on:click="handleRemoveStore(scope.$index)"
+                                icon="el-icon-delete"
+                        >删除
+                        </el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+        </el-form-item>
+
+        <!-- 惠民卡介绍 -->
+        <el-form-item label="惠民卡介绍" prop="introduce">
+            <textarea type="text/plain" v-model="introduces" id="editor_1"></textarea>
+        </el-form-item>
+
+        <!-- 排序 -->
+        <el-form-item label="排序">
+            <el-input v-model="huiminCard.sort"></el-input>
+        </el-form-item>
+
+
+        <!-- 操作按钮 -->
+        <div class="row mt-5">
+            <div class="col-sm-9 offset-sm-3">
+                <button type="button" v-on:click="submitForm('formRef')" class="btn btn-primary px-4">提交保存</button>
             </div>
         </div>
+        <!-- 选择门店 -->
+        <el-dialog
+                title="选择门店"
+                :visible.sync="dialogVisible2"
+                width="80%"
+                :before-close="handleStoreClose">
+            <el-form ref="form" :model="storeForm" label-width="80px">
+                <el-row :gutter="10">
+                    <el-col :span="6">
+                        <el-form-item label="所在省">
+                            <el-select v-model="storeForm.provinceCode" size="mini" filterable placeholder="请选择">
+                                <el-option
+                                        v-for="item in provinces"
+                                        :key="item.code"
+                                        :label="item.name"
+                                        :value="item.code">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="所在市2">
+                            <el-select v-model="storeForm.cityCode" size="mini" filterable placeholder="请选择">
+                                <el-option
+                                        v-for="item in cities"
+                                        :key="item.citycode"
+                                        :label="item.name"
+                                        :value="item.citycode">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="所属运营商">
+                            <el-input size="mini" v-model="storeForm.operatorId" placeholder="请输入内容"></el-input>
+                        </el-form-item>
+                    </el-col>
+                    <el-col :span="6">
+                        <el-form-item label="门店名称">
+                            <el-input size="mini" v-model="storeForm.storeName" placeholder="请输入内容"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="24">
+                        <el-button v-on:click="storeList" style="background-color:#1ab394;color: #ffffff" size="mini" icon="el-icon-search">
+                            搜索
+                        </el-button>
+                    </el-col>
+                </el-row>
 
-    </div>
+                <el-row>
+                    <el-col :span="24">
+                        <el-table
+                                v-loading="tableStoreLoading"
+                                :data="tableStoreData"
+                                height="250"
+                                v-on:selection-change="handleSelectionChange"
+                                border>
+                            <el-table-column
+                                    type="selection"
+                                    width="55">
+                            </el-table-column>
+                            <el-table-column
+                                    prop="province"
+                                    label="所在省市">
+                            </el-table-column>
+                            <el-table-column
+                                    prop="operatorName"
+                                    label="所属运营商">
+                            </el-table-column>
+                            <el-table-column
+                                    prop="storeName"
+                                    label="门店名称">
+                            </el-table-column>
+                            <el-table-column
+                                    prop="ids"
+                                    label="闸机ID">
+                            </el-table-column>
+                        </el-table>
+                        <el-pagination
+                                background
+                                layout="prev, pager, next"
+                                v-on:pagination="storeList"
+                                :page.sync="queryParams.pageNum"
+                                :limit.sync="queryParams.pageSize"
+                                :total="tableStoreTotal">
+                        </el-pagination>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <span slot="footer" class="dialog-footer">
+                <el-button v-on:click="dialogVisible2 = false">取 消</el-button>
+                <el-button type="primary" v-on:click="handleStore">确 定</el-button>
+            </span>
+        </el-dialog>
+
+        <!-- 选择场地 -->
+        <el-dialog
+                title="选择场地"
+                :visible.sync="dialogVisible3"
+                width="80%"
+                :before-close="handleSiteClose">
+
+            <el-table
+                    v-loading="tableSiteLoading"
+                    :data="tableSiteData"
+                    height="250"
+                    v-on:selection-change="handleSelectionChange"
+                    border>
+                <el-table-column
+                        type="selection"
+                        width="55">
+                </el-table-column>
+                <el-table-column
+                        prop="province"
+                        label="所在省市">
+                </el-table-column>
+                <el-table-column
+                        prop="operatorName"
+                        label="所属运营商">
+                </el-table-column>
+                <el-table-column
+                        prop="storeName"
+                        label="门店名称">
+
+                </el-table-column>
+                <el-table-column
+                        prop="siteName"
+                        label="场地名称">
+                </el-table-column>
+                <el-table-column
+                        prop="ids"
+                        label="闸机ID2">
+                </el-table-column>
+            </el-table>
+
+            <pagination
+                    v-show="tableSiteTotal>0"
+                    :total="tableSiteTotal"
+                    :page.sync="queryParams.pageNum"
+                    :limit.sync="queryParams.pageSize"
+                    v-on:pagination="siteList"></pagination>
+
+            <span slot="footer" class="dialog-footer">
+                <el-button v-on:click="dialogVisible3 = false">取 消</el-button>
+                <el-button type="primary" v-on:click="handleSite">确 定</el-button>
+            </span>
+        </el-dialog>
+    </el-form>
 </div>
-<script src="${ctxPath}/static/modular/system/tHuiminCard/tHuiminCard_info.js"></script>
+
+<style>
+    .form-container {
+        background: #ffffff;
+        border-radius: 12px;
+        box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
+        padding: 2rem;
+    }
+
+    .upload-area {
+        border: 2px dashed #dee2e6;
+        border-radius: 8px;
+        padding: 1.5rem;
+        transition: all 0.3s;
+        cursor: pointer;
+        flex-direction: column;
+        align-items: center;
+        justify-content: center;
+        min-height: 200px; /* 设置一个最小高度,确保有足够的空间 */
+        position: relative; /* 为图片定位提供基准 */
+        overflow: hidden; /* 防止图片溢出 */
+    }
+
+    .upload-area:hover {
+        border-color: #4a90e2;
+        background: #f8f9fa;
+    }
+
+    .upload-area i {
+        margin-bottom: 10px;
+    }
+
+    input[type=file] {
+        display: none;
+    }
+
+
+</style>
+
+<script src="${ctxPath}/modular/system/tHuiminCard/tHuiminCard_info.js"></script>
+<script src="${ctxPath}/js/vue/vue.js"></script>
+<script src="${ctxPath}/js/elementui/index.js"></script>
+<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
+<script>
+    let vue = new Vue({
+        el: '#app0',
+        props: {
+            // 数量限制
+            limit: {
+                type: Number,
+                default: 2
+            },
+        },
+        data() {
+            return {
+                storeForm: {
+                    provinceCode: null,
+                    cityCode: null,
+                    operatorId: null,
+                    storeName: '',
+                },
+
+                provinces: [],
+                cities: [],
+                stores: [],
+                operations: [],
+                autoUpload: true,//自动上传
+                previewImg: '',//模型数据,用于上传图片完成后图片预览
+                dialogVisible: false,
+                dialogVisible2: false,
+                dialogVisible3: false,
+                times: [{}],
+                banners: [],
+                introduces: null,
+                multipleSelection1: [],
+                multipleSelection2: [],
+                huiminCard: {
+                    id: null,
+                    huiMinName: null,
+                    huiMinType: null,
+                    salesMoney: null,
+                    buyCover: null,
+                    unBuyCover: null,
+                    buyRemark: null,
+                    unBuyRemark: null,
+                    grantCount: null,
+                    limitCount: null,
+                    banner: null,
+                    endTime: null,
+                    useWeeks: null,
+                    useTimes: null,
+                    introduce: null,
+                    weeks: [
+                        {
+                            days: [ // 每个星期组的星期选项
+                                {
+                                    value: '1',
+                                    label: '星期一',
+                                    checked: false,
+                                },
+                                {
+                                    value: '2',
+                                    label: '星期二',
+                                    checked: false,
+                                },
+                                {
+                                    value: '3',
+                                    label: '星期三',
+                                    checked: false,
+                                },
+                                {
+                                    value: '4',
+                                    label: '星期四',
+                                    checked: false,
+                                },
+                                {
+                                    value: '5',
+                                    label: '星期五',
+                                    checked: false,
+                                },
+                                {
+                                    value: '6',
+                                    label: '星期六',
+                                    checked: false,
+                                },
+                                {
+                                    value: '7',
+                                    label: '星期日',
+                                    checked: false,
+                                }
+                            ],
+                        },
+                    ],
+                    unUseTimes: [
+                        {date: null}
+                    ],
+                    useScope: '1',
+                    useIds: null,
+                    sort: null,
+                    storeId: null
+                },
+                tableData: [],
+                tableStoreData: [],
+                tableStoreTotal: 0,
+                tableStoreLoading: false,
+                tableSiteData: [],
+                tableSiteTotal: 0,
+                tableSiteLoading: false,
+                queryParams: {
+                    pageNum: 1,
+                    pageSize: 10,
+                },
+
+                rules: {
+                    buyRemark: [{required: true, message: '请输入使用说明', trigger: 'blur'}],
+                    cover: [{
+                        validator: (rule, value, callback) => {
+                            if (!this.huiminCard.unBuyCover) {
+                                callback(new Error('请上传未购买封面'));
+                            }
+                            if (!this.huiminCard.buyCover) {
+                                callback(new Error('请上传已购买封面'));
+                            }
+                            callback();
+                        },
+                        trigger: 'blur'
+                    }],
+                    buyCover: [{required: true, message: '已购买封面不能为空', trigger: 'blur'}],
+                    huiMinName: [{required: true, message: '请输入惠民卡名称', trigger: 'blur'}],
+                    huiMinType: [{required: true, message: '请选择惠民卡类型', trigger: 'change'}],
+                    salesMoney: [{required: true, message: '请输入售卖金额', trigger: 'blur'}],
+                    unBuyRemark: [{required: true, message: '请输入使用说明', trigger: 'blur'}],
+                    banner: [{required: true, message: '请上传轮播图', trigger: 'blur'}],
+                    limitCount: [{required: true, message: '请输入限购数量', trigger: 'blur'}],
+                    weeks: [
+                        {
+                            required: true,
+                            message: '请填写可用时间',
+                            trigger: 'blur',
+                            validator: (rule, value, callback) => {
+                                const everyFalse = this.huiminCard.weeks.every(week =>
+                                    week.days.every(day =>
+                                        day.checked === false
+                                    )
+                                );
+                                if (everyFalse) {
+                                    callback(new Error('请选择可用星期'));
+                                }
+                                const everyNull = this.huiminCard.weeks.every(obj =>
+                                    obj.startTime === null ||
+                                    obj.endTime === null
+                                );
+                                if (everyNull) {
+                                    callback(new Error('请选择可用时间'));
+                                }
+                                callback();
+                            },
+                        }
+                    ],
+                    storeIds: [
+                        {
+                            required: true,
+                            trigger: 'blur',
+                            validator: (rule, value, callback) => {
+                                if (this.huiminCard.useIds === null || this.huiminCard.useIds.length === 0) {
+                                    callback(new Error('请选择指定门店'));
+                                }
+                                callback();
+                            },
+                        }
+                    ],
+                    siteIds: [
+                        {
+                            required: true,
+                            trigger: 'blur',
+                            validator: (rule, value, callback) => {
+                                if (this.huiminCard.useIds === null || this.huiminCard.useIds.length === 0) {
+                                    callback(new Error('请选择指定场地'));
+                                }
+                                callback();
+                            },
+                        }
+                    ],
+                    introduce: [
+                        {
+                            required: true, validator: (rule, value, callback) => {
+                                let content = UE.getEditor('editor_1').getContent();
+                                console.log(content)
+                                if (content.length === 0) {
+                                    callback(new Error('请输入详细介绍'));
+                                } else {
+                                    callback();
+                                }
+                            }
+                        }
+                    ],
+                },
+            }
+        },
+        methods: {
+            handleUnBuyCoverSuccess(res, file) {
+                this.huiminCard.unBuyCover = res;
+            },
+            handleUnBuyCoverExceed() {
+                Feng.error('最多上传一张图片');
+            },
+            handleUnBuyCoverRemove(file, fileList) {
+                this.huiminCard.unBuyCover = '';
+            },
+            handleBuyCoverSuccess(res, file) {
+                this.huiminCard.buyCover = res;
+            },
+            handleBuyCoverRemove(file, fileList) {
+                this.huiminCard.buyCover = '';
+            },
+            handleSuccess(res, file) {
+                this.banners.push(res)
+                this.huiminCard.banner = this.banners.join(',');
+            },
+
+            beforeUpload(file) {
+                console.log(111111)
+                const isLt2M = file.size / 1024 / 1024 < 10;
+                if (!isLt2M) {
+                    Feng.error('上传图片大小不能超过 10MB!');
+                }
+                return isLt2M;
+            },
+            handleRemove(file, fileList) {
+                const fileUrl = file.response;
+                this.banners.forEach((item, index) => {
+                    if (item === fileUrl) {
+                        this.banners.splice(index, 1);
+                    }
+                });
+                this.huiminCard.banner = this.banners.join(',');
+            },
+            addWeek() {
+                // 新增一个包含默认星期的组
+                this.huiminCard.weeks.push({
+                    days: [
+                        {
+                            value: '1',
+                            label: '星期一',
+                            checked: false,
+                        },
+                        {
+                            value: '2',
+                            label: '星期二',
+                            checked: false,
+                        },
+                        {
+                            value: '3',
+                            label: '星期三',
+                            checked: false,
+                        },
+                        {
+                            value: '4',
+                            label: '星期四',
+                            checked: false,
+                        },
+                        {
+                            value: '5',
+                            label: '星期五',
+                            checked: false,
+                        },
+                        {
+                            value: '6',
+                            label: '星期六',
+                            checked: false,
+                        },
+                        {
+                            value: '7',
+                            label: '星期日',
+                            checked: false,
+                        }
+                    ],
+                });
+            },
+            removeWeek(index) {
+                this.huiminCard.weeks.splice(index, 1);
+                console.log(this.weeks)
+            },
+            addUnUseTime() {
+                this.times.push({date: null});
+            },
+            removeUnUseTime(index) {
+                this.times.splice(index, 1);
+            },
+            storeList() {
+                this.tableStoreLoading = true;
+                let vm = this;
+                let ajax = new $ax(Feng.ctxPath + "/tHuiminCard/storeList",
+                    (data) => {
+                        vm.tableStoreData = data.records; // 使用 vm 替代 this
+                        vm.tableStoreTotal = data.total;
+                        vm.tableStoreLoading = false;
+                        console.log('成功获取数据:', vm.tableStoreData); // 验证数据
+                    },
+                    (data) => {
+                        vm.tableStoreLoading = false;
+                        Feng.error("请求失败: " + data.responseJSON.message);
+                    }
+                );
+                this.storeForm.pageNum = vm.queryParams.pageNum;
+                this.storeForm.pageSize = vm.queryParams.pageSize
+                ajax.set(this.storeForm);
+
+                ajax.start();
+            },
+            siteList() {
+                this.tableSiteLoading = true;
+                let vm = this;
+                let ajax = new $ax(Feng.ctxPath + "/tHuiminCard/siteList",
+                    (data) => {
+                        vm.tableSiteData = data.records; // 使用 vm 替代 this
+                        vm.tableSiteTotal = data.total;
+                        vm.tableSiteLoading = false;
+                        console.log('成功获取数据:', vm.tableSiteData); // 验证数据
+                    },
+                    (data) => {
+                        vm.tableSiteLoading = false;
+                        Feng.error("请求失败: " + data.responseJSON.message);
+                    }
+                );
+                ajax.start();
+            },
+            handleStoreClose() {
+                this.dialogVisible2 = false;
+            },
+            handleSiteClose() {
+                this.$confirm('确认关闭?1')
+                    .then(_ => {
+                        this.dialogVisible3 = false;
+                    })
+                    .catch(_ => {
+                    });
+            },
+            handleSelectionChange(val) {
+                if (this.huiminCard.useScope === '1') {
+                    this.multipleSelection1 = val;
+                } else if (this.huiminCard.useScope === '2') {
+                    this.multipleSelection2 = val;
+                }
+
+            },
+            handleRemoveStore(index) {
+                this.tableData.splice(index, 1);
+            },
+            handleSelectStore() {
+                this.queryParams.pageNum = 1;
+                this.queryParams.pageSize = 10;
+                if (this.huiminCard.useScope === '1') {
+                    this.dialogVisible2 = true;
+                    this.storeList();
+                } else if (this.huiminCard.useScope === '2') {
+                    this.dialogVisible3 = true;
+                    this.siteList();
+                }
+            },
+            handleStore() {
+                if (this.multipleSelection1.length === 0) {
+                    Feng.info('请选择数据');
+                    return;
+                }
+                this.dialogVisible2 = false
+                this.tableData = this.multipleSelection1;
+                this.huiminCard.useIds = this.tableData.map(item => item.storeId).join(',');
+            },
+            handleSite() {
+                if (this.multipleSelection2.length === 0) {
+                    Feng.info('请选择数据');
+                    return;
+                }
+                this.dialogVisible3 = false
+                this.tableData = this.multipleSelection2;
+                this.huiminCard.useIds = this.tableData.map(item => item.siteId).join(',');
+            },
+            submitForm(formName) {
+                this.$refs[formName].validate(valid => {
+                    console.log(valid)
+                    if (valid) {
+                        let data = this.huiminCard;
+                        let weeks = data.weeks;
+                        var formatWeekAndTime1 = formatWeekAndTime(weeks);
+                        data.useTimes = formatWeekAndTime1.useTimes;
+                        data.useWeeks = formatWeekAndTime1.useWeeks;
+                        data.unUseTimes = formatUnUseTimes(this.times);
+                        data.introduce = UE.getEditor('editor_1').getContent();
+                        console.log(data.introduce)
+
+                        let vm = this;
+                        let ajax = new $ax(Feng.ctxPath + "/tHuiminCard/add",
+                            (data) => {
+                                window.parent.THuiminCard.table.refresh();
+                                THuiminCardInfoDlg.close();
+                            },
+                            (data) => {
+                                vm.tableStoreLoading = false;
+                                Feng.error("请求失败: " + data.responseJSON.message);
+                            }
+                        );
+                        ajax.set(data)
+                        ajax.start();
+                    }
+                });
+            },
+        },
+        created() {
+            let editor_1 = UE.getEditor('editor_1');
+
+
+            let ajax = new $ax(Feng.ctxPath + "/base/region/getProvince",
+                (data) => {
+                    this.provinces = data;
+                },
+                (data) => {
+                    Feng.error("请求失败: " + data.responseJSON.message);
+                }
+            );
+            ajax.start();
+
+            let ajax2 = new $ax(Feng.ctxPath + "/base/region/getCity",
+                (data) => {
+                    this.cities = data;
+                },
+                (data) => {
+                    Feng.error("请求失败: " + data.responseJSON.message);
+                }
+            );
+            ajax2.start();
+
+        },
+    });
+
+    function formatWeekAndTime(data) {
+        const weekTimeMap = {};
+
+        data.forEach(item => {
+            // 确定时间段(优先使用直接字段)
+            const startTime = item.startTime || item.time?.startTime || '';
+            const endTime = item.endTime || item.time?.endTime || '';
+            const timePair = startTime + ";" + endTime;
+
+            // 遍历days数组,记录每个选中星期对应的时间段
+            item.days.forEach(day => {
+                if (day.checked && day.value) {
+                    weekTimeMap[day.value] = timePair;
+                }
+            });
+        });
+
+        // 按星期数字排序并生成最终字符串
+        const sortedWeeks = Object.keys(weekTimeMap).sort((a, b) => a - b);
+        const useWeeks = sortedWeeks.join(',');
+        const useTimes = sortedWeeks.map(week => weekTimeMap[week]).join(',');
+
+        return {useWeeks, useTimes};
+    }
+
+    function formatUnUseTimes(nUseTimes) {
+        if (!nUseTimes) {
+            return "";
+        }
+        let dates = [];
+        nUseTimes.forEach(item => {
+            // 格式化
+            const date = item.date;
+            const year = date.getFullYear();
+            const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,需要+1
+            const day = String(date.getDate()).padStart(2, '0');
+            const hours = String(date.getHours()).padStart(2, '0');
+            const minutes = String(date.getMinutes()).padStart(2, '0');
+            const seconds = String(date.getSeconds()).padStart(2, '0');
+            dates.push(year + '-' + month + '-' + day + '-' + hours + ':' + minutes + ':' + seconds)
+        });
+        return dates.join(',');
+    }
+
+</script>
+
+
+</body>
 @}

--
Gitblit v1.7.1