Files
Xinyue-Search/public/static/admin/js/component.js
T
2024-09-14 17:00:49 +08:00

570 lines
19 KiB
JavaScript

/**
* @description: 图片库
* @param {*}
* @return {*}
*/
Vue.component("Uploads", {
template: '#Upload',
data() {
return {
fullscreenLoading: false,
visible: false,
loading: true,
form: {
page: 1,
per_page: 18
},
dataList: [],
fileList: [],
selectList: [],
postData: PostBase,
multiple: false, //是否支持多选
selected_num: 0, //已选择数量
total_num: 10, //总共可选择数量
}
},
methods: {
save(){
this.visible = false
this.show('', this.selectList,true)
},
show(call,data,type=false){
if (type) return this.call(data);
this.call = call;
this.visible = true
this.multiple = data?data.multiple:0
this.selected_num = data ?data.selected_num:0
this.total_num = data ?data.total_num:10
this.selectList = []
this.getList()
},
select(index){
if(this.multiple){
if (this.dataList.data[index].select) {
this.dataList.data[index].select = false
for (let i = 0; i < this.selectList.length; i++) {
if (this.selectList[i].url == this.dataList.data[index].attach_path) {
this.selectList.splice(i, 1);
}
}
} else {
if(this.selectList.length + this.selected_num >= this.total_num){
return this.$message.error('最多可选择'+ this.total_num+'文件');
}
this.dataList.data[index].select = true
this.selectList.push({
name: this.dataList.data[index].attach_name,
url: this.dataList.data[index].attach_path
})
}
}else{
this.selectList = [];
for (let item of this.dataList.data) {
item.select = false
}
this.dataList.data[index].select = true
this.selectList.push({
name: this.dataList.data[index].attach_name,
url: this.dataList.data[index].attach_path
})
}
},
changeCurrentPage(page) {
this.form.page = page;
this.getList();
},
getList() {
var that = this;
that.loading = true;
axios.post('/admin/attach/getList', Object.assign({}, PostBase, that.form))
.then(function (res) {
that.loading = false;
if (res.data.code == 200) {
for (let item of res.data.data.data) {
item.select = false
for (let items of that.selectList) {
if(item.attach_path == items.url){
item.select = true
}
}
}
that.dataList = res.data.data;
} else {
that.$message.error(res.data.message);
}
})
.catch(function (error) {
that.loading = false;
that.$message.error('服务器内部错误');
console.log(error);
});
},
handleUploadSuccess(res, file) {
this.fullscreenLoading = false;
if (res.code == 200) {
this.$message({
message: res.message,
type: 'success'
});
this.form.page = 1;
this.getList();
} else {
this.$message.error(res.message);
}
},
beforeUpload(file) {
const isImage = file.type === 'image/jpeg' || file.type === 'image/png';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isImage) {
this.$message.error('上传图片只能是 JPG/PNG 格式!');
}
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!');
}
this.fullscreenLoading = true;
return isImage && isLt2M;
},
}
});
/**
* @description: 富文本
* @param {*}
* @return {*}
*/
Vue.component('Ueditors', VueUeditorWrap);
Vue.component("Ueditor", {
template: '#Ueditor',
// 接收父组件传递过来的参数
props: {
value: {
type: String,
default: ''
},
index:{
type: Number,
default: 1
},
},
data() {
return {
config: {
// 编辑器层级的基数,默认是900
zIndex: 9000,
// 编辑器自动被内容撑高
autoHeightEnabled: true,
// 初始容器高度
initialFrameHeight: 280,
// 初始容器宽度
initialFrameWidth: "100%",
// 上传文件接口(这个地址是我为了方便各位体验文件上传功能搭建的临时接口,请勿在生产环境使用!!!部署在国外的服务器,如果无法访问,请自备梯子)
serverUrl: "/admin/attach/uploads",
// 给编辑区域的iframe引入一个css文件
// iframeCssUrl: "static/UEditor/themes/iframe.css",
// 图片操作的浮层开关
imagePopup: false,
// 打开右键菜单功能
enableContextMenu: false,
// 是否保持toolbar的位置不动,默认true
autoFloatEnabled: false,
// 工具栏上的所有的功能按钮和下拉框
toolbars: [[
'source', '|', 'undo', 'redo', '|',
'bold', 'italic', 'underline', 'strikethrough', 'removeformat',
// 纯文本粘贴
'pasteplain', '|', 'forecolor', 'backcolor', 'selectall', 'cleardoc', '|',
'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
'fontsize', '|',
'indent', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'touppercase', 'tolowercase', '|',
'simpleupload',
'insertimage',
// 'insertvideo'
]]
},
content: '',
list: [],
}
},
watch: {
value(newVal) {
this.$emit('input', newVal)
}
},
methods: {
// 注册自定义组件
addCustomButtom(editorId) {
this.setbutton(editorId)
},
setbutton(editorId) {
let _this = this
window.UE.registerUI('simpleupload', function (editor, uiName) {
// 创建一个 button
var btn = new window.UE.ui.Button({
// 按钮的名字
name: uiName,
// 提示
title: '插入图片',
// 需要添加的额外样式,可指定 icon 图标,图标路径参考常见问题 2
cssRules: '',
// 点击时执行的命令
onclick: () => {
// 打开文件选择器
app.$refs.upload.show((e) => {
if (e.length > 0) {
let content = e.map(item => {
return `<p><img src="${item.url}"/></p>`
})
_this.inserthtml(content.join(''))
}
}, {
multiple: true
}, false);
}
})
// 因为你是添加 button,所以需要返回这个 button
return btn
}, -1 /* 指定添加到工具栏上的哪个位置,默认时追加到最后 */ ,editorId /* 指定这个 UI 是哪个编辑器实例上的,默认是页面上所有的编辑器都会添加这个按钮 */)
},
inserthtml (content) {
let editor = this.$refs.Ueditor.editor
editor.execCommand('inserthtml', content)
}
}
});
/**
* @description: 图片选择
* @param {*}
* @return {*}
*/
Vue.component("Single", {
template: '#Single',
data() {
return {
drag:false,
}
},
// 接收父组件传递过来的参数
props: {
value: {
type: String
},
multiple:{ //是否支持多图选择
type: Boolean,
default: false
},
selected_num:{ //已选择的数量
type: Number,
default: 0
},
total_num:{ //总共可选择数量
type: Number,
default: 10
},
},
methods: {
selectimg() {
if (this.multiple) {
app.$refs.upload.show((e) =>{
for (let item of e) {
this.value.push(item.url)
this.$emit('input', this.value);
}
}, {
multiple: true,
selected_num: this.selected_num,
total_num: this.total_num,
}, false);
} else {
app.$refs.upload.show((e) =>{
this.$emit('input', e[0].url);
}, {}, false);
}
},
deles(s) {
if (this.multiple) {
this.value.splice(s,1)
this.$emit('input', this.value);
} else {
this.$emit('input', '');
}
},
//开始拖拽事件
onStart(){
this.drag = true;
},
//拖拽结束事件
onEnd() {
this.drag = false;
this.$emit('input', this.value);
},
}
});
/**
* @description: SKU
* @param {*}
* @return {*}
*/
SkuForm.default.install(Vue);
Vue.component("vue-sku", {
template: '#skuforms',
// 接收父组件传递过来的参数
props: {
},
data() {
return {
inputVisible: false,
inputValue: '',
sourceAttribute: [],
structure: [
{
name: 'goods_price',
type: 'input',
label: '商品价格',
required: true,
validate: (data, index, callback) => {
if (parseFloat(data[index].goods_price) < 0.01) callback(new Error('商品价格不能小于0.01'))
if (isNaN(data[index].goods_price)) callback(new Error('请输入正确的商品价格'))
callback()
}
},
{
name: 'stock',
type: 'input',
label: '库存',
required: true,
validate: (data, index, callback) => {
if ( parseInt(data[index].stock) < 0) callback(new Error('库存不能小于0'))
if (isNaN(data[index].stock)) callback(new Error('请输入正确的库存'))
callback()
}
},
{
name: 'line_price',
type: 'input',
label: '划线价格',
validate: (data, index, callback) => {
if (isNaN(data[index].line_price)) callback(new Error('请输入正确的划线价格'))
callback()
}
},
{
name: 'goods_weight',
type: 'input',
label: '商品重量',
validate: (data, index, callback) => {
if (isNaN(data[index].goods_weight)) callback(new Error('请输入正确的商品重量'))
callback()
}
},
],
attribute: [],
sku: [],
}
},
methods: {
showInput() {
this.inputVisible = true;
this.$nextTick(_ => {
this.$refs.saveTagInput.$refs.input.focus();
});
},
handleInputConfirm() {
let inputValue = this.inputValue;
this.sourceAttribute.push(
{
name: inputValue,
item: []
}
);
this.$refs.skuForm.init()
this.inputVisible = false;
this.inputValue = '';
},
setdata(sku, attribute) {
setTimeout(() => {
this.sourceAttribute = attribute
setTimeout(() => {
this.attribute = attribute
setTimeout(() => {
this.sku = sku
// 切记,必须在 attribute、sku 数据都加载后再执行 init() 方法
this.$refs.skuForm.init()
}, 100)
}, 100)
}, 100)
},
},
});
/**
* @description: 商品库
* @param {*}
* @return {*}
*/
Vue.component("Goodslists", {
template: '#Goodslist',
data() {
return {
fullscreenLoading: false,
visible: false,
loading: true,
form: {
page: 1,
per_page: 5
},
search: {
keyword: "",
filter: "goods_name",
classify: '',
},
dataList: [],
dataList2: [],
selectList: [],
categoryList: [],
postData: PostBase,
cascaderProps: {
value: 'goods_category_id',
label: 'name',
children: 'children',
checkStrictly: true,
emitPath: false
},
}
},
methods: {
save(){
this.visible = false
let data = this.unique2(this.selectList.concat(this.selectList2))
this.$refs.multipleTable.clearSelection();
this.show('', data, true)
},
show(call, data=[], type = false) {
if (type) return this.call(data);
this.call = call;
this.visible = true
this.selectList2 = JSON.parse(JSON.stringify(data));
this.init()
},
handleClose(done) {
this.$refs.multipleTable.clearSelection();
done();
},
cancels() {
this.$refs.multipleTable.clearSelection();
this.visible = false
},
init() {
this.form = {
page: 1,
per_page: 5
}
this.search = {
keyword: "",
filter: "goods_name",
classify: '',
}
this.getcategory()
},
getList_search(val) {
if(val==0){
this.search = {
keyword: "",
filter: "goods_name",
classify: '',
}
}
this.form.page = 1;
this.getList();
},
//获取商品分类
getcategory() {
var that = this;
that.loading = true;
axios.post('/admin/goodsCategory/getList', Object.assign({}, PostBase))
.then(function (response) {
if (response.data.code == CODE_SUCCESS) {
that.getList();
that.categoryList = response.data.data;
} else {
that.$message.error(response.data.message);
}
})
.catch(function (error) {
that.loading = false;
that.$message.error('服务器内部错误');
console.log(error);
});
},
getList() {
var that = this;
that.loading = true;
axios.post('/admin/goods/getList', Object.assign({}, PostBase, that.form, that.search, {
tabPane: 'sale'
}))
.then(function (res) {
that.loading = false;
if (res.data.code == 200) {
that.dataList = res.data.data;
for (let item of that.dataList.data) {
for (let i = 0; i < that.selectList2.length; i++) {
if (item.goods_id == that.selectList2[i]) {
if (that.selectList.indexOf(item.goods_id) == -1) {
that.$nextTick(() => {
that.$refs.multipleTable.toggleRowSelection(item, true);
})
}
that.selectList2.splice(i, 1);
}
}
}
} else {
that.$message.error(res.data.message);
}
})
.catch(function (error) {
that.loading = false;
that.$message.error('服务器内部错误');
});
},
changeSelection(list) {
var that = this;
that.unique(list)
that.selectList = [];
for (var index in list) {
that.selectList.push(list[index].goods_id);
}
},
changeCurrentPage(page) {
this.form.page = page;
this.getList();
},
unique(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i].goods_id==arr[j].goods_id){ //第一个等同于第二个,splice方法删除第二个
arr.splice(j,1);
j--;
}
}
}
return arr;
},
unique2(arr){
for(var i=0; i<arr.length; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i]==arr[j]){ //第一个等同于第二个,splice方法删除第二个
arr.splice(j,1);
j--;
}
}
}
return arr;
}
}
});