zhanbo.xu

feat: 开发功能

import request from "@/utils/request";
// POST
// ​/operationLog​/getOperationLogList
// 查询操作日志列表
export function getOperationLogList(data) {
return request({
url: "/bus-customer/operationLog/getOperationLogList",
method: "post",
data: data,
});
}
import request from "@/utils/request";
// POST
// /mockReceipt/add
// 新增模拟回执
export function add(data) {
return request({
url: "/bus-customer/mockReceipt/add",
method: "post",
data: data,
});
}
// POST
// /mockReceipt/generateReceiptXml
// 生成回执xml
export function generateReceiptXml(data) {
return request({
url: "/bus-customer/mockReceipt/generateReceiptXml",
method: "post",
data: data,
});
}
// POST
// /mockReceipt/search
// 搜索
export function searchList(data) {
return request({
url: "/bus-customer/mockReceipt/search",
method: "post",
data: data,
});
}
// GET
// /mockReceipt/searchOrderNo
// 搜索订单号
export function searchOrderNo(data) {
return request({
url: "/bus-customer/mockReceipt/searchOrderNo",
method: "get",
params: data,
});
}
......@@ -32,3 +32,13 @@ export function updateOperatorPlace(data) {
data: data,
});
}
// GET
// ​/portInfo​/getPortCodeList
// 获取口岸列表作用于条件查询的下拉框
export function getPortCodeList() {
return request({
url: "/bus-customer/portInfo/getPortCodeList",
method: "get",
});
}
......
<svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.937 21.5617H0V1.4375H18.6868V11.4996H17.2493V2.87495H1.43745V20.1243H11.4996L12.937 21.5617Z" fill="#333333"/>
<path d="M16.5307 11.4996C19.2619 11.4996 21.5618 13.7995 21.5618 16.5306C21.5618 19.2618 19.2619 21.5617 16.5307 21.5617C13.7996 21.5617 11.4997 19.2618 11.4997 16.5306C11.4997 13.7995 13.7996 11.4996 16.5307 11.4996ZM16.5307 10.0621C12.9371 10.0621 10.0622 12.937 10.0622 16.5306C10.0622 20.1242 12.9371 22.9991 16.5307 22.9991C20.1243 22.9991 22.9992 20.1242 22.9992 16.5306C22.9992 12.937 20.1243 10.0621 16.5307 10.0621ZM4.31245 0H5.74989V4.31234H4.31245V0ZM12.9371 0H14.3746V4.31234H12.9371V0ZM2.875 7.18723H15.812V8.62467H2.875V7.18723ZM2.875 11.4996H10.0622V12.937H2.875V11.4996ZM2.875 15.8119H8.62478V17.2493H2.875V15.8119Z" fill="#333333"/>
<path d="M20.1248 18.6873H15.8125V12.9375H17.2499V17.2498H20.1248V18.6873Z" fill="#333333"/>
</svg>
<svg width="21" height="23" viewBox="0 0 21 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.6508 17.8358H12.1641C11.6754 17.8358 11.3555 17.5101 11.3555 17.0273C11.3555 16.5387 11.6813 16.2188 12.1641 16.2188H18.6508C19.1395 16.2188 19.4594 16.5445 19.4594 17.0273C19.4594 17.5101 18.9766 17.8358 18.6508 17.8358Z" fill="#333333"/>
<path d="M20.2746 17.8456C20.1117 17.8456 19.7859 17.8456 19.623 17.6827L16.8654 14.9255C16.5396 14.5997 16.5396 14.1169 16.8654 13.7912C17.1912 13.4654 17.6741 13.4654 17.9999 13.7912L20.7574 16.5484C21.0832 16.8741 21.0832 17.3569 20.7574 17.6827C20.6004 17.8456 20.4375 17.8456 20.2746 17.8456Z" fill="#333333"/>
<path d="M17.354 20.5976C17.1911 20.5976 16.8653 20.5976 16.7024 20.4347C16.3766 20.109 16.3766 19.6262 16.7024 19.3004L19.46 16.5432C19.7858 16.2175 20.2686 16.2175 20.5944 16.5432C20.9202 16.869 20.9202 17.3518 20.5944 17.6775L17.8369 20.4347C17.6614 20.5227 17.6798 20.5976 17.354 20.5976ZM11.356 22.0576H1.62312C0.651575 22.0576 0 21.4061 0 20.4347V1.62291C0 0.651491 0.651575 0 1.62312 0H18.1627C19.1342 0 19.7858 0.651491 19.7858 1.62291V9.56878C19.7858 10.0574 19.46 10.3773 18.9771 10.3773C18.4884 10.3773 18.1685 10.0516 18.1685 9.56878V1.62291H1.62312V20.4347H11.1931C11.6818 20.4347 12.1647 20.7605 12.1647 21.2433C12.1647 21.7319 11.676 22.0576 11.356 22.0576Z" fill="#333333"/>
<path d="M13.7884 6.64053H5.51568C5.027 6.64053 4.70703 6.31479 4.70703 5.83198C4.70703 5.34337 5.03282 5.02344 5.51568 5.02344H13.7884C14.277 5.02344 14.597 5.34918 14.597 5.83198C14.597 6.3206 14.2712 6.64053 13.7884 6.64053ZM11.3566 11.3464H5.51568C5.027 11.3464 4.70703 11.0206 4.70703 10.5378C4.70703 10.0492 5.03282 9.7293 5.51568 9.7293H11.3566C11.6824 9.7293 12.1652 10.055 12.1652 10.5378C12.1652 11.0206 11.6766 11.3464 11.3566 11.3464ZM9.57057 16.2093H5.51568C5.027 16.2093 4.70703 15.8836 4.70703 15.4008C4.70703 14.9121 5.03282 14.5922 5.51568 14.5922H9.57057C10.0593 14.5922 10.3792 14.918 10.3792 15.4008C10.3792 15.8836 9.89636 16.2093 9.57057 16.2093Z" fill="#333333"/>
</svg>
......@@ -137,7 +137,6 @@
</template>
<script>
import { addMenu } from "@/api/menu";
import {
getExportArrivalInList,
getExportArrivalInReceipt,
......@@ -352,20 +351,6 @@ export default {
this.loadings.searchLoading = false;
});
},
// 新增菜单用,可以不麻烦后端---------
// addMenuFn() {
// let params = {
// icon: "",
// menuName: "运抵单查询",
// order: 4.4,
// parentMenuId: 90,
// physicalUrl: "/arrival-list",
// url: "",
// };
// addMenu(params).then((res) => {
// console.log(res);
// });
// },
//分页
currentChange(val) {
......
<template>
<el-dialog
class="entryDialog classCUploadDialog"
:title="title"
:visible.sync="outerVisible"
:show-close="false"
width="25%"
:close-on-click-modal="false"
:destroy-on-close="true"
v-loading="loadings.dialogLoading"
@close="close"
>
<div class="modelItem">
<el-form
v-if="type != 'menuChange'"
class="fedexFormStyle"
ref="formData"
:model="formData"
:rules="rules"
label-position="top"
size="small"
>
<Formitem label="角色名称" prop="roleName" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-roleName"
resize="none"
v-model="formData.roleName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-form>
<el-tree
ref="tree"
class="menuTree"
v-else
:data="treeData"
show-checkbox
default-expand-all
node-key="id"
:default-expanded-keys="expandedKeys"
:default-checked-keys="checkedKeys"
:props="defaultProps"
@check="treeCheckChange"
>
</el-tree>
</div>
<div class="dialogOption entrySave">
<el-button
class="entrySaveButton"
:disabled="loadings.submitLoading"
@click="submit"
>确 定</el-button
>
<el-button
class="entrySaveButton"
:disabled="loadings.uploadLoading"
@click="close"
>关 闭</el-button
>
</div>
</el-dialog>
</template>
<script>
import {
addRoleData,
updateRoleData,
updateRoleMenuData,
getMenuByRoleId,
} from "@/api/system/user.js";
import { getRouters } from "@/api/menu";
export default {
props: {
outerVisible: {
type: Boolean,
default: false,
},
title: {
type: String,
default: "新增角色",
},
type: {
type: String,
default: "",
},
active: {
type: Object,
default: null,
},
},
watch: {
outerVisible(val) {
if (val) {
this.loadings.dialogLoading = false;
if (this.type == "update") {
this.formData = this.active;
} else if (this.type == "menuChange") {
this.formData = this.active;
this.searchTreeData();
this.loadCheckedKeys();//加载已绑定的菜单
}
}
},
},
data() {
return {
formData: {
roleName: "",
},
treeData: [],
treeCheckData: [],
expandedKeys: [],
checkedKeys: [],
rules: {
roleName: [
{
required: true,
trigger: "blur",
message: "角色名称不能为空!",
},
],
},
defaultProps: {
children: "children",
label: "label",
},
searchForm: {},
loadings: {
dialogLoading: false,
uploadLoading: false,
submitLoading: false,
},
loadingText: "",
};
},
methods: {
//查询菜单数据
searchTreeData() {
this.loadings.dialogLoading = true;
getRouters()
.then((res) => {
if (res.code === "200") {
let arr = [];
res.data.forEach((item) => {
let status = true;
if (item.parentMenuId == 0) {
let obj = {
id: item.menuId,
label: item.menuName,
children: [],
};
arr.forEach((menuItem) => {
if (menuItem.id == item.menuId) {
status = false;
menuItem.label = item.menuName;
}
});
if (status) {
arr.push(obj);
}
} else {
let obj = {
id: item.menuId,
label: item.menuName,
};
arr.forEach((menuItem) => {
if (menuItem.id == item.parentMenuId) {
status = false;
menuItem.children.push(obj);
}
});
if (status) {
arr.push({
id: item.parentMenuId,
label: "",
children: [obj],
});
}
}
});
this.treeData = arr;
} else {
this.alertWarningMsg(res.message);
}
this.loadings.dialogLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
//数据保存
submit() {
this.loadings.dialogLoading = true;
let obj = {};
if (this.type == "add") {
this.$refs.formData.validate((valid) => {
if (valid) {
obj.roleName = this.formData.roleName;
this.addapi(obj);
} else {
this.loadings.dialogLoading = false;
}
});
} else if (this.type == "update") {
this.$refs.formData.validate((valid) => {
if (valid) {
obj.roleId = this.formData.roleId;
obj.roleName = this.formData.roleName;
this.updateapi(obj);
} else {
this.loadings.dialogLoading = false;
}
});
} else if (this.type == "menuChange") {
obj.menuId = this.treeCheckData; // 使用合并后的选中节点
obj.roleId = this.formData.roleId;
this.menuChangeapi(obj);
}
},
//新增
addapi(val) {
addRoleData(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close();
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
//修改
updateapi(val) {
updateRoleData(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close();
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
//菜单权限修改
menuChangeapi(val) {
updateRoleMenuData(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close();
this.$store.dispatch('GenerateRoutes')
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
treeCheckChange(data, checked) {
console.log(data, checked);
let arr = [];
arr = checked.checkedKeys.concat(checked.halfCheckedKeys);
this.treeCheckData = arr;
},
close() {
this.formData = {
roleName: "",
};
this.checkedKeys = []
this.$emit("close");
},
// 加载已绑定的菜单
loadCheckedKeys() {
if (this.formData.roleId) {
getMenuByRoleId(this.formData.roleId)
.then((res) => {
if (res.code === "200") {
this.checkedKeys = res.data.filter(item => item.isBinding && (item.parentMenuId!=0 ) ).map(item => item.menuId);
//console.log('初始 checkedKeys:', this.checkedKeys);
this.$nextTick(() => {
this.$refs.tree.setCheckedKeys(this.checkedKeys);
this.updateTreeCheckData();
});
} else {
this.alertWarningMsg(res.message);
}
})
.catch((err) => {
console.log(err);
});
}
},
//加载选中的节点及半选中的父节点
updateTreeCheckData() {
const checkedKeys = this.$refs.tree.getCheckedKeys();
const halfCheckedKeys = this.$refs.tree.getHalfCheckedKeys();
this.treeCheckData = checkedKeys.concat(halfCheckedKeys);
//console.log('合并后的 treeCheckData:', this.treeCheckData);
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/styles/variables.scss";
.menuTree {
max-width: 350px;
max-height: 300px;
overflow: auto;
margin: 0 auto;
border: 1px solid #999;
padding: 10px;
}
</style>
<template>
<div class="entrySreach">
<el-form
class="fedexFormStyle fedexformSreach fedexformSreachBottomBorder"
ref="sreachForm"
:model="sreachFormData"
label-position="top"
size="small"
>
<el-row class="row-border">
<el-col :span="5">
<Formitem label="用户ID" prop="userId">
<el-input
type="text"
class="inputShadow"
id="inputInner--userId"
resize="none"
v-model="sreachFormData.userId"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="操作接口" prop="interfaceName">
<el-input
type="text"
class="inputShadow"
id="inputInner--interfaceName"
resize="none"
v-model="sreachFormData.interfaceName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="状态" prop="status">
<el-select
type="text"
id="inputInner--status"
v-model="sreachFormData.status"
clearable
filterable
placeholder=""
>
<el-option
v-for="item in statusList"
:key="item.id"
:label="item.itemChineseName"
:value="item.itemValue"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="操作日期" prop="accessTime">
<el-date-picker
class="inputInner--accessTime"
id="inputInner--accessTime"
v-model="sreachFormData.accessTime"
type="daterange"
format="yyyy-MM-dd"
prefix-icon="none"
value-format="yyyy-MM-dd"
range-separator="至"
@change="dateChange"
/>
</Formitem>
</el-col>
<el-col :span="2">
<el-form-item class="textCenter">
<el-button
class="entrySreachButton"
type="text"
icon="el-icon-search"
:loading="loadings.searchLoading"
@click="search(0)"
></el-button>
</el-form-item>
</el-col>
<el-col :span="2">
<el-form-item class="textLeft textCenter">
<el-button
type="text"
size="small"
icon="el-icon-refresh"
@click="clear"
>
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
<el-row class="row-border">
<el-col :span="5">
<Formitem label="IP地址" prop="ipAddress">
<el-input
type="text"
class="inputShadow"
id="inputInner--ipAddress"
resize="none"
v-model="sreachFormData.ipAddress"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
</el-form>
<div style="height: 20px"></div>
<!-- :maxHeight="tableMaxheight + 'px'" -->
<Table
class="fedexDetialTable fedexSreachTable"
ref="entryTable"
:data="tableData"
:headerData="headerData"
:height="tableMaxheight + 'px'"
:border="true"
:pagination="true"
:order="false"
:loading="loadings.searchLoading"
:page="page.pageIndex"
:pageSizes="[20, 30, 50, 100]"
:totalCount="page.total"
@sizeChange="sizeChange"
@currentChange="currentChange"
:selection="false"
:selectFixed="false"
:rowSelectDataType="false"
>
</Table>
</div>
</template>
<script>
import { getOperationLogList } from "@/api/logSearch-api.js";
import { getDictData } from "@/api/system/dict-api.js";
export default {
name: "SupervisePlaceManage",
components: {},
data() {
return {
sreachFormData: {
userId: "",
interfaceName: "",
status: "",
ipAddress: "",
endAccessTime: "",
startAccessTime: "",
accessTime: [],
},
page: {
pageIndex: 1,
pageSize: 20,
total: 0,
},
tableData: [],
headerData: [
{
name: "用户ID",
value: "userId",
width: "100px",
align: "left",
},
{
name: "操作接口",
value: "interfaceName",
width: "",
align: "left",
},
{
name: "IP地址",
value: "ipAddress",
width: "150px",
align: "left",
},
{
name: "请求参数",
value: "requestParams",
width: "",
align: "left",
},
{
name: "状态",
value: "status",
width: "120px",
align: "left",
},
{
name: "错误信息",
value: "errorMessage",
width: "",
align: "left",
},
{
name: "操作时间",
value: "accessTime",
width: "180px",
align: "left",
},
],
loadings: {
searchLoading: false,
},
tableMaxheight: 500,
statusList: [],
};
},
created() {
this.search(0);
this.calculateTableHeight();
},
mounted() {
this.tableMaxheight = window.innerHeight - 300;
this.fetchStatusList();
window.addEventListener("resize", this.calculateTableHeight);
},
beforeDestroy() {
window.removeEventListener("resize", this.calculateTableHeight);
},
methods: {
calculateTableHeight() {
this.tableMaxheight = window.innerHeight - 300;
},
fetchStatusList() {
getDictData({ doctCode: "RESPONSE_STATE" })
.then((res) => {
if (res.code == "200") {
console.log(res);
this.statusList = res.data;
}
})
.catch((err) => {
console.error(err);
});
},
dateChange(val) {
if (val) {
this.sreachFormData.startAccessTime = val[0];
this.sreachFormData.endAccessTime = val[1];
} else {
this.sreachFormData.startAccessTime = "";
this.sreachFormData.endAccessTime = "";
this.sreachFormData.accessTime = [];
}
},
clear() {
this.$refs.sreachForm.resetFields();
this.search(0);
},
//查询
search(val) {
this.loadings.searchLoading = true;
if (val == 0) {
this.page.pageIndex = 1;
}
let obj = this.sreachFormData;
obj.pageIndex = this.page.pageIndex;
obj.pageSize = this.page.pageSize;
getOperationLogList(obj)
.then((res) => {
if (res.code === "200") {
this.tableData = res.data.value;
this.page.total = res.data.totalItems;
this.tableData.forEach((item, idx) => {
item.index = idx;
});
} else {
this.alertWarningMsg(res.message);
}
this.loadings.searchLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.searchLoading = false;
});
},
//分页
currentChange(val) {
this.page.pageIndex = val.page;
this.search(1);
},
sizeChange(val) {
this.page.pageSize = val;
this.search(1);
},
input() {
this.$forceUpdate();
},
},
};
</script>
<style scoped lang="scss">
@import "@/assets/styles/variables.scss";
.entrySreach {
height: 100%;
background-color: $menuLightBg;
.entrySreachButton {
display: inline-block;
font-size: 20px;
color: $fedexButton !important;
}
.optionButton {
padding: 10px;
text-align: left;
.el-button {
color: $fedexButton;
border-color: $fedexButton !important;
svg {
display: inline-block;
margin-right: 5px;
fill: $fedexButton;
}
}
.entrySaveButton:hover,
.entrySaveButton:focus {
color: $menuLightBg !important;
background-color: $fedexButton !important;
}
}
}
.texttareaTip {
position: absolute;
top: 52%;
right: 20px;
transform: translate(0, -50%);
z-index: 10;
}
</style>
<template>
<el-dialog
class="entryDialog classCUploadDialog"
:title="title"
:visible.sync="outerVisible"
:show-close="false"
width="40%"
:close-on-click-modal="false"
:destroy-on-close="true"
v-loading="loadings.dialogLoading"
@close="close"
>
<div class="modelItem">
<el-form
class="fedexFormStyle"
ref="formData"
:model="formData"
:rules="rules"
label-position="top"
size="small"
>
<el-row :gutter="5">
<el-col :span="8">
<Formitem
label="监管场所经营人代码"
prop="operatorCode"
type="edit"
>
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-operatorCode"
resize="none"
v-model="formData.operatorCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem
label="监管场所经营人名称"
prop="operatorName"
type="edit"
>
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-operatorName"
resize="none"
v-model="formData.operatorName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="所属口岸" prop="portCode" type="edit">
<el-select
type="text"
id="inputInner--portCode"
v-model="formData.portCode"
clearable
filterable
placeholder=""
>
<el-option
v-for="item in portCodeList"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="8">
<Formitem label="监管场所代码" prop="loctNo" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-loctNo"
resize="none"
v-model="formData.loctNo"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem
label="监管场所负责人"
prop="operatorPersonInCharge"
type="edit"
>
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-operatorPersonInCharge"
resize="none"
v-model="formData.operatorPersonInCharge"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="8">
<Formitem label="联系电话" prop="contactNumber" type="edit">
<el-input
type="text"
class="inputShadow"
id="inputInner-edit-contactNumber"
resize="none"
v-model="formData.contactNumber"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
</el-row>
</el-form>
</div>
<div class="dialogOption entrySave">
<el-button
class="entrySaveButton"
:disabled="loadings.submitLoading"
@click="submit"
>确 定</el-button
>
<el-button
class="entrySaveButton"
:disabled="loadings.uploadLoading"
@click="close"
>关 闭</el-button
>
</div>
</el-dialog>
</template>
<script>
import {
addOperatorPlace,
updateOperatorPlace,
} from "@/api/supervisePlaceManage-api.js";
export default {
props: {
outerVisible: {
type: Boolean,
default: false,
},
title: {
type: String,
default: "监管场所管理新增",
},
type: {
type: String,
default: "",
},
active: {
type: Object,
default: null,
},
portCodeList: {
type: Array,
default: () => {
return [];
},
},
},
watch: {
outerVisible(val) {
if (val) {
this.loadings.dialogLoading = false;
if (this.type == "update") {
this.formData = this.active;
}
}
},
},
data() {
return {
formData: {
operatorCode: "",
operatorName: "",
portCode: "",
loctNo: "",
operatorPersonInCharge: "",
contactNumber: "",
},
rules: {
operatorCode: [
{
required: true,
trigger: "blur",
message: "监管场所代码不能为空!",
},
],
operatorName: [
{
required: true,
trigger: "blur",
message: "监管场所负责人不能为空!",
},
],
},
searchForm: {},
loadings: {
dialogLoading: false,
uploadLoading: false,
submitLoading: false,
},
loadingText: "",
};
},
methods: {
//数据保存
submit() {
this.loadings.dialogLoading = true;
let obj = {
...this.formData,
};
if (this.type == "add") {
this.$refs.formData.validate((valid) => {
if (valid) {
this.addapi(obj);
} else {
this.loadings.dialogLoading = false;
}
});
} else if (this.type == "update") {
this.$refs.formData.validate((valid) => {
if (valid) {
obj.id = this.active.id;
this.updateapi(obj);
} else {
this.loadings.dialogLoading = false;
}
});
}
},
//新增
addapi(val) {
addOperatorPlace(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close();
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
//修改
updateapi(val) {
updateOperatorPlace(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close();
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
//菜单权限修改
menuChangeapi(val) {
updateOperatorPlace(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
this.close();
this.$store.dispatch("GenerateRoutes");
} else {
this.alertWarningMsg(res.message);
this.loadings.dialogLoading = false;
}
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
close() {
this.formData = {
operatorCode: "",
operatorName: "",
portCode: "",
loctNo: "",
operatorPersonInCharge: "",
contactNumber: "",
};
this.$emit("close");
},
},
};
</script>
<style lang="scss" scoped>
@import "@/assets/styles/variables.scss";
.menuTree {
max-width: 350px;
max-height: 300px;
overflow: auto;
margin: 0 auto;
border: 1px solid #999;
padding: 10px;
}
</style>
......@@ -10,18 +10,50 @@
<el-row class="row-border">
<!-- 角色名称 -->
<el-col :span="5">
<Formitem label="角色名称" prop="roleName">
<Formitem label="经营人代码" prop="operatorCode">
<el-input
type="text"
class="inputShadow"
id="inputInner--roleName"
id="inputInner--operatorCode"
resize="none"
v-model="sreachFormData.roleName"
v-model="sreachFormData.operatorCode"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="经营人名称" prop="operatorName">
<el-input
type="text"
class="inputShadow"
id="inputInner--operatorName"
resize="none"
v-model="sreachFormData.operatorName"
clearable
placeholder=""
></el-input>
</Formitem>
</el-col>
<el-col :span="5">
<Formitem label="所属口岸" prop="portCode">
<el-select
type="text"
id="inputInner--portCode"
v-model="sreachFormData.portCode"
clearable
filterable
placeholder=""
>
<el-option
v-for="item in portCodeList"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="2">
<el-form-item class="textCenter">
<el-button
......@@ -33,6 +65,19 @@
></el-button>
</el-form-item>
</el-col>
<el-col :span="2">
<!-- 清空查询条件-->
<el-form-item class="textLeft textCenter">
<el-button
type="text"
size="small"
icon="el-icon-refresh"
@click="clear"
>
重置
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="optionButton">
......@@ -42,7 +87,7 @@
size="small"
@click="addRole"
>
新增角色
新增
</el-button>
</div>
<Table
......@@ -67,12 +112,7 @@
<template slot="optionColumn">
<el-table-column align="left" label="操作">
<template slot-scope="scope">
<el-button type="text" @click="update(scope.row)">
角色修改
</el-button>
<el-button type="text" @click="muenChange(scope.row)">
权限绑定
</el-button>
<el-button type="text" @click="update(scope.row)"> 修改 </el-button>
</template>
</el-table-column>
</template>
......@@ -83,23 +123,29 @@
:type="editType"
:active="activeData"
@close="dialogClose"
:portCodeList="portCodeList"
/>
</div>
</template>
<script>
import { getRoleList } from "@/api/system/user.js";
import {
getOperatorPlaceList,
getPortCodeList,
} from "@/api/supervisePlaceManage-api.js";
import { searchList } from "@/api/receiptManagement-api.js";
import DialogVue from "./dialog.vue";
import { addMenu } from "@/api/menu";
export default {
name: "LogList",
name: "SupervisePlaceManage",
components: {
DialogVue,
},
data() {
return {
sreachFormData: {
roleName: "",
portCode: "",
operatorCode: "",
operatorName: "",
},
page: {
pageIndex: 1,
......@@ -110,8 +156,32 @@ export default {
tableData: [],
headerData: [
{
name: "角色名",
value: "roleName",
name: "回执状态",
value: "receiptStatus",
width: "",
align: "left",
},
{
name: "订单编号",
value: "orderNo",
width: "",
align: "left",
},
{
name: "回执类型",
value: "receiptType",
width: "",
align: "left",
},
{
name: "回执文本",
value: "receiptInfo",
width: "",
align: "left",
},
{
name: "创建时间",
value: "createTime",
width: "",
align: "left",
},
......@@ -123,6 +193,7 @@ export default {
outerVisible: false,
dialogTitle: "",
editType: "",
portCodeList: [],
};
},
created() {
......@@ -130,8 +201,25 @@ export default {
},
mounted() {
this.tableMaxheight = window.innerHeight - 300;
this.fetchPortCodeList();
},
methods: {
// 获取所属口岸
fetchPortCodeList() {
getPortCodeList()
.then((res) => {
if (res.code === "200") {
this.portCodeList = res.data;
} else {
}
})
.catch((err) => {
console.log(err);
});
},
clear() {
this.$refs.sreachForm.resetFields();
},
//查询
search(val) {
this.loadings.searchLoading = true;
......@@ -141,7 +229,7 @@ export default {
let obj = this.sreachFormData;
obj.pageIndex = this.page.pageIndex;
obj.pageSize = this.page.pageSize;
getRoleList(obj)
searchList(obj)
.then((res) => {
if (res.code === "200") {
this.tableData = res.data.value;
......@@ -160,36 +248,17 @@ export default {
});
},
addRole() {
this.dialogTitle = "新增角色";
this.dialogTitle = "监管场所管理新增";
this.editType = "add";
this.outerVisible = true;
},
// 新增菜单用,可以不麻烦后端---------
addMenuFn() {
let params = {
icon: "",
menuName: "运抵单查询",
order: 4.4,
parentMenuId: 90,
physicalUrl: "/arrival-list",
url: "",
};
addMenu(params).then((res) => {
console.log(res);
});
},
update(val) {
this.dialogTitle = "修改角色";
this.dialogTitle = "监管场所管理修改";
this.editType = "update";
this.outerVisible = true;
this.activeData = val;
},
muenChange(val) {
this.dialogTitle = "绑定权限";
this.editType = "menuChange";
this.outerVisible = true;
this.activeData = val;
this.activeData = JSON.parse(JSON.stringify(val));
},
dialogClose() {
this.outerVisible = false;
this.activeData = null;
......
......@@ -168,11 +168,11 @@ export default {
// 新增菜单用,可以不麻烦后端---------
addMenuFn() {
let params = {
icon: "",
menuName: "运抵单查询",
order: 2.4,
parentMenuId: 98,
physicalUrl: "/arrival-list",
icon: "receipt",
menuName: "模拟回执管理",
order: 1,
parentMenuId: 0,
physicalUrl: "/receipt", //-management
url: "",
};
addMenu(params).then((res) => {
......
......@@ -12,7 +12,6 @@
>
<div class="modelItem">
<el-form
v-if="type != 'menuChange'"
class="fedexFormStyle"
ref="formData"
:model="formData"
......@@ -57,17 +56,25 @@
</el-col>
<el-col :span="8">
<Formitem label="所属口岸" prop="portCode" type="edit">
<el-input
<el-select
type="text"
class="inputShadow"
id="inputInner-edit-portCode"
resize="none"
id="inputInner--portCode"
v-model="formData.portCode"
clearable
filterable
placeholder=""
></el-input>
>
<el-option
v-for="item in portCodeList"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</Formitem>
</el-col>
</el-row>
<el-row :gutter="5">
<el-col :span="8">
<Formitem label="监管场所代码" prop="loctNo" type="edit">
<el-input
......@@ -113,20 +120,6 @@
</el-col>
</el-row>
</el-form>
<el-tree
ref="tree"
class="menuTree"
v-else
:data="treeData"
show-checkbox
default-expand-all
node-key="id"
:default-expanded-keys="expandedKeys"
:default-checked-keys="checkedKeys"
:props="defaultProps"
@check="treeCheckChange"
>
</el-tree>
</div>
<div class="dialogOption entrySave">
<el-button
......@@ -147,12 +140,9 @@
<script>
import {
addRoleData,
updateRoleData,
updateRoleMenuData,
getMenuByRoleId,
} from "@/api/system/user.js";
import { getRouters } from "@/api/menu";
addOperatorPlace,
updateOperatorPlace,
} from "@/api/supervisePlaceManage-api.js";
export default {
props: {
outerVisible: {
......@@ -161,7 +151,7 @@ export default {
},
title: {
type: String,
default: "新增角色",
default: "监管场所管理新增",
},
type: {
type: String,
......@@ -171,6 +161,12 @@ export default {
type: Object,
default: null,
},
portCodeList: {
type: Array,
default: () => {
return [];
},
},
},
watch: {
outerVisible(val) {
......@@ -178,10 +174,6 @@ export default {
this.loadings.dialogLoading = false;
if (this.type == "update") {
this.formData = this.active;
} else if (this.type == "menuChange") {
this.formData = this.active;
this.searchTreeData();
this.loadCheckedKeys(); //加载已绑定的菜单
}
}
},
......@@ -196,23 +188,23 @@ export default {
operatorPersonInCharge: "",
contactNumber: "",
},
treeData: [],
treeCheckData: [],
expandedKeys: [],
checkedKeys: [],
rules: {
roleName: [
operatorCode: [
{
required: true,
trigger: "blur",
message: "角色名称不能为空!",
message: "监管场所代码不能为空!",
},
],
operatorName: [
{
required: true,
trigger: "blur",
message: "监管场所负责人不能为空!",
},
],
},
defaultProps: {
children: "children",
label: "label",
},
searchForm: {},
loadings: {
dialogLoading: false,
......@@ -223,69 +215,15 @@ export default {
};
},
methods: {
//查询菜单数据
searchTreeData() {
this.loadings.dialogLoading = true;
getRouters()
.then((res) => {
if (res.code === "200") {
let arr = [];
res.data.forEach((item) => {
let status = true;
if (item.parentMenuId == 0) {
let obj = {
id: item.menuId,
label: item.menuName,
children: [],
};
arr.forEach((menuItem) => {
if (menuItem.id == item.menuId) {
status = false;
menuItem.label = item.menuName;
}
});
if (status) {
arr.push(obj);
}
} else {
let obj = {
id: item.menuId,
label: item.menuName,
};
arr.forEach((menuItem) => {
if (menuItem.id == item.parentMenuId) {
status = false;
menuItem.children.push(obj);
}
});
if (status) {
arr.push({
id: item.parentMenuId,
label: "",
children: [obj],
});
}
}
});
this.treeData = arr;
} else {
this.alertWarningMsg(res.message);
}
this.loadings.dialogLoading = false;
})
.catch((err) => {
console.log(err);
this.loadings.dialogLoading = false;
});
},
//数据保存
submit() {
this.loadings.dialogLoading = true;
let obj = {};
let obj = {
...this.formData,
};
if (this.type == "add") {
this.$refs.formData.validate((valid) => {
if (valid) {
obj.roleName = this.formData.roleName;
this.addapi(obj);
} else {
this.loadings.dialogLoading = false;
......@@ -294,22 +232,17 @@ export default {
} else if (this.type == "update") {
this.$refs.formData.validate((valid) => {
if (valid) {
obj.roleId = this.formData.roleId;
obj.roleName = this.formData.roleName;
obj.id = this.active.id;
this.updateapi(obj);
} else {
this.loadings.dialogLoading = false;
}
});
} else if (this.type == "menuChange") {
obj.menuId = this.treeCheckData; // 使用合并后的选中节点
obj.roleId = this.formData.roleId;
this.menuChangeapi(obj);
}
},
//新增
addapi(val) {
addRoleData(val)
addOperatorPlace(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
......@@ -326,7 +259,7 @@ export default {
},
//修改
updateapi(val) {
updateRoleData(val)
updateOperatorPlace(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
......@@ -343,7 +276,7 @@ export default {
},
//菜单权限修改
menuChangeapi(val) {
updateRoleMenuData(val)
updateOperatorPlace(val)
.then((res) => {
if (res.code === "200") {
this.msgSuccess(res.message);
......@@ -359,49 +292,18 @@ export default {
this.loadings.dialogLoading = false;
});
},
treeCheckChange(data, checked) {
console.log(data, checked);
let arr = [];
arr = checked.checkedKeys.concat(checked.halfCheckedKeys);
this.treeCheckData = arr;
},
close() {
this.formData = {
roleName: "",
operatorCode: "",
operatorName: "",
portCode: "",
loctNo: "",
operatorPersonInCharge: "",
contactNumber: "",
};
this.checkedKeys = [];
this.$emit("close");
},
// 加载已绑定的菜单
loadCheckedKeys() {
if (this.formData.roleId) {
getMenuByRoleId(this.formData.roleId)
.then((res) => {
if (res.code === "200") {
this.checkedKeys = res.data
.filter((item) => item.isBinding && item.parentMenuId != 0)
.map((item) => item.menuId);
//console.log('初始 checkedKeys:', this.checkedKeys);
this.$nextTick(() => {
this.$refs.tree.setCheckedKeys(this.checkedKeys);
this.updateTreeCheckData();
});
} else {
this.alertWarningMsg(res.message);
}
})
.catch((err) => {
console.log(err);
});
}
},
//加载选中的节点及半选中的父节点
updateTreeCheckData() {
const checkedKeys = this.$refs.tree.getCheckedKeys();
const halfCheckedKeys = this.$refs.tree.getHalfCheckedKeys();
this.treeCheckData = checkedKeys.concat(halfCheckedKeys);
//console.log('合并后的 treeCheckData:', this.treeCheckData);
},
},
};
</script>
......
......@@ -37,15 +37,21 @@
</el-col>
<el-col :span="5">
<Formitem label="所属口岸" prop="portCode">
<el-input
<el-select
type="text"
class="inputShadow"
id="inputInner--portCode"
resize="none"
v-model="sreachFormData.portCode"
clearable
filterable
placeholder=""
></el-input>
>
<el-option
v-for="item in portCodeList"
:key="item"
:label="item"
:value="item"
></el-option>
</el-select>
</Formitem>
</el-col>
<el-col :span="2">
......@@ -106,12 +112,7 @@
<template slot="optionColumn">
<el-table-column align="left" label="操作">
<template slot-scope="scope">
<el-button type="text" @click="update(scope.row)">
角色修改
</el-button>
<el-button type="text" @click="muenChange(scope.row)">
权限绑定
</el-button>
<el-button type="text" @click="update(scope.row)"> 修改 </el-button>
</template>
</el-table-column>
</template>
......@@ -122,12 +123,16 @@
:type="editType"
:active="activeData"
@close="dialogClose"
:portCodeList="portCodeList"
/>
</div>
</template>
<script>
import { getOperatorPlaceList } from "@/api/supervisePlaceManage-api.js";
import {
getOperatorPlaceList,
getPortCodeList,
} from "@/api/supervisePlaceManage-api.js";
import DialogVue from "./dialog.vue";
export default {
name: "SupervisePlaceManage",
......@@ -193,6 +198,7 @@ export default {
outerVisible: false,
dialogTitle: "",
editType: "",
portCodeList: [],
};
},
created() {
......@@ -200,8 +206,22 @@ export default {
},
mounted() {
this.tableMaxheight = window.innerHeight - 300;
this.fetchPortCodeList();
},
methods: {
// 获取所属口岸
fetchPortCodeList() {
getPortCodeList()
.then((res) => {
if (res.code === "200") {
this.portCodeList = res.data;
} else {
}
})
.catch((err) => {
console.log(err);
});
},
clear() {
this.$refs.sreachForm.resetFields();
},
......@@ -233,22 +253,17 @@ export default {
});
},
addRole() {
this.dialogTitle = "新增角色";
this.dialogTitle = "监管场所管理新增";
this.editType = "add";
this.outerVisible = true;
},
update(val) {
this.dialogTitle = "修改角色";
this.dialogTitle = "监管场所管理修改";
this.editType = "update";
this.outerVisible = true;
this.activeData = val;
},
muenChange(val) {
this.dialogTitle = "绑定权限";
this.editType = "menuChange";
this.outerVisible = true;
this.activeData = val;
this.activeData = JSON.parse(JSON.stringify(val));
},
dialogClose() {
this.outerVisible = false;
this.activeData = null;
......