1
luofl
2025-04-03 58e344a0c14692fce547d64ea9295f866754fe63
cloud-server-management/src/main/webapp/WEB-INF/view/system/tHuiminCard/tHuiminCard_add.html
@@ -24,7 +24,7 @@
        <!-- 封面图片 -->
        <el-row>
            <el-form-item label="封面图片2" prop="cover">
            <el-form-item label="封面图片" prop="cover">
                <el-col :span="12">
                    <div class="upload-area text-center">
                        <el-upload
@@ -122,9 +122,13 @@
        <!-- 有效期 -->
        <el-form-item label="有效期">
            <el-date-picker
                    v-model="huiminCard.endTime"
                    type="date"
                    placeholder="选择日期">
                    v-model="periodOfValidity"
                    format="yyyy-MM-dd HH:mm:ss"
                    value-format="yyyy-MM-dd HH:mm:ss"
                    type="datetimerange"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期"
                    :default-time="['12:00:00']">
            </el-date-picker>
        </el-form-item>
@@ -133,7 +137,7 @@
        <el-form-item label="可用时间" prop="weeks">
            <el-card
                    shadow="never"
                    v-for="(weekGroup, groupIndex) in huiminCard.weeks"
                    v-for="(weekGroup, groupIndex) in weeks"
                    :key="'weekGroup_' + groupIndex">
                <div slot="header"
                     style="display: flex;
@@ -199,13 +203,15 @@
        <!-- 不可用时间 -->
        <el-form-item label="不可用时间" prop="unUseTimes">
            <el-button type="text" v-on:click="addUnUseTime()">添加</el-button>
            <div v-for="(item, dayIndex) in times"
            <div v-for="(item, dayIndex) in huiminCard.unUseTimes"
                 :key="dayIndex"
                 class="date-picker-item mb-2">
                <el-date-picker
                        type="datetime"
                        placeholder="选择日期"
                        v-model="item.date">
                        v-model="item.date"
                        type="datetimerange"
                        start-placeholder="开始日期"
                        end-placeholder="结束日期"
                        :default-time="['12:00:00']">
                </el-date-picker>
                <button
                        type="button"
@@ -323,7 +329,7 @@
                <el-row :gutter="10">
                    <el-col :span="6">
                        <el-form-item label="所在省">
                            <el-select v-model="storeForm.provinceCode" size="mini" filterable placeholder="请选择">
                            <el-select v-model="storeForm.provinceCode" size="mini" clearable filterable placeholder="请选择">
                                <el-option
                                        v-for="item in provinces"
                                        :key="item.code"
@@ -334,8 +340,8 @@
                        </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-form-item label="所在市">
                            <el-select v-model="storeForm.cityCode" clearable size="mini" filterable placeholder="请选择">
                                <el-option
                                        v-for="item in cities"
                                        :key="item.citycode"
@@ -347,7 +353,14 @@
                    </el-col>
                    <el-col :span="6">
                        <el-form-item label="所属运营商">
                            <el-input size="mini" v-model="storeForm.operatorId" placeholder="请输入内容"></el-input>
                            <el-select v-model="storeForm.operatorId" clearable size="mini" filterable placeholder="请选择">
                                <el-option
                                        v-for="item in operations"
                                        :key="item.id"
                                        :label="item.name"
                                        :value="item.id">
                                </el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :span="6">
@@ -363,47 +376,42 @@
                        </el-button>
                    </el-col>
                </el-row>
                <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>
            <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>
            <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>
@@ -416,6 +424,59 @@
                :visible.sync="dialogVisible3"
                width="80%"
                :before-close="handleSiteClose">
            <el-form ref="form" :model="siteForm" label-width="80px">
                <el-row :gutter="10">
                    <el-col :span="6">
                        <el-form-item label="所在省">
                            <el-select v-model="siteForm.provinceCode" size="mini" clearable 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="所在市">
                            <el-select v-model="siteForm.cityCode" clearable 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-select v-model="siteForm.operatorId" clearable size="mini" filterable placeholder="请选择">
                                <el-option
                                        v-for="item in operations"
                                        :key="item.id"
                                        :label="item.name"
                                        :value="item.id">
                                </el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :span="6">
                        <el-form-item label="门店名称">
                            <el-input size="mini" v-model="siteForm.storeName" placeholder="请输入内容"></el-input>
                        </el-form-item>
                    </el-col>
                </el-row>
                <el-row>
                    <el-col :span="24">
                        <el-button v-on:click="siteList" style="background-color:#1ab394;color: #ffffff" size="mini" icon="el-icon-search">
                            搜索
                        </el-button>
                    </el-col>
                </el-row>
            </el-form>
            <el-table
                    v-loading="tableSiteLoading"
@@ -525,17 +586,63 @@
                    operatorId: null,
                    storeName: '',
                },
                siteForm: {
                    provinceCode: null,
                    cityCode: null,
                    operatorId: null,
                    storeName: '',
                },
                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,
                            }
                        ],
                    },
                ],
                provinces: [],
                cities: [],
                stores: [],
                operations: [],
                periodOfValidity: null,
                autoUpload: true,//自动上传
                previewImg: '',//模型数据,用于上传图片完成后图片预览
                dialogVisible: false,
                dialogVisible2: false,
                dialogVisible3: false,
                times: [{}],
                banners: [],
                introduces: null,
                multipleSelection1: [],
@@ -556,49 +663,8 @@
                    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,
@@ -644,7 +710,7 @@
                            message: '请填写可用时间',
                            trigger: 'blur',
                            validator: (rule, value, callback) => {
                                const everyFalse = this.huiminCard.weeks.every(week =>
                                const everyFalse = this.weeks.every(week =>
                                    week.days.every(day =>
                                        day.checked === false
                                    )
@@ -652,7 +718,7 @@
                                if (everyFalse) {
                                    callback(new Error('请选择可用星期'));
                                }
                                const everyNull = this.huiminCard.weeks.every(obj =>
                                const everyNull = this.weeks.every(obj =>
                                    obj.startTime === null ||
                                    obj.endTime === null
                                );
@@ -725,7 +791,6 @@
            },
            beforeUpload(file) {
                console.log(111111)
                const isLt2M = file.size / 1024 / 1024 < 10;
                if (!isLt2M) {
                    Feng.error('上传图片大小不能超过 10MB!');
@@ -743,7 +808,7 @@
            },
            addWeek() {
                // 新增一个包含默认星期的组
                this.huiminCard.weeks.push({
                this.weeks.push({
                    days: [
                        {
                            value: '1',
@@ -784,14 +849,14 @@
                });
            },
            removeWeek(index) {
                this.huiminCard.weeks.splice(index, 1);
                this.weeks.splice(index, 1);
                console.log(this.weeks)
            },
            addUnUseTime() {
                this.times.push({date: null});
                this.huiminCard.unUseTimes.push({});
            },
            removeUnUseTime(index) {
                this.times.splice(index, 1);
                this.huiminCard.unUseTimes.splice(index, 1);
            },
            storeList() {
                this.tableStoreLoading = true;
@@ -829,6 +894,9 @@
                        Feng.error("请求失败: " + data.responseJSON.message);
                    }
                );
                this.siteForm.pageNum = vm.queryParams.pageNum;
                this.siteForm.pageSize = vm.queryParams.pageSize
                ajax.set(this.siteForm);
                ajax.start();
            },
            handleStoreClose() {
@@ -887,18 +955,21 @@
                    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);
                        let weeks = this.weeks;
                        data.useWeeks = JSON.stringify(weeks)
                        data.introduce = UE.getEditor('editor_1').getContent();
                        console.log(data.introduce)
                        //data
                        if (this.periodOfValidity){
                            data.startTime = this.periodOfValidity[0];
                            data.endTime = this.periodOfValidity[1];
                        }
                        console.log(data.startTime)
                        console.log(data.endTime)
                        let vm = this;
                        let ajax = new $ax(Feng.ctxPath + "/tHuiminCard/add",
                            (data) => {
                                window.parent.THuiminCard.table.refresh();
                                window.parent.parentVue.handleSearch();
                                THuiminCardInfoDlg.close();
                            },
                            (data) => {
@@ -936,52 +1007,21 @@
            );
            ajax2.start();
            let ajax3 = new $ax(Feng.ctxPath + "/base/operator/getOperator",
                (data) => {
                    this.operations = data;
                },
                (data) => {
                    Feng.error("请求失败: " + data.responseJSON.message);
                }
            );
            ajax3.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>