合并master

This commit is contained in:
lemon橪
2021-05-19 09:51:27 +08:00
47 changed files with 151 additions and 7494 deletions

View File

@@ -1,221 +0,0 @@
<template>
<div>
<div style="display:flex">
<Input
v-model="currentValue"
@on-change="handleChange"
:placeholder="placeholder"
:size="size"
:disabled="disabled"
:readonly="readonly"
:maxlength="maxlength"
:icon="currentValue"
/>
<Button
@click="iconModalVisible=true"
:size="size"
:disabled="disabled"
:icon="icon"
style="margin-left:10px"
>选择图标</Button>
</div>
<Modal
title="选择图标"
v-model="iconModalVisible"
:width="950"
:styles="{top: '30px'}"
footer-hide
:z-index="1060"
>
<div class="icon-search">
<input
type="text"
v-model="key"
:placeholder="tip"
@input="handleInput"
@focus="handleFocus"
@blur="handleBlur"
>
</div>
<div class="icon-block icon-bar">
<div class="icon-wrap" v-for="(item, i) in iconData" :key="i" @click="hanleChoose(item)">
<div class="icons-item">
<Icon :type="item" style="font-size: 32px;"/>
<p>{{item}}</p>
</div>
</div>
</div>
</Modal>
</div>
</template>
<script>
import { icons } from "@/libs/icon";
export default {
name: "iconChoose",
props: {
value: {
type: String,
default: ""
},
size: String,
placeholder: {
type: String,
default: "输入图标名或选择图标"
},
disabled: {
type: Boolean,
default: false
},
readonly: {
type: Boolean,
default: false
},
maxlength: Number,
icon: {
type: String,
default: "md-ionic"
}
},
data() {
return {
iconModalVisible: false, // modal显隐
currentValue: this.value, // 当前值
iconData: [], // icon列表
key: "", // 关键词
tip: "输入英文关键词搜索,比如 success"
};
},
methods: {
init() {
let re = [];
icons.forEach(e => {
e.icons.forEach(item => {
re.push(item);
});
});
this.iconData = re;
},
handleInput() {
if (this.key) {
// 搜索
let re = [];
icons.forEach(e => {
e.tags.forEach(item => {
if (item.indexOf(this.key) >= 0) {
e.icons.forEach(r => {
re.push(r);
});
}
});
});
this.iconData = re;
} else {
this.init();
}
},
handleFocus() {
if (!this.key) {
this.tip = "";
}
},
handleBlur() {
if (!this.key) {
this.tip = "输入英文关键词搜索,比如 success";
}
},
handleChange(v) {
this.$emit("input", this.currentValue);
this.$emit("on-change", this.currentValue);
},
setCurrentValue(value) {
if (value === this.currentValue) {
return;
}
this.currentValue = value;
},
hanleChoose(v) {
this.currentValue = v;
this.$emit("input", this.currentValue);
this.$emit("on-change", this.currentValue);
this.iconModalVisible = false;
}
},
watch: {
value(val) {
this.setCurrentValue(val);
}
},
created() {
this.init();
}
};
</script>
<style lang="scss" scoped>
.icon-search {
position: relative;
margin: 20px auto 30px;
text-align: center;
input {
width: 500px;
box-sizing: border-box;
border: 0;
border-radius: 4px;
background: #f5f5f5;
text-align: center;
font-size: 14px;
outline: none;
margin: 0 auto;
padding: 8px 0;
}
}
.icon-block {
display: flex;
flex-wrap: wrap;
max-height: 500px;
overflow: auto;
}
.icon-bar {
overflow: auto;
overflow-x: hidden;
}
.icon-bar::-webkit-scrollbar {
width: 6px;
height: 6px;
}
.icon-bar::-webkit-scrollbar-thumb {
border-radius: 3px;
background: #c3c3c3;
}
.icon-bar::-webkit-scrollbar-track {
background: #fff;
}
.icon-wrap {
:hover {
color: #1890ff;
transition: color 0.3s;
}
}
.icons-item {
margin: 6px 6px 6px 0;
width: 145px;
text-align: center;
list-style: none;
cursor: pointer;
height: 100px;
color: #5c6b77;
transition: all 0.2s ease;
position: relative;
padding-top: 10px;
p {
padding-top: 15px;
margin: 5px;
font-size: 14px;
}
}
</style>

View File

@@ -459,7 +459,7 @@ export default {
let ids = [];
let list = [];
this.form.promotionGoodsList.forEach((e) => {
ids.push(e.id);
ids.push(e.skuId);
});
item.forEach((e) => {
if (!ids.includes(e.id)) {
@@ -478,7 +478,7 @@ export default {
},
getGoodsCategory(e) {
// 获取级联选择器商品分类id
console.log(e);
// console.log(e);
},
async getCagetoryList() {

View File

@@ -396,7 +396,7 @@ export default {
let ids = [];
let list = [];
this.form.promotionGoodsList.forEach((e) => {
ids.push(e.id);
ids.push(e.skuId);
});
item.forEach((e) => {
if (!ids.includes(e.id)) {

View File

@@ -111,34 +111,9 @@
<Input v-model="form.name"/>
</Tooltip>
</FormItem>
<FormItem
label="图标"
prop="icon"
>
<icon-choose v-model="form.icon"></icon-choose>
</FormItem>
<FormItem label="前端组件" prop="frontRoute" v-if="form.level != 0">
<Input v-model="form.frontRoute"/>
</FormItem>
<FormItem
label="第三方链接"
v-if="form.level == 2"
class="block-tool"
>
<Tooltip
placement="right"
content="前端组件需为 sys/monitor/monitor 时生效"
max-width="300"
transfer
>
<Input
v-model="form.url"
placeholder="http://"
@on-change="changeEditUrl"
/>
</Tooltip>
</FormItem>
<FormItem label="排序值" prop="sortOrder">
<Tooltip
trigger="hover"
@@ -235,34 +210,9 @@
<Input v-model="formAdd.name"/>
</Tooltip>
</FormItem>
<FormItem
label="图标"
prop="icon"
>
<icon-choose v-model="formAdd.icon"></icon-choose>
</FormItem>
<FormItem label="前端组件" prop="frontRoute" v-if="formAdd.level != 0">
<Input v-model="formAdd.frontRoute"/>
</FormItem>
<FormItem
label="第三方链接"
prop="url"
v-if="formAdd.level == 2"
class="block-tool"
>
<Tooltip
placement="right"
content="前端组件需为 sys/monitor/monitor 时生效"
max-width="300"
transfer
>
<Input
v-model="formAdd.url"
placeholder="http://"
@on-change="changeAddUrl"
/>
</Tooltip>
</FormItem>
<FormItem label="排序值" prop="sortOrder">
<Tooltip
trigger="hover"
@@ -296,14 +246,10 @@ import {
deletePermission,
searchPermission,
} from "@/api/index";
import IconChoose from "@/views/my-components/lili/icon-choose";
import util from "@/libs/util.js";
export default {
name: "menu-manage",
components: {
IconChoose,
},
data() {
return {
loading: true, // 加载状态
@@ -322,14 +268,12 @@ export default {
id: "",
title: "",
name: "",
icon: "",
path: "",
frontRoute: "",
parentId: "",
buttonType: "",
sortOrder: 0,
level: 0,
url: "",
showAlways: true,
},
formAdd: { // 添加表单
@@ -340,7 +284,6 @@ export default {
name: [
{required: true, message: "路由英文名不能为空", trigger: "blur"},
],
icon: [{required: true, message: "图标不能为空", trigger: "click"}],
path: [{required: true, message: "路径不能为空", trigger: "blur"}],
frontRoute: [
{required: true, message: "前端组件不能为空", trigger: "blur"},
@@ -363,7 +306,7 @@ export default {
this.getAllList();
},
renderContent(h, {root, node, data}) {
renderContent(h, {root, node, data}) { // 渲染树形结构前面图标
let icon = "";
if (data.level == 0) {
icon = "ios-navigate";

View File

@@ -55,14 +55,14 @@
</div>
<div class="label-btns">
<Button type="primary" @click="submit('formValidate')">保存</Button>
<Button type="primary" style="margin-left: 100px" @click="createIndex()">重新生成所有商品索引</Button>
</div>
</Form>
</div>
</template>
<script>
import { setSetting } from "@/api/index";
import { setSetting,createIndex } from "@/api/index";
import { handleSubmit } from "./validate";
export default {
props: ["res", "type"],
@@ -90,13 +90,23 @@ export default {
this.init();
},
methods: {
//保存
submit(name) {
let that = this;
if( handleSubmit(that, name )){
this.setupSetting()
}
},
//重新生成所有商品索引
createIndex(){
createIndex().then((res) => {
if (res.success) {
this.$Message.success("开始生成!");
} else {
this.$Message.error("服务器异常!");
}
});
},
setupSetting() {
setSetting(this.type, this.formValidate).then((res) => {
if (res.success) {