| | |
| | | |
| | | <!-- 封面图片 --> |
| | | <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 |
| | |
| | | <!-- 有效期 --> |
| | | <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> |
| | | |
| | |
| | | <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; |
| | |
| | | <!-- 不可用时间 --> |
| | | <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" |
| | |
| | | <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" |
| | |
| | | </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" |
| | |
| | | </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"> |
| | |
| | | </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> |
| | |
| | | :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" |
| | |
| | | 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: [], |
| | |
| | | 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, |
| | |
| | | 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 |
| | | ) |
| | |
| | | if (everyFalse) { |
| | | callback(new Error('请选择可用星期')); |
| | | } |
| | | const everyNull = this.huiminCard.weeks.every(obj => |
| | | const everyNull = this.weeks.every(obj => |
| | | obj.startTime === null || |
| | | obj.endTime === null |
| | | ); |
| | |
| | | }, |
| | | |
| | | beforeUpload(file) { |
| | | console.log(111111) |
| | | const isLt2M = file.size / 1024 / 1024 < 10; |
| | | if (!isLt2M) { |
| | | Feng.error('上传图片大小不能超过 10MB!'); |
| | |
| | | }, |
| | | addWeek() { |
| | | // 新增一个包含默认星期的组 |
| | | this.huiminCard.weeks.push({ |
| | | this.weeks.push({ |
| | | days: [ |
| | | { |
| | | value: '1', |
| | |
| | | }); |
| | | }, |
| | | 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; |
| | |
| | | Feng.error("请求失败: " + data.responseJSON.message); |
| | | } |
| | | ); |
| | | this.siteForm.pageNum = vm.queryParams.pageNum; |
| | | this.siteForm.pageSize = vm.queryParams.pageSize |
| | | ajax.set(this.siteForm); |
| | | ajax.start(); |
| | | }, |
| | | handleStoreClose() { |
| | |
| | | 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) => { |
| | |
| | | ); |
| | | 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> |
| | | |