| | |
| | | <!-- 时间输入和删除按钮 --> |
| | | <div class="row g-3"> |
| | | <div class="col-md-6" style="display: flex"> |
| | | <el-time-select |
| | | placeholder="起始时间" |
| | | <el-time-picker |
| | | v-model="weekGroup.startTime" |
| | | :picker-options="{ |
| | | start: '00:00', |
| | | step: '01:00', |
| | | end: '23:00'}" |
| | | > |
| | | </el-time-select> |
| | | <el-time-select |
| | | placeholder="结束时间" |
| | | format="HH:mm" |
| | | value-format="HH:mm" |
| | | placeholder="开始时间"> |
| | | </el-time-picker> |
| | | <el-time-picker |
| | | format="HH:mm" |
| | | value-format="HH:mm" |
| | | v-model="weekGroup.endTime" |
| | | :picker-options="{ |
| | | start: '00:00', |
| | | step: '01:00', |
| | | end: '23:00', |
| | | minTime: weekGroup.startTime}"> |
| | | </el-time-select> |
| | | placeholder="结束时间"> |
| | | </el-time-picker> |
| | | </div> |
| | | <div class="col-md-6"> |
| | | <button |
| | |
| | | </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 label="适用范围" prop="useScope" > |
| | | <el-radio v-if="objectType !=='3'" v-model="huiminCard.useScope" v-on:change="useScopeChange()" label="1">指定门店</el-radio> |
| | | <el-radio v-model="huiminCard.useScope" v-on:change="useScopeChange()" label="2">指定场地</el-radio> |
| | | </el-form-item> |
| | | |
| | | <!-- 指定门店 --> |
| | | <el-form-item label="指定门店" v-if="huiminCard.useScope === '1'" prop="storeIds"> |
| | | <el-form-item label="指定门店" v-if="huiminCard.useScope === '1' && objectType !=='3'" prop="storeIds"> |
| | | <el-button type="text" v-on:click="handleSelectStore()">选择门店</el-button> |
| | | <el-table |
| | | :data="tableData" |
| | |
| | | </el-table> |
| | | </el-form-item> |
| | | |
| | | |
| | | <!-- 惠民卡介绍 --> |
| | | <el-form-item label="惠民卡介绍" prop="introduce"> |
| | | <textarea type="text/plain" v-model="introduces" id="editor_1"></textarea> |
| | |
| | | <el-select v-model="storeForm.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 v-model="storeForm.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-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="所属运营商"> |
| | | <el-form-item label="所属运营商" label-width="100px"> |
| | | <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-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"> |
| | | v-on:size-change="handleStoreSizeChange" |
| | | v-on:current-change="handleStoreCurrentChange" |
| | | :current-page="currentStorePage" |
| | | :page-sizes="[10, 50, 100, 200]" |
| | | :page-size="pageStoreSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="storeTotal"> |
| | | </el-pagination> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-on:click="dialogVisible2 = false">取 消</el-button> |
| | |
| | | <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 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-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item label="所属运营商"> |
| | | <el-form-item label="所属运营商" label-width="100px"> |
| | | <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-table-column> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="tableSiteTotal>0" |
| | | :total="tableSiteTotal" |
| | | :page.sync="queryParams.pageNum" |
| | | :limit.sync="queryParams.pageSize" |
| | | v-on:pagination="siteList"></pagination> |
| | | |
| | | <el-pagination |
| | | v-on:size-change="handleSiteSizeChange" |
| | | v-on:current-change="handleSiteCurrentChange" |
| | | :current-page="currentSitePage" |
| | | :page-sizes="[10, 50, 100, 200]" |
| | | :page-size="pageSiteSize" |
| | | layout="total, sizes, prev, pager, next, jumper" |
| | | :total="siteTotal"> |
| | | </el-pagination> |
| | | |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-on:click="dialogVisible3 = false">取 消</el-button> |
| | |
| | | introduces: null, |
| | | multipleSelection1: [], |
| | | multipleSelection2: [], |
| | | currentSitePage: 1, |
| | | pageSiteSize: 10, |
| | | currentStorePage: 1, |
| | | pageStoreSize: 10, |
| | | siteTotal: 0, |
| | | storeTotal: 0, |
| | | objectType: null, |
| | | unUseTimes: [ |
| | | {} |
| | | ], |
| | |
| | | }, |
| | | tableData: [], |
| | | tableStoreData: [], |
| | | tableStoreTotal: 0, |
| | | tableStoreLoading: false, |
| | | tableSiteData: [], |
| | | tableSiteTotal: 0, |
| | |
| | | return isLt2M; |
| | | }, |
| | | handleRemove(file, fileList) { |
| | | const fileUrl = file.response; |
| | | const fileUrl = file.url; |
| | | this.banners.forEach((item, index) => { |
| | | if (item === fileUrl) { |
| | | this.banners.splice(index, 1); |
| | |
| | | let ajax = new $ax(Feng.ctxPath + "/tHuiminCard/storeList", |
| | | (data) => { |
| | | vm.tableStoreData = data.records; // 使用 vm 替代 this |
| | | vm.tableStoreTotal = data.total; |
| | | vm.storeTotal = data.total; |
| | | vm.tableStoreLoading = false; |
| | | console.log('成功获取数据:', vm.tableStoreData); // 验证数据 |
| | | }, |
| | |
| | | Feng.error("请求失败: " + data.responseJSON.message); |
| | | } |
| | | ); |
| | | this.storeForm.pageNum = vm.queryParams.pageNum; |
| | | this.storeForm.pageSize = vm.queryParams.pageSize |
| | | this.storeForm.pageNum = vm.currentStorePage; |
| | | this.storeForm.pageSize = vm.pageStoreSize |
| | | ajax.set(this.storeForm); |
| | | |
| | | ajax.start(); |
| | |
| | | vm.tableSiteData = data.records; // 使用 vm 替代 this |
| | | vm.tableSiteTotal = data.total; |
| | | vm.tableSiteLoading = false; |
| | | vm.currentStorePage = data.current; |
| | | vm.pageStoreSize = data.size; |
| | | vm.siteTotal = data.total; |
| | | console.log('成功获取数据:', vm.tableSiteData); // 验证数据 |
| | | }, |
| | | (data) => { |
| | |
| | | Feng.error("请求失败: " + data.responseJSON.message); |
| | | } |
| | | ); |
| | | this.siteForm.pageNum = vm.queryParams.pageNum; |
| | | this.siteForm.pageSize = vm.queryParams.pageSize |
| | | this.siteForm.current = vm.currentSitePage; |
| | | this.siteForm.size = vm.pageSiteSize |
| | | ajax.set(this.siteForm); |
| | | ajax.start(); |
| | | }, |
| | |
| | | this.dialogVisible2 = false; |
| | | }, |
| | | handleSiteClose() { |
| | | this.$confirm('确认关闭?1') |
| | | .then(_ => { |
| | | this.dialogVisible3 = false; |
| | | }) |
| | | .catch(_ => { |
| | | }); |
| | | this.dialogVisible3 = false; |
| | | }, |
| | | handleSelectionChange(val) { |
| | | |
| | | if (this.huiminCard.useScope === '1') { |
| | | this.multipleSelection1 = val; |
| | | } else if (this.huiminCard.useScope === '2') { |
| | |
| | | Feng.info('请选择数据'); |
| | | return; |
| | | } |
| | | this.dialogVisible2 = false |
| | | this.tableData = this.multipleSelection1; |
| | | |
| | | // 新增:检查所有新选中的门店是否属于同一运营商 |
| | | const firstOperator = this.multipleSelection1[0].operatorId; |
| | | if (this.multipleSelection1.some(item => item.operatorId !== firstOperator)) { |
| | | Feng.info('请选择同一运营商'); |
| | | return; |
| | | } |
| | | |
| | | // 检查新选门店与已有门店的运营商是否一致(如果需要) |
| | | if (this.tableData.length > 0) { |
| | | const existingOperator = this.tableData[0].operatorId; |
| | | if (firstOperator !== existingOperator) { |
| | | Feng.info('新选门店的运营商需与已有门店一致'); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | this.multipleSelection1.forEach((item) => { |
| | | if (!this.tableData.some(item1 => item1.storeId === item.storeId)) { |
| | | this.tableData.push(item); |
| | | } |
| | | }); |
| | | |
| | | this.dialogVisible2 = false; |
| | | this.huiminCard.useIds = this.tableData.map(item => item.storeId).join(','); |
| | | }, |
| | | handleSite() { |
| | |
| | | this.dialogVisible3 = false |
| | | this.tableData = this.multipleSelection2; |
| | | this.huiminCard.useIds = this.tableData.map(item => item.siteId).join(','); |
| | | }, |
| | | useScopeChange() { |
| | | this.tableData = []; |
| | | }, |
| | | submitForm(formName) { |
| | | this.$refs[formName].validate(valid => { |
| | |
| | | } |
| | | }); |
| | | }, |
| | | handleSiteSizeChange(val){ |
| | | this.pageSiteSize = val; |
| | | this.siteList(); |
| | | }, |
| | | handleSiteCurrentChange(val){ |
| | | this.currentSitePage = val; |
| | | this.siteList(); |
| | | }, |
| | | handleStoreSizeChange(val){ |
| | | this.pageSiteSize = val; |
| | | this.storeList(); |
| | | }, |
| | | handleStoreCurrentChange(val){ |
| | | this.currentSitePage = val; |
| | | this.storeList(); |
| | | }, |
| | | }, |
| | | created() { |
| | | let editor_1 = UE.getEditor('editor_1'); |
| | | |
| | | this.objectType = `${objectType}` |
| | | if (this.objectType === '3'){ |
| | | this.huiminCard.useScope = '2' |
| | | } |
| | | |
| | | let ajax = new $ax(Feng.ctxPath + "/base/region/getProvince", |
| | | (data) => { |