Merge branch 'master' of gitee.com:beijing_hongye_huicheng/lilishop-ui into fengtianyangyang

master
paulGao 2022-02-09 10:32:50 +08:00
commit 9765310136
6 changed files with 373 additions and 306 deletions

View File

@ -157,6 +157,6 @@ export default {
position: relative;
height: 0px;
top: -38px;
left: 339px;
left: 352px;
}
</style>

View File

@ -4,8 +4,14 @@
<div class="mb_10">
<Button @click="addParent" icon="md-add">添加一级分类</Button>
</div>
<Table class="table" :load-data="handleLoadData" row-key="id" :loading="loading" :data="tableData"
:columns="columns">
<Table
class="table"
:load-data="handleLoadData"
row-key="id"
:loading="loading"
:data="tableData"
:columns="columns"
>
<template slot="action" slot-scope="scope">
<Dropdown v-show="scope.row.level == 2" trigger="click">
<Button size="small">
@ -13,9 +19,15 @@
<Icon type="ios-arrow-down"></Icon>
</Button>
<DropdownMenu slot="list">
<DropdownItem @click.native="brandOperation(scope.row)">编辑绑定品牌</DropdownItem>
<DropdownItem @click.native="specOperation(scope.row)">编辑绑定规格</DropdownItem>
<DropdownItem @click.native="parameterOperation(scope.row)">编辑绑定参数</DropdownItem>
<DropdownItem @click.native="brandOperation(scope.row)"
>编辑绑定品牌</DropdownItem
>
<DropdownItem @click.native="specOperation(scope.row)"
>编辑绑定规格</DropdownItem
>
<DropdownItem @click.native="parameterOperation(scope.row)"
>编辑绑定参数</DropdownItem
>
</DropdownMenu>
</Dropdown>
@ -27,14 +39,28 @@
</Button>
<DropdownMenu slot="list">
<DropdownItem @click.native="edit(scope.row)">编辑</DropdownItem>
<DropdownItem v-if="scope.row.deleteFlag == 1" @click.native="enable(scope.row)"></DropdownItem>
<DropdownItem v-if="scope.row.deleteFlag == 0" @click.native="disable(scope.row)"></DropdownItem>
<DropdownItem
v-if="scope.row.deleteFlag == 1"
@click.native="enable(scope.row)"
>启用</DropdownItem
>
<DropdownItem
v-if="scope.row.deleteFlag == 0"
@click.native="disable(scope.row)"
>禁用</DropdownItem
>
<DropdownItem @click.native="remove(scope.row)">删除</DropdownItem>
</DropdownMenu>
</Dropdown>
&nbsp;
<Button v-show="scope.row.level != 2" type="primary" @click="addChildren(scope.row)" size="small"
icon="md-add" style="margin-right: 5px">添加子分类
<Button
v-show="scope.row.level != 2"
type="primary"
@click="addChildren(scope.row)"
size="small"
icon="md-add"
style="margin-right: 5px"
>添加子分类
</Button>
</template>
@ -42,18 +68,31 @@
{{ scope.row.commissionRate }}%
</template>
<template slot="deleteFlag" slot-scope="{row}">
<Tag :class="{'ml_10': row.deleteFlag}" :color="row.deleteFlag == false ? 'success' : 'error'">
{{row.deleteFlag == false ? '正常启用' : '禁用'}}</Tag>
<template slot="deleteFlag" slot-scope="{ row }">
<Tag
:class="{ ml_10: row.deleteFlag }"
:color="row.deleteFlag == false ? 'success' : 'error'"
>
{{ row.deleteFlag == false ? "正常启用" : "禁用" }}</Tag
>
</template>
</Table>
<Modal :title="modalTitle" v-model="modalVisible" :mask-closable="false" :width="500">
<Modal
:title="modalTitle"
v-model="modalVisible"
:mask-closable="false"
:width="500"
>
<Form ref="form" :model="formAdd" :label-width="100" :rules="formValidate">
<div v-if="showParent">
<FormItem label="上级分类" prop="parentId">
{{ parentTitle }}
<Input v-model="formAdd.parentId" clearable style="width: 100%; display: none" />
<Input
v-model="formAdd.parentId"
clearable
style="width: 100%; display: none"
/>
</FormItem>
</div>
<FormItem label="层级" prop="level" style="display: none">
@ -63,7 +102,10 @@
<Input v-model="formAdd.name" clearable style="width: 100%" />
</FormItem>
<FormItem label="分类图标" prop="image" v-if="formAdd.level !== 1">
<upload-pic-input v-model="formAdd.image" style="width: 100%"></upload-pic-input>
<upload-pic-input
v-model="formAdd.image"
style="width: 100%"
></upload-pic-input>
</FormItem>
<FormItem label="排序值" prop="sortOrder" style="width: 345px">
<InputNumber v-model="formAdd.sortOrder"></InputNumber>
@ -72,7 +114,12 @@
<InputNumber v-model="formAdd.commissionRate"></InputNumber>
</FormItem>
<FormItem label="是否启用" prop="deleteFlag">
<i-switch size="large" v-model="formAdd.deleteFlag" :true-value="0" :false-value="1">
<i-switch
size="large"
v-model="formAdd.deleteFlag"
:true-value="0"
:false-value="1"
>
<span slot="open">启用</span>
<span slot="close">禁用</span>
</i-switch>
@ -84,33 +131,52 @@
</div>
</Modal>
<Modal :title="modalBrandTitle" v-model="modalBrandVisible" :mask-closable="false" :width="500">
<Modal
:title="modalBrandTitle"
v-model="modalBrandVisible"
:mask-closable="false"
:width="500"
>
<Form ref="brandForm" :model="brandForm" :label-width="100">
<Select v-model="brandForm.categoryBrands" filterable multiple>
<Option v-for="item in brandWay" :value="item.id" :key="item.id">{{ item.name }}</Option>
<Option v-for="item in brandWay" :value="item.id" :key="item.id">{{
item.name
}}</Option>
</Select>
</Form>
<div slot="footer">
<Button type="text" @click="modalBrandVisible = false">取消</Button>
<Button type="primary" :loading="submitLoading" @click="saveCategoryBrand"></Button>
<Button type="primary" :loading="submitLoading" @click="saveCategoryBrand"
>提交</Button
>
</div>
</Modal>
<Modal :title="modalSpecTitle" v-model="modalSpecVisible" :mask-closable="false" :width="500">
<Modal
:title="modalSpecTitle"
v-model="modalSpecVisible"
:mask-closable="false"
:width="500"
>
<Form ref="specForm" :model="specForm" :label-width="100">
<Select v-model="specForm.categorySpecs" multiple>
<Option v-for="item in specifications" :value="item.id" :key="item.id" :label="item.specName">
<Option
v-for="item in specifications"
:value="item.id"
:key="item.id"
:label="item.specName"
>
</Option>
</Select>
</Form>
<div slot="footer">
<Button type="text" @click="modalSpecVisible = false">取消</Button>
<Button type="primary" :loading="submitLoading" @click="saveCategorySpec"></Button>
<Button type="primary" :loading="submitLoading" @click="saveCategorySpec"
>提交</Button
>
</div>
</Modal>
</Card>
</div>
</template>
<script>
@ -170,18 +236,9 @@ export default {
specForm: {}, //
//
formValidate: {
commissionRate: [
regular.REQUIRED,
regular.INTEGER
],
name:[
regular.REQUIRED,
regular.VARCHAR20,
],
sortOrder:[
regular.REQUIRED,
regular.INTEGER
]
commissionRate: [regular.REQUIRED, regular.INTEGER],
name: [regular.REQUIRED, regular.VARCHAR20],
sortOrder: [regular.REQUIRED, regular.INTEGER],
},
columns: [
{
@ -235,7 +292,6 @@ export default {
//
brandOperation(v) {
getCategoryBrandListData(v.id).then((res) => {
console.warn(res);
this.categoryId = v.id;
this.modalBrandTitle = "品牌关联";
this.brandForm.categoryBrands = res.result.map((item) => item.id);
@ -277,7 +333,6 @@ export default {
},
//
addChildren(v) {
console.log(v);
this.modalType = 0;
this.modalTitle = "添加子分类";
this.parentTitle = v.name;
@ -367,7 +422,6 @@ export default {
//
handleLoadData(item, callback) {
console.warn(item);
if (item.level == 0) {
let categoryList = JSON.parse(JSON.stringify(this.categoryList));
categoryList.forEach((val) => {
@ -384,7 +438,6 @@ export default {
});
} else {
this.deepCategoryChildren(item.id, this.categoryList);
console.log(this.checkedCategoryChildren);
setTimeout(() => {
callback(this.checkedCategoryChildren);
}, 1000);
@ -420,8 +473,6 @@ export default {
}
return item;
});
console.log(this.tableData);
}
});
},

View File

@ -304,6 +304,7 @@ export default {
loading: true,
onOk: () => {
API_Member.delMemberReview(v.id).then((res) => {
this.$Modal.remove();
this.$Message.success("修改成功");
this.init();
});

View File

@ -42,12 +42,7 @@
/>
</template>
<template slot-scope="{ row, index }" slot="action">
<Button
type="error"
size="small"
@click="delGoods(index,row)"
>删除
</Button>
<Button type="error" size="small" @click="delGoods(index, row)">删除 </Button>
</template>
</Table>
<Row type="flex" justify="end" class="mt_10">
@ -68,244 +63,247 @@
</div>
</template>
<script>
import {
seckillGoodsList,
seckillDetail,
auditApplySeckill,
delSeckillGoods
} from "@/api/promotion.js";
import {
seckillGoodsList,
seckillDetail,
auditApplySeckill,
delSeckillGoods,
} from "@/api/promotion.js";
export default {
data() {
return {
promotionStatus: "", //
showModal: false, // modal
openTip: true, //
loading: false, //
submitLoading: false, //
searchForm: {
//
pageNumber: 0, //
pageSize: 100, //
export default {
data() {
return {
promotionStatus: "", //
showModal: false, // modal
openTip: true, //
loading: false, //
submitLoading: false, //
searchForm: {
//
pageNumber: 0, //
pageSize: 10, //
},
total: 0, //
selectList: [], //
selectCount: 0, //
data: [], //
columns: [
//
{
title: "活动名称",
key: "promotionName",
minWidth: 120,
},
total: 0, //
selectList: [], //
selectCount: 0, //
data: [], //
columns: [ //
{
title: "活动名称",
key: "promotionName",
minWidth: 120,
},
{
title: "活动开始时间",
key: "startTime",
},
{
title: "报名截止时间",
slot: "applyEndTime",
},
{
title: "时间场次",
slot: "hours",
},
{
title: "活动状态",
key: "promotionStatus",
minWidth: 80,
sortable: false,
render: (h, params) => {
if (params.row.promotionStatus == "NEW") {
return h("div", [
h("Badge", {
props: {
status: "error",
text: "新建",
},
}),
]);
} else if (params.row.promotionStatus == "START") {
return h("div", [
h("Badge", {
props: {
status: "success",
text: "开始",
},
}),
]);
} else if (params.row.promotionStatus == "END") {
return h("div", [
h("Badge", {
props: {
status: "error",
text: "结束",
},
}),
]);
} else if (params.row.promotionStatus == "CLOSE") {
return h("div", [
h("Badge", {
props: {
status: "error",
text: "废弃",
},
}),
]);
}
},
},
],
goodsColumns: [ //
{
title: "商品名称",
key: "goodsName",
minWidth: 120,
tooltip: true
},
{
title: "商品价格",
slot: "originalPrice",
width: 110,
},
{
title: "库存",
slot: "quantity",
minWidth: 30,
width: 90
},
{
title: "活动价格",
slot: "price",
width: 100,
},
{
title: "商家名称",
key: "storeName",
minWidth: 100,
tooltip: true
},
{
title: "活动场次",
width: 100,
slot: "time",
},
// {
// title: "",
// slot: "promotionApplyStatus",
// width: 90,
// },
{
title: "操作",
slot: "action",
width: 150,
align: "center",
},
],
goodsList: [], //
params: { //
seckillId: this.$route.query.id,
applyStatus: "PASS",
failReason: "",
ids: "",
{
title: "活动开始时间",
key: "startTime",
},
rules: { //
failReason: [{required: true, message: "请输入拒绝原因"}],
{
title: "报名截止时间",
slot: "applyEndTime",
},
};
},
methods: {
//
init() {
this.getSeckillMsg();
},
//
changePage(v) {
this.searchForm.pageNumber = v;
this.getDataList();
this.clearSelectAll();
},
//
changePageSize(v) {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = v;
this.getDataList();
},
//
clearSelectAll() {
this.$refs.table.selectAll(false);
},
getDataList() {
//
this.loading = true;
this.searchForm.seckillId = this.$route.query.id;
seckillGoodsList(this.searchForm).then((res) => {
this.loading = false;
if (res.success && res.result) {
this.goodsList = res.result.records;
this.total = res.result.total;
}
});
},
getSeckillMsg() {
//
seckillDetail(this.$route.query.id).then((res) => {
if (res.success && res.result) {
this.data = [];
this.data.push(res.result);
this.promotionStatus = res.result.promotionStatus;
this.getDataList();
}
});
},
delGoods(index, row) {
//
this.$Modal.confirm({
title: "确认删除",
content: "您确认要删除该商品吗?删除后不可恢复",
onOk: () => {
const params = {
seckillId: row.seckillId,
id: row.id
{
title: "时间场次",
slot: "hours",
},
{
title: "活动状态",
key: "promotionStatus",
minWidth: 80,
sortable: false,
render: (h, params) => {
if (params.row.promotionStatus == "NEW") {
return h("div", [
h("Badge", {
props: {
status: "error",
text: "新建",
},
}),
]);
} else if (params.row.promotionStatus == "START") {
return h("div", [
h("Badge", {
props: {
status: "success",
text: "开始",
},
}),
]);
} else if (params.row.promotionStatus == "END") {
return h("div", [
h("Badge", {
props: {
status: "error",
text: "结束",
},
}),
]);
} else if (params.row.promotionStatus == "CLOSE") {
return h("div", [
h("Badge", {
props: {
status: "error",
text: "废弃",
},
}),
]);
}
delSeckillGoods(params).then(res => {
if (res.success) {
this.goodsList.splice(index, 1);
this.$Message.success("删除成功!");
}
})
},
});
},
],
goodsColumns: [
//
{
title: "商品名称",
key: "goodsName",
minWidth: 120,
tooltip: true,
},
{
title: "商品价格",
slot: "originalPrice",
width: 110,
},
{
title: "库存",
slot: "quantity",
minWidth: 30,
width: 90,
},
{
title: "活动价格",
slot: "price",
width: 100,
},
{
title: "商家名称",
key: "storeName",
minWidth: 100,
tooltip: true,
},
{
title: "活动场次",
width: 100,
slot: "time",
},
// {
// title: "",
// slot: "promotionApplyStatus",
// width: 90,
// },
{
title: "操作",
slot: "action",
width: 150,
align: "center",
},
],
goodsList: [], //
params: {
//
seckillId: this.$route.query.id,
applyStatus: "PASS",
failReason: "",
ids: "",
},
unixDate(time) {
//
return this.$options.filters.unixToDate(new Date(time) / 1000);
rules: {
//
failReason: [{ required: true, message: "请输入拒绝原因" }],
},
unixHours(item) {
//
let hourArr = item.split(",");
for (let i = 0; i < hourArr.length; i++) {
hourArr[i] += ":00";
};
},
methods: {
//
init() {
this.getSeckillMsg();
},
//
changePage(v) {
this.searchForm.pageNumber = v;
this.getDataList();
this.clearSelectAll();
},
//
changePageSize(v) {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = v;
this.getDataList();
},
//
clearSelectAll() {
this.$refs.table.selectAll(false);
},
getDataList() {
//
this.loading = true;
this.searchForm.seckillId = this.$route.query.id;
seckillGoodsList(this.searchForm).then((res) => {
this.loading = false;
if (res.success && res.result) {
this.goodsList = res.result.records;
this.total = res.result.total;
}
return hourArr;
});
},
getSeckillMsg() {
//
seckillDetail(this.$route.query.id).then((res) => {
if (res.success && res.result) {
this.data = [];
this.data.push(res.result);
this.promotionStatus = res.result.promotionStatus;
this.getDataList();
}
});
},
delGoods(index, row) {
//
this.$Modal.confirm({
title: "确认删除",
content: "您确认要删除该商品吗?删除后不可恢复",
onOk: () => {
const params = {
seckillId: row.seckillId,
id: row.id,
};
delSeckillGoods(params).then((res) => {
if (res.success) {
this.goodsList.splice(index, 1);
this.$Message.success("删除成功!");
}
});
},
});
},
unixDate(time) {
//
return this.$options.filters.unixToDate(new Date(time) / 1000);
},
unixHours(item) {
//
let hourArr = item.split(",");
for (let i = 0; i < hourArr.length; i++) {
hourArr[i] += ":00";
}
return hourArr;
},
mounted() {
this.init();
},
};
},
mounted() {
this.init();
},
};
</script>
<style lang="scss" scoped>
.operation {
margin: 10px 0;
}
.operation {
margin: 10px 0;
}
.reason {
cursor: pointer;
color: #2d8cf0;
font-size: 12px;
}
.reason {
cursor: pointer;
color: #2d8cf0;
font-size: 12px;
}
</style>

View File

@ -1,54 +1,58 @@
<template>
<div class="layout">
<Form ref="formValidate" :label-width="150" label-position="right" :model="formValidate" :rules="ruleValidate">
<Form
ref="formValidate"
:label-width="150"
label-position="right"
:model="formValidate"
:rules="ruleValidate"
>
<FormItem label="appId" prop="appId">
<Input class="w200" v-model="formValidate.appId"/>
<Input class="w200" v-model="formValidate.appId" />
<p style="color: red">*APP应用 AppID 非必填</p>
</FormItem>
<FormItem label="mpAppId" prop="mpAppId">
<Input class="w200" v-model="formValidate.mpAppId"/>
<Input class="w200" v-model="formValidate.mpAppId" />
<p style="color: red">*小程序 AppID 非必填</p>
</FormItem>
<FormItem label="serviceAppId" prop="serviceAppId">
<Input class="w200" v-model="formValidate.serviceAppId"/>
<Input class="w200" v-model="formValidate.serviceAppId" />
<p style="color: red">*服务号 AppID 非必填</p>
</FormItem>
<FormItem label="mchId" prop="mchId">
<Input class="w200" v-model="formValidate.mchId"/>
<Input class="w200" v-model="formValidate.mchId" />
</FormItem>
<FormItem label="apiKey3" prop="apiKey3">
<Input v-model="formValidate.apiKey3"/>
<Input v-model="formValidate.apiKey3" />
</FormItem>
<FormItem label="apiclient_cert_p12" class="label-item" prop="apiclient_cert_p12">
<Input v-model="formValidate.apiclient_cert_p12"/>
<Input v-model="formValidate.apiclient_cert_p12" />
</FormItem>
<FormItem label="apiclient_cert_pem" prop="apiclient_cert_pem">
<Input v-model="formValidate.apiclient_cert_pem"/>
<Input v-model="formValidate.apiclient_cert_pem" />
</FormItem>
<FormItem label="apiclient_key" prop="apiclient_key">
<Input v-model="formValidate.apiclient_key"/>
<Input v-model="formValidate.apiclient_key" />
</FormItem>
<FormItem label="serialNumber" prop="serialNumber">
<Input v-model="formValidate.serialNumber"/>
<Input v-model="formValidate.serialNumber" />
</FormItem>
<div class="label-btns">
<Button type="primary" @click="submit('formValidate')"></Button>
</div>
</Form>
</div>
</template>
<script>
import {setSetting} from "@/api/index";
import {handleSubmit} from "../setting/validate";
import { setSetting } from "@/api/index";
import { handleSubmit } from "../setting/validate";
export default {
data() {
return {
ruleValidate: {}, //
formValidate: {},//
formValidate: {}, //
};
},
props: ["res", "type"],
@ -76,10 +80,9 @@ export default {
init() {
this.res = JSON.parse(this.res);
this.$set(this, "formValidate", {...this.res});
this.$set(this, "formValidate", { ...this.res });
Object.keys(this.formValidate).forEach((item) => {
if (item.indexOf("pId") < 0) {
this.ruleValidate[item] = [
{
required: true,
@ -87,7 +90,6 @@ export default {
trigger: "blur",
},
];
}
});
},

View File

@ -1,17 +1,24 @@
<template>
<div class="layout">
<Form ref="formValidate" :label-width="150" label-position="right" :model="formValidate" :rules="ruleValidate">
<FormItem label="积分比率" prop="money">
<FormItem label="消费1元赠送积分" prop="money">
<Input type="number" v-model="formValidate.money">
<span slot="prepend">1积分=</span>
<span slot="append">人民币</span>
<span slot="append">积分</span>
<!-- <span slot="append">人民币</span>-->
</Input>
</FormItem>
<FormItem label="积分抵扣付款" prop="money">
<Input type="number" v-model="formValidate.money">
<span slot="prepend">积分</span>
<span slot="append"> = 1 人民币</span>
</Input>
</FormItem>
<FormItem label="注册账号" prop="register">
<Input type="number" v-model="formValidate.register">
<span slot="append">积分</span>
<span slot="append">积分</span>
</Input>
</FormItem>
<!-- <FormItem label="登录" class="label-item" prop="login">
@ -24,26 +31,28 @@
<FormItem label="每日签到积分" prop="signIn">
<Input type="number" v-model="formValidate.signIn">
<span slot="append">积分</span>
<span slot="append">积分</span>
</Input>
</FormItem>
<FormItem label="订单评价赠送积分" prop="comment">
<Input type="number" v-model="formValidate.comment">
<span slot="append">积分</span>
<span slot="append">积分</span>
</Input>
</FormItem>
<FormItem class="label-item" v-for="(point,index) in formValidate.pointSettingItems" :key="index" :label="'签到设置'+(index+1)">
<FormItem class="label-item" v-for="(point,index) in formValidate.pointSettingItems" :key="index"
:label="'签到设置'+(index+1)">
<div class="label-item">
<InputNumber :min="1" v-model="point.day"></InputNumber>
<InputNumber :min="0" v-model="point.point"></InputNumber>
<InputNumber :min="0" v-model="point.point"></InputNumber>
<Button ghost type="error" @click="delSign(point,index)"></Button>
<span class="ml_10">签到<span class="theme_color">{{point.day}}</span>赠送<span class="theme_color">{{point.point}}</span>积分</span>
<span class="ml_10">签到<span class="theme_color">{{ point.day }}</span>赠送<span
class="theme_color">{{ point.point }}</span>积分</span>
</div>
</FormItem>
@ -58,8 +67,9 @@
</template>
<script>
import { setSetting } from "@/api/index";
import { handleSubmit } from "./validate";
import {setSetting} from "@/api/index";
import {handleSubmit} from "./validate";
export default {
data() {
return {
@ -101,7 +111,7 @@ export default {
}
this.formValidate.pointSettingItems.push({
point: "0",
day: this.formValidate.pointSettingItems.length ,
day: this.formValidate.pointSettingItems.length,
});
},
//
@ -114,7 +124,7 @@ export default {
this.res[item] += "";
});
this.$set(this, "formValidate", { ...this.res });
this.$set(this, "formValidate", {...this.res});
Object.keys(this.formValidate).forEach((item) => {
this.ruleValidate[item] = [
@ -150,22 +160,27 @@ export default {
width: 100px;
margin-right: 5px;
}
> .ivu-input-number:nth-last-of-type(1) {
width: 150px;
margin-right: 5px;
}
> .ivu-input {
width: 100px;
margin: 0 10px;
}
}
/deep/ .ivu-input {
width: 70px !important;
}
.ivu-input-wrapper {
width: 70px;
margin-right: 10px;
}
.label-btns {
/deep/ .ivu-btn {
margin-right: 10px;