1
luofl
2025-04-03 399a115e33dfb070bb74540bad0ca66f799d53a7
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>
@}