You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1011 lines
27 KiB

<style lang="less">
@import "@/styles/table-common.less";
@import "./deposit.less";
</style>
<template>
<div class="search">
<Card>
<Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70">
<FormItem label="抢单工编号" prop="workerId">
<Input
type="text"
v-model="searchForm.workerId"
clearable
placeholder="请输入抢单工编号"
style="width: 200px"
/>
</FormItem>
<FormItem label="抢单工名称" prop="workerName">
<Input
type="text"
v-model="searchForm.workerName"
clearable
placeholder="请输入抢单工名称"
style="width: 200px"
/>
</FormItem>
<span v-if="drop">
<FormItem label="接单状态" prop="workerStatus">
<dict dict="workerStatus" v-model="searchForm.workerStatus" style="width: 200px" />
</FormItem>
<FormItem label="电话" prop="mobile">
<Input
type="text"
v-model="searchForm.mobile"
clearable
placeholder="请输入电话"
style="width: 200px"
/>
</FormItem>
<FormItem label="创建时间">
<DatePicker
:options="options"
v-model="selectDate"
type="daterange"
format="yyyy-MM-dd"
clearable
@on-change="selectDateRange"
placeholder="选择起始时间"
style="width: 200px"
></DatePicker>
</FormItem>
</span>
<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>
<Row align="middle" justify="space-between" class="operation">
<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>
<Icon
type="md-refresh"
size="18"
class="item"
@click="getDataList"
/>
</Tooltip>
<Tooltip
:content="openSearch ? '关闭搜索' : '开启搜索'"
placement="top"
transfer
>
<Icon
type="ios-search"
size="18"
class="item tip"
@click="openSearch = !openSearch"
/>
</Tooltip>
<Tooltip
:content="openTip ? '关闭提示' : '开启提示'"
placement="top"
transfer
>
<Icon
type="md-bulb"
size="18"
class="item tip"
@click="openTip = !openTip"
/>
</Tooltip>
<Tooltip content="表格密度" placement="top" transfer>
<Dropdown @on-click="changeTableSize" trigger="click">
<Icon type="md-list" size="18" class="item" />
<DropdownMenu slot="list">
<DropdownItem :selected="tableSize == 'default'" name="default"
>默认</DropdownItem
>
<DropdownItem :selected="tableSize == 'large'" name="large"
>宽松</DropdownItem
>
<DropdownItem :selected="tableSize == 'small'" name="small"
>紧密</DropdownItem
>
</DropdownMenu>
</Dropdown>
</Tooltip>
</div>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
<Table
:loading="loading"
border
:columns="colHidden"
:data="data"
:size="tableSize"
sortable="custom"
@on-sort-change="changeSort"
@on-selection-change="showSelect"
ref="table"
>
</Table>
<Row type="flex" justify="end" class="page">
<Page
:current="searchForm.pageNumber"
:total="total"
:page-size="searchForm.pageSize"
@on-change="changePage"
@on-page-size-change="changePageSize"
:page-size-opts="[10, 20, 50]"
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>
<addEdit
:data="form"
:type="showType"
v-model="showWorker"
@on-submit="getDataList"
/>
<Modal
:title="充值记录明细"
v-model="Visiable"
:mask-closable="false"
:scrollabele="true"
:width="1000"
>
<recharge-one v-if="Visiable" ref="dialog"></recharge-one>
<div slot="footer" v-show=Visiable>
<Button type="text" @click="Visiable = false">关闭</Button>
</div>
</Modal>
<!--
<el-dialog title="弹窗" :visible.sync="Visiable" :append-to-body='true' :modal='true' :modal-append-to-body='true' width="35%">
<recharge-one v-if="Visiable" ref="dialog"></recharge-one>
<div slot="footer" v-show=Visiable>
<Button type="text" @click="Visiable = false">关闭</Button>
</div>
</el-dialog>
-->
</div>
</template>
<script>
import {
getWorkerListData,
enableWorker,
disableWorker,
onLineWorker,
offLineWorker,
deleteWorker,
getAllUserData,
importUserData,
resetUserPass,
getDictDataByType,
} from "@/api/index";
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 dict from "@/views/my-components/hiver/dict";
import rechargeOne from "@/views/app/business/recharge/rechargeOne.vue";
export default {
name: "deposit",
components: {
addEdit,
dict,
rechargeOne,
},
data() {
return {
tableSize: "default",
height: 510,
showWorker: false,
showType: "0",
openSearch: true,
openTip: true,
loading: true,
reading: false,
importLoading: false,
loadingExport: true,
exportModalVisible: false,
importModalVisible: false,
drop: false,
dropDownContent: "展开",
dropDownIcon: "ios-arrow-down",
selectList: [],
searchForm: {
workerId: "",
workerName: "",
workerStatus: "",
mobile: "",
pageNumber: 1,
pageSize: 10,
sort: "createTime",
order: "desc",
startDate: "",
endDate: "",
signPerson: "1",
adminFlag: "1",
},
selectDate: null,
options: {
shortcuts: shortcuts,
},
form: {},
columns: [
{
type: "selection",
width: 60,
align: "center",
fixed: "left",
},
{
type: "index",
width: 60,
align: "center",
fixed: "left",
},
{
title: "抢单工编号",
key: "workerId",
minWidth: 125,
sortable: true,
fixed: "left",
render: (h, params) => {
return h(
"a",
{
on: {
click: () => {
this.showDetail(params.row);
},
},
},
params.row.workerId
);
},
},
{
title: "抢单工名称",
key: "workerName",
minWidth: 125,
sortable: true,
fixed: "left",
},
{
title: "接单状态",
key: "workerStatus",
minWidth: 160,
sortable: true,
//fixed: "left",
render: (h, params) => {
let re = "",
color = "";
if (params.row.workerStatus == 1) {
re = "可抢单";
color = "blue";
} else if (params.row.workerStatus == 2) {
re = "不可接单";
color = "yellow";
} else if (params.row.workerStatus == 3) {
re = "已禁用";
color = "red";
}
return h("div", [
h(
"Tag",
{
props: {
color: color,
},
},
re
),
]);
},
filters: [
{
label: "可抢单",
value: 1,
},
{
label: "不可接单",
value: 2,
},
{
label: "已禁用",
value: 3,
},
],
filterMultiple: false,
filterRemote: (e) => {
let v = "";
if (e.length > 0) {
v = e[0];
}
this.searchForm.workerStatus = v;
this.searchForm.pageNumber = 1;
this.getDataList();
},
},
{
title: "上线状态",
key: "isOnLine",
minWidth: 160,
sortable: true,
//fixed: "left",
render: (h, params) => {
let re = "",
color = "";
if (params.row.isOnLine == 1) {
re = "上线";
color = "green";
} else if (params.row.isOnLine == 0) {
re = "下线";
color = "#D3D3D3";
}
return h("div", [
h(
"Tag",
{
props: {
color: color,
},
},
re
),
]);
},
filters: [
{
label: "上线",
value: 1,
},
{
label: "下线",
value: 0,
}
],
filterMultiple: false,
filterRemote: (e) => {
let v = "";
if (e.length > 0) {
v = e[0];
}
this.searchForm.isOnLine = v;
this.searchForm.pageNumber = 1;
this.getDataList();
},
},
{
title: "押金金额",
key: "depoNum",
width: 200,
align: "center",
hidden: true
},
{
title: "押金余额",
key: "depoBal",
width: 200,
align: "center",
},
{
title: "联系方式",
key: "mobile",
width: 200,
align: "center",
},
{
title: "创建时间",
key: "createTime",
sortable: true,
sortType: "desc",
width: 180,
},
{
title: "操作",
key: "action",
width: 170,
align: "center",
fixed: "right",
render: (h, params) => {
let enableOrDisable = "";
if (params.row.workerStatus == 1) {
enableOrDisable = h(
"a",
{
on: {
click: () => {
this.disable(params.row);
},
},
},
"禁用"
);
} else {
enableOrDisable = h(
"a",
{
on: {
click: () => {
this.enable(params.row);
},
},
},
"恢复"
);
}
let onOrOffLine = "";
if (params.row.isOnLine == 1) {
onOrOffLine = h(
"a",
{
on: {
click: () => {
this.offLine(params.row);
},
},
},
"下线"
);
} else {
onOrOffLine = h(
"a",
{
on: {
click: () => {
this.onLine(params.row);
},
},
},
"上线"
);
}
return h("div", [
h(
"a",
{
on: {
click: () => {
this.edit(params.row);
},
},
},
"编辑"
),
h("Divider", {
props: {
type: "vertical",
},
}),
enableOrDisable,
h("Divider", {
props: {
type: "vertical",
},
}),
onOrOffLine,
h("Divider", {
props: {
type: "vertical",
},
}),
h(
"a",
{
on: {
click: () => {
this.remove(params.row);
},
},
},
"删除"
),h("Divider", {
props: {
type: "vertical",
},
}),h(
"a",
{
on: {
click: () => {
this.findAllRecord(params.row);
},
},
},
"充值记录查询"
),
]);
},
},
],
exportColumns: exportColumn,
chooseColumns: [],
filename: "订单数据",
exportTitle: "确认导出",
exportType: "",
importTableData: [],
importColumns: [],
uploadfile: {
name: "",
},
tempColumns: userColumns,
tempData: userData,
data: [],
exportData: [],
total: 0,
dictData: [],
Visiable: false,
};
},
methods: {
init() {
this.getDataList();
// 初始化导出列数据
let array = [];
this.exportColumns.forEach((e) => {
// 指定列限制权限
//e.disabled = false;
array.push(e.title);
});
this.chooseColumns = array;
},
handleSelectDep(v) {
this.searchForm.departmentId = v;
},
changePage(v) {
this.searchForm.pageNumber = v;
this.getDataList();
this.clearSelectAll();
},
changePageSize(v) {
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;
},
getDataList() {
// 多条件搜索用户列表
this.loading = true;
getWorkerListData(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
this.data = res.result.content;
this.total = res.result.totalElements;
if (this.data.length == 0 && this.searchForm.pageNumber > 1) {
this.searchForm.pageNumber -= 1;
this.getDataList();
}
}
});
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 10;
this.getDataList();
},
handleReset() {
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();
this.searchForm.departmentId = "";
// 重新加载数据
this.getDataList();
},
changeSort(e) {
this.searchForm.sort = e.key;
this.searchForm.order = e.order;
if (e.order == "normal") {
this.searchForm.order = "";
}
this.getDataList();
},
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.showWorker = true;
},
add() {
this.showType = "2";
this.showWorker = true;
},
edit(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 = "1";
this.showWorker = true;
},
enable(v) {
this.$Modal.confirm({
title: "确认恢复",
content: "您确认要恢复抢单工 " + v.workerName + " ?",
loading: true,
onOk: () => {
enableWorker(v.workerId).then((res) => {
this.$Modal.remove();
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
}
});
},
});
},
disable(v) {
this.$Modal.confirm({
title: "确认禁用",
content: "您确认要禁用抢单工 " + v.workerName + " ?",
loading: true,
onOk: () => {
disableWorker(v.workerId).then((res) => {
this.$Modal.remove();
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
}
});
},
});
},
offLine(v) {
this.$Modal.confirm({
title: "确认下线",
content: "您确认要使抢单工 " + v.workerName + " 下线吗?",
loading: true,
onOk: () => {
offLineWorker({
id: v.workerId
}).then((res) => {
this.$Modal.remove();
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
}
});
},
});
},
onLine(v) {
this.$Modal.confirm({
title: "确认上线",
content: "您确认要使抢单工 " + v.workerName + " 上线吗?",
loading: true,
onOk: () => {
onLineWorker({
id: v.workerId
}).then((res) => {
this.$Modal.remove();
if (res.success) {
this.$Message.success("操作成功");
this.getDataList();
}
});
},
});
},
remove(v) {
this.$Modal.confirm({
title: "确认删除",
content: "您确认要删除抢单工 " + v.workerId + " ?",
loading: true,
onOk: () => {
deleteWorker({ ids: v.workerId }).then((res) => {
this.$Modal.remove();
if (res.success) {
this.clearSelectAll();
this.$Message.success("删除成功");
this.getDataList();
}
});
},
});
},
findAllRecord(v) {
this.Visiable=true;
this.$nextTick(()=>{
//这里的dialog与上面dialog-component组件里面的ref属性值是一致的
//init调用的是dialog-component组件里面的init方法
//data是传递给弹窗页面的值
this.$refs.dialog.initRecharge(v);
});
},
dropDown() {
if (this.drop) {
this.dropDownContent = "展开";
this.dropDownIcon = "ios-arrow-down";
} else {
this.dropDownContent = "收起";
this.dropDownIcon = "ios-arrow-up";
}
this.drop = !this.drop;
},
showSelect(e) {
this.exportData = e;
this.selectList = e;
},
clearSelectAll() {
this.$refs.table.selectAll(false);
},
delAll() {
if (this.selectList.length <= 0) {
this.$Message.warning("您还未选择要删除的数据");
return;
}
this.$Modal.confirm({
title: "确认删除",
content: "您确认要删除所选的 " + this.selectList.length + " 条数据?",
loading: true,
onOk: () => {
let ids = "";
this.selectList.forEach(function (e) {
ids += e.id + ",";
});
ids = ids.substring(0, ids.length - 1);
deleteWorker({ ids: ids }).then((res) => {
this.$Modal.remove();
if (res.success) {
this.$Message.success("删除成功");
this.clearSelectAll();
this.getDataList();
}
});
},
});
},
},computed:{
colHidden:function (){
return this.columns.filter(function(e){
return !e.hidden;
})
}
},
mounted() {
// 计算高度
this.height = Number(document.documentElement.clientHeight - 230);
this.init();
},
};
</script>