|
|
|
@ -14,10 +14,6 @@ |
|
|
|
<FormItem style="margin-left: -35px" class="br"> |
|
|
|
<Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button> |
|
|
|
<Button @click="handleReset">重置</Button> |
|
|
|
<a class="drop-down" @click="dropDown"> |
|
|
|
{{ dropDownContent }} |
|
|
|
<Icon :type="dropDownIcon"></Icon> |
|
|
|
</a> |
|
|
|
</FormItem> |
|
|
|
</Form> |
|
|
|
</Row> |
|
|
|
@ -25,18 +21,6 @@ |
|
|
|
<div> |
|
|
|
<Button @click="add" type="primary" icon="md-add">添加店铺</Button> |
|
|
|
<Button @click="delAll" icon="md-trash">批量删除</Button> |
|
|
|
<Dropdown @on-click="handleDropdown"> |
|
|
|
<Button> |
|
|
|
更多操作 |
|
|
|
<Icon type="md-arrow-dropdown" /> |
|
|
|
</Button> |
|
|
|
<DropdownMenu slot="list"> |
|
|
|
<DropdownItem name="reset">重置用户密码</DropdownItem> |
|
|
|
<DropdownItem name="exportData">导出所选数据</DropdownItem> |
|
|
|
<DropdownItem name="exportAll">导出全部数据</DropdownItem> |
|
|
|
<DropdownItem name="importData">导入数据</DropdownItem> |
|
|
|
</DropdownMenu> |
|
|
|
</Dropdown> |
|
|
|
</div> |
|
|
|
<div class="icons"> |
|
|
|
<Tooltip content="刷新" placement="top" transfer> |
|
|
|
@ -73,49 +57,6 @@ |
|
|
|
size="small" show-total show-elevator show-sizer></Page> |
|
|
|
</Row> |
|
|
|
</Card> |
|
|
|
|
|
|
|
<!-- 自定义导出数据 --> |
|
|
|
<Modal v-model="exportModalVisible" :title="exportTitle" :loading="loadingExport" @on-ok="exportCustomData"> |
|
|
|
<Form ref="exportForm" :label-width="100"> |
|
|
|
<FormItem label="导出文件名"> |
|
|
|
<Input v-model="filename" /> |
|
|
|
</FormItem> |
|
|
|
<FormItem label="自定义导出列"> |
|
|
|
<CheckboxGroup v-model="chooseColumns"> |
|
|
|
<Checkbox v-for="(item, i) in exportColumns" :label="item.title" :key="i" :value="item.checked" |
|
|
|
:disabled="item.disabled"></Checkbox> |
|
|
|
</CheckboxGroup> |
|
|
|
</FormItem> |
|
|
|
</Form> |
|
|
|
</Modal> |
|
|
|
<!-- 导入数据 --> |
|
|
|
<Drawer title="导入数据" closable v-model="importModalVisible" width="800" draggable> |
|
|
|
<div style=" |
|
|
|
display: flex; |
|
|
|
justify-content: space-between; |
|
|
|
align-items: center; |
|
|
|
"> |
|
|
|
<Upload action :before-upload="beforeUploadImport" accept=".xls, .xlsx"> |
|
|
|
<Button :loading="reading" icon="ios-cloud-upload-outline" |
|
|
|
style="margin-right: 10px">上传Excel文件</Button> |
|
|
|
<span v-if="uploadfile.name">当前选择文件:{{ uploadfile.name }}</span> |
|
|
|
</Upload> |
|
|
|
<Button @click="clearImportData" icon="md-trash">清空数据</Button> |
|
|
|
</div> |
|
|
|
<Alert type="warning" show-icon>导入前请下载查看导入模版数据文件查看所需字段及说明,确保数据格式正确,不得修改列英文名称</Alert> |
|
|
|
<Table :columns="importColumns" border :height="height" :data="importTableData" ref="importTable"></Table> |
|
|
|
<div class="drawer-footer"> |
|
|
|
<Button @click="downloadTemple" type="info">下载导入模板</Button> |
|
|
|
<div style="position: absolute; right: 15px; display: inline-block"> |
|
|
|
<Button @click="importModalVisible = false">关闭</Button> |
|
|
|
<Button :loading="importLoading" :disabled="importTableData.length <= 0" @click="importData" |
|
|
|
style="margin-left: 8px" type="primary"> |
|
|
|
确认导入 |
|
|
|
<span v-if="importTableData.length > 0">{{ importTableData.length }} 条数据</span> |
|
|
|
</Button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</Drawer> |
|
|
|
<Modal :title="商品列表" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1500"> |
|
|
|
<goodsList ref="goodsPage" v-if="Visiable"></goodsList> |
|
|
|
<div slot="footer" v-show=Visiable> |
|
|
|
@ -150,19 +91,8 @@ |
|
|
|
} from "@/api/index"; |
|
|
|
import departmentChoose from "@/views/my-components/hiver/department-choose"; |
|
|
|
import checkPassword from "@/views/my-components/hiver/check-password"; |
|
|
|
import { |
|
|
|
shortcuts |
|
|
|
} from "@/libs/shortcuts"; |
|
|
|
// 模版导入文件表数据 |
|
|
|
import { |
|
|
|
userColumns, |
|
|
|
userData |
|
|
|
} from "./importTemplate"; |
|
|
|
// 指定导出列数据 |
|
|
|
import { |
|
|
|
exportColumn |
|
|
|
} from "./exportColumn"; |
|
|
|
import excel from "@/libs/excel"; |
|
|
|
|
|
|
|
|
|
|
|
import addEdit from "./addEdit.vue"; |
|
|
|
import mernage from "./mernage.vue"; |
|
|
|
import logisticsAddress from "@/views/app/shop/logisticsAddress.vue"; |
|
|
|
@ -193,7 +123,6 @@ |
|
|
|
courierVisiable:false, |
|
|
|
Visiable:false, |
|
|
|
tableSize: "default", |
|
|
|
height: 510, |
|
|
|
showUser: false, |
|
|
|
showmernage:false, |
|
|
|
showType: "0", |
|
|
|
@ -201,11 +130,6 @@ |
|
|
|
openSearch: true, |
|
|
|
openTip: true, |
|
|
|
loading: true, |
|
|
|
reading: false, |
|
|
|
importLoading: false, |
|
|
|
loadingExport: true, |
|
|
|
exportModalVisible: false, |
|
|
|
importModalVisible: false, |
|
|
|
drop: false, |
|
|
|
dropDownContent: "展开", |
|
|
|
dropDownIcon: "ios-arrow-down", |
|
|
|
@ -233,10 +157,6 @@ |
|
|
|
regionId:JSON.parse(this.getStore("userInfo")).departmentId, |
|
|
|
remark: "", |
|
|
|
}, |
|
|
|
selectDate: null, |
|
|
|
options: { |
|
|
|
shortcuts: shortcuts, |
|
|
|
}, |
|
|
|
form: {}, |
|
|
|
columns: [{ |
|
|
|
type: "selection", |
|
|
|
@ -410,46 +330,13 @@ |
|
|
|
}, |
|
|
|
}, |
|
|
|
], |
|
|
|
exportColumns: exportColumn, |
|
|
|
chooseColumns: [], |
|
|
|
filename: "用户数据", |
|
|
|
exportTitle: "确认导出", |
|
|
|
exportType: "", |
|
|
|
importTableData: [], |
|
|
|
importColumns: [], |
|
|
|
uploadfile: { |
|
|
|
name: "", |
|
|
|
}, |
|
|
|
tempColumns: userColumns, |
|
|
|
tempData: userData, |
|
|
|
data: [], |
|
|
|
takeData:{}, |
|
|
|
exportData: [], |
|
|
|
total: 0, |
|
|
|
}; |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
init() { |
|
|
|
this.getDataList(); |
|
|
|
// 初始化导出列数据 |
|
|
|
let array = []; |
|
|
|
this.exportColumns.forEach((e) => { |
|
|
|
// 指定列限制权限 |
|
|
|
if ( |
|
|
|
!this.getStore("roles").includes("ROLE_ADMIN") && |
|
|
|
e.key == "mobile" |
|
|
|
) { |
|
|
|
e.title = "[无权导出] " + e.title; |
|
|
|
e.disabled = true; |
|
|
|
} else { |
|
|
|
e.disabled = false; |
|
|
|
} |
|
|
|
array.push(e.title); |
|
|
|
}); |
|
|
|
this.chooseColumns = array; |
|
|
|
}, |
|
|
|
handleSelectDep(v) { |
|
|
|
this.searchForm.departmentId = v; |
|
|
|
}, |
|
|
|
changePage(v) { |
|
|
|
this.searchForm.pageNumber = v; |
|
|
|
@ -460,12 +347,6 @@ |
|
|
|
this.searchForm.pageSize = v; |
|
|
|
this.getDataList(); |
|
|
|
}, |
|
|
|
selectDateRange(v) { |
|
|
|
if (v) { |
|
|
|
this.searchForm.startDate = v[0]; |
|
|
|
this.searchForm.endDate = v[1]; |
|
|
|
} |
|
|
|
}, |
|
|
|
changeTableSize(v) { |
|
|
|
this.tableSize = v; |
|
|
|
}, |
|
|
|
@ -501,7 +382,6 @@ |
|
|
|
this.$refs.searchForm.resetFields(); |
|
|
|
this.searchForm.pageNumber = 1; |
|
|
|
this.searchForm.pageSize = 10; |
|
|
|
this.selectDate = null; |
|
|
|
this.searchForm.startDate = ""; |
|
|
|
this.searchForm.endDate = ""; |
|
|
|
this.$refs.dep.clearSelect(); |
|
|
|
@ -517,35 +397,7 @@ |
|
|
|
} |
|
|
|
this.getDataList(); |
|
|
|
}, |
|
|
|
handleDropdown(name) { |
|
|
|
if (name == "reset") { |
|
|
|
if (this.selectList.length <= 0) { |
|
|
|
this.$Message.warning("您还未选择要重置密码的用户"); |
|
|
|
return; |
|
|
|
} |
|
|
|
this.$refs.checkPass.show(); |
|
|
|
} else if (name == "exportData") { |
|
|
|
if (this.selectList.length <= 0) { |
|
|
|
this.$Message.warning("您还未选择要导出的数据"); |
|
|
|
return; |
|
|
|
} |
|
|
|
this.exportType = "part"; |
|
|
|
this.exportModalVisible = true; |
|
|
|
this.exportTitle = |
|
|
|
"确认导出 " + this.selectList.length + " 条数据(付费)"; |
|
|
|
} else if (name == "exportAll") { |
|
|
|
this.exportType = "all"; |
|
|
|
this.exportModalVisible = true; |
|
|
|
this.exportTitle = "确认导出全部 " + this.total + " 条数据(付费)"; |
|
|
|
getAllUserData().then((res) => { |
|
|
|
if (res.success) { |
|
|
|
this.exportData = res.result; |
|
|
|
} |
|
|
|
}); |
|
|
|
} else if (name == "importData") { |
|
|
|
this.importModalVisible = true; |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
resetPass() { |
|
|
|
this.$Modal.confirm({ |
|
|
|
title: "确认重置", |
|
|
|
@ -572,128 +424,13 @@ |
|
|
|
}, |
|
|
|
}); |
|
|
|
}, |
|
|
|
exportCustomData() { |
|
|
|
if (this.filename == "") { |
|
|
|
this.filename = "用户数据"; |
|
|
|
} |
|
|
|
// 判断勾选导出列 |
|
|
|
let exportColumns = []; |
|
|
|
this.exportColumns.forEach((e) => { |
|
|
|
this.chooseColumns.forEach((c) => { |
|
|
|
if (e.title == c && !e.disabled) { |
|
|
|
exportColumns.push(e); |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
this.exportModalVisible = false; |
|
|
|
let title = []; |
|
|
|
let key = []; |
|
|
|
exportColumns.forEach((e) => { |
|
|
|
title.push(e.title); |
|
|
|
key.push(e.key); |
|
|
|
}); |
|
|
|
const params = { |
|
|
|
title: title, |
|
|
|
key: key, |
|
|
|
data: this.exportData, |
|
|
|
autoWidth: true, |
|
|
|
filename: this.filename, |
|
|
|
}; |
|
|
|
excel.export_array_to_excel(params); |
|
|
|
}, |
|
|
|
beforeUploadImport(file) { |
|
|
|
this.uploadfile = file; |
|
|
|
const fileExt = file.name.split(".").pop().toLocaleLowerCase(); |
|
|
|
if (fileExt == "xlsx" || fileExt == "xls") { |
|
|
|
this.readFile(file); |
|
|
|
this.file = file; |
|
|
|
} else { |
|
|
|
this.$Notice.warning({ |
|
|
|
title: "文件类型错误", |
|
|
|
desc: "所选文件‘ " + |
|
|
|
file.name + |
|
|
|
" ’不是EXCEL文件,请选择后缀为.xlsx或者.xls的EXCEL文件。", |
|
|
|
}); |
|
|
|
} |
|
|
|
return false; |
|
|
|
}, |
|
|
|
// 读取文件 |
|
|
|
readFile(file) { |
|
|
|
this.reading = true; |
|
|
|
const reader = new FileReader(); |
|
|
|
reader.readAsArrayBuffer(file); |
|
|
|
reader.onerror = (e) => { |
|
|
|
this.reading = false; |
|
|
|
this.$Message.error("文件读取出错"); |
|
|
|
}; |
|
|
|
reader.onload = (e) => { |
|
|
|
const data = e.target.result; |
|
|
|
const { |
|
|
|
header, |
|
|
|
results |
|
|
|
} = excel.read(data, "array"); |
|
|
|
const tableTitle = header.map((item) => { |
|
|
|
return { |
|
|
|
title: item, |
|
|
|
key: item, |
|
|
|
minWidth: 130, |
|
|
|
align: "center" |
|
|
|
}; |
|
|
|
}); |
|
|
|
this.importTableData = results; |
|
|
|
this.importColumns = tableTitle; |
|
|
|
this.reading = false; |
|
|
|
this.$Message.success("读取数据成功"); |
|
|
|
}; |
|
|
|
}, |
|
|
|
clearImportData() { |
|
|
|
this.importTableData = []; |
|
|
|
this.importColumns = []; |
|
|
|
this.uploadfile = {}; |
|
|
|
}, |
|
|
|
downloadTemple() { |
|
|
|
let title = []; |
|
|
|
let key = []; |
|
|
|
userColumns.forEach((e) => { |
|
|
|
title.push(e.title); |
|
|
|
key.push(e.key); |
|
|
|
}); |
|
|
|
const params = { |
|
|
|
title: title, |
|
|
|
key: key, |
|
|
|
data: userData, |
|
|
|
autoWidth: true, |
|
|
|
filename: "导入用户数据模版", |
|
|
|
}; |
|
|
|
excel.export_array_to_excel(params); |
|
|
|
}, |
|
|
|
importData() { |
|
|
|
this.importLoading = true; |
|
|
|
importUserData(this.importTableData).then((res) => { |
|
|
|
this.importLoading = false; |
|
|
|
if (res.success) { |
|
|
|
this.importModalVisible = false; |
|
|
|
this.getDataList(); |
|
|
|
this.$Modal.info({ |
|
|
|
title: "导入结果", |
|
|
|
content: res.message, |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
showDetail(v) { |
|
|
|
// 转换null为"" |
|
|
|
for (let attr in v) { |
|
|
|
if (v[attr] == null) { |
|
|
|
v[attr] = ""; |
|
|
|
} |
|
|
|
} |
|
|
|
let str = JSON.stringify(v); |
|
|
|
let data = JSON.parse(str); |
|
|
|
this.form = data; |
|
|
|
this.showType = "0"; |
|
|
|
this.showUser = true; |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
findAllRecord(v) { |
|
|
|
this.courierVisiable = true; |
|
|
|
this.$nextTick(() => { |
|
|
|
@ -803,7 +540,6 @@ |
|
|
|
this.drop = !this.drop; |
|
|
|
}, |
|
|
|
showSelect(e) { |
|
|
|
this.exportData = e; |
|
|
|
this.selectList = e; |
|
|
|
}, |
|
|
|
clearSelectAll() { |
|
|
|
@ -836,11 +572,9 @@ |
|
|
|
}); |
|
|
|
}, |
|
|
|
}); |
|
|
|
}, |
|
|
|
} |
|
|
|
}, |
|
|
|
mounted() { |
|
|
|
// 计算高度 |
|
|
|
this.height = Number(document.documentElement.clientHeight - 230); |
|
|
|
this.init(); |
|
|
|
}, |
|
|
|
}; |
|
|
|
|