登录方式更改

master
十七 4 years ago
parent f588163560
commit 7f095251f2

Binary file not shown.

@ -95,3 +95,12 @@ export function phonePassLoginNews(params) {
data: params
});
}
// 多组织校验门店
export function phonePassLogindzz(params) {
return service({
url: "/api" + "/demay/ssm/staffLogin/phonePassLogindzz",
method: "post",
data: params
});
}

@ -373,6 +373,14 @@ export function editmember(params) {
});
}
// 重算会员等级
export function resetClass(params) {
return service({
url: "/api" + "/demay/ssm/storeMember/resetClass",
method: "post",
data: params
});
}
// 会员换号启用 (门店端-会员-会员换号启用)
export function changePhoneToUpdateState(params) {
return service({
@ -1018,11 +1026,9 @@ export function addTurnMembershipCard(params) {
data: params
});
}
// 查询会员转卡申请单
export function turnMembershipCardPage(params) {
export function addTurnMembershipCardNew(params) {
return service({
url: "/api" + "/demay/ssm/turnMembershipCard/page",
url: "/api" + "/demay/ssm/turnMembershipCard/addNew",
method: "post",
data: params
});
@ -1036,6 +1042,21 @@ export function editTurnMembershipCard(params) {
data: params
});
}
export function editTurnMembershipCardNew(params) {
return service({
url: "/api" + "/demay/ssm/turnMembershipCard/updateNew",
method: "post",
data: params
});
}
// 查询会员转卡申请单
export function turnMembershipCardPage(params) {
return service({
url: "/api" + "/demay/ssm/turnMembershipCard/page",
method: "post",
data: params
});
}
// 会员卡包转送申请单状态修改
export function stateTurnMembershipCard(params) {
@ -1045,6 +1066,13 @@ export function stateTurnMembershipCard(params) {
data: params
});
}
export function stateTurnMembershipCardNew(params) {
return service({
url: "/api" + "/demay/ssm/turnMembershipCard/updateStateNew",
method: "post",
data: params
});
}
// 添加等级
export function addMemberClass(params) {
return service({

@ -1,67 +1,80 @@
<template>
<div class="excel">
<el-upload class="upload-demo" action="/" ref='upload' accept=".xlsx" :http-request="httprequest" :on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="1" :on-exceed="handleExceed" :file-list="fileList">
<el-button size="mini" type="primary">添加文档</el-button>
<div slot="tip" class="el-upload__tip">只能上传excel格式的文档</div>
</el-upload>
<br>
<br>
<div class="header_flex">
<span></span>
<div>
<el-button size='mini' type="primary" plain @click="cencal( infoDialog = false)"> </el-button>
<el-button size='mini' type="primary" @click="confirm( infoDialog = false)"> </el-button>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
fileList: [],
fileData: new FormData(),
infoDialog: false,
file: null,
};
},
methods: {
cencal() {
this.$emit("infoDialogV", this.infoDialog);
},
confirm() {
this.$refs.upload.submit();
this.$emit("infoDialogV", this.infoDialog);
this.$emit("fileData", this.file);
},
httprequest(file) {
this.file = file.file;
// this.fileData.append('file', file.file)
},
handleRemove(file, fileList) {
//console.log(file, fileList);
},
handlePreview(file) {
//console.log(file);
},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`
);
},
beforeRemove(file, fileList) {
return file.name;
},
},
};
</script>
<style>
.excel .upload-demo > li {
height: 50px;
font-size: 18px !important;
}
</style>
<template>
<div class="excel">
<el-upload class="upload-demo" action="/" ref='upload' :on-change="handleChange" accept=".xlsx" :http-request="httprequest" :on-preview="handlePreview" :on-remove="handleRemove" :before-remove="beforeRemove" multiple :limit="1" :on-exceed="handleExceed" :file-list="fileList">
<el-button size="mini" type="primary">添加文档</el-button>
<div slot="tip" class="el-upload__tip">只能上传excel格式的文档</div>
</el-upload>
<br>
<br>
<div class="header_flex">
<span></span>
<div>
<el-button size='mini' type="primary" plain @click="cencal( infoDialog = false)"> </el-button>
<el-button size='mini' type="primary" @click="confirm( infoDialog = false)"> </el-button>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
fileList: [],
fileData: new FormData(),
infoDialog: false,
file: null,
};
},
methods: {
cencal() {
this.$emit("infoDialogV", this.infoDialog);
},
confirm() {
this.$refs.upload.submit();
this.$emit("infoDialogV", this.infoDialog);
this.$emit("fileData", this.file);
},
handleChange(file, fileList) {
if (fileList.length > 1) {
fileList.splice(0, 1);
}
},
httprequest(file) {
this.file = null;
// this.fileData.append('file', file.file)
},
handleRemove(file, fileList) {
//console.log(file, fileList);
},
handlePreview(file) {
//console.log(file);
},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 1个文件本次选择了 ${files.length} 个文件,共选择了 ${files.length} 个文件`
);
},
beforeRemove(file, fileList) {
return file.name;
},
},
activated() {
setTimeout(() => {
this.$refs.upload.clear();
}, 500);
},
created() {
Object.assign(this.$data, this.$options.data.call(this));
},
};
</script>
<style>
.excel .upload-demo > li {
height: 50px;
font-size: 18px !important;
}
</style>

@ -65,7 +65,7 @@ export default {
if (list) {
this.selcetList = list;
}
if (number) {
if (number != undefined) {
this.selectNumber = number;
}
this.list = [];
@ -86,7 +86,7 @@ export default {
id: "",
storeId: sessionStorage.getItem("parentId"),
};
if (this.selectNumber) {
if (this.selectNumber != null) {
form.type = this.selectNumber;
}
recTypeList(form).then((res) => {

@ -19,6 +19,16 @@
{{promotionForm.promotionName}}
</div>
</el-form-item>
<el-form-item label="项目总数:" v-if="promotionForm.projectTotal" :label-width="labelWidth">
<div class="promotionDiv">
{{promotionForm.projectTotal}}
</div>
</el-form-item>
<el-form-item label="可选项目数:" v-if="promotionForm.projectCount" :label-width="labelWidth">
<div class="promotionDiv">
{{promotionForm.projectCount}}
</div>
</el-form-item>
<el-form-item label="促销价格:" :label-width="labelWidth">
<div class="promotionDiv">
{{promotionForm.saleMoney}}
@ -194,6 +204,7 @@ export default {
this.promotionForm.beginDate,
"YYYY-MM-DD"
);
this.promotionForm.projectList = this.projectList;
this.$router.push({ path: "/sellpacking", query: this.promotionForm });
},
},

@ -0,0 +1,69 @@
<template>
<el-dialog :close-on-click-modal="false" class="text-center" v-dialogDrag title="选择门店" center :visible.sync="dialogVisible" width="500px">
<el-table v-loading="listLoading" :data="list" :element-loading-text="elementLoadingText" style="width: 500px;margin-top:5px" max-height="650" @current-change="rowClick" @row-dblclick="confirm">
<el-table-column label="选择" width="80" align="center">
<template slot-scope="scope">
<el-radio v-model="rowIndex" :label="scope.row.id" @change.native="scope.row">
{{ "" }}
</el-radio>
</template>
</el-table-column>
<el-table-column label="门店编码" align="center" min-width="100" prop="storeNum"></el-table-column>
<el-table-column label="门店名称" align="center" min-width="180" prop="storeName"></el-table-column>
<el-table-column label="属性" align="center" min-width="80">
<template slot-scope="scope">
<div class="padding-xs">
<span v-if="scope.row.parentId" class="text-blue text-bold">()</span>
<span v-else class="text-red text-bold">(总店)</span>
</div>
</template>
</el-table-column>
</el-table>
<span slot="footer" class="dialog-footer">
<el-button class="margin-left-lg" size="mini" type="primary" @click="dialogVisible = false"> </el-button>
<el-button size="mini" type="primary" :disabled="rowIndex == -1" @click="confirm()"> </el-button>
</span>
</el-dialog>
</template>
<script>
export default {
data() {
return {
listLoading: false, //list
elementLoadingText: "正在加载中...",
dialogVisible: false, //
form: {}, //
list: [], //
radio: "",
rowIndex: "",
rowForm: {},
storeNum: "",
storeName: "",
passText: "",
showNumber: -1,
storeId: "",
};
},
methods: {
//
show(list) {
this.dialogVisible = true;
this.list = [...list];
this.rowIndex = -1;
this.rowForm = {};
},
//
rowClick(row) {
this.rowIndex = row.id;
this.rowForm = row;
},
//
confirm() {
this.dialogVisible = false;
this.$emit("hiddensData", this.rowForm);
},
},
};
</script>
<style>
</style>

@ -106,6 +106,7 @@
</div>
<storelist ref="storelist" @storeData="storeData"></storelist>
<choice ref="choice" @radioData="radioData"></choice>
<hiddens ref="hiddens" @hiddensData="hiddensData"></hiddens>
</div>
</template>
@ -120,6 +121,7 @@ import {
phonePassLoginzd,
phonePassLoginNew,
phonePassLoginNews,
phonePassLogindzz,
} from "../api/login.js";
import { storeParaList } from "../api/storeManage.js";
import { storeOne } from "../api/eashier";
@ -127,9 +129,10 @@ import { setCookie, getCookie, delCookie } from "../utils/utils";
import { partten } from "../../partten/index";
import storelist from "./components/storelist.vue";
import choice from "./components/radio.vue";
import hiddens from "./components/hiddens.vue";
export default {
inject: ["reload"],
components: { storelist, choice },
components: { storelist, choice, hiddens },
data() {
return {
loading: false,
@ -211,14 +214,15 @@ export default {
phonePassLoginNew(this.form).then((res) => {
if (res.code == "000000") {
console.log(res.data);
if (res.data.token) {
if (res.data.storeType == 2) {
localStorage.setItem("token", res.data.token);
sessionStorage.setItem("token", res.data.token);
setCookie("token", res.data.token, 120); //
this.toHome(res);
} else {
console.log("选择");
} else if (res.data.storeType == 1) {
this.$refs.choice.show(res.data.baseStores);
} else {
this.$refs.hiddens.show(res.data.baseStores);
}
} else {
this.$alert(res.message, "提示", {
@ -244,6 +248,32 @@ export default {
});
}
},
hiddensData(v) {
let form = { ...this.form };
form.storeId = v.id;
phonePassLogindzz(form).then((res) => {
if (res.code == "000000") {
if (res.data.storeType == 2) {
localStorage.setItem("token", res.data.token);
sessionStorage.setItem("token", res.data.token);
setCookie("token", res.data.token, 120); //
this.toHome(res);
} else {
this.$refs.choice.show(res.data.baseStores);
}
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {
this.loading = false;
},
});
}
});
},
radioData(v) {
let form = { ...this.form };
form.storeId = v.id;
@ -296,7 +326,7 @@ export default {
if (res.code == "000000") {
sessionStorage.setItem("storeInfo", JSON.stringify(res.data));
if (res.data.parentId == null) {
/* ------------ sessionStorage.setItem("parentId", res.data.id); ------------ */
sessionStorage.setItem("parentId", res.data.id);
sessionStorage.setItem("parentName", res.data.storeName);
sessionStorage.setItem("parentName", res.data.storeId);
sessionStorage.setItem("headOffice", 1);

@ -4,9 +4,7 @@ import "babel-polyfill";
import "es6-promise/auto";
import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
import {
Message
} from "element-ui";
import { Message } from "element-ui";
Vue.use(ElementUI);
import App from "./App.vue";
import store from "./store";
@ -24,31 +22,23 @@ import "./utils/dialog";
import "./plugins";
// import "./utils/directive/focus";
import echarts from "echarts";
import {
getCookie
} from "./utils/utils.js";
import { getCookie } from "./utils/utils.js";
import apiConfig from "../config/api.config.js";
import vueEsign from "vue-esign";
import animated from "animate.css"; // npm install animate.css --save安装在引入
import formatTime from "./utils/filters.js";
import arrDiff from "./utils/array.js";
import {
Loading
} from "element-ui";
import { Loading } from "element-ui";
import countdown from "./utils/countdown.js";
import "./utils/rem.js";
Vue.use(animated);
Vue.use(vueEsign);
import {
thousands
} from '@/utils/index.js'
import { thousands } from "@/utils/index.js";
// 引入高精度精算
import {
Decimal
} from 'decimal.js'
import { Decimal } from "decimal.js";
// 全局定义
Vue.prototype.$Decimal = Decimal
Vue.prototype.$Decimal = Decimal;
import Vue from "vue";
import Router from "vue-router";
@ -60,13 +50,11 @@ Vue.use(VueAxios, axios);
axios.defaults.baseURL = apiConfig.baseUrl;
Vue.use(Print); //注册
import {
message
} from "./utils/resetMessage.js"; //现在提示弹窗每次只弹一条
import { message } from "./utils/resetMessage.js"; //现在提示弹窗每次只弹一条
// import VueParticles from 'vue-particles'
// Vue.use(VueParticles)
Vue.prototype.$thousands = thousands
Vue.prototype.$thousands = thousands;
Vue.prototype.$message = message;
Vue.prototype.$countdown = countdown;
Vue.prototype.bus = new Vue();
@ -83,9 +71,20 @@ export function getNextDate(date, day) {
var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
return y + "-" + m + "-" + d;
}
axios.defaults.withCredentials = true; //让ajax携带cookie
//去重
export function noRepeat(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}
Vue.prototype.noRepeat = noRepeat;
// 全局过滤器--时间戳格式化时间//.padStart(2 , "0") 不足两位的用0填充
Vue.filter("dateFormat", function (originVal) {
Vue.filter("dateFormat", function(originVal) {
const dt = new Date(originVal);
const y = dt.getFullYear();
const m = (dt.getMonth() + 1 + "").padStart(2, "0");
@ -95,7 +94,7 @@ Vue.filter("dateFormat", function (originVal) {
const ss = (dt.getSeconds() + "").padStart(2, "0");
return `${y}-${m}-${d} ${hh}:${mm}:${ss}`;
});
Vue.filter("dateMonth", function (originVal) {
Vue.filter("dateMonth", function(originVal) {
const dt = new Date(originVal);
const y = dt.getFullYear();
const m = (dt.getMonth() + 1 + "").padStart(2, "0");
@ -105,10 +104,10 @@ Vue.filter("dateMonth", function (originVal) {
const ss = (dt.getSeconds() + "").padStart(2, "0");
return `${y}-${m}-${d}`;
});
Vue.filter("phone", function (phone) {
Vue.filter("phone", function(phone) {
return phone.substring(0, 3) + "****" + phone.substring(phone.length - 4);
});
Vue.filter("identityNum", function (identityNum) {
Vue.filter("identityNum", function(identityNum) {
return (
identityNum.substring(0, 4) +
"**************" +
@ -116,11 +115,11 @@ Vue.filter("identityNum", function (identityNum) {
);
});
Vue.filter("money", function (money) {
Vue.filter("money", function(money) {
return (money * 1).toFixed(2);
});
Vue.prototype.openLoading = function () {
Vue.prototype.openLoading = function() {
const loading = this.$loading({
// 声明一个loading对象
lock: true, // 是否锁屏
@ -131,7 +130,7 @@ Vue.prototype.openLoading = function () {
body: true,
customClass: "mask" // 遮罩层新增类名
});
setTimeout(function () {
setTimeout(function() {
// 设定定时器超时5S后自动关闭遮罩层避免请求失败时遮罩层一直存在的问题
loading.close(); // 关闭遮罩层
}, 5000);

@ -1,333 +1,334 @@
<template>
<el-dialog :close-on-click-modal="false" v-dialogDrag rechargeTypeId="form" :title="title" :visible.sync="dialogFormVisible" :before-close="handleClose">
<el-form :model="form" inline :rules="rules" ref="form" label-width="120px">
<el-form-item label="手机号码:" prop="mobilePhone">
<div class="form-width-ms">
<el-input style="padding-left:0px;" ref="" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" maxlength="11" v-model="form.mobilePhone" @blur="query()" @change="query()">
<el-button size="mini" slot="append" icon="el-icon-search" @click="openMember()"></el-button>
</el-input>
</div>
</el-form-item>
<el-form-item label="会员名称:" prop="memberName">
<div class="form-width-ms">
{{form.memberName}}
</div>
</el-form-item>
<br>
<el-form-item label="帐户编码:" prop="outRechargeTypeNum">
<div class="form-width-ms">
<span v-if="form.outRechargeTypeNum" class="text-cyan" @click="openRec(0)">{{form.outRechargeTypeNum}}</span>
<el-button v-else type="text" :disabled="!form.memberName" @click="openRec(0)"></el-button>
</div>
</el-form-item>
<el-form-item label="充值编码:" prop="inRechargeTypeNum">
<div class="form-width-ms">
<span v-if="form.inRechargeTypeNum" class="text-cyan" @click="openRec(1)">{{form.inRechargeTypeNum}}</span>
<el-button v-else type="text" :disabled="!form.outRechargeTypeNum" @click="openRec(1)"></el-button>
</div>
</el-form-item>
<br>
<el-form-item label="帐户名称:" prop="outRechargeTypeName">
<div class="form-width-ms">
{{form.outRechargeTypeName}}
</div>
</el-form-item>
<el-form-item label="充值名称:" prop="inRechargeTypeName">
<div class="form-width-ms">
{{form.inRechargeTypeName}}
</div>
</el-form-item>
<br>
<el-form-item label="可用金额:" prop="cardConsumeMoney">
<div class="form-width-ms">
{{form.cardConsumeMoney}}
</div>
</el-form-item>
<el-form-item label="转入金额:" prop="inMoney">
<div class="form-width-ms">
<el-input @blur="endPrice" @change="endPrice" v-model="form.inMoney" type="number" oninput="this.value=this.value.replace(/\D*(\d*)(\.?)(\d{0,2})\d*/,'$1$2$3')" pattern="[0-9]*\.?[0-9]{0,2}" autocomplete="on"></el-input>
</div>
</el-form-item>
<br>
<el-form-item label="可用赠送:" prop="giftConsumeMoney">
<div class="form-width-ms">
{{form.giftConsumeMoney}}
</div>
</el-form-item>
<el-form-item label="转入赠送:" prop="inGiftMoney">
<div class="form-width-ms">
<el-input @blur="endGiftPrice" @change="endGiftPrice" v-model="form.inGiftMoney" type="number" oninput="this.value=this.value.replace(/\D*(\d*)(\.?)(\d{0,2})\d*/,'$1$2$3')" pattern="[0-9]*\.?[0-9]{0,2}" autocomplete="on"></el-input>
</div>
</el-form-item>
</el-form>
<div class="text-center margin-left-lg padding-left">
<staffsles ref="staffsles" @staffslesData="staffslesData"></staffsles>
</div>
<member ref="member" @memberData="memberData"></member>
<rec ref="rec" @recTypeData="recData"></rec>
<rectype ref="rectype" @recTypeData="rectypeData"></rectype>
<div slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="handleClose"> </el-button>
<el-button size="mini" type="primary" @click="confirm"> </el-button>
</div>
</el-dialog>
</template>
<script>
import rec from "@/components/recharge/index";
import rectype from "@/components/recharge/type/index";
import staffsles from "@/components/staffList/staff/index";
import {
addRechargeCardTransition,
updateRechargeCardTransition,
} from "@/api/eashier.js";
import { partten } from "../../../../../partten/index.js";
import { storeMemberOne } from "@/api/eashier.js";
import member from "@/components/member/index";
export default {
components: {
member,
rec,
rectype,
staffsles,
},
data() {
return {
rules: {
rechargeTypeNum: {
required: true,
message: "请输入充值类别编码",
trigger: ["blur", "change"],
},
rechargeMoney: {
required: true,
message: "请输入赠送金额",
trigger: ["blur", "change"],
},
},
staffList: [{ ratio: 100 }],
form: {
type: 0,
},
rowForm: {},
listLoading: false, //list
elementLoadingText: "加载中...", //list
title: "", //
dialogFormVisible: false, //
editIndex: -1,
memberNumber: 0,
memberForm: {}, //
};
},
methods: {
//
handleClose() {
this.form = Object.assign({});
this.staffList = [{ ratio: 100 }];
this.$refs.form.clearValidate();
this.dialogFormVisible = false;
},
endPrice() {
if (this.form.type == 0) {
if (this.form.inMoney > this.form.cardConsumeMoney) {
this.$alert("转出金额不能高于" + this.form.cardConsumeMoney, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
this.form.inMoney = this.form.cardConsumeMoney;
}
}
},
endGiftPrice() {
if (this.form.type == 0) {
if (this.form.inGiftMoney > this.form.giftConsumeMoney) {
this.$alert(
"转入赠送金额不能高于" + this.form.giftConsumeMoney,
"提示",
{
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
}
);
this.form.inGiftMoney = this.form.giftConsumeMoney;
}
}
},
endNumber() {
if (this.form.type == 0) {
if (this.form.courseRestCount > this.form.topNumber) {
this.$alert("转出次数不能高于" + this.form.topNumber, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
this.form.courseRestCount = this.form.topNumber;
}
}
},
//
openMember() {
this.$refs.member.show();
},
//
memberData(v) {
this.form.mobilePhone = v.mobilePhone;
this.query();
},
//
query() {
var number = partten.phoneNum;
var form = { ...this.form };
if (!number.test(this.form.mobilePhone)) {
this.$message.info({
message: "请输入正确的手机号码 ! ",
});
} else {
storeMemberOne({
mobilePhone: this.form.mobilePhone,
storeId: sessionStorage.getItem("parentId"),
}).then((res) => {
if (res.code == "000000") {
form.memberId = res.data.id;
form.memberNum = res.data.memberNum;
form.memberName = res.data.memberName;
form.mobilePhone = res.data.mobilePhone;
res.data.memberId = res.data.id;
this.memberForm = res.data;
this.form = JSON.parse(JSON.stringify(form));
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
}
},
openRec(number) {
if (number == 0) {
this.$refs.rec.show(this.memberForm);
} else {
this.$refs.rectype.show(this.form.outType);
}
},
endEdit(row, index) {
this.editIndex = -1;
},
//
recData(v) {
let form = { ...this.form };
form.outRechargeTypeNum = v.rechargeTypeNum;
form.outRechargeTypeName = v.rechargeTypeName;
form.outRechargeTypeId = v.rechargeTypeId;
form.outAccountId = v.id;
form.outType = v.type;
form.cardConsumeMoney = v.cardConsumeMoney;
form.giftConsumeMoney = v.giftConsumeMoney ? v.giftConsumeMoney : 0;
this.form = JSON.parse(JSON.stringify(form));
},
rectypeData(v) {
let form = { ...this.form };
form.inRechargeTypeNum = v.rechargeTypeNum;
form.inRechargeTypeName = v.rechargeTypeName;
form.inRechargeTypeId = v.id;
form.inType = v.type;
form.inMoney = form.cardConsumeMoney;
form.inGiftMoney = form.giftConsumeMoney;
this.form = JSON.parse(JSON.stringify(form));
},
//
show(form, type) {
this.staffList = [{ ratio: 100 }];
this.form = Object.assign({});
if (form == "添加") {
this.title = form;
} else {
this.title = "修改";
this.form = { ...form };
this.staffList = form.staffLists;
}
console.log(this.staffList);
this.dialogFormVisible = true;
this.toStaff();
},
toStaff() {
this.staffList.forEach((item) => {
if (item.id) {
item.staffNames = item.brandNumber + "--" + item.staffName;
} else {
item.staffNames = "";
}
});
setTimeout(() => {
this.$refs.staffsles.show(this.staffList);
}, 500);
},
//
staffslesData(v) {
this.staffList = [...v];
},
//
confirm() {
if (this.title == "添加") {
this.form.staffLists = this.staffList;
addRechargeCardTransition(this.form)
.then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: "数据添加成功!",
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
})
.catch((err) => {
//console.log(err);
});
} else {
updateRechargeCardTransition(this.form).then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: res.message,
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
}
},
},
};
</script>
<style>
</style>
<template>
<el-dialog :close-on-click-modal="false" v-dialogDrag rechargeTypeId="form" :title="title" :visible.sync="dialogFormVisible" :before-close="handleClose">
<el-form :model="form" inline :rules="rules" ref="form" label-width="120px">
<el-form-item label="手机号码:" prop="mobilePhone">
<div class="form-width-ms">
<el-input style="padding-left:0px;" ref="" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" maxlength="11" v-model="form.mobilePhone" @blur="query()" @change="query()">
<el-button size="mini" slot="append" icon="el-icon-search" @click="openMember()"></el-button>
</el-input>
</div>
</el-form-item>
<el-form-item label="会员名称:" prop="memberName">
<div class="form-width-ms">
{{form.memberName}}
</div>
</el-form-item>
<br>
<el-form-item label="帐户编码:" prop="outRechargeTypeNum">
<div class="form-width-ms">
<span v-if="form.outRechargeTypeNum" class="text-cyan" @click="openRec(0)">{{form.outRechargeTypeNum}}</span>
<el-button v-else type="text" :disabled="!form.memberName" @click="openRec(0)"></el-button>
</div>
</el-form-item>
<el-form-item label="充值编码:" prop="inRechargeTypeNum">
<div class="form-width-ms">
<span v-if="form.inRechargeTypeNum" class="text-cyan" @click="openRec(1)">{{form.inRechargeTypeNum}}</span>
<el-button v-else type="text" :disabled="!form.outRechargeTypeNum" @click="openRec(1)"></el-button>
</div>
</el-form-item>
<br>
<el-form-item label="帐户名称:" prop="outRechargeTypeName">
<div class="form-width-ms">
{{form.outRechargeTypeName}}
</div>
</el-form-item>
<el-form-item label="充值名称:" prop="inRechargeTypeName">
<div class="form-width-ms">
{{form.inRechargeTypeName}}
</div>
</el-form-item>
<br>
<el-form-item label="可用金额:" prop="cardConsumeMoney">
<div class="form-width-ms">
{{form.cardConsumeMoney}}
</div>
</el-form-item>
<el-form-item label="转入金额:" prop="inMoney">
<div class="form-width-ms">
<el-input @blur="endPrice" @change="endPrice" v-model="form.inMoney" type="number" oninput="this.value=this.value.replace(/\D*(\d*)(\.?)(\d{0,2})\d*/,'$1$2$3')" pattern="[0-9]*\.?[0-9]{0,2}" autocomplete="on"></el-input>
</div>
</el-form-item>
<br>
<el-form-item label="可用赠送:" prop="giftConsumeMoney">
<div class="form-width-ms">
{{form.giftConsumeMoney}}
</div>
</el-form-item>
<el-form-item label="转入赠送:" prop="inGiftMoney">
<div class="form-width-ms">
<el-input @blur="endGiftPrice" @change="endGiftPrice" v-model="form.inGiftMoney" type="number" oninput="this.value=this.value.replace(/\D*(\d*)(\.?)(\d{0,2})\d*/,'$1$2$3')" pattern="[0-9]*\.?[0-9]{0,2}" autocomplete="on"></el-input>
</div>
</el-form-item>
</el-form>
<div class="text-center margin-left-lg padding-left">
<staffsles ref="staffsles" @staffslesData="staffslesData"></staffsles>
</div>
<member ref="member" @memberData="memberData"></member>
<rec ref="rec" @recTypeData="recData"></rec>
<rectype ref="rectype" @recTypeData="rectypeData"></rectype>
<div slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="handleClose"> </el-button>
<el-button size="mini" type="primary" @click="confirm"> </el-button>
</div>
</el-dialog>
</template>
<script>
import rec from "@/components/recharge/index";
import rectype from "@/components/recharge/type/index";
import staffsles from "@/components/staffList/staff/index";
import {
addRechargeCardTransition,
updateRechargeCardTransition,
} from "@/api/eashier.js";
import { partten } from "../../../../../partten/index.js";
import { storeMemberOne } from "@/api/eashier.js";
import member from "@/components/member/index";
export default {
components: {
member,
rec,
rectype,
staffsles,
},
data() {
return {
rules: {
rechargeTypeNum: {
required: true,
message: "请输入充值类别编码",
trigger: ["blur", "change"],
},
rechargeMoney: {
required: true,
message: "请输入赠送金额",
trigger: ["blur", "change"],
},
},
staffList: [{ ratio: 100 }],
form: {
type: 0,
},
rowForm: {},
listLoading: false, //list
elementLoadingText: "加载中...", //list
title: "", //
dialogFormVisible: false, //
editIndex: -1,
memberNumber: 0,
memberForm: {}, //
};
},
methods: {
//
handleClose() {
this.form = Object.assign({});
this.staffList = [{ ratio: 100 }];
this.$refs.form.clearValidate();
this.dialogFormVisible = false;
},
endPrice() {
if (this.form.type == 0) {
if (this.form.inMoney > this.form.cardConsumeMoney) {
this.$alert("转出金额不能高于" + this.form.cardConsumeMoney, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
this.form.inMoney = this.form.cardConsumeMoney;
}
}
},
endGiftPrice() {
if (this.form.type == 0) {
if (this.form.inGiftMoney > this.form.giftConsumeMoney) {
this.$alert(
"转入赠送金额不能高于" + this.form.giftConsumeMoney,
"提示",
{
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
}
);
this.form.inGiftMoney = this.form.giftConsumeMoney;
}
}
},
endNumber() {
if (this.form.type == 0) {
if (this.form.courseRestCount > this.form.topNumber) {
this.$alert("转出次数不能高于" + this.form.topNumber, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
this.form.courseRestCount = this.form.topNumber;
}
}
},
//
openMember() {
this.$refs.member.show();
},
//
memberData(v) {
this.form.mobilePhone = v.mobilePhone;
this.query();
},
//
query() {
var number = partten.phoneNum;
var form = { ...this.form };
if (!number.test(this.form.mobilePhone)) {
this.$message.info({
message: "请输入正确的手机号码 ! ",
});
} else {
storeMemberOne({
mobilePhone: this.form.mobilePhone,
storeId: sessionStorage.getItem("parentId"),
}).then((res) => {
if (res.code == "000000") {
form.memberId = res.data.id;
form.memberNum = res.data.memberNum;
form.memberName = res.data.memberName;
form.mobilePhone = res.data.mobilePhone;
res.data.memberId = res.data.id;
this.memberForm = res.data;
this.form = JSON.parse(JSON.stringify(form));
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
}
},
openRec(number) {
if (number == 0) {
this.$refs.rec.show(this.memberForm);
} else {
console.log(this.form.outType);
this.$refs.rectype.show(this.form.outType);
}
},
endEdit(row, index) {
this.editIndex = -1;
},
//
recData(v) {
let form = { ...this.form };
form.outRechargeTypeNum = v.rechargeTypeNum;
form.outRechargeTypeName = v.rechargeTypeName;
form.outRechargeTypeId = v.rechargeTypeId;
form.outAccountId = v.id;
form.outType = v.type;
form.cardConsumeMoney = v.cardConsumeMoney;
form.giftConsumeMoney = v.giftConsumeMoney ? v.giftConsumeMoney : 0;
this.form = JSON.parse(JSON.stringify(form));
},
rectypeData(v) {
let form = { ...this.form };
form.inRechargeTypeNum = v.rechargeTypeNum;
form.inRechargeTypeName = v.rechargeTypeName;
form.inRechargeTypeId = v.id;
form.inType = v.type;
form.inMoney = form.cardConsumeMoney;
form.inGiftMoney = form.giftConsumeMoney;
this.form = JSON.parse(JSON.stringify(form));
},
//
show(form, type) {
this.staffList = [{ ratio: 100 }];
this.form = Object.assign({});
if (form == "添加") {
this.title = form;
} else {
this.title = "修改";
this.form = { ...form };
this.staffList = form.staffLists;
}
console.log(this.staffList);
this.dialogFormVisible = true;
this.toStaff();
},
toStaff() {
this.staffList.forEach((item) => {
if (item.id) {
item.staffNames = item.brandNumber + "--" + item.staffName;
} else {
item.staffNames = "";
}
});
setTimeout(() => {
this.$refs.staffsles.show(this.staffList);
}, 500);
},
//
staffslesData(v) {
this.staffList = [...v];
},
//
confirm() {
if (this.title == "添加") {
this.form.staffLists = this.staffList;
addRechargeCardTransition(this.form)
.then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: "数据添加成功!",
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
})
.catch((err) => {
//console.log(err);
});
} else {
updateRechargeCardTransition(this.form).then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: res.message,
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
}
},
},
};
</script>
<style>
</style>

@ -0,0 +1,281 @@
<template>
<el-dialog :title="title+'方案'" :visible.sync="dialogFormVisible" width="1000px" :before-close="handleClose">
<div class="packing">
<el-form ref="form" :model="packingForm" inline :rules="rules" label-width="100px">
<el-form-item label="方案名称:" prop="promotionName">
<div class="form-width-m">
{{packingForm.promotionName}}
</div>
</el-form-item>
<el-form-item label="项目总数:" prop="projectTotal">
<div class="form-width-sm">
{{packingForm.projectTotal}}
</div>
</el-form-item>
<el-form-item label="可选项目数:" prop="projectCount">
<div class="form-width-sm">
{{packingForm.projectCount}}
</div>
</el-form-item>
<el-form-item label="打包价:">
<div class="form-width-sm">{{ packingForm.saleMoney }}</div>
</el-form-item>
<br />
<el-form-item label="开始日期:" prop="beginDate">
<div class="block form-width-m">
{{packingForm.beginDate}}
</div>
</el-form-item>
<el-form-item label="结束日期:" prop="endDate">
<div class="block form-width-m">
{{packingForm.endDate}}
</div>
</el-form-item>
<el-form-item label="现付提成:" prop="salesCommission">
{{packingForm.salesCommission}}
</el-form-item>
<el-form-item label="卡付提成:" prop="cardSalesCommission">
{{packingForm.cardSalesCommission}}
</el-form-item><br />
<el-form-item label="适用对象:" rop="suitableObject">
<div>
<el-radio-group disabled v-model="packingForm.suitableObject" style="font-size:14px">
<el-radio class="margin-bottom" :label="0">所有会员</el-radio>
<el-radio class="margin-top" :label="2">指定会员</el-radio>
<el-button :disabled="!(packingForm.suitableObject === 2)" size="mini" type="text" @click="openSuitMember(packingForm)"><span>会员列表</span></el-button>
</el-radio-group>
</div>
</el-form-item>
<el-form-item label="是否限购:" rop="limitBuy">
<div style="width:280px;padding-top:5px">
<el-radio-group disabled v-model="packingForm.limitBuy" style="font-size:14px">
<el-radio :label="0">不限购</el-radio>
<el-radio class="margin-bottom" :label="1">限购</el-radio>
<input oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" v-show="packingForm.limitBuy == 1" type="number" v-model="packingForm.limitCount" class="form-width-xss" style="border:none;border-bottom:1px solid #333;margin-right:10px" /><span v-show="packingForm.limitBuy == 1"></span>
</el-radio-group>
</div>
</el-form-item>
<el-form-item label="适用门店:" rop="suitableObject">
<el-radio-group disabled v-model="packingForm.suitableStore" style="font-size:14px">
<el-radio class="margin-bottom" :label="0">所有门店</el-radio>
<el-radio class="margin-top" :label="1">指定门店</el-radio>
<el-button :disabled="!(packingForm.suitableStore === 1)" size="mini" type="text" @click="openSuitStore(packingForm)"><span>门店列表</span></el-button>
</el-radio-group>
</el-form-item>
<el-form-item label="允许卡付:" rop="limitBuy">
<el-radio-group disabled v-model="packingForm.cardBuy" style="font-size:14px">
<el-radio :label="1">允许卡付</el-radio>
<el-radio :label="0">不允许卡付</el-radio>
</el-radio-group>
</el-form-item>
<div style="width:840px;margin-left:30px">
<el-table :data="promotionProjectLists" :header-cell-style="{
background: 'linear-gradient(#6cb3ff, #1873d4)',
color: '#eeeeee'
}" style="margin-top:10px">
<el-table-column prop="projectNum" label="项目编码" align="center" min-width="90"></el-table-column>
<el-table-column prop="projectName" label="项目名称" :show-overflow-tooltip="true" align="center" min-width="120"></el-table-column>
<el-table-column prop="priceMember" label="标准价" align="center" width="80"></el-table-column>
<el-table-column prop="required" label="必选" align="center" min-width="80">
<template slot-scope="scope">{{scope.row.required==0?'是':"否"}}</template>
</el-table-column>
<el-table-column prop="times" label="次数" align="center" min-width="80"></el-table-column>
<el-table-column prop="projectTotalMoney" label="总金额" align="center" min-width="100" fixed="right"></el-table-column>
</el-table>
<div style="width:100%;background:#eee;display: flex;justify-content:space-between;font-size:14px;line-height:40px">
<div class="padding-left">合计</div>
<div class="padding-right-lg">
<span>最高价: <span class="text-red text-price">{{topPrice}}</span></span>
<span class="padding-left-xs">总价值: <span class="text-red text-price">{{projectPriceSum}}</span></span>
<span class="padding-left-xs">最低价: <span class="text-red text-price">{{minumumPrice}}</span></span>
</div>
</div>
</div>
</el-form>
</div>
<suit ref="suit" @suitData="suitData"></suit>
<membersuit ref="membersuit" @membersuitData="membersuitData"></membersuit>
<div slot="footer" class="dialog-footer">
<el-button @click="handleClose" size="mini">关闭</el-button>
</div>
</el-dialog>
</template>
<script>
import {
addPromotion,
promotionPage,
editPromotion,
promotionAudit,
promotionRevokeAudit,
promotionSendAudit,
promotionUnAudit,
promotionPush,
promotionProList,
promotionShutDown,
} from "@/api/promotion.js";
import suit from "../../components/suit";
import membersuit from "../../components/memberSuit";
export default {
components: { suit, membersuit },
data() {
return {
rules: {},
title: "", //
dialogFormVisible: false, //
packingForm: {
//
promotionName: "",
saleMoney: 0,
beginDate: "",
endDate: "",
suitableObject: 0,
limitBuy: 0,
limitCount: 100,
salesCommission: null,
cardSalesCommission: null,
cardBuy: 1,
cardLimit: 0,
suitableStore: 0,
},
promotionProjectLists: [],
projectPriceSum: 0, //
minumumPrice: 0, //
topPrice: 0, //
editIndex: -1, //
sumIndex: -1, //
date: [], //
totalMoneyIndex: -1, //:
timesIndex: -1, //:
projectText: "添加", //
};
},
methods: {
show(form, title) {
Object.assign(this.$data, this.$options.data.call(this));
if (form) {
this.packingForm = { ...form };
this.promotionProjectLists = form.promotionProjectLists;
}
this.title = title;
this.dialogFormVisible = true;
this.sumsNUmber();
},
//
handleClose() {
this.packingForm = {};
this.dialogFormVisible = false;
this.$refs.form.clearValidate();
},
//
openSuitStore(row) {
this.$refs.suit.show(row);
},
//
suitData(v) {
let list = [];
v.forEach((item) => {
if (item.id) {
item.storeId = item.id;
list.push(item);
}
});
this.packingForm.promotionStores = list;
},
//
openSuitMember(row) {
this.$refs.membersuit.show(row);
},
//
membersuitData(v) {
let list = [];
v.forEach((item) => {
if (item.id) {
item.memberId = item.id;
list.push(item);
}
});
this.packingForm.promotionMemberLists = list;
},
//
sumsNUmber(number) {
let num = 0;
let totalMoney = 0;
var bigList = [];
var topPrice = 0;
var minumumPrice = 0;
if (this.promotionProjectLists.length > 0) {
this.promotionProjectLists.forEach((item, index) => {
num += item.priceMember * 1 * item.times * 1;
item.projectTotalMoney =
(item.priceMember * item.times * 1).toFixed(2) * 1;
totalMoney += item.projectTotalMoney * 1;
if (item.required == 0) {
item.required = 0;
item.check = true;
} else {
item.check = false;
item.required = 1;
}
});
bigList = this.promotionProjectLists.sort(function (a, b) {
return a.projectTotalMoney - b.projectTotalMoney;
});
var samlList = [];
for (var i = bigList.length - 1; i >= 0; i--) {
samlList.push(bigList[i]);
}
console.log(bigList);
console.log(samlList);
bigList.forEach((item, index) => {
if (index < this.packingForm.projectCount) {
topPrice += item.projectTotalMoney;
console.log(item.projectTotalMoney);
}
});
samlList.forEach((item, index) => {
if (index < this.packingForm.projectCount) {
minumumPrice += item.projectTotalMoney;
console.log(item.projectTotalMoney);
}
});
this.topPrice = topPrice;
this.minumumPrice = minumumPrice;
this.projectPriceSum = totalMoney.toFixed(2) * 1;
this.packingForm.saleMoney = 0;
this.packingForm.totalMoney = 0;
this.packingForm.saleMoney = totalMoney.toFixed(2) * 1;
this.packingForm.totalMoney = num.toFixed(2) * 1;
}
},
//
},
};
</script>
<style>
.packing .el-date-editor.el-input,
.packing .el-date-editor.el-input__inner {
width: 150px;
}
.changeDate .el-date-editor.el-input,
.changeDate .el-date-editor.el-input__inner {
width: 240px;
}
.packing .el-radio-group input {
height: 100%;
padding-left: 5px;
}
.packing .el-table th {
padding: 12px 0;
}
.packingRadioTable .el-radio__label {
display: none;
}
.schemeListDiv .el-radio__label {
display: none;
}
</style>

@ -1,40 +1,32 @@
<template>
<el-dialog :title="title+'方案'" :visible.sync="dialogFormVisible" width="1000px" :before-close="handleClose">
<div class="packing">
<el-form ref="form" :model="form" inline :rules="rules" label-width="100px">
<el-form-item label="方案名称:" prop="promotionName" :rules="{
required: true,
message: '请输入方案名称',
trigger: 'blur'
}">
<el-form ref="form" :model="packingForm" inline :rules="rules" label-width="100px">
<el-form-item label="方案名称:" prop="promotionName">
<div class="form-width-m">
<el-input v-model="packingForm.promotionName" placeholder="方案名称"></el-input>
</div>
</el-form-item>
<el-form-item label="项目总数:" prop="proTotal">
<el-form-item label="项目总数:" prop="projectTotal">
<div class="form-width-sm">
<el-input type="number" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" placeholder="项目总数" v-model="packingForm.proTotal"></el-input>
<el-input type="number" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" placeholder="项目总数" v-model="packingForm.projectTotal"></el-input>
</div>
</el-form-item>
<el-form-item label="可选项目数:" prop="radioTotal">
<el-form-item label="可选项目数:" prop="projectCount">
<div class="form-width-sm">
<el-input type="number" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" placeholder="可选项目数" v-model="packingForm.radioTotal"></el-input>
<el-input type="number" oninput="this.value=this.value.replace(/\D/g,'')" pattern="[0-9]*" placeholder="可选项目数" v-model="packingForm.projectCount"></el-input>
</div>
</el-form-item>
<el-form-item label="打包价:">
<div class="form-width-sm">{{ packingForm.saleMoney }}</div>
</el-form-item>
<!-- <el-form-item label="方案最高价:">
<div class="form-width-sm">{{ packingForm.totalMoney }}</div>
<div class="form-width-sm">
<el-input type="number" placeholder="打包价" v-model="packingForm.saleMoney"></el-input>
</div>
</el-form-item>
<el-form-item label="方案最低价:">
<div class="form-width-sm">{{ packingForm.totalMoney }}</div>
</el-form-item> -->
<br />
<el-form-item label="开始日期:" prop="beginDate" :rules="{
required: true,
message: '请选择开始日期',
trigger: 'blur'
trigger:['blur','change']
}">
<div class="block form-width-m">
<el-date-picker style="width:150px" v-model="packingForm.beginDate" value-format="yyyy-MM-dd 00:00:00" format="yyyy-MM-dd" type="date" default-time="00:00:00" placeholder="开始日期"></el-date-picker>
@ -43,7 +35,7 @@
<el-form-item label="结束日期:" prop="endDate" :rules="{
required: true,
message: '请选择结束日期',
trigger: 'blur'
trigger:['blur','change']
}">
<div class="block form-width-m">
<el-date-picker style="width:150px" v-model="packingForm.endDate" value-format="yyyy-MM-dd 23:59:59" format="yyyy-MM-dd" default-time="23:59:59" type="date" placeholder="结束日期"></el-date-picker>
@ -52,21 +44,21 @@
<el-form-item label="现付提成:" prop="salesCommission" :rules="{
required: true,
message: '请输入现付提成',
trigger: 'blur'
trigger: ['blur','change']
}">
<input type="number" oninput="this.value=this.value.replace(/\D*(\d*)(\.?)(\d{0,3})\d*/,'$1$2$3')" pattern="[0-9]*\.?[0-9]{0,3}" v-model="packingForm.salesCommission" style="border:none;width:60px;background:#eee;height:35px;font-size:14px;padding-left:10px;" />
<input type="number" v-model="packingForm.salesCommission" style="border:none;width:60px;background:#eee;height:35px;font-size:14px;padding-left:10px;" />
</el-form-item>
<el-form-item label="卡付提成:" prop="cardSalesCommission" :rules="{
required: true,
message: '请输入卡付提成',
trigger: 'blur'
trigger:['blur','change']
}">
<input type="number" oninput="this.value=this.value.replace(/\D*(\d*)(\.?)(\d{0,3})\d*/,'$1$2$3')" pattern="[0-9]*\.?[0-9]{0,3}" v-model="packingForm.cardSalesCommission" style="border:none;width:60px;background:#eee;height:35px;font-size:14px;padding-left:10px;" />
<input type="number" v-model="packingForm.cardSalesCommission" style="border:none;width:60px;background:#eee;height:35px;font-size:14px;padding-left:10px;" />
</el-form-item><br />
<el-form-item label="适用对象:" rop="suitableObject" :rules="{
required: true,
message: '请选择适用对象',
trigger: 'blur'
trigger:['blur','change']
}">
<div>
<el-radio-group v-model="packingForm.suitableObject" style="font-size:14px">
@ -79,7 +71,7 @@
<el-form-item label="是否限购:" rop="limitBuy" :rules="{
required: true,
message: '请选择是否限购',
trigger: 'blur'
trigger:['blur','change']
}">
<div style="width:280px;padding-top:5px">
<el-radio-group v-model="packingForm.limitBuy" style="font-size:14px">
@ -92,7 +84,7 @@
<el-form-item label="适用门店:" rop="suitableObject" :rules="{
required: true,
message: '请选择适用门店',
trigger: 'blur'
trigger:['blur','change']
}">
<el-radio-group v-model="packingForm.suitableStore" style="font-size:14px">
<el-radio class="margin-bottom" :label="0">所有门店</el-radio>
@ -100,11 +92,7 @@
<el-button :disabled="!(packingForm.suitableStore === 1)" size="mini" type="text" @click="openSuitStore(packingForm)"><span>门店列表</span></el-button>
</el-radio-group>
</el-form-item>
<el-form-item label="允许卡付:" rop="limitBuy" :rules="{
required: true,
message: '请选择是否允许卡付',
trigger: 'blur'
}">
<el-form-item label="允许卡付:" rop="limitBuy">
<el-radio-group v-model="packingForm.cardBuy" style="font-size:14px">
<el-radio :label="1">允许卡付</el-radio>
<el-radio :label="0">不允许卡付</el-radio>
@ -112,7 +100,7 @@
</el-form-item>
<div style="width:840px;margin-left:30px">
<el-button size="mini" type="primary" @click="editPro('添加')"></el-button>
<el-table :data="packingForm.promotionProjectLists" :header-cell-style="{
<el-table :data="promotionProjectLists" :header-cell-style="{
background: 'linear-gradient(#6cb3ff, #1873d4)',
color: '#eeeeee'
}" style="margin-top:10px">
@ -133,7 +121,7 @@
<el-table-column prop="priceMember" label="标准价" align="center" width="80"></el-table-column>
<el-table-column prop="required" label="必选" align="center" min-width="80">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.check" @change="(scope.row.check?scope.row.required=0:scope.row.required=1,packingForm.promotionProjectLists.splice(scope.$index,scope.row))"></el-checkbox>
<el-checkbox v-model="scope.row.check" @change="(scope.row.check?scope.row.required=0:scope.row.required=1,promotionProjectLists.splice(scope.$index,scope.row))"></el-checkbox>
</template>
</el-table-column>
<el-table-column prop="times" label="次数" align="center" min-width="80">
@ -181,7 +169,18 @@
</el-dialog>
</template>
<script>
import { addBaseWorkType, updateBaseWorkType } from "@/api/storeManage.js";
import {
addPromotion,
promotionPage,
editPromotion,
promotionAudit,
promotionRevokeAudit,
promotionSendAudit,
promotionUnAudit,
promotionPush,
promotionProList,
promotionShutDown,
} from "@/api/promotion.js";
import suit from "../../components/suit";
import membersuit from "../../components/memberSuit";
import project from "@/components/project/index";
@ -191,20 +190,35 @@ export default {
return {
form: {}, //
rules: {
proTotal: [
promotionName: [
{
required: true,
message: "请输入方案名称",
trigger: ["blur", "change"],
},
],
projectTotal: [
{
required: true,
message: "请输入项目总数",
trigger: ["blur", "change"],
},
],
radioTotal: [
projectCount: [
{
required: true,
message: "请输入可选择项目数",
trigger: ["blur", "change"],
},
],
limitBuy: [
{
required: true,
message: "请选择是否允许卡付",
trigger: ["blur", "change"],
},
],
},
title: "", //
dialogFormVisible: false, //
@ -219,10 +233,11 @@ export default {
limitCount: 100,
salesCommission: null,
cardSalesCommission: null,
promotionProjectLists: [],
cardBuy: 1,
cardLimit: 0,
suitableStore: 0,
},
promotionProjectLists: [],
projectPriceSum: 0, //
minumumPrice: 0, //
topPrice: 0, //
@ -235,13 +250,22 @@ export default {
};
},
methods: {
show(row, title) {
if (row) {
this.packingForm = { ...row };
show(form, title) {
Object.assign(this.$data, this.$options.data.call(this));
if (form) {
this.packingForm = { ...form };
this.promotionProjectLists = form.promotionProjectLists;
this.promotionProjectLists.forEach((item) => {
if (item.required == 0) {
item.check = true;
} else {
item.check = false;
}
});
}
this.title = title;
this.dialogFormVisible = true;
this.sumsNUmber();
this.sumsNUmber(undefined, true);
},
//
handleClose() {
@ -252,8 +276,8 @@ export default {
//
editPro(text) {
this.projectText = text;
let index = this.packingForm.promotionProjectLists.length;
if (text == "添加" && this.packingForm.proTotal == index) {
let index = this.promotionProjectLists.length;
if (text == "添加" && this.packingForm.projectTotal == index) {
this.$message.warning({ message: "项目个数已满足!" });
} else {
this.$refs.project.show(0);
@ -262,12 +286,13 @@ export default {
//
projectData(form) {
form.times = form.minumumTimes;
form.standardTimes = form.minumumTimes;
form.projectTotalMoney =
(form.priceMember * form.minumumTimes).toFixed(2) * 1;
var info = true;
if (this.projectText == "添加") {
if (this.packingForm.promotionProjectLists.length > 0) {
this.packingForm.promotionProjectLists.forEach((item) => {
if (this.promotionProjectLists.length > 0) {
this.promotionProjectLists.forEach((item) => {
if (form.id == item.id) {
this.$message.info({
message: "该项目已在表中存在,无需添加,请直接修改次数!",
@ -276,17 +301,17 @@ export default {
}
});
if (info) {
this.packingForm.promotionProjectLists.push(form);
this.promotionProjectLists.push(form);
this.sumsNUmber(1);
form = {};
}
} else {
this.packingForm.promotionProjectLists.push(form);
this.promotionProjectLists.push(form);
this.sumsNUmber(1);
form = {};
}
} else {
this.packingForm.promotionProjectLists.forEach((item) => {
this.promotionProjectLists.forEach((item) => {
if (form.id == item.id) {
this.$message.info({
message: "该项目已在表中存在,无需添加,请直接修改次数!",
@ -295,19 +320,15 @@ export default {
}
});
if (info) {
this.packingForm.promotionProjectLists.splice(
this.editIndex,
1,
form
);
this.promotionProjectLists.splice(this.editIndex, 1, form);
this.sumsNUmber(1);
}
}
},
//
delProject(index) {
if (this.packingForm.promotionProjectLists.length > 1) {
this.packingForm.promotionProjectLists.splice(index, 1);
if (this.promotionProjectLists.length > 1) {
this.promotionProjectLists.splice(index, 1);
this.sumsNUmber(1);
} else {
this.$message.info({ message: "最少要有一个项目!" });
@ -348,7 +369,7 @@ export default {
editRow(row, index) {
this.sumIndex = index;
let form = JSON.parse(JSON.stringify(row));
this.packingForm.promotionProjectLists.splice(index, 1, form);
this.promotionProjectLists.splice(index, 1, form);
},
//
endEditNumber(row) {
@ -365,14 +386,14 @@ export default {
this.sumsNUmber(1);
},
//
sumsNUmber(number) {
sumsNUmber(number, isSum) {
let num = 0;
let totalMoney = 0;
var bigList = [];
var topPrice = 0;
var minumumPrice = 0;
if (this.packingForm.promotionProjectLists.length > 0) {
this.packingForm.promotionProjectLists.forEach((item, index) => {
if (this.promotionProjectLists.length > 0) {
this.promotionProjectLists.forEach((item, index) => {
num += item.priceMember * 1 * item.times * 1;
if (!number && this.sumIndex == index) {
item.projectTotalMoney =
@ -388,36 +409,31 @@ export default {
item.required = 1;
}
});
bigList = this.packingForm.promotionProjectLists.sort(function (a, b) {
bigList = this.promotionProjectLists.sort(function (a, b) {
return a.projectTotalMoney - b.projectTotalMoney;
});
var samlList = [];
for (var i = bigList.length - 1; i >= 0; i--) {
samlList.push(bigList[i]);
}
console.log(bigList);
console.log(samlList);
bigList.forEach((item, index) => {
if (index < this.packingForm.radioTotal) {
topPrice += item.projectTotalMoney;
if (index < this.packingForm.projectCount) {
minumumPrice += item.projectTotalMoney;
console.log(item.projectTotalMoney);
}
});
samlList.forEach((item, index) => {
if (index < this.packingForm.radioTotal) {
minumumPrice += item.projectTotalMoney;
if (index < this.packingForm.projectCount) {
topPrice += item.projectTotalMoney;
console.log(item.projectTotalMoney);
}
});
this.topPrice = topPrice;
this.minumumPrice = minumumPrice;
this.projectPriceSum = totalMoney.toFixed(2) * 1;
this.packingForm.saleMoney = 0;
this.packingForm.totalMoney = 0;
this.packingForm.saleMoney = totalMoney.toFixed(2) * 1;
if (!isSum) {
this.packingForm.saleMoney = totalMoney.toFixed(2) * 1;
}
this.packingForm.totalMoney = num.toFixed(2) * 1;
}
},
@ -425,14 +441,62 @@ export default {
save() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
if (this.title == "添加") {
await addBaseWorkType(this.form).then((res) =>
this.callbackFun(res)
);
let promotionProjectLists = [];
this.promotionProjectLists.forEach((item) => {
let items = {
storeId: item.storeId,
storeName: item.storeName,
projectNum: item.projectNum,
projectName: item.projectName,
priceMember: item.priceMember,
standardTimes: item.standardTimes,
times: item.times,
projectTotalMoney: item.projectTotalMoney,
promotionName: this.packingForm.promotionName,
required: item.required,
type: 0,
};
if (item.projectId != undefined) {
items.projectId = item.projectId;
} else {
items.projectId = item.id;
}
promotionProjectLists.push(items);
});
this.packingForm.promotionProjectLists = promotionProjectLists;
this.packingForm.endPromotion = 0;
this.packingForm.promotionProjectLists.forEach((item) => {
delete item.ids;
});
this.packingForm.cardLimit = 0;
if (this.packingForm.cardBuy == 0) {
this.packingForm.cardSalesCommission = 0;
}
this.packingForm.pushState = 0;
this.packingForm.pushCount = 0;
this.packingForm.type = 2;
if (
promotionProjectLists.length ==
this.packingForm.projectTotal * 1
) {
if (this.title == "添加" || this.title == "复制") {
await addPromotion(this.packingForm).then((res) =>
this.callbackFun(res)
);
} else {
await editPromotion(this.packingForm).then((res) =>
this.callbackFun(res)
);
}
} else {
await updateBaseWorkType(this.form).then((res) =>
this.callbackFun(res)
);
this.$alert("项目总条数不足", "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
} else {
return false;

@ -124,21 +124,23 @@
</span>
</template>
</el-table-column>
<el-table-column prop="promotionNum" label="方案编码" align="center" min-width="130"></el-table-column>
<el-table-column prop="promotionNum" label="方案编码" align="center" min-width="100"></el-table-column>
<el-table-column prop="createdDate" label="创建时间" show-overflow-tooltip align="center" min-width="80">
<template slot-scope="scope">
<div>{{ scope.row.createdDate | dateFormat }}</div>
</template>
</el-table-column>
<el-table-column prop="promotionName" :show-overflow-tooltip="true" label="方案名称" align="center" min-width="120"></el-table-column>
<el-table-column prop="totalMoney" label="总价值" align="center" min-width="80"></el-table-column>
<el-table-column prop="saleMoney" label="打包价" align="center" min-width="80"></el-table-column>
<el-table-column prop="beginDate" label="开始日期" align="center" min-width="105">
<el-table-column prop="projectTotal" label="项目总数" align="center" min-width="75"></el-table-column>
<el-table-column prop="projectCount" label="可选项目" align="center" min-width="75"></el-table-column>
<el-table-column prop="totalMoney" label="总价值" align="center" min-width="75"></el-table-column>
<el-table-column prop="saleMoney" label="打包价" align="center" min-width="75"></el-table-column>
<el-table-column prop="beginDate" label="开始日期" align="center" min-width="85">
<template slot-scope="scope">
<div>{{ scope.row.beginDate | dateMonth }}</div>
</template>
</el-table-column>
<el-table-column prop="endDate" label="结束日期" align="center" min-width="105">
<el-table-column prop="endDate" label="结束日期" align="center" min-width="85">
<template slot-scope="scope">
<div>{{ scope.row.endDate | dateMonth }}</div>
</template>
@ -156,13 +158,13 @@
<span class="text-cyan" v-show="scope.row.suitableStore == 1" @click.stop="openSuitStore(scope.row)"></span>
</template>
</el-table-column>
<el-table-column prop="limitCount" label="限购" align="center" min-width="100">
<el-table-column prop="limitCount" label="限购" align="center" min-width="80">
<template slot-scope="scope">
<div v-if="scope.row.limitBuy == 0"></div>
<div v-else>{{ scope.row.limitCount }}</div>
</template>
</el-table-column>
<el-table-column prop="pushCount" label="推送次数" align="center" min-width="100">
<el-table-column prop="pushCount" label="推送次数" align="center" min-width="80">
<template slot-scope="scope">
<div v-if="scope.row.pushCount == 0"></div>
<div v-else> {{ scope.row.pushCount }} </div>
@ -201,6 +203,8 @@
<suit ref="suit"></suit>
<membersuit ref="membersuit"></membersuit>
<edit ref="edit" @editData="getData"></edit>
<detail ref="detail"></detail>
</div>
</template>
@ -221,8 +225,10 @@ import { partten } from "../../../../partten/index";
import suit from "../components/suit";
import membersuit from "../components/memberSuit";
import edit from "./components/edit.vue";
import detail from "./components/detail.vue";
export default {
components: { suit, membersuit, edit },
components: { suit, membersuit, edit, detail },
data() {
return {
listDialogFormVisible: false, //
@ -323,10 +329,8 @@ export default {
this.packingForm = { promotionProjectLists: [] };
this.packingForm = { ...this.radioRowValueList };
this.packingForm.promotionProjectLists = res.rows;
this.formDialog = true;
this.detailDialog = true;
this.$refs.detail.show(this.packingForm, "明细");
});
this.sumsNUmber();
},
//
editForm() {
@ -334,11 +338,8 @@ export default {
this.packingForm = { promotionProjectLists: [] };
this.packingForm = { ...this.radioRowValueList };
this.packingForm.promotionProjectLists = res.rows;
this.formDialog = true;
this.editDialog = true;
this.ediTion(this.packingForm, "修改");
});
this.sumsNUmber();
this.ediTion(this.packingForm, "修改");
},
//
endEditForm() {
@ -507,10 +508,8 @@ export default {
this.packingForm = { promotionProjectLists: [] };
this.packingForm = { ...this.radioRowValueList };
this.packingForm.promotionProjectLists = res.rows;
this.formDialog = true;
this.copyDialog = true;
this.ediTion(this.packingForm, "复制");
});
this.ediTion(this.packingForm, "复制");
},
endCopyForm() {
let promotionProjectLists = [];
@ -544,7 +543,7 @@ export default {
if (this.packingForm.cardBuy == 0) {
this.packingForm.cardSalesCommission = 0;
}
this.packingForm.type = 0;
this.packingForm.type = 2;
addPromotion(this.packingForm).then((res) => {
//console.log(res);
if (res.code == "000000") {
@ -714,7 +713,7 @@ export default {
},
getData() {
var page = { type: 0, pageSize: this.pageSize, pageNum: this.pageNum };
var page = { type: 2, pageSize: this.pageSize, pageNum: this.pageNum };
promotionPage(page).then((res) => {
if ((res.code = "000000")) {
if (this.refreshtext == true) {

@ -84,9 +84,22 @@
<el-form-item label="购买备注:">
<el-input size="small" type="textarea" :autosize="{ minRows: 1.5, maxRows: 2 }" v-model="form.description" style="max-width:600px;width:600px"></el-input>
</el-form-item>
<div class="border-radius-10 border bg-white padding-xs" v-if="form.projectCount" style="width:920px;margin-left:20px">
<el-table ref="regTable" @selection-change="handleSelectionChange" @row-click="rowClicks" :data="projectList" :header-cell-style="{background: 'linear-gradient(#6cb3ff, #1873d4)',color:'#eeeeee',}">
<el-table-column type="selection" :selectable="checkStatus" width="55"></el-table-column>
<el-table-column prop="projectNum" label="项目编码" align="center" min-width="120"></el-table-column>
<el-table-column prop="projectName" label="项目名称" align="center" min-width="120"></el-table-column>
<el-table-column prop="priceMember" label="标准价" align="center" min-width="120"></el-table-column>
<el-table-column prop="required" label="必选" align="center" min-width="80">
<template slot-scope="scope">{{scope.row.required==0?'是':"否"}}</template>
</el-table-column>
<el-table-column prop="times" label="次数" align="center" min-width="120"></el-table-column>
<el-table-column prop="projectTotalMoney" label="总价值" align="center" min-width="120"></el-table-column>
</el-table>
</div>
<br>
<div class="flex justify-center align-start flex-wrap padding-top-xs padding-left margin-left" style="width:935px">
<div style="width:590px" class="border-radius-10 border margin-right-xs bg-white padding-xs" v-if="form.cardBuy==1">
<div class="flex justify-center align-start flex-wrap padding-top-xs padding-left margin-left" style="width:940px">
<div style="width:610px" class="border-radius-10 border margin-right-xs bg-white padding-xs" v-if="form.cardBuy==1">
<el-table :data="rechargeAccountList" :summary-method="getSummaries" show-summary>
<el-table-column align="center" :show-overflow-tooltip="true" prop="rechargeTypeName" label="名称" min-width="120"></el-table-column>
<el-table-column show-overflow-tooltip min-width="70" align="center" prop="cardRestMoney" label="剩余金额"></el-table-column>
@ -103,7 +116,7 @@
</el-table-column>
<!-- <el-table-column v-if="form.cardLimit==1" align="center" prop="discoutMoney" label="抵扣支付" width="90"> </el-table-column> -->
<el-table-column align="center" prop="cardOvers" label="可用余额" width="90"></el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="storeName" label="所属门店" width="120"></el-table-column>
<el-table-column show-overflow-tooltip align="center" prop="storeName" label="所属门店" width="100"></el-table-column>
</el-table>
<!-- <div class="close">
<span>合计</span>
@ -111,7 +124,7 @@
<span v-else style="margin-right:300px;">¥{{spendMoneys}}</span>
</div> -->
</div>
<div style="width:280px" class="border-radius-10 border margin-right-xs bg-white padding-xs">
<div style="width:300px" class="border-radius-10 border margin-right-xs bg-white padding-xs">
<el-table :data="payLists" :summary-method="getSummaries" show-summary>
<el-table-column align="center" prop="payName" label="支付方式" min-width="100"></el-table-column>
<el-table-column align="center" prop="payMoney" fixed="right" label="本次支付 ( ¥ )" width="120">
@ -211,7 +224,7 @@
<div style="display: flex;justify-content: center;width:960px" class="padding-top margin-top">
<el-button style="margin:0 15px" size="mini" type="info" @click="reset()"></el-button>
<el-button style="margin:0 15px" size="mini" type="success" @click="openSellList(sellListDialog=true)"></el-button>
<el-button style="margin:0 15px;" size="mini" type="primary" :loading="loadingShow" @click="submit"></el-button>
<el-button style="margin:0 15px;" :disabled="form.projectCount==checkTableList.length" size="mini" type="primary" :loading="loadingShow" @click="submit"></el-button>
</div>
<el-dialog :close-on-click-modal="false" v-dialogDrag title="提示" :visible.sync="paymentcodeDialog" width="400px">
<span style="font-size:14px; margin-left:10px;color:#999">本次支付需要验证支付密码</span>
@ -265,10 +278,12 @@ export default {
radioPromotionValue: "", //
radioPromotionValueList: {}, //
sessionStorageData: {}, //
checkTableList: [],
paymentform: {
//
cashPassword: null,
},
projectList: [],
form: {
//
cardBuy: 1,
@ -295,6 +310,65 @@ export default {
};
},
methods: {
checkStatus(row) {
if (row.status == 1) {
return true;
}
return false;
},
handleSelectionChange(val, row) {
this.checkTableList = val;
this.projectList.forEach((item) => {
if (item.required == 0) {
this.$nextTick(() => {
this.$refs["regTable"].toggleRowSelection(item, true);
});
this.checkTableList.push(item);
}
this.checkTableList.forEach((items) => {
if (item.id == items.id) {
item.status = 1;
} else {
item.status = 0;
}
});
});
},
handleSelectionAllChange(data) {
//
this.projectList.forEach((v, index) => {
if (index >= this.form.projectCount) {
//
this.$refs["regTable"].toggleRowSelection(v, false);
}
});
},
rowClicks(row) {
//
if (row.required == 1) {
const check = this.checkTableList.find((v) => {
return v.id == row.id;
});
if (!check && this.checkTableList.length > this.form.projectCount) {
this.$message.warning(`最多只能选${this.form.projectCount}条!`);
this.projectList.forEach((item) => {
if (item.id == row.id) {
item.status = 0;
}
});
return;
}
this.$refs["regTable"].toggleRowSelection(row);
this.projectList.forEach((item) => {
if (item.id == row.id) {
item.status = 1;
}
});
} else {
this.$message.warning(`必选项目!`);
}
},
//
openMember() {
this.$refs.member.show();
@ -363,6 +437,9 @@ export default {
},
//
submit() {
setTimeout(() => {
this.loadingShow = false;
}, 3000);
this.loadingShow = true;
let payLists = [];
this.payLists.forEach((item) => {
@ -409,6 +486,8 @@ export default {
amount: this.form.amount,
debtMoney: this.form.debtMoney,
salesmens: this.form.salesmens,
projectCount: this.form.projectCount,
projectTotal: this.form.projectTotal,
collectionCashAmount: this.form.collectionCashAmount,
collectionRechargeAmount: this.form.collectionRechargeAmount,
salesCommission: this.form.salesCommission * 1,
@ -422,6 +501,14 @@ export default {
} else {
this.sell.isDebt = 0;
}
if (this.form.projectCount > 0) {
this.sell.projectArray = "";
let checkTableList = this.noRepeat(this.checkTableList);
checkTableList.forEach((item) => {
console.log(item.id);
this.sell.projectArray += item.id + ",";
});
}
addDocPromotion(this.sell).then((res) => {
this.loadingShow = false;
if (res.code == "000000") {
@ -757,8 +844,6 @@ export default {
created() {},
activated() {
this.form = JSON.parse(JSON.stringify({}));
console.log(this.form);
console.log(this.$route.query);
if (this.$route.query.promotionName != undefined) {
this.form = Object.assign(this.$route.query);
@ -766,6 +851,18 @@ export default {
this.form.amount = this.form.saleMoney * 1;
this.form.debtMoney = this.form.amount;
this.form.count = 1;
this.projectList = this.form.projectList;
this.projectList.forEach((item) => {
if (item.required == 0) {
item.status = 1;
this.$nextTick(() => {
this.$refs["regTable"].toggleRowSelection(item, true);
});
this.checkTableList.push(item);
} else {
item.status = 0;
}
});
this.copyForm = { ...this.form };
this.sessionStorageData = JSON.parse(
sessionStorage.getItem("sessionStorageData")

@ -7,7 +7,7 @@
<el-radio :label="1">所有门店</el-radio>
<el-radio :label="2">指定门店</el-radio>
</el-radio-group>
<el-select filterable v-if="queryForm.storeType==2" default-first-option v-model="queryForm.storeId" clearable @clear="getList" placeholder="请选择门店" @change="radioChange">
<el-select ref="select" filterable v-if="queryForm.storeType==2" default-first-option v-model="queryForm.storeId" clearable @clear="getList" placeholder="请选择门店" @change="radioChange">
<el-option v-for="item in options" :key="item.id" :label="item.label" :value="item.id">
</el-option>
</el-select>
@ -232,10 +232,15 @@ export default {
methods: {
storeRadioChange(v) {
if (v != 2) {
this.getData();
this.getList();
} else {
this.$nextTick(() => {
this.$refs.select.focus();
});
}
},
radioChange(v) {
console.log(v);
this.getList();
},
radioChanges(v) {

@ -1,140 +1,154 @@
<template>
<el-dialog :close-on-click-modal="false" v-dialogDrag rechargeTypeId="form" :title="title" :visible.sync="dialogFormVisible" :before-close="handleClose">
<el-form :model="form" :rules="rules" ref="form" label-width="120px">
<el-form-item label="等级编码:" prop="classNum">
<el-input ref="classNum" class="form-width" v-model="form.classNum" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="等级名称:" prop="className">
<el-input class="form-width" v-model="form.className" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="充值标准:" prop="rechargeStandard">
<el-input class="form-width" type="number" placeholder="请输入充值标准" pattern="[0-9]*\" v-model="form.rechargeStandard" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="疗程标准:" prop="courseStandard">
<el-input class="form-width" type="number" placeholder="请输入疗程标准" pattern="[0-9]*\" v-model="form.courseStandard" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="收银标准:" prop="cashDecimal">
<el-input class="form-width" type="number" placeholder="请输入收银标准" pattern="[0-9]*\" v-model="form.cashDecimal" autocomplete="on"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="handleClose"> </el-button>
<el-button size="mini" type="primary" @click="confirm"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { addMemberClass, editMemberClass } from "@/api/storeManage.js";
export default {
data() {
return {
rules: {
classNum: {
required: true,
message: "请输入等级编码",
trigger: ["blur", "change"],
},
className: {
required: true,
message: "请输入等级名称",
trigger: ["blur", "change"],
},
statisticsQuarter: {
required: true,
message: "请选择等级制度",
trigger: ["blur", "change"],
},
rechargeStandard: {
required: true,
message: "请输入充值标准",
trigger: ["blur", "change"],
},
courseStandard: {
required: true,
message: "请输入疗程标准",
trigger: ["blur", "change"],
},
cashDecimal: {
required: true,
message: "请输入收银标准",
trigger: ["blur", "change"],
},
},
form: {}, //
title: "", //
dialogFormVisible: false, //
};
},
methods: {
//
handleClose() {
this.form = {};
this.dialogFormVisible = false;
this.$refs.form.clearValidate();
},
//
show(text, form) {
this.title = text;
this.form = {};
if (text == "修改") {
this.form = { ...form };
}
setTimeout(() => {
this.$refs.classNum.focus();
this.$refs.classNum.select();
}, 300);
this.dialogFormVisible = true;
},
//
confirm() {
if (this.title == "添加") {
addMemberClass(this.form)
.then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: "数据添加成功!",
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
})
.catch((err) => {
//console.log(err);
});
} else {
editMemberClass(this.form).then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: res.message,
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
}
},
},
};
</script>
<style>
</style>
<template>
<el-dialog :close-on-click-modal="false" v-dialogDrag rechargeTypeId="form" :title="title" :visible.sync="dialogFormVisible" :before-close="handleClose">
<el-form :model="form" :rules="rules" ref="form" label-width="120px">
<el-form-item label="等级编码:" prop="classNum">
<el-input ref="classNum" class="form-width" v-model="form.classNum" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="等级名称:" prop="className">
<el-input class="form-width" v-model="form.className" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="制度:" prop="statisticsQuarter">
<el-radio-group v-model="form.statisticsQuarter">
<el-radio :label="0">月度</el-radio>
<el-radio :label="1">半年度</el-radio>
<el-radio :label="2">一年度</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="等级编号:" prop="classRow">
<el-input class="form-width" type="number" placeholder="请输入等级编号" pattern="[0-9]*\" v-model="form.classRow" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="充值标准:" prop="rechargeStandard">
<el-input class="form-width" type="number" placeholder="请输入充值标准" pattern="[0-9]*\" v-model="form.rechargeStandard" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="疗程标准:" prop="courseStandard">
<el-input class="form-width" type="number" placeholder="请输入疗程标准" pattern="[0-9]*\" v-model="form.courseStandard" autocomplete="on"></el-input>
</el-form-item>
<el-form-item label="收银标准:" prop="cashDecimal">
<el-input class="form-width" type="number" placeholder="请输入收银标准" pattern="[0-9]*\" v-model="form.cashDecimal" autocomplete="on"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="handleClose"> </el-button>
<el-button size="mini" type="primary" @click="confirm"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { addMemberClass, editMemberClass } from "@/api/storeManage.js";
export default {
data() {
return {
rules: {
classNum: {
required: true,
message: "请输入等级编码",
trigger: ["blur", "change"],
},
className: {
required: true,
message: "请输入等级名称",
trigger: ["blur", "change"],
},
statisticsQuarter: {
required: true,
message: "请选择等级制度",
trigger: ["blur", "change"],
},
rechargeStandard: {
required: true,
message: "请输入充值标准",
trigger: ["blur", "change"],
},
classRow: {
required: true,
message: "请输入等级编号",
trigger: ["blur", "change"],
},
courseStandard: {
required: true,
message: "请输入疗程标准",
trigger: ["blur", "change"],
},
cashDecimal: {
required: true,
message: "请输入收银标准",
trigger: ["blur", "change"],
},
},
form: {}, //
title: "", //
dialogFormVisible: false, //
};
},
methods: {
//
handleClose() {
this.form = {};
this.dialogFormVisible = false;
this.$refs.form.clearValidate();
},
//
show(text, form) {
this.title = text;
this.form = {};
if (text == "修改") {
this.form = { ...form };
}
setTimeout(() => {
this.$refs.classNum.focus();
this.$refs.classNum.select();
}, 300);
this.dialogFormVisible = true;
},
//
confirm() {
if (this.title == "添加") {
addMemberClass(this.form)
.then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: "数据添加成功!",
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
})
.catch((err) => {
//console.log(err);
});
} else {
editMemberClass(this.form).then((res) => {
if (res.code == "000000") {
this.$emit("editData");
this.dialogFormVisible = false;
this.$message.success({
message: res.message,
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
}
},
},
};
</script>
<style>
</style>

@ -1,6 +1,7 @@
<template>
<div class="displsy-mod">
<el-button size="mini" type="primary" v-role="4007202" @click="edit('添加')"></el-button>
<el-button size="mini" type="primary" v-role="4007202" @click="sum()"></el-button>
<hr />
<el-table :data="list" stripe style="width: 100%" :header-cell-style=" {background: 'linear-gradient(#6cb3ff, #1873d4)' , color: '#eeeeee' , }">
<el-table-column align="center" prop="classNum" label="等级编码" min-width="80" show-overflow-tooltip> </el-table-column>
@ -10,11 +11,12 @@
<el-switch v-model="scope.row.state" active-text=" " inactive-text="" :active-value="1" :inactive-value="0" inactive-color="#cccccc" class="demo" @change="state(scope.row)" />
</template>
</el-table-column>
<!-- <el-table-column align="center" prop="statisticsQuarter" label="制度" min-width="90" sortable>
<el-table-column align="center" prop="statisticsQuarter" label="制度" min-width="90" sortable>
<template slot-scope="scope">
<div>{{scope.row.statisticsQuarter==0?'月度':scope.row.statisticsQuarter==1?'半年度':'一年度'}}</div>
</template>
</el-table-column> -->
</el-table-column>
<el-table-column align="center" prop="classRow" label="等级编号" show-overflow-tooltip min-width="90" sortable></el-table-column>
<el-table-column align="center" prop="rechargeStandard" label="充值标准" show-overflow-tooltip min-width="90" sortable></el-table-column>
<el-table-column align="center" prop="courseStandard" label="疗程标准" show-overflow-tooltip min-width="90" sortable></el-table-column>
<el-table-column align="center" prop="cashDecimal" label="收银标准" show-overflow-tooltip min-width="90" sortable></el-table-column>
@ -26,7 +28,7 @@
<template slot-scope="scope">
<el-button @click="edit(scope.row)" v-role="4007203" size="mini" type="primary"></el-button>
</template>
</el-table-column>
</el-table-column>``
<el-table-column align="center" fixed="right" label="删除" width="76">
<template slot-scope="scope">
<el-button size="mini" type="primary" v-role="4007204" @click="del(scope.row)" plain>删除</el-button>
@ -47,6 +49,7 @@ import {
delMemberClass,
pageMemberClass,
editMemberClass,
resetClass,
} from "@/api/storeManage.js";
export default {
components: {
@ -65,6 +68,24 @@ export default {
};
},
methods: {
sum() {
resetClass({}).then((res) => {
if (res.code == "000000") {
this.getData();
this.$message.success({
message: "重算成功!",
});
} else {
this.$alert(res.message, "提示", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
},
//
del(row) {
this.$confirm("此操作将永久删除这个等级, 是否继续?", "提示", {

@ -44,6 +44,8 @@
<template slot-scope="scope">{{scope.row.mobilePhone | phone}}</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" prop="classNum" label="等级编码" min-width="80" :show-overflow-tooltip="true" sortable></el-table-column>
<el-table-column align="center" prop="className" label="等级名称" min-width="80" :show-overflow-tooltip="true" sortable></el-table-column>
<el-table-column align="center" prop="memberStoreName" label="所属门店" min-width="110" :show-overflow-tooltip="true" sortable></el-table-column>
<el-table-column align="center" prop="inputDate" label="创建时间" min-width="100" :show-overflow-tooltip="true" sortable></el-table-column>
<el-table-column align="center" prop="inputBy" label="创建人" min-width="70" :show-overflow-tooltip="true" sortable></el-table-column>

@ -23,7 +23,7 @@ import {
export default {
data() {
return {
tabName: "系统管理",
tabName: "门店管理",
isShow: false,
form: {},
dialogVisible: false, // //
@ -91,20 +91,18 @@ export default {
rolepower({}).then((res) => {
if (res.code == "000000") {
res.data = this.sortByKey(res.data, "id");
let list = []
res.data.forEach((item) => {
if (item.id == 400) {
item.powerName += "(门店)";
if (item.id > 390) {
item.menuList.forEach((items) => {
items.powerId = items.menuId;
items.powerName = items.menuName;
});
item.flag = false;
list.push(item)
}
if (item.id == 300) {
item.powerName += "(平台)";
}
item.menuList.forEach((items) => {
items.powerId = items.menuId;
items.powerName = items.menuName;
});
item.flag = false;
});
this.rolepowerList = res.data;
this.rolepowerList =list
this.getPower();
} else {
this.$alert(res.message, "获取菜单", {

@ -1,6 +1,6 @@
<template>
<el-dialog :close-on-click-modal="false" v-dialogDrag rechargeTypeId="form" title="明细" :visible.sync="dialogFormVisible" :before-close="handleClose">
<el-form :model="form" inline ref="form" label-width="120px">
<el-dialog :close-on-click-modal="false" v-dialogDrag rechargeTypeId="form" width="75vw" title="明细" :visible.sync="dialogFormVisible" :before-close="handleClose">
<el-form :model="form" inline ref="form" label-width="100px">
<el-form-item label="转出手机号:" prop="rollOutMobilePhone">
<div class="form-width-ms">
{{form.rollOutMobilePhone}}
@ -11,10 +11,9 @@
{{form.rollOutMemberName}}
</div>
</el-form-item>
<br>
<el-form-item label="转入手机号:" prop="rollInMemberPhone">
<el-form-item label="转入手机号:" prop="rollInMobilePhone">
<div class="form-width-ms">
{{form.rollInMemberPhone}}
{{form.rollInMobilePhone}}
</div>
</el-form-item>
<el-form-item label="转入会员:" prop="rollInMemberName">
@ -22,47 +21,38 @@
{{form.rollInMemberName}}
</div>
</el-form-item>
<br>
<div v-if="form.type==0">
<el-form-item label="充值编码:" prop="rechargeOrProjectNum">
<div class="form-width-ms">
<span v-if="form.rechargeOrProjectNum" class="text-cyan">{{form.rechargeOrProjectNum}}</span>
</div>
</el-form-item>
<el-form-item label="充值名称:" prop="rechargeOrProjectName">
<div class="form-width-ms">
{{form.rechargeOrProjectName}}
</div>
</el-form-item>
</div>
<div v-else>
<el-form-item label="疗程编码:" prop="rechargeOrProjectNum">
<div class="form-width-ms">
<span v-if="form.rechargeOrProjectNum" class="text-cyan">{{form.rechargeOrProjectNum}}</span>
</div>
</el-form-item>
<el-form-item label="疗程名称:" prop="rechargeOrProjectName">
<div class="form-width-ms">
{{form.rechargeOrProjectName}}
</div>
</el-form-item>
</div>
<el-form-item label="转出金额:" prop="cardRestMoney">
<div class="form-width-ms">
{{form.cardRestMoney}}
</div>
</el-form-item>
<el-form-item label="转出赠送金额:" prop="giftConsumeMoney" v-if="form.type==0">
<div class="form-width-ms">
{{form.giftConsumeMoney}}
</div>
</el-form-item>
<br v-if="form.type==0">
<el-form-item v-if="form.type==1" label="转出次数:" prop="courseRestCount">
<div class="form-width-ms">
{{form.courseRestCount}}
</div>
</el-form-item>
<el-table border :data="list" max-height="500" ref="list" :header-cell-style="{background: 'linear-gradient(#6cb3ff, #1873d4)',color:'#eeeeee'}">
<el-table-column show-overflow-tooltip min-width="120" align="left" prop="rechargeOrProjectNum" label="编码"></el-table-column>
<el-table-column show-overflow-tooltip min-width="120" align="left" prop="rechargeOrProjectName" label="名称"></el-table-column>
<el-table-column show-overflow-tooltip min-width="80" align="left" prop="type" label="类型">
<template slot-scope="scope">
{{scope.row.type==0?'充值卡':'疗程卡'}}
</template>
</el-table-column>
<!-- <el-table-column show-overflow-tooltip min-width="75" align="center" label="剩余金额">
<template slot-scope="scope">
<div>{{scope.row.type==0?scope.row.cardRestMoney:scope.row.courseRestPrice}}</div>
</template>
</el-table-column> -->
<el-table-column show-overflow-tooltip min-width="75" align="center" label="可用金额">
<template slot-scope="scope">
<div>{{scope.row.type==0?scope.row.cardConsumeMoney:scope.row.courseConsumePrice}}</div>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip min-width="80" align="center" prop="cardGiftMoney" label="赠送金额"></el-table-column>
<!-- <el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseRestCount" label="剩余次数"></el-table-column> -->
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseConsumeCount" label="可用次数"></el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="outCardRestMoney" label="转出金额">
</el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="outGiftConsumeMoney" label="转出赠送">
</el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="outCourseRestCount" label="转出次数">
</el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="handleClose"></el-button>
@ -73,9 +63,8 @@
export default {
data() {
return {
form: {
type: 0,
},
form: {},
list: [],
dialogFormVisible: false, //
};
},
@ -83,6 +72,7 @@ export default {
//
show(form) {
this.form = { ...form };
this.list = form.turnMembershipCardMxList;
this.dialogFormVisible = true;
},
//

@ -26,14 +26,7 @@
</div>
</el-form-item>
</el-form>
<el-tabs disabled type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="充值" name="充值">
<rec ref="rec" @recData="recData"></rec>
</el-tab-pane>
<el-tab-pane label="疗程" name="疗程">
<pro ref="pro" @proData="proData"></pro>
</el-tab-pane>
</el-tabs>
<rec ref="rec" @recData="recData"></rec>
<member ref="member" @memberData="memberData"></member>
<div slot="footer" class="dialog-footer">
<el-button size="mini" type="primary" plain @click="handleClose"> </el-button>
@ -48,14 +41,16 @@ import {
couAccountList,
recAccountCashList,
} from "@/api/eashier.js";
import {
addTurnMembershipCardNew,
editTurnMembershipCardNew,
} from "@/api/storeManage.js";
import member from "@/components/member/index";
import rec from "./rec.vue";
import pro from "./pro.vue";
export default {
components: {
rec,
member,
pro,
},
data() {
return {
@ -97,45 +92,15 @@ export default {
dialogFormVisible: false, //
memberNumber: 0, //0 1
memberForm: {}, //
activeName: "",
proList: [],
recList: [],
};
},
methods: {
recData(v) {
console.log(v);
this.recList.forEach((item) => {
v.forEach((items) => {
if (item.id == items.id) {
item = items;
}
});
});
},
proData(v) {
this.proList.forEach((item) => {
v.forEach((items) => {
if (item.id == items.id) {
item = items;
}
});
});
},
//
handleClick(tab, event) {
if (this.memberForm.memberName) {
if (tab.name == "充值") {
this.$refs.rec.show(this.recList);
}
if (tab.name == "疗程") {
this.$refs.pro.show(this.proList);
}
this.activeName = tab.name;
} else {
this.$message.error({ message: "请先选择会员!" });
}
this.recList = [...v];
},
//
handleClose() {
this.form = {};
@ -192,6 +157,7 @@ export default {
form.rollOutMemberName = res.data.memberName;
this.memberForm = res.data;
this.memberForm.memberId = res.data.id;
this.recList = [];
this.getData();
} else {
form.rollInMemberId = res.data.id;
@ -216,9 +182,17 @@ export default {
memberId: this.memberForm.id,
}).then((res) => {
if (res.code == "000000") {
this.recList = res.rows;
res.rows.forEach((item) => {
item.type = 0;
item.accountId = item.id;
item.rechargeOrProjectId = item.rechargeTypeId;
item.rechargeOrProjectNum = item.rechargeTypeNum;
item.rechargeOrProjectName = item.rechargeTypeName;
item.outGiftConsumeMoney = item.cardGiftMoney;
item.outCardRestMoney = item.cardConsumeMoney;
this.recList.push(item);
});
this.$refs.rec.show(this.recList);
this.activeName = "充值";
} else {
this.$alert(res.message, "查询会员卡包", {
confirmButtonText: "确定",
@ -233,7 +207,17 @@ export default {
memberId: this.memberForm.id,
}).then((res) => {
if (res.code == "000000") {
this.proList = res.rows;
res.rows.forEach((item) => {
item.type = 1;
item.accountId = item.id;
item.rechargeOrProjectId = item.courseProjectId;
item.rechargeOrProjectNum = item.courseProjectNum;
item.rechargeOrProjectName = item.courseProjectName;
item.outCourseRestCount = item.courseConsumeCount;
item.outCardRestMoney = item.courseConsumePrice;
this.recList.push(item);
});
this.$refs.rec.show(this.recList);
} else {
this.$alert(res.message, "查询会员疗程", {
confirmButtonText: "确定",
@ -247,20 +231,69 @@ export default {
},
//
show(form, type) {
this.recList = [];
if (form == "添加") {
this.title = form;
this.form.type = type;
} else {
this.title = "修改";
this.form = { ...form };
this.recList = form.turnMembershipCardMxList;
this.recList.forEach((item) => {
item.isShow = true;
});
}
console.log(this.recList);
this.dialogFormVisible = true;
setTimeout(() => {
this.$refs.form.clearValidate();
}, 300);
this.$refs.rec.show(this.recList);
}, 500);
},
//
confirm() {},
confirm() {
let list = [];
this.recList.forEach((item) => {
if (item.isShow) {
list.push(item);
}
});
this.form.turnMembershipCardMxRequestList = list;
if (this.title == "添加") {
addTurnMembershipCardNew(this.form).then((res) => {
if (res.code == "000000") {
this.$message.success({ message: "操作成功!" });
this.dialogFormVisible = false;
this.$emit("editData");
} else {
this.$alert(res.message, "查询会员疗程", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
} else {
editTurnMembershipCardNew(this.form).then((res) => {
if (res.code == "000000") {
this.$message.success({ message: "操作成功!" });
this.dialogFormVisible = false;
this.$emit("editData");
} else {
this.$alert(res.message, "查询会员疗程", {
confirmButtonText: "确定",
confirmButtonClass: "confirmbtnFalses",
type: "warning",
center: true,
callback: (action) => {},
});
}
});
}
},
},
};
</script>

@ -1,66 +0,0 @@
<template>
<el-table border :data="list" max-height="600" ref="list" v-loading="listLoading" :element-loading-text="elementLoadingText" @row-click="getCurrentRow" :row-class-name="rowName" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column show-overflow-tooltip min-width="120" align="left" prop="courseProjectName" label="项目名称"></el-table-column>
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="price" label="项目单价"></el-table-column>
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseRestCount" label="剩余次数"></el-table-column>
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseRestPrice" label="剩余金额"></el-table-column>
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseConsumeCount" label="可用次数"></el-table-column>
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseConsumePrice" label="可用金额"></el-table-column>
<el-table-column show-overflow-tooltip min-width="105" align="center" prop="endTime" label="到期日期"></el-table-column>
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="storeName" label="所属门店"></el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
listLoading: false,
dialogFormVisible: false,
layout: "total, sizes, prev, pager, next, jumper",
form: {}, //
elementLoadingText: "正在加载...",
list: [], //
selection: [],
};
},
methods: {
//
getCurrentRow(row) {
this.$refs["list"].toggleRowSelection(row);
},
//
handleSelectionChange(selection) {
selection.forEach((item) => {
item.isShow = true;
});
this.selection = selection;
console.log(this.selection);
this.$emit("proData", this.selection);
},
//
rowName({ row, rowIndex }) {
row.index = rowIndex;
},
//
save() {
this.$emit("proData", this.selection);
},
//
show(list) {
this.list = [...list];
this.list.forEach((item) => {
if (item.isShow) {
this.$refs["list"].toggleRowSelection(item);
}
});
this.selection = [];
this.dialogFormVisible = true;
},
},
created: function () {},
};
</script>
<style></style>

@ -1,17 +1,41 @@
<template>
<el-table border :data="list" max-height="600" ref="list" v-loading="listLoading" :element-loading-text="elementLoadingText" @row-click="getCurrentRow" :row-class-name="rowName" @selection-change="handleSelectionChange">
<el-table border :data="list" max-height="500" ref="list" v-loading="listLoading" :header-cell-style="{background: 'linear-gradient(#6cb3ff, #1873d4)',color:'#eeeeee'}" :element-loading-text="elementLoadingText" @row-click="getCurrentRow" :row-class-name="rowName" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column show-overflow-tooltip min-width="120" align="left" prop="rechargeTypeName" label="充值卡"></el-table-column>
<el-table-column show-overflow-tooltip min-width="80" align="left" prop="type" label="类别">
<el-table-column show-overflow-tooltip min-width="120" align="left" prop="rechargeOrProjectNum" label="编码"></el-table-column>
<el-table-column show-overflow-tooltip min-width="120" align="left" prop="rechargeOrProjectName" label="名称"></el-table-column>
<el-table-column show-overflow-tooltip min-width="80" align="left" prop="type" label="类型">
<template slot-scope="scope">
{{scope.row.type==0?'赠送卡':scope.row.type==1?'折扣卡':'活动卡'}}
{{scope.row.type==0?'充值卡':'疗程卡'}}
</template>
</el-table-column>
<!-- <el-table-column show-overflow-tooltip min-width="75" align="center" label="剩余金额">
<template slot-scope="scope">
<div>{{scope.row.type==0?scope.row.cardRestMoney:scope.row.courseRestPrice}}</div>
</template>
</el-table-column> -->
<el-table-column show-overflow-tooltip min-width="75" align="center" label="可用金额">
<template slot-scope="scope">
<div>{{scope.row.type==0?scope.row.cardConsumeMoney:scope.row.courseConsumePrice}}</div>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip min-width="80" align="center" prop="cardRestMoney" label="剩余金额"></el-table-column>
<el-table-column show-overflow-tooltip min-width="80" align="center" prop="cardConsumeMoney" label="可用金额"></el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="discount" label="享受优惠(%)"></el-table-column>
<el-table-column show-overflow-tooltip min-width="80" align="center" prop="cardGiftMoney" label="赠送金额"></el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="discountFreeAmount" label="赠送折扣(%)"></el-table-column>
<!-- <el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseRestCount" label="剩余次数"></el-table-column> -->
<el-table-column show-overflow-tooltip min-width="75" align="center" prop="courseConsumeCount" label="可用次数"></el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="outCardRestMoney" label="转出金额">
<template slot-scope="scope">
<el-input type="number" v-model="scope.row.outCardRestMoney"></el-input>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="outGiftConsumeMoney" label="转出赠送">
<template slot-scope="scope">
<el-input :disabled="scope.row.type==1" type="number" v-model="scope.row.outGiftConsumeMoney"></el-input>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip min-width="100" align="center" prop="outCourseRestCount" label="转出次数">
<template slot-scope="scope">
<el-input :disabled="scope.row.type==0" type="number" v-model="scope.row.outCourseRestCount"></el-input>
</template>
</el-table-column>
</el-table>
</template>
<script>
@ -30,6 +54,9 @@ export default {
methods: {
//
getCurrentRow(row) {
let form = this.list[row.index];
form.isShow = !form.isShow;
this.list.splice(row.index, 1, form);
this.$refs["list"].toggleRowSelection(row);
},
//
@ -37,18 +64,12 @@ export default {
selection.forEach((item) => {
item.isShow = true;
});
this.selection = selection;
console.log(this.selection);
this.$emit("recData", this.selection);
this.$emit("recData", this.list);
},
//
rowName({ row, rowIndex }) {
row.index = rowIndex;
},
//
save() {
this.$emit("recData", this.selection);
},
//
show(list) {
this.list = [...list];

@ -5,7 +5,7 @@
<el-button size="mini" type="primary" v-role="40015002" @click="add(0)"></el-button>
</div>
<div>
<el-button size="mini" type="" @click="detail" v-role="40015001"></el-button>
<el-button size="mini" v-if="radioRowValueList.state != undefined" type="" @click="detail" v-role="40015001"></el-button>
<el-button size="mini" type="primary" @click="edit(0)" v-role="40015003" v-if="radioRowValueList.state != undefined&&(radioRowValueList.state==0||radioRowValueList.state==2||radioRowValueList.state==4)" plain>修改</el-button>
<el-button size="mini" type="primary" @click="edit(1)" v-role="40015003" v-if="radioRowValueList.state != undefined&&(radioRowValueList.state==0||radioRowValueList.state==2||radioRowValueList.state==4)"></el-button>
<el-button size="mini" type="primary" @click="edit(2)" v-role="40015003" v-if="radioRowValueList.state != undefined&&(radioRowValueList.state==1)" plain>回收</el-button>
@ -36,22 +36,13 @@
</el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="100" prop="docNum" label="单据号"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="100" prop="docDate" label="日期"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rechargeOrProjectNum" label="编码"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rechargeOrProjectName" label="名称"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rechargeMoney" label="转出">
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rollOutMemberName" label="会员名称"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rollOutMobilePhone" label="手机号码"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="100" prop="rollOutMobilePhone" label="手机号码"></el-table-column>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rechargeMoney" label="转入">
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rollInMemberName" label="会员名称"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="rollInMobilePhone" label="手机号码"></el-table-column>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="cardRestMoney" label="转出金额"></el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="giftConsumeMoney" label="转出赠送">
<template slot-scope="scope">{{scope.row.giftConsumeMoney?scope.row.giftConsumeMoney:'--'}}</template>
</el-table-column>
<el-table-column show-overflow-tooltip align="center" min-width="80" prop="courseRestCount" label="转出次数">
<template slot-scope="scope">{{scope.row.courseRestCount?scope.row.courseRestCount:'--'}}</template>
<el-table-column show-overflow-tooltip align="center" min-width="100" prop="rollInMobilePhone" label="手机号码"></el-table-column>
</el-table-column>
<el-table-column align="center" prop="inputBy" :show-overflow-tooltip="true" label="创建人" min-width="80"></el-table-column>
<el-table-column align="center" prop="inputDate" :show-overflow-tooltip="true" label="创建时间" min-width="100"></el-table-column>
@ -73,7 +64,7 @@
import edit from "./components/edit.vue";
import detail from "./components/detail.vue";
import {
stateTurnMembershipCard,
stateTurnMembershipCardNew,
turnMembershipCardPage,
} from "@/api/storeManage.js";
export default {
@ -112,7 +103,7 @@ export default {
this.$refs.edit.show(this.radioRowValueList);
} else {
let form = { id: this.radioRowValueList.id, state: number };
stateTurnMembershipCard(form).then((res) => {
stateTurnMembershipCardNew(form).then((res) => {
if (res.code == "000000") {
this.radioRowValueList.state = number;
this.$message.success({

@ -4,8 +4,8 @@ import { Message, MessageBox } from "element-ui";
import { getCookie, delCookie } from "./utils.js";
import router from "../router/index.js";
import { name } from "../../config/dev.env.js";
let base = "/api";
let baseURL = base;
// let base = "/api";
// let baseURL = base;
// 根据环境变量对host进行判断
// axios.defaults.baseURL = process.env.baseURL
@ -15,7 +15,7 @@ axios.defaults.headers.post["Content-Type"] = "application/json;charset=UTF-8";
// const rLoading = this.openLoading();
// 创建axios实例
const service = axios.create({
baseURL: baseURL,
// baseURL: baseURL,
timeout: 15000 // 请求超时时间
});
// request拦截器

@ -1,27 +1,27 @@
// A custom Nightwatch assertion.
// The assertion name is the filename.
// Example usage:
//
// browser.assert.elementCount(selector, count)
//
// For more information on custom assertions see:
// http://nightwatchjs.org/guide#writing-custom-assertions
exports.assertion = function (selector, count) {
this.message = 'Testing if element <' + selector + '> has count: ' + count
this.expected = count
this.pass = function (val) {
return val === this.expected
}
this.value = function (res) {
return res.value
}
this.command = function (cb) {
var self = this
return this.api.execute(function (selector) {
return document.querySelectorAll(selector).length
}, [selector], function (res) {
cb.call(self, res)
})
}
}
// A custom Nightwatch assertion.
// The assertion name is the filename.
// Example usage:
//
// browser.assert.elementCount(selector, count)
//
// For more information on custom assertions see:
// http://nightwatchjs.org/guide#writing-custom-assertions
exports.assertion = function (selector, count) {
this.message = 'Testing if element <' + selector + '> has count: ' + count
this.expected = count
this.pass = function (val) {
return val === this.expected
}
this.value = function (res) {
return res.value
}
this.command = function (cb) {
var self = this
return this.api.execute(function (selector) {
return document.querySelectorAll(selector).length
}, [selector], function (res) {
cb.call(self, res)
})
}
}

@ -1,46 +1,46 @@
require('babel-register')
var config = require('../../config')
// http://nightwatchjs.org/gettingstarted#settings-file
module.exports = {
src_folders: ['test/e2e/specs'],
output_folder: 'test/e2e/reports',
custom_assertions_path: ['test/e2e/custom-assertions'],
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}
require('babel-register')
var config = require('../../config')
// http://nightwatchjs.org/gettingstarted#settings-file
module.exports = {
src_folders: ['test/e2e/specs'],
output_folder: 'test/e2e/reports',
custom_assertions_path: ['test/e2e/custom-assertions'],
selenium: {
start_process: true,
server_path: require('selenium-server').path,
host: '127.0.0.1',
port: 4444,
cli_args: {
'webdriver.chrome.driver': require('chromedriver').path
}
},
test_settings: {
default: {
selenium_port: 4444,
selenium_host: 'localhost',
silent: true,
globals: {
devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port)
}
},
chrome: {
desiredCapabilities: {
browserName: 'chrome',
javascriptEnabled: true,
acceptSslCerts: true
}
},
firefox: {
desiredCapabilities: {
browserName: 'firefox',
javascriptEnabled: true,
acceptSslCerts: true
}
}
}
}

@ -1,48 +1,48 @@
// 1. start the dev server using production config
process.env.NODE_ENV = 'testing'
const webpack = require('webpack')
const DevServer = require('webpack-dev-server')
const webpackConfig = require('../../build/webpack.prod.conf')
const devConfigPromise = require('../../build/webpack.dev.conf')
let server
devConfigPromise.then(devConfig => {
const devServerOptions = devConfig.devServer
const compiler = webpack(webpackConfig)
server = new DevServer(compiler, devServerOptions)
const port = devServerOptions.port
const host = devServerOptions.host
return server.listen(port, host)
})
.then(() => {
// 2. run the nightwatch test suite against it
// to run in additional browsers:
// 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings"
// 2. add it to the --env flag below
// or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
// For more information on Nightwatch's config file, see
// http://nightwatchjs.org/guide#settings-file
let opts = process.argv.slice(2)
if (opts.indexOf('--config') === -1) {
opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
}
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'chrome'])
}
const spawn = require('cross-spawn')
const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
runner.on('exit', function (code) {
server.close()
process.exit(code)
})
runner.on('error', function (err) {
server.close()
throw err
})
})
// 1. start the dev server using production config
process.env.NODE_ENV = 'testing'
const webpack = require('webpack')
const DevServer = require('webpack-dev-server')
const webpackConfig = require('../../build/webpack.prod.conf')
const devConfigPromise = require('../../build/webpack.dev.conf')
let server
devConfigPromise.then(devConfig => {
const devServerOptions = devConfig.devServer
const compiler = webpack(webpackConfig)
server = new DevServer(compiler, devServerOptions)
const port = devServerOptions.port
const host = devServerOptions.host
return server.listen(port, host)
})
.then(() => {
// 2. run the nightwatch test suite against it
// to run in additional browsers:
// 1. add an entry in test/e2e/nightwatch.conf.js under "test_settings"
// 2. add it to the --env flag below
// or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`
// For more information on Nightwatch's config file, see
// http://nightwatchjs.org/guide#settings-file
let opts = process.argv.slice(2)
if (opts.indexOf('--config') === -1) {
opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js'])
}
if (opts.indexOf('--env') === -1) {
opts = opts.concat(['--env', 'chrome'])
}
const spawn = require('cross-spawn')
const runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' })
runner.on('exit', function (code) {
server.close()
process.exit(code)
})
runner.on('error', function (err) {
server.close()
throw err
})
})

@ -2,18 +2,18 @@
// http://nightwatchjs.org/guide#usage
module.exports = {
"default e2e tests": function(browser) {
'default e2e tests': function (browser) {
// automatically uses dev Server port from /config.index.js
// default: http://localhost:8080
// see nightwatch.conf.js
const devServer = browser.globals.devServerURL;
const devServer = browser.globals.devServerURL
browser
.url(devServer)
// .waitForElementVisible("#app", 5000)
.assert.elementPresent(".hello")
.assert.containsText("h1", "Welcome to Your Vue.js App")
.assert.elementCount("img", 1)
.end();
.waitForElementVisible('#app', 5000)
.assert.elementPresent('.hello')
.assert.containsText('h1', 'Welcome to Your Vue.js App')
.assert.elementCount('img', 1)
.end()
}
};
}

@ -1,7 +1,7 @@
{
"env": {
"jest": true
},
"globals": {
}
}
{
"env": {
"jest": true
},
"globals": {
}
}

@ -1,30 +1,30 @@
const path = require('path')
module.exports = {
rootDir: path.resolve(__dirname, '../../'),
moduleFileExtensions: [
'js',
'json',
'vue'
],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
transform: {
'^.+\\.js$': '<rootDir>/node_modules/babel-jest',
'.*\\.(vue)$': '<rootDir>/node_modules/vue-jest'
},
testPathIgnorePatterns: [
'<rootDir>/test/e2e'
],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
setupFiles: ['<rootDir>/test/unit/setup'],
mapCoverage: true,
coverageDirectory: '<rootDir>/test/unit/coverage',
collectCoverageFrom: [
'src/**/*.{js,vue}',
'!src/main.js',
'!src/router/index.js',
'!**/node_modules/**'
]
}
const path = require('path')
module.exports = {
rootDir: path.resolve(__dirname, '../../'),
moduleFileExtensions: [
'js',
'json',
'vue'
],
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
transform: {
'^.+\\.js$': '<rootDir>/node_modules/babel-jest',
'.*\\.(vue)$': '<rootDir>/node_modules/vue-jest'
},
testPathIgnorePatterns: [
'<rootDir>/test/e2e'
],
snapshotSerializers: ['<rootDir>/node_modules/jest-serializer-vue'],
setupFiles: ['<rootDir>/test/unit/setup'],
mapCoverage: true,
coverageDirectory: '<rootDir>/test/unit/coverage',
collectCoverageFrom: [
'src/**/*.{js,vue}',
'!src/main.js',
'!src/router/index.js',
'!**/node_modules/**'
]
}

@ -1,3 +1,3 @@
import Vue from 'vue'
Vue.config.productionTip = false
import Vue from 'vue'
Vue.config.productionTip = false

@ -1,13 +1,11 @@
import Vue from "vue";
import HelloWorld from "@/components/HelloWorld";
import Vue from 'vue'
import HelloWorld from '@/components/HelloWorld'
describe("HelloWorld.vue", () => {
it("should render correct contents", () => {
const Constructor = Vue.extend(HelloWorld);
const vm = new Constructor().$mount();
expect(vm.$el.querySelector(".hello h1").textContent).toEqual(
"Welcome to Your Vue.js App"
);
});
});
describe('HelloWorld.vue', () => {
it('should render correct contents', () => {
const Constructor = Vue.extend(HelloWorld)
const vm = new Constructor().$mount()
expect(vm.$el.querySelector('.hello h1').textContent)
.toEqual('Welcome to Your Vue.js App')
})
})

Loading…
Cancel
Save