中品二期调度
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.
 
 
 
 

647 lines
18 KiB

<template>
<div>
<div class="table-header table-div el-scrollbar">
<ListLayout :table-columns="tableColumns">
<div slot="search" style="margin-top: 5px">
<!--这里放顶部搜索-->
<!-- 搜索部分开始 -->
<el-form
label-width="90px"
:inline="true"
:model="page"
class="search-form"
:size="$store.getters.size"
>
<el-form-item>
<el-select
v-model="page.params.id"
clearable
filterable
remote
reserve-keyword
placeholder="编码/手机/昵称"
:remote-method="userRemoteMethod"
@keyup.enter.native="getByPage"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="
item.phone +
'(' +
(item.nickName ? item.nickName + '-' : '') +
item.userCode +
')'
"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-select
v-model="page.params.globalEnable"
placeholder="全局禁用启用"
clearable
@keyup.enter.native="getByPage"
>
<el-option label="禁用" :value="0" />
<el-option label="启用" :value="1" />
</el-select>
</el-form-item>
<el-form-item>
<el-select
v-model="page.params.userSource"
placeholder="用户系统来源"
clearable
@keyup.enter.native="getByPage"
>
<el-option label="运营管理系统" value="OIL_OMS_WEB" />
<el-option label="小程序" value="MINI_APP" />
<el-option label="中品小程序" value="OIL_MINI_ZP" />
<el-option label="调度运营管理系统" value="OIL_DISPATCH_WEB" />
</el-select>
</el-form-item>
</el-form>
<!-- 搜索部分结束 -->
</div>
<el-row slot="button-group" style="margin-top: 5px">
<el-col :span="16" class="tal">
<el-button
class="group-item"
:size="$store.getters.size"
type="primary"
@click="toAdd"
><svg-icon icon-class="iconxinzeng" /> 添加</el-button
>
</el-col>
<el-col :span="8">
<el-button
type="primary"
:size="$store.getters.size"
icon="el-icon-search"
@click="search"
>查询</el-button
>
<el-button
type="info"
:size="$store.getters.size"
icon="el-icon-refresh"
@click="page.params = {}"
>重置</el-button
>
</el-col>
</el-row>
<div slot="table">
<!--这里放表格和分页-->
<!-- 列表开始 -->
<el-table
:max-height="tableHeight"
:data="dataPage.list"
fit
stripe
style="width: 100%"
:size="$store.getters.size"
@sort-change="sortHandler"
>
<!-- <el-table-column type="selection" width="55" /> -->
<el-table-column label="序号" type="index" :index="indexMethod" />
<template v-for="(item, index) in tableColumns">
<el-table-column
v-if="item.show"
:key="index"
:fixed="item.fixed"
:show-overflow-tooltip="true"
:min-width="item.minWidth"
:width="item.width"
:prop="item.prop"
:sortable="item.sortable"
:label="item.label"
:formatter="item.render"
/>
</template>
<el-table-column fixed="right" label="操作" width="150px">
<template slot-scope="scope">
<el-button
:size="$store.getters.size"
type="text"
@click="handleDetail(scope.row.id)"
><svg-icon icon-class="iconxiangqing1" /> 操作</el-button
>
<el-dropdown>
<el-button type="text">
更多<i class="el-icon-arrow-down el-icon--right" />
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="toUpdate(scope.row.id)">
<el-button :size="$store.getters.size" type="text"
><svg-icon icon-class="iconicon-" /> 编辑</el-button
>
</el-dropdown-item>
<el-dropdown-item
@click.native="toUpdatePwd(scope.row.userCode)"
>
<el-button :size="$store.getters.size" type="text"
><svg-icon icon-class="iconicon-" /> 修改密码</el-button
>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<!-- 列表结束 -->
<!-- 分页组件开始 -->
<div class="page-div">
<el-pagination
:current-page="page.currentPage"
:page-sizes="[15, 20, 30]"
:page-size="page.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="page.totalCount"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
<!-- 分页组件结束 -->
</div>
</ListLayout>
<!-- 修改密码抽屉 -->
<el-drawer
title="修改密码"
class="table-detail-drawer"
:visible.sync="updatePwdDialog"
direction="ltr"
size="55%"
>
<div style="padding: 20px;">
<el-form
ref="form"
:model="updatePwd"
:rules="rules"
label-width="100px"
>
<el-form-item label="新密码" prop="encryptPsw">
<el-input v-model="updatePwd.encryptPsw" style="width: 50%" />
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button @click="updatePwdDialog = false;">取消</el-button>
<el-button type="primary" @click="updatePwdSubmit">提交</el-button>
</div>
</div>>
</el-drawer>
<!-- 添加抽屉 -->
<el-drawer
title="添加"
class="table-detail-drawer"
:visible.sync="addDialog"
direction="ltr"
size="55%"
>
<SysCustomerInfoAdd @getByPage="getByPage" @closeDialog="closeDialog" />
</el-drawer>
<!-- 导出弹窗 -->
<el-dialog
v-el-drag-dialog
title="导出"
:visible.sync="outPutDialog"
width="55%"
>
<SysCustomerInfoOutput
@getByPage="getByPage"
@closeDialog="closeDialog"
/>
</el-dialog>
<!-- 导入弹窗 -->
<el-dialog
v-el-drag-dialog
title="导入"
:visible.sync="importDialog"
width="55%"
>
<SysCustomerInfoImport
@getByPage="getByPage"
@closeDialog="closeDialog"
/>
</el-dialog>
<!-- 修改抽屉 -->
<el-drawer
title="修改"
class="table-detail-drawer"
:visible.sync="updateDialog"
direction="ltr"
size="55%"
>
<SysCustomerInfoUpdate
v-if="updateDialog"
:sys-customer-info="sysCustomerInfo"
@getByPage="getByPage"
@closeDialog="closeDialog"
/>
</el-drawer>
<!-- 详情抽屉 -->
<el-drawer
title="详情"
class="table-detail-drawer"
:visible.sync="showTableDrawer"
direction="ltr"
size="80%"
>
<SysCustomerInfoInfo
v-if="showTableDrawer"
:sys-customer-info="sysCustomerInfo"
@closedialogs="closeDialogs"
/>
</el-drawer>
<!-- 添加基础信息 -->
<el-dialog
v-el-drag-dialog
destroy-on-close
title="添加"
:visible.sync="addInfoDialog"
width="55%"
>
<OilCustomerInfoAdd
:sys-customer-info="sysCustomerInfo"
@getByPage="getByPage"
@closeDialog="closeDialog"
/>
</el-dialog>
<!-- 修改基础信息 -->
<el-dialog
v-el-drag-dialog
destroy-on-close
title="修改"
:visible.sync="updateInfoDialog"
width="55%"
>
<OilCustomerInfoUpdate
:oil-customer-info="oilCustomerInfo"
@getByPage="getByPage"
@closeDialog="closeDialog"
/>
</el-dialog>
</div>
</div>
</template>
<script>
import sysCustomerInfoApi from "@/api/user/sysCustomerInfo";
import oilCustomerInfoApi from "@/api/user/oilCustomerInfo";
import sysSecurityUserPswApi from "@/api/user/sysSecurityUserPsw";
import md5 from "js-md5";
import oilCompanyInfoApi from "@/api/user/oilCompanyInfo";
import SysCustomerInfoAdd from "./SysCustomerInfoAdd";
import SysCustomerInfoUpdate from "./SysCustomerInfoUpdate";
import SysCustomerInfoInfo from "./SysCustomerInfoInfo";
import SysCustomerInfoImport from "./SysCustomerInfoImport";
import SysCustomerInfoOutput from "./SysCustomerInfoOutput";
import OilCustomerInfoAdd from "../info/OilCustomerInfoAdd";
import OilCustomerInfoUpdate from "../info/OilCustomerInfoUpdate";
import { mapGetters } from "vuex";
export default {
components: {
OilCustomerInfoAdd,
OilCustomerInfoUpdate,
SysCustomerInfoAdd,
SysCustomerInfoUpdate,
SysCustomerInfoInfo,
SysCustomerInfoImport,
SysCustomerInfoOutput,
},
data() {
return {
oilCustomerInfo: {},
addInfoDialog: false, // 添加基础信息
updateInfoDialog: false, // 修改基础信息
userList: [],
rules: {
encryptPsw: [
{ required: true, message: "请输入新密码", trigger: "blur" },
{
min: 6,
max: 16,
message: "长度在 6 到 16 个字符",
trigger: "blur",
},
],
},
updatePwdDialog: false, // 修改密码弹窗
importDialog: false, // 导入弹窗
outPutDialog: false, // 导出弹窗
showTableDrawer: false,
page: {
pageSize: 15, // 每页显示条数
currentPage: 1, // 默认页
params: {}, // 查询参数
sorted: {
createTime: "desc",
},
columns: [],
},
updatePwd: {
userCode: undefined,
encryptPsw: undefined,
pswType: "LOGIN_PSW",
},
tableHeight: document.documentElement.clientHeight - 300 - 60,
filters: this.$options.filters,
dataPage: {
// 分页显示page
pageSize: 10, // 每页显示条数
currentPage: 1, // 默认页
params: {
// 查询参数
},
sorted: {},
},
queryCompanyList: [], // 企业列表
tableColumns: [
{
minWidth: 180,
label: "用户",
show: true,
render: (row, column, cell) => {
return (
<div>
<div>
{row.userName || row.nickName}
<span
v-show={!row.userName && !row.nickName}
style="color: #909399;font-style:italic;font-size=12px;"
>
未设置
</span>
--{row.userCode}{" "}
</div>
<div>{row.phone}</div>
</div>
);
},
},
{
prop: "plateNumber",
minWidth: 150,
label: "车牌号",
show: true,
render: (row, column, cell) => {
return (
<div>
<div>
{row.plateNumber}
<span
v-show={!row.plateNumber}
style="color: #909399;font-style:italic;font-size=12px;"
>
未设置
</span>
</div>
</div>
);
},
},
// {
// prop: "balance",
// label: "个人账户",
// minWidth: 150,
// show: true,
// render: (row, column, cell) => {
// return cell || 0;
// },
// },
{
prop: "globalEnable",
minWidth: 120,
label: "禁用启用",
show: true,
render: (row, column, cell) => {
return (
<el-switch
v-model={row.globalEnable}
active-color="#13ce66"
inactive-color="#ff4949"
active-value={1}
inactive-value={0}
disabled
></el-switch>
);
},
},
{
prop: "createTime",
minWidth: 150,
label: "创建时间",
show: true,
render: (row, column, cell) => {
return cell;
},
},
],
addDialog: false, // 添加弹窗
updateDialog: false, // 修改弹窗
sysCustomerInfo: {},
};
},
computed: {
...mapGetters(["sysUserList"]),
},
created() {
this.getByPage();
// 增加监听事件,窗口变化时得到高度。
window.addEventListener("resize", this.getHeight, false);
},
watch:{
updatePwdDialog(n){
if(!n){
this.updatePwd.encryptPsw = ''
}
}
},
methods: {
closeDialogs() {
// this.$res.drawer.closDrawer()
this.showTableDrawer = false;
this.search();
},
companyRemoteMethod(value) {
// 远程搜索企业
if (value) {
oilCompanyInfoApi.getLike(value).then((res) => {
this.queryCompanyList = res.data;
});
}
},
toBaseInfo(row) {
// 处理基础信息
// 查询是否包含基础信息
oilCustomerInfoApi.getByCustomerCode(row.userCode).then((res) => {
if (res.data) {
this.updateInfoDialog = true;
this.oilCustomerInfo = res.data;
} else {
sysCustomerInfoApi.get(row.id).then((data) => {
this.sysCustomerInfo = data.data;
this.addInfoDialog = true;
});
}
});
},
userRemoteMethod(value) {
// 远程搜索
if (value) {
sysCustomerInfoApi.liekQuery(value).then((res) => {
this.userList = res.data;
});
}
},
updatePwdSubmit() {
// 修改密码提交
this.$refs["form"].validate((valid) => {
if (valid) {
const updatePwd = { ...this.updatePwd };
updatePwd.encryptPsw = md5(this.updatePwd.encryptPsw);
sysSecurityUserPswApi.updatePsw(updatePwd).then((res) => {
this.$message.success(res.msg);
this.getByPage();
this.updatePwdDialog = false;
this.updatePwd.encryptPsw = ''
});
}
});
},
toUpdatePwd(userCode) {
// 修改密码弹窗
this.updatePwdDialog = true;
this.updatePwd.userCode = userCode;
},
indexMethod(index) {
return (index + 1) * 1;
},
toImport() {
// 导入
this.importDialog = true;
},
toOutPut() {
// 导出
this.outPutDialog = true;
},
handleDetail(id) {
// 查看行 详情
sysCustomerInfoApi.get(id).then((res) => {
this.sysCustomerInfo = res.data;
this.showTableDrawer = true;
});
},
getHeight() {
// 获取浏览器高度并计算得到表格所用高度。
this.tableHeight = document.documentElement.clientHeight - 300 - 60;
},
search() {
// 搜索
this.page.currentPage = 1;
this.getByPage();
},
toggleSearchAdvance() {
this.searchAdvice = !this.searchAdvice;
},
handleSizeChange(val) {
this.page.pageSize = val;
this.getByPage();
},
handleCurrentChange(val) {
this.page.currentPage = val;
this.getByPage();
},
sortHandler(column) {
// 排序查询
console.log(column);
const key = column.prop;
const value = column.order;
this.page.sorted = {};
this.page.sorted[key] = value;
this.getByPage();
},
toAdd() {
// 跳转到添加
this.sysCustomerInfo = {};
this.addDialog = true;
},
toUpdate(id) {
// 跳转到更新
sysCustomerInfoApi.get(id).then((res) => {
this.sysCustomerInfo = res.data;
this.updateDialog = true;
});
},
toDelete(id) {
// 删除
this.$confirm("确定删除?", "提示", { type: "error" }).then(() => {
sysCustomerInfoApi.deleteById(id).then((res) => {
this.$message.success(res.msg);
this.getByPage();
});
});
},
getByPage() {
// 分页查询
this.addDialog = false;
sysCustomerInfoApi.getDispatchByPages(this.page).then((res) => {
this.dataPage = res.data;
this.page.totalCount = this.dataPage.totalCount;
this.page.totalPage = this.dataPage.totalPage;
});
},
closeDialog() {
this.addDialog = false;
this.updateDialog = false;
this.updateInfoDialog = false;
this.addInfoDialog = false;
},
},
};
</script>
<style scoped>
.handle-button-group {
margin-bottom: 10px;
}
.table-div {
min-height: calc(100vh - 150px);
max-height: calc(100vh - 110px);
position: relative;
overflow-y: scroll;
margin-bottom: 20px;
}
.table-div >>> .header-container {
/* position: sticky;
top: 0rem; */
min-height: 152px;
z-index: 4;
background: #fff;
}
.table-div .el-table__footer-wrapper {
position: fixed !important;
}
.page-div {
/* position: fixed; */
background: #fff;
bottom: 0rem;
z-index: 4;
min-width: 100%;
}
</style>