Commit 15017fd2 authored by “yiyousong”'s avatar “yiyousong”

perf: 格式化

parent 3eeb7834
......@@ -19,9 +19,7 @@
> -->
</div>
<!-- <div class="bullshit__headline">{{ message }}</div> -->
<div class="bullshit__info">
请检查您输入的网址是否正确,或点击下面的按钮返回。
</div>
<div class="bullshit__info">请检查您输入的网址是否正确,或点击下面的按钮返回。</div>
<a class="bullshit__return-home" @click="handleGoHome">返回</a>
</div>
</div>
......@@ -30,15 +28,15 @@
<script>
export default {
name: "Page404",
name: 'Page404',
data() {
return {};
},
methods: {
handleGoHome() {
this.$router.back();
},
},
}
}
};
</script>
......
......@@ -17,9 +17,7 @@
class="search-box top-radius flex h-full items-center gap-5"
v-hasPermi="['engine:query']"
>
<div class="text-[14px] text-[#395EBF]">
统计时段:{{ time[0] }}~{{ time[1] }}
</div>
<div class="text-[14px] text-[#395EBF]">统计时段:{{ time[0] }}~{{ time[1] }}</div>
<y-date-picker
v-model="time"
align="right"
......@@ -28,9 +26,7 @@
end-placeholder="结束日期"
>
</y-date-picker>
<el-button size="small" type="primary" @click="handleDate"
>搜索</el-button
>
<el-button size="small" type="primary" @click="handleDate">搜索</el-button>
</div>
<div
class="engine-btn top-radius"
......@@ -49,25 +45,22 @@
</template>
<script>
import { mapGetters } from "vuex";
import { mapGetters } from 'vuex';
export default {
data() {
return {
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
],
time: [this.$moment().format('YYYY-MM-DD'), this.$moment().format('YYYY-MM-DD')]
};
},
watch: {
"$route.path"() {
'$route.path'() {
this.$nextTick(() => {
this.handleDate();
});
},
}
},
computed: {
...mapGetters("user", ["secondaryRoutes"]),
...mapGetters('user', ['secondaryRoutes'])
},
created() {
this.$nextTick(() => {
......@@ -77,8 +70,8 @@ export default {
methods: {
handleDate() {
this.$refs.Page.getDate(this.time);
},
},
}
}
};
</script>
......@@ -133,11 +126,7 @@ export default {
.engine-btn {
width: 220px;
color: #fff;
background: linear-gradient(
270deg,
rgba(139, 87, 249, 1) 0%,
rgba(5, 149, 253, 1) 100%
);
background: linear-gradient(270deg, rgba(139, 87, 249, 1) 0%, rgba(5, 149, 253, 1) 100%);
font-size: 18px;
font-weight: bold;
display: flex;
......
......@@ -106,23 +106,23 @@
</template>
<script>
import DoubleTable from "./components/DoubleTable.vue";
import { getEvaSystemList } from "@/api/engine";
import { export2Excel } from "@/utils/exportExcel";
import { dataSection } from "@/utils";
import storage from "@/utils/storage";
import DoubleTable from './components/DoubleTable.vue';
import { getEvaSystemList } from '@/api/engine';
import { export2Excel } from '@/utils/exportExcel';
import { dataSection } from '@/utils';
import storage from '@/utils/storage';
export default {
components: {
DoubleTable,
DoubleTable
},
data() {
return {
dict: {},
dateForm: {
timeStart: this.$moment().format("YYYY-MM-DD"),
timeEnd: this.$moment().format("YYYY-MM-DD"),
timeStart: this.$moment().format('YYYY-MM-DD'),
timeEnd: this.$moment().format('YYYY-MM-DD')
},
siteId: storage.get(2, "siteId"),
siteId: storage.get(2, 'siteId'),
hallLoading: false,
pjOptionLoading: false,
deptLoading: false,
......@@ -131,112 +131,112 @@ export default {
total: 0,
page: 1,
size: 10,
hallNameNotList: [""],
hallNameNotList: ['']
},
pjOptionSearch: {
total: 0,
page: 1,
size: 10,
pjOptionNotList: [""],
pjOptionNotList: [''],
pjOptionList: [],
groupList: ["pjOption"],
groupList: ['pjOption']
},
deptSearch: {
total: 0,
page: 1,
size: 10,
sectionNameNotList: [""],
sectionNameList: [],
sectionNameNotList: [''],
sectionNameList: []
},
windowSearch: {
total: 0,
page: 1,
size: 10,
windowFromnumNotList: [""],
windowFromnumList: [],
windowFromnumNotList: [''],
windowFromnumList: []
},
hallColumn: [
{
label: "大厅名称",
prop: "hallName",
align: "center",
showOverflowTooltip: true,
label: '大厅名称',
prop: 'hallName',
align: 'center',
showOverflowTooltip: true
},
{
label: "评价数量",
prop: "pjCount",
align: "center",
label: '评价数量',
prop: 'pjCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
pjOptionColumn: [
{
label: "评价选项",
prop: "pjOption",
align: "center",
label: '评价选项',
prop: 'pjOption',
align: 'center',
showOverflowTooltip: true,
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span>{cellValue}</span>;
}
},
}
},
{
label: "评价数量",
prop: "pjCount",
align: "center",
label: '评价数量',
prop: 'pjCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
deptColumn: [
{
label: "部门名称",
prop: "sectionName",
label: '部门名称',
prop: 'sectionName',
showOverflowTooltip: true,
align: "center",
align: 'center'
},
{
label: "评价数量",
prop: "pjCount",
align: "center",
label: '评价数量',
prop: 'pjCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
windowColumn: [
{
label: "窗口编号",
prop: "windowFromnum",
label: '窗口编号',
prop: 'windowFromnum',
showOverflowTooltip: true,
align: "center",
align: 'center'
},
{
label: "评价数量",
prop: "pjCount",
align: "center",
label: '评价数量',
prop: 'pjCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
hallTableData: [],
pjOptionTableData: [],
deptTableData: [],
windowTableData: [],
windowTableData: []
};
},
created() {},
......@@ -259,7 +259,7 @@ export default {
siteId: this.siteId,
...this.hallSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
......@@ -267,13 +267,13 @@ export default {
return {
data: data,
total: total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -292,7 +292,7 @@ export default {
siteId: this.siteId,
...this.pjOptionSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
......@@ -300,13 +300,13 @@ export default {
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -324,20 +324,20 @@ export default {
siteId: this.siteId,
...this.deptSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -356,20 +356,20 @@ export default {
siteId: this.siteId,
...this.windowSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -388,14 +388,14 @@ export default {
let filterVal = this.hallColumn.map((v) => v.prop);
dataSection(this.hallEvaFn, {}, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"大厅评价量统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'大厅评价量统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -410,14 +410,14 @@ export default {
}
dataSection(this.pjOptionEva, searchForm, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"评价选项统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'评价选项统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -432,14 +432,14 @@ export default {
}
dataSection(this.deptEva, searchForm, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"部门评价量统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'部门评价量统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -454,14 +454,14 @@ export default {
}
dataSection(this.windowEva, searchForm, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"窗口评价量统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'窗口评价量统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -476,30 +476,15 @@ export default {
searchMethod();
};
if (type === "pjOption") {
setupSearch(
this.pjOptionSearch,
"pjOptionList",
pjOption,
this.getPjOptionEva
);
} else if (type === "dept") {
setupSearch(
this.deptSearch,
"sectionNameList",
deptName,
this.getDeptEva
);
} else if (type === "window") {
setupSearch(
this.windowSearch,
"windowFromnumList",
windowNum,
this.getWindowEva
);
if (type === 'pjOption') {
setupSearch(this.pjOptionSearch, 'pjOptionList', pjOption, this.getPjOptionEva);
} else if (type === 'dept') {
setupSearch(this.deptSearch, 'sectionNameList', deptName, this.getDeptEva);
} else if (type === 'window') {
setupSearch(this.windowSearch, 'windowFromnumList', windowNum, this.getWindowEva);
}
},
},
}
}
};
</script>
......
......@@ -106,23 +106,23 @@
</template>
<script>
import DoubleTable from "./components/DoubleTable.vue";
import { getQueueSystemList } from "@/api/engine";
import { export2Excel } from "@/utils/exportExcel";
import { dataSection } from "@/utils";
import storage from "@/utils/storage";
import DoubleTable from './components/DoubleTable.vue';
import { getQueueSystemList } from '@/api/engine';
import { export2Excel } from '@/utils/exportExcel';
import { dataSection } from '@/utils';
import storage from '@/utils/storage';
export default {
components: {
DoubleTable,
DoubleTable
},
data() {
return {
dict: {},
dateForm: {
timeStart: this.$moment().format("YYYY-MM-DD"),
timeEnd: this.$moment().format("YYYY-MM-DD"),
timeStart: this.$moment().format('YYYY-MM-DD'),
timeEnd: this.$moment().format('YYYY-MM-DD')
},
siteId: storage.get(2, "siteId"),
siteId: storage.get(2, 'siteId'),
hallLoading: false,
businessLoading: false,
deptLoading: false,
......@@ -131,112 +131,112 @@ export default {
total: 0,
page: 1,
size: 10,
hallNameNotList: [""],
hallNameNotList: ['']
},
businessSearch: {
total: 0,
page: 1,
size: 10,
businessNotList: [""],
businessNotList: [''],
businessList: [],
groupList: ["business"],
groupList: ['business']
},
deptSearch: {
total: 0,
page: 1,
size: 10,
sectionNameNotList: [""],
sectionNameList: [],
sectionNameNotList: [''],
sectionNameList: []
},
windowSearch: {
total: 0,
page: 1,
size: 10,
windowFromnumNotList: [""],
windowFromnumList: [],
windowFromnumNotList: [''],
windowFromnumList: []
},
hallColumn: [
{
label: "大厅名称",
prop: "hallName",
align: "center",
showOverflowTooltip: true,
label: '大厅名称',
prop: 'hallName',
align: 'center',
showOverflowTooltip: true
},
{
label: "排队数量",
prop: "phCount",
align: "center",
label: '排队数量',
prop: 'phCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
businessColumn: [
{
label: "业务名称",
prop: "business",
align: "center",
label: '业务名称',
prop: 'business',
align: 'center',
showOverflowTooltip: true,
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span>{cellValue}</span>;
}
},
}
},
{
label: "排队数量",
prop: "phCount",
align: "center",
label: '排队数量',
prop: 'phCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
deptColumn: [
{
label: "部门名称",
prop: "sectionName",
label: '部门名称',
prop: 'sectionName',
showOverflowTooltip: true,
align: "center",
align: 'center'
},
{
label: "排队数量",
prop: "phCount",
align: "center",
label: '排队数量',
prop: 'phCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
windowColumn: [
{
label: "窗口编号",
prop: "windowFromnum",
label: '窗口编号',
prop: 'windowFromnum',
showOverflowTooltip: true,
align: "center",
align: 'center'
},
{
label: "排队数量",
prop: "phCount",
align: "center",
label: '排队数量',
prop: 'phCount',
align: 'center',
formatter: (row, column, cellValue) => {
if (cellValue) {
return <span class="table-num">{cellValue}</span>;
}
},
},
}
}
],
hallTableData: [],
businessTableData: [],
deptTableData: [],
windowTableData: [],
windowTableData: []
};
},
created() {
......@@ -264,7 +264,7 @@ export default {
siteId: this.siteId,
...this.hallSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
......@@ -272,13 +272,13 @@ export default {
return {
data: data,
total: total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -297,7 +297,7 @@ export default {
siteId: this.siteId,
...this.businessSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
......@@ -305,13 +305,13 @@ export default {
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -329,20 +329,20 @@ export default {
siteId: this.siteId,
...this.deptSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -361,20 +361,20 @@ export default {
siteId: this.siteId,
...this.windowSearch,
...this.dateForm,
...form,
...form
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -393,14 +393,14 @@ export default {
let filterVal = this.hallColumn.map((v) => v.prop);
dataSection(this.hallQueueFn, {}, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"大厅取号量统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'大厅取号量统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -415,14 +415,14 @@ export default {
}
dataSection(this.businessQueue, searchForm, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"业务取号量统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'业务取号量统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -437,14 +437,14 @@ export default {
}
dataSection(this.deptQueue, searchForm, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"部门取号量统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'部门取号量统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -459,14 +459,14 @@ export default {
}
dataSection(this.windowQueue, searchForm, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
export2Excel(
tHeader,
filterVal,
data,
"窗口取号量统计报表" + this.$moment().format("YYYYMMDDHHmmss")
'窗口取号量统计报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
},
......@@ -480,18 +480,18 @@ export default {
searchObj[listKey] = value ? [value] : [];
};
if (type === "business") {
setupSearch(this.businessSearch, "businessList", businessName);
if (type === 'business') {
setupSearch(this.businessSearch, 'businessList', businessName);
this.getBusinessQueue();
} else if (type === "dept") {
setupSearch(this.deptSearch, "sectionNameList", deptName);
} else if (type === 'dept') {
setupSearch(this.deptSearch, 'sectionNameList', deptName);
this.getDeptQueue();
} else if (type === "window") {
setupSearch(this.windowSearch, "windowFromnumList", windowNum);
} else if (type === 'window') {
setupSearch(this.windowSearch, 'windowFromnumList', windowNum);
this.getWindowQueue();
}
},
},
}
}
};
</script>
......
......@@ -45,86 +45,86 @@
</template>
<script>
import Search from "./components/Search.vue";
import TableHeader from "@/components/TableHeader.vue";
import { getEvaStatList } from "@/api/engine";
import { formatSeconds, dataSection } from "@/utils";
import { export2Excel } from "@/utils/exportExcel";
import storage from "@/utils/storage";
import Search from './components/Search.vue';
import TableHeader from '@/components/TableHeader.vue';
import { getEvaStatList } from '@/api/engine';
import { formatSeconds, dataSection } from '@/utils';
import { export2Excel } from '@/utils/exportExcel';
import storage from '@/utils/storage';
export default {
components: {
Search,
TableHeader,
TableHeader
},
data() {
return {
loading: false,
exportLoading: false,
siteId: storage.get(2, "siteId"),
siteId: storage.get(2, 'siteId'),
page: 1,
size: 10,
total: 0,
tableData: [],
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "站点名称",
prop: "siteName",
align: "center",
label: '站点名称',
prop: 'siteName',
align: 'center'
},
{
label: "部门名称",
prop: "sectionName",
align: "center",
label: '部门名称',
prop: 'sectionName',
align: 'center'
},
{
label: "评价选型",
prop: "pjOption",
align: "center",
label: '评价选型',
prop: 'pjOption',
align: 'center'
},
{
label: "窗口编号",
prop: "windowFromnum",
align: "center",
label: '窗口编号',
prop: 'windowFromnum',
align: 'center'
},
{
label: "年份",
prop: "year",
align: "center",
label: '年份',
prop: 'year',
align: 'center'
},
{
label: "月份",
prop: "month",
align: "center",
label: '月份',
prop: 'month',
align: 'center'
},
{
label: "日期",
prop: "day",
align: "center",
label: '日期',
prop: 'day',
align: 'center'
},
{
label: "评价数量",
prop: "pjCount",
align: "center",
},
label: '评价数量',
prop: 'pjCount',
align: 'center'
}
],
selectionRows: [],
searchForm: {
......@@ -135,11 +135,11 @@ export default {
pjOptionList: [],
sectionNameList: [],
windowFromnumList: [],
year: "",
month: "",
day: "",
year: '',
month: '',
day: ''
},
dict: {},
dict: {}
};
},
created() {
......@@ -153,20 +153,20 @@ export default {
size: this.size,
siteId: this.siteId,
...this.searchForm,
...form,
...form
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -174,7 +174,7 @@ export default {
this.loading = true;
let { data, total, dict } = await this.evaStatList();
data.forEach((v) => {
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : "";
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : '';
});
this.total = total;
this.tableData = data;
......@@ -189,23 +189,22 @@ export default {
handleSearch(form) {
let { type, pjOption, deptName, windowNum, year, month, day } = form;
this.searchForm.year = "";
this.searchForm.month = "";
this.searchForm.day = "";
this.searchForm.year = '';
this.searchForm.month = '';
this.searchForm.day = '';
if (type === "year") {
this.searchForm.groupList = ["year"];
if (type === 'year') {
this.searchForm.groupList = ['year'];
this.searchForm.year = year;
} else if (type === "month") {
this.searchForm.groupList = ["year", "month"];
} else if (type === 'month') {
this.searchForm.groupList = ['year', 'month'];
if (month) {
[this.searchForm.year, this.searchForm.month] = month.split("-");
[this.searchForm.year, this.searchForm.month] = month.split('-');
}
} else {
this.searchForm.groupList = ["year", "month", "day"];
this.searchForm.groupList = ['year', 'month', 'day'];
if (day) {
[this.searchForm.year, this.searchForm.month, this.searchForm.day] =
day.split("-");
[this.searchForm.year, this.searchForm.month, this.searchForm.day] = day.split('-');
}
}
......@@ -229,28 +228,28 @@ export default {
tHeader,
filterVal,
data,
"排队数据汇总报表" + this.$moment().format("YYYYMMDDHHmmss")
'排队数据汇总报表' + this.$moment().format('YYYYMMDDHHmmss')
);
} else {
dataSection(this.queueStatList, {}, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
data.forEach((v) => {
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : "";
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : '';
});
export2Excel(
tHeader,
filterVal,
data,
"排队数据汇总报表" + this.$moment().format("YYYYMMDDHHmmss")
'排队数据汇总报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
}
this.exportLoading = false;
},
},
}
}
};
</script>
......
......@@ -45,22 +45,22 @@
</template>
<script>
import Search from "./components/Search.vue";
import TableHeader from "@/components/TableHeader.vue";
import { getQueueStatList } from "@/api/engine";
import { formatSeconds, dataSection } from "@/utils";
import { export2Excel } from "@/utils/exportExcel";
import storage from "@/utils/storage";
import Search from './components/Search.vue';
import TableHeader from '@/components/TableHeader.vue';
import { getQueueStatList } from '@/api/engine';
import { formatSeconds, dataSection } from '@/utils';
import { export2Excel } from '@/utils/exportExcel';
import storage from '@/utils/storage';
export default {
components: {
Search,
TableHeader,
TableHeader
},
data() {
return {
loading: false,
exportLoading: false,
siteId: storage.get(2, "siteId"),
siteId: storage.get(2, 'siteId'),
dict: {},
page: 1,
size: 10,
......@@ -68,68 +68,68 @@ export default {
tableData: [],
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "站点名称",
prop: "siteName",
align: "center",
label: '站点名称',
prop: 'siteName',
align: 'center'
},
{
label: "业务名称",
prop: "business",
align: "center",
label: '业务名称',
prop: 'business',
align: 'center'
},
{
label: "部门名称",
prop: "sectionName",
align: "center",
label: '部门名称',
prop: 'sectionName',
align: 'center'
},
{
label: "窗口编号",
prop: "windowFromnum",
align: "center",
label: '窗口编号',
prop: 'windowFromnum',
align: 'center'
},
{
label: "年份",
prop: "year",
align: "center",
label: '年份',
prop: 'year',
align: 'center'
},
{
label: "月份",
prop: "month",
align: "center",
label: '月份',
prop: 'month',
align: 'center'
},
{
label: "日期",
prop: "day",
align: "center",
label: '日期',
prop: 'day',
align: 'center'
},
{
label: "办理量",
prop: "phCount",
align: "center",
label: '办理量',
prop: 'phCount',
align: 'center'
},
{
label: "平均等待时长",
prop: "waitTime",
align: "center",
},
label: '平均等待时长',
prop: 'waitTime',
align: 'center'
}
],
selectionRows: [],
searchForm: {
......@@ -140,10 +140,10 @@ export default {
businessList: [],
sectionNameList: [],
windowFromnumList: [],
year: "",
month: "",
day: "",
},
year: '',
month: '',
day: ''
}
};
},
created() {
......@@ -157,20 +157,20 @@ export default {
size: this.size,
siteId: this.siteId,
...this.searchForm,
...form,
...form
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
return {
data,
total,
dict,
dict
};
} else {
return {
data: [],
total: 0,
dict: {},
dict: {}
};
}
},
......@@ -178,7 +178,7 @@ export default {
this.loading = true;
let { data, total, dict } = await this.queueStatList();
data.forEach((v) => {
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : "";
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : '';
});
this.dict = dict;
this.total = total;
......@@ -191,22 +191,21 @@ export default {
},
handleSearch(form) {
let { type, businessName, deptName, windowNum, year, month, day } = form;
this.searchForm.year = "";
this.searchForm.month = "";
this.searchForm.day = "";
if (type == "year") {
this.searchForm.groupList = ["year"];
this.searchForm.year = '';
this.searchForm.month = '';
this.searchForm.day = '';
if (type == 'year') {
this.searchForm.groupList = ['year'];
this.searchForm.year = year;
} else if (type == "month") {
this.searchForm.groupList = ["year", "month"];
} else if (type == 'month') {
this.searchForm.groupList = ['year', 'month'];
if (month) {
[this.searchForm.year, this.searchForm.month] = month.split("-");
[this.searchForm.year, this.searchForm.month] = month.split('-');
}
} else {
this.searchForm.groupList = ["year", "month", "day"];
this.searchForm.groupList = ['year', 'month', 'day'];
if (day) {
[this.searchForm.year, this.searchForm.month, this.searchForm.day] =
day.split("-");
[this.searchForm.year, this.searchForm.month, this.searchForm.day] = day.split('-');
}
}
this.searchForm.businessList = businessName ? [businessName] : [];
......@@ -228,28 +227,28 @@ export default {
tHeader,
filterVal,
data,
"排队数据汇总报表" + this.$moment().format("YYYYMMDDHHmmss")
'排队数据汇总报表' + this.$moment().format('YYYYMMDDHHmmss')
);
} else {
dataSection(this.queueStatList, {}, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
data.forEach((v) => {
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : "";
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : '';
});
export2Excel(
tHeader,
filterVal,
data,
"排队数据汇总报表" + this.$moment().format("YYYYMMDDHHmmss")
'排队数据汇总报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
}
this.exportLoading = false;
},
},
}
}
};
</script>
......
<template>
<div
class="search mb-[15px] flex h-[170px] w-full flex-col items-center justify-around"
>
<div class="search mb-[15px] flex h-[170px] w-full flex-col items-center justify-around">
<div class="flex gap-10">
<router-link v-for="(v, i) in subMenus" :key="i" :to="v.path">
{{ v.meta.title }}
......@@ -12,11 +10,7 @@
<div class="flex gap-2">
<div class="item border">
<span class="pl-[15px] text-[14px]">选择时间</span>
<el-popover
trigger="click"
placement="bottom-start"
popper-class="search-popover"
>
<el-popover trigger="click" placement="bottom-start" popper-class="search-popover">
<div class="flex flex-col items-center">
<div class="tab-box">
<div
......@@ -75,10 +69,7 @@
></el-input>
</el-popover>
</div>
<div
class="item border"
v-if="$route.path == '/enginesearch/queueupdata'"
>
<div class="item border" v-if="$route.path == '/enginesearch/queueupdata'">
<span class="pl-[15px] text-[14px]">选择业务</span>
<el-popover
trigger="click"
......@@ -103,13 +94,8 @@
</div>
</div>
</div>
<div
v-else
class="flex h-full w-full items-center justify-center"
>
<el-empty
:image="require('@/assets/img/empty.png')"
></el-empty>
<div v-else class="flex h-full w-full items-center justify-center">
<el-empty :image="require('@/assets/img/empty.png')"></el-empty>
</div>
</div>
<el-input
......@@ -131,12 +117,7 @@
filterable
size="small"
>
<el-option
v-for="(v, i) in pjOption"
:key="i"
:label="v"
:value="v"
></el-option>
<el-option v-for="(v, i) in pjOption" :key="i" :label="v" :value="v"></el-option>
</el-select>
</div>
<div class="item border">
......@@ -164,13 +145,8 @@
</div>
</div>
</div>
<div
v-else
class="flex h-full w-full items-center justify-center"
>
<el-empty
:image="require('@/assets/img/empty.png')"
></el-empty>
<div v-else class="flex h-full w-full items-center justify-center">
<el-empty :image="require('@/assets/img/empty.png')"></el-empty>
</div>
</div>
<el-input
......@@ -210,13 +186,8 @@
</div>
</div>
</div>
<div
v-else
class="flex h-full w-full items-center justify-center"
>
<el-empty
:image="require('@/assets/img/empty.png')"
></el-empty>
<div v-else class="flex h-full w-full items-center justify-center">
<el-empty :image="require('@/assets/img/empty.png')"></el-empty>
</div>
</div>
<el-input
......@@ -238,14 +209,14 @@
</template>
<script>
import { findBottomSubarrays } from "@/utils";
import { findBottomSubarrays } from '@/utils';
export default {
components: {},
props: {
dict: {
required: true,
default: () => {},
},
default: () => {}
}
},
data() {
return {
......@@ -258,15 +229,15 @@ export default {
sectionList: [],
windowList: [],
form: {
type: "year",
businessName: "",
deptName: "",
windowNum: "",
year: "",
month: "",
day: "",
pjOption: "",
},
type: 'year',
businessName: '',
deptName: '',
windowNum: '',
year: '',
month: '',
day: '',
pjOption: ''
}
};
},
computed: {
......@@ -274,9 +245,9 @@ export default {
return this.$route.path;
},
dateInputVal() {
if (this.form.type == "year") {
if (this.form.type == 'year') {
return this.form.year;
} else if (this.form.type == "month") {
} else if (this.form.type == 'month') {
return this.form.month;
} else {
return this.form.day;
......@@ -288,7 +259,7 @@ export default {
},
set(val) {
this.calcBusiness = val;
},
}
},
calcDeptList: {
get() {
......@@ -296,7 +267,7 @@ export default {
},
set(val) {
this.calcDept = val;
},
}
},
calcWindowList: {
get() {
......@@ -304,8 +275,8 @@ export default {
},
set(val) {
this.calcWindow = val;
},
},
}
}
},
watch: {
dict: {
......@@ -313,8 +284,8 @@ export default {
this.changeOptions(newVal);
},
deep: true,
immediate: true,
},
immediate: true
}
},
created() {
this.getSubMenus();
......@@ -327,14 +298,10 @@ export default {
// 获取当前顶层路由下的所有子路由
getSubMenus() {
let path = this.$route?.meta.parentPath
? this.$route.meta.parentPath
: this.$route.path;
let path = this.$route?.meta.parentPath ? this.$route.meta.parentPath : this.$route.path;
let options = this.$router.options.routes[0].children;
let curRouters = options.filter((v) => v.path == path);
this.subMenus = findBottomSubarrays(curRouters).filter(
(v) => !v.meta.hidden
);
this.subMenus = findBottomSubarrays(curRouters).filter((v) => !v.meta.hidden);
},
getTopKeyList(arr) {
......@@ -343,33 +310,29 @@ export default {
// 获取搜索配置
changeOptions(dict) {
if (JSON.stringify(dict) == "{}") return;
if (JSON.stringify(dict) == '{}') return;
let { businessList, sectionNameList, windowFromnumList, pjOption } = dict;
this.pjOption = pjOption ? pjOption : [];
this.calcBusiness = this.businessList = businessList
? this.getTopKeyList(businessList)
: [];
this.calcDept = this.sectionList = sectionNameList
? this.getTopKeyList(sectionNameList)
: [];
this.calcBusiness = this.businessList = businessList ? this.getTopKeyList(businessList) : [];
this.calcDept = this.sectionList = sectionNameList ? this.getTopKeyList(sectionNameList) : [];
this.calcWindow = this.windowList = windowFromnumList
? this.getTopKeyList(windowFromnumList)
: [];
},
changeTab(key) {
this.form.year = "";
this.form.month = "";
this.form.day = "";
this.form.year = '';
this.form.month = '';
this.form.day = '';
this.form.type = key;
},
handleClearDate() {
this.form.year = "";
this.form.month = "";
this.form.day = "";
this.form.year = '';
this.form.month = '';
this.form.day = '';
},
handleBusinessNameInput(name) {
if (name != "") {
if (name != '') {
let list = this.businessList.filter((v) => v.includes(name));
this.calcBusinessList = list.slice(0, 10);
} else {
......@@ -377,7 +340,7 @@ export default {
}
},
handleDeptNameInput(name) {
if (name != "") {
if (name != '') {
let list = this.deptList.filter((v) => v.includes(name));
this.calcDeptList = list.slice(0, 10);
} else {
......@@ -385,7 +348,7 @@ export default {
}
},
handleWindowInput(value) {
if (value != "") {
if (value != '') {
let list = this.windowList.filter((v) => v.includes(value));
this.calcWindowList = list.slice(0, 10);
} else {
......@@ -393,29 +356,28 @@ export default {
}
},
handleSearch() {
this.$emit("search", this.form);
this.$emit('search', this.form);
},
handleShowPopper(type) {
switch (type) {
case "business":
case 'business':
this.calcBusinessList = this.businessList.slice(0, 10);
break;
case "deptName":
case 'deptName':
this.calcDeptList = this.sectionList.slice(0, 10);
break;
case "window":
case 'window':
this.calcWindowList = this.windowList.slice(0, 10);
}
},
},
}
}
};
</script>
<style lang="less" scoped>
.search {
flex-shrink: 0;
background: url("@/assets/img/engineSearch_bg.svg") no-repeat center / 100%
100%;
background: url('@/assets/img/engineSearch_bg.svg') no-repeat center / 100% 100%;
a {
color: rgba(254, 254, 254, 0.65);
}
......
<template>
<div
:class="[
'area-card',
'is-hover',
tag.length ? 'cursor-pointer' : 'cursor-not-allowed',
]"
:class="['area-card', 'is-hover', tag.length ? 'cursor-pointer' : 'cursor-not-allowed']"
@click="handleClick"
>
<div class="banner">
......@@ -14,9 +10,7 @@
<!-- 对接时间 -->
<div class="w-full">
<span class="time" v-if="isAccess">
对接时间:<span v-if="data.accessTime">{{
data.accessTime | dateDayFormat
}}</span>
对接时间:<span v-if="data.accessTime">{{ data.accessTime | dateDayFormat }}</span>
</span>
</div>
<!-- name -->
......@@ -36,8 +30,8 @@ export default {
type: Object,
default() {
return {};
},
},
}
}
},
data() {
return {};
......@@ -45,7 +39,7 @@ export default {
computed: {
tag() {
if (this.data.tag) {
return this.data.tag.split(",");
return this.data.tag.split(',');
} else {
return [];
}
......@@ -58,21 +52,21 @@ export default {
} else {
return false;
}
},
}
},
methods: {
handleClick() {
if (this.tag.length) {
this.$emit("click", this.data);
this.$emit('click', this.data);
this.$router.push({
name: "queueupreport",
name: 'queueupreport',
params: {
siteId: this.data.siteId + "",
},
siteId: this.data.siteId + ''
}
});
}
},
},
}
}
};
</script>
......
<template>
<div
:class="[
'card',
info.systemList.length ? 'cursor-pointer' : 'cursor-not-allowed',
]"
:class="['card', info.systemList.length ? 'cursor-pointer' : 'cursor-not-allowed']"
@click="handleClick"
>
<div>{{ info.name }}</div>
<el-tag
size="small"
type="danger"
color="#fff"
v-if="!info.systemList.length"
>
<el-tag size="small" type="danger" color="#fff" v-if="!info.systemList.length">
<i class="el-icon-link"></i>
等待对接</el-tag
>
<div class="cur flex gap-2" v-else>
<el-tag v-for="(v, i) in info.systemList" :key="i" size="small">{{
v
}}</el-tag>
</div>
<div class="card-date" v-if="info.systemList.length">
对接时间:{{ info.date }}
<el-tag v-for="(v, i) in info.systemList" :key="i" size="small">{{ v }}</el-tag>
</div>
<div class="card-date" v-if="info.systemList.length">对接时间:{{ info.date }}</div>
<div class="mask" v-else></div>
</div>
</template>
......@@ -35,8 +23,8 @@ export default {
type: Object,
default() {
return {};
},
},
}
}
},
data() {
return {};
......@@ -44,10 +32,10 @@ export default {
methods: {
handleClick() {
if (this.info.systemList.length) {
this.$emit("click", this.info);
this.$emit('click', this.info);
}
},
},
}
}
};
</script>
......@@ -56,7 +44,7 @@ export default {
width: 100%;
height: 100%;
color: #fff;
background: url("@/assets/img/changningxian.png") no-repeat center / 100% 100%;
background: url('@/assets/img/changningxian.png') no-repeat center / 100% 100%;
border-radius: 4px;
color: #fff;
position: relative;
......
......@@ -2,37 +2,32 @@
<div class="carousel">
<div class="swiper-container">
<div class="swiper-wrapper">
<img
class="swiper-slide"
v-for="(v, index) in ImageArray"
:key="index"
:src="v"
/>
<img class="swiper-slide" v-for="(v, index) in ImageArray" :key="index" :src="v" />
</div>
</div>
</div>
</template>
<script>
import Swiper from "swiper";
import Swiper from 'swiper';
export default {
props: {
ImageArray: {
type: Array,
default: () => {
return [];
},
}
},
speed: {
type: Number,
default: 1500,
},
default: 1500
}
},
data() {
return {
currentIndex: 0,
timer: null,
mySwiper: null,
mySwiper: null
};
},
watch: {},
......@@ -41,22 +36,22 @@ export default {
},
methods: {
initSwiper() {
this.mySwiper = new Swiper(".swiper-container", {
this.mySwiper = new Swiper('.swiper-container', {
autoplay: true,
effect: "fade",
effect: 'fade',
fadeEffect: true,
speed: this.speed,
loop: true,
updateOnWindowResize: true,
watchSlidesProgress: true,
watchSlidesProgress: true
});
this.mySwiper.init();
},
}
},
beforeDestroy() {
this.mySwiper.destroy();
},
}
};
</script>
......
......@@ -7,21 +7,21 @@ export default {
props: {
dataset: {
type: Object,
default: () => {},
default: () => {}
},
endValue: {
type: Number,
default: 10,
default: 10
},
color: {
type: String,
default: "#0857E8",
},
default: '#0857E8'
}
},
data() {
return {
myChart: null,
timer: null,
timer: null
};
},
watch: {
......@@ -32,8 +32,8 @@ export default {
});
},
deep: true,
immediate: true,
},
immediate: true
}
},
mounted() {},
methods: {
......@@ -52,13 +52,13 @@ export default {
let option = {
grid: {
top: "15%",
left: "15%",
right: "5%",
bottom: "12%",
top: '15%',
left: '15%',
right: '5%',
bottom: '12%'
},
tooltip: {
trigger: "axis",
trigger: 'axis',
borderWidth: 0,
formatter: (params) => {
return `${
......@@ -66,12 +66,10 @@ export default {
}<br/><div style='margin-top:4px;padding:4px 8px;background:${this.hexToRgba(
this.color,
0.1
)};color:${
this.color
};border-radius:4px'><span style='margin-right:20px'>${
)};color:${this.color};border-radius:4px'><span style='margin-right:20px'>${
params[0].seriesName
}</span>${params[0].value.value}</div>`;
},
}
},
// dataZoom: [
// {
......@@ -82,77 +80,77 @@ export default {
// },
// ],
xAxis: {
type: "category",
type: 'category',
boundaryGap: false,
axisLabel: {
color: "#5A5C60",
color: '#5A5C60',
formatter: (name) => {
let formatterName = name.split("-");
let formatterName = name.split('-');
return `${formatterName[1]}-${formatterName[2]}`;
},
}
},
axisLine: {
show: true,
lineStyle: {
color: "#E0E0E0",
},
color: '#E0E0E0'
}
},
axisTick: {
show: false,
show: false
},
splitLine: {
show: true,
lineStyle: {
type: "dashed",
color: "#E0E0E0",
},
type: 'dashed',
color: '#E0E0E0'
}
},
axisPointer: {
lineStyle: {
color: this.hexToRgba(this.color, 1),
},
},
color: this.hexToRgba(this.color, 1)
}
}
},
yAxis: {
type: "value",
type: 'value',
splitNumber: 3,
axisLabel: {
color: "#666",
color: '#666'
},
nameTextStyle: {
color: "#5A5C60",
color: '#5A5C60',
fontSize: 12,
lineHeight: 40,
lineHeight: 40
},
splitLine: {
lineStyle: {
type: "dashed",
color: "#E0E0E0",
},
type: 'dashed',
color: '#E0E0E0'
}
},
axisLine: {
show: false,
show: false
},
axisTick: {
show: false,
},
show: false
}
},
series: [
{
name: "数据量",
type: "line",
name: '数据量',
type: 'line',
smooth: true,
showSymbol: false,
symbolSize: 8,
lineStyle: {
color: this.hexToRgba(this.color, 1),
color: this.hexToRgba(this.color, 1)
},
itemStyle: {
color: this.hexToRgba(this.color, 1),
color: this.hexToRgba(this.color, 1)
},
areaStyle: {
color: {
type: "linear",
type: 'linear',
x: 0,
y: 0,
x2: 0,
......@@ -160,28 +158,28 @@ export default {
colorStops: [
{
offset: 0,
color: this.hexToRgba(this.color, 0.4),
color: this.hexToRgba(this.color, 0.4)
},
{
offset: 0.6,
color: this.hexToRgba(this.color, 0.1),
color: this.hexToRgba(this.color, 0.1)
},
{
offset: 1,
color: "#0000",
},
],
},
},
},
color: '#0000'
}
]
}
}
}
],
dataset,
dataset
};
this.myChart.setOption(option);
// 适配
window.addEventListener("resize", this.adapterEcharts);
window.addEventListener('resize', this.adapterEcharts);
// 清除现有定时器,防止多次调用
// clearInterval(this.timer);
......@@ -221,20 +219,20 @@ export default {
},
hexToRgba(hex, opacity) {
let rgbaColor = "";
let rgbaColor = '';
let reg = /^#[\da-f]{6}$/i;
if (reg.test(hex)) {
rgbaColor = `rgba(${parseInt("0x" + hex.slice(1, 3))},${parseInt(
"0x" + hex.slice(3, 5)
)},${parseInt("0x" + hex.slice(5, 7))},${opacity})`;
rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt(
'0x' + hex.slice(3, 5)
)},${parseInt('0x' + hex.slice(5, 7))},${opacity})`;
}
return rgbaColor;
},
}
},
beforeDestroy() {
window.removeEventListener("resize", this.adapterEcharts);
window.removeEventListener('resize', this.adapterEcharts);
clearInterval(this.timer);
},
}
};
</script>
......
......@@ -3,13 +3,7 @@
<div class="page page-login flex h-full w-full items-center justify-center">
<div class="flex min-w-[450px] flex-col justify-center bg-white p-[25px]">
<h1 class="mb-4 text-center text-[24px] font-[500]">{{ systemName }}</h1>
<el-form
class="w-full"
ref="form"
:model="form"
:rules="rules"
hide-required-asterisk
>
<el-form class="w-full" ref="form" :model="form" :rules="rules" hide-required-asterisk>
<el-form-item l prop="loginName">
<el-input
clearable
......@@ -38,14 +32,8 @@
v-model="form.securityCode"
@keyup.enter="onSubmit"
></el-input>
<div
class="code-box h-[40px] cursor-pointer overflow-hidden rounded-[4px]"
>
<img
class="h-full w-full"
:src="securityUrl"
@click="createCode"
/>
<div class="code-box h-[40px] cursor-pointer overflow-hidden rounded-[4px]">
<img class="h-full w-full" :src="securityUrl" @click="createCode" />
</div>
</div>
</el-form-item>
......@@ -67,52 +55,48 @@
</template>
<script>
import storage from "@/utils/storage";
import { mapMutations } from "vuex";
import { getHomeData } from "@/api/home";
import { generateRoutes, filterBtn } from "@/utils";
import { calcMenu } from "@/router";
import { login } from "@/api/login";
import { systemName } from "@/config";
import storage from '@/utils/storage';
import { mapMutations } from 'vuex';
import { getHomeData } from '@/api/home';
import { generateRoutes, filterBtn } from '@/utils';
import { calcMenu } from '@/router';
import { login } from '@/api/login';
import { systemName } from '@/config';
export default {
name: "login",
name: 'login',
data() {
return {
systemName,
api: process.env.VUE_APP_API_BASE_URL,
securityUrl: "",
securityUrl: '',
originData: [],
loading: false,
redirect: this.$route.query.redirect || "/",
redirect: this.$route.query.redirect || '/',
form: {
loginName: "",
password: "",
securityCode: "",
loginName: '',
password: '',
securityCode: ''
},
rules: {
loginName: [
{ required: true, message: "请输入用户名", trigger: "blur" },
],
password: [{ required: true, message: "请输入密码", trigger: "blur" }],
securityCode: [
{ required: true, message: "请输入验证码", trigger: "blur" },
],
},
loginName: [{ required: true, message: '请输入用户名', trigger: 'blur' }],
password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
securityCode: [{ required: true, message: '请输入验证码', trigger: 'blur' }]
}
};
},
created() {
this.createCode();
},
methods: {
...mapMutations("user", [
"SET_token",
"SET_sysName",
"SET_sysLogo",
"SET_path",
"SET_userInfo",
"SET_permissions",
"SET_routes",
"SET_menusList",
...mapMutations('user', [
'SET_token',
'SET_sysName',
'SET_sysLogo',
'SET_path',
'SET_userInfo',
'SET_permissions',
'SET_routes',
'SET_menusList'
]),
// 获取验证码
......@@ -120,8 +104,7 @@ export default {
// 加时间戳印记用于刷新gif
let mark = new Date().getTime();
// this.form.mark = mark;
this.securityUrl =
this.api + "/bill/securitycode/createCode" + `?mark=${mark}`;
this.securityUrl = this.api + '/bill/securitycode/createCode' + `?mark=${mark}`;
},
onSubmit() {
......@@ -132,17 +115,17 @@ export default {
if (res.data.code == 1) {
let {
token,
user: { id, loginName, siteIds },
user: { id, loginName, siteIds }
} = res.data.data;
let form = {
token,
userInfo: {
id,
name: loginName,
},
name: loginName
}
};
if (siteIds) {
let siteid = siteIds.split(",")[0];
let siteid = siteIds.split(',')[0];
form.siteid = siteid;
}
await this.getToken(form);
......@@ -157,11 +140,11 @@ export default {
if (token && userInfo) {
this.SET_userInfo(userInfo);
this.SET_token(token);
storage.set(2, "siteId", siteid);
storage.set(2, 'siteId', siteid);
// storage.set(2, "siteName", siteName);
await this.getIndixData();
} else {
this.$message.warning("登录失败,请稍后再试");
this.$message.warning('登录失败,请稍后再试');
}
},
// 获取菜单列表
......@@ -180,7 +163,7 @@ export default {
let path = routes[0].path;
this.$router.push(path);
} else {
this.$message.warning("暂无权限,请联系管理员!");
this.$message.warning('暂无权限,请联系管理员!');
}
}
},
......@@ -191,8 +174,8 @@ export default {
.filter((v) => v.perms)
.map((v) => v.perms);
this.SET_permissions(btnPermissions);
},
},
}
}
};
</script>
......
......@@ -18,10 +18,7 @@
统计时间段:{{ searchForm.time[0] }} ~ {{ searchForm.time[1] }}
</div>
</div>
<div
class="flex items-center"
v-hasPermi="['market:evaluatereport:query']"
>
<div class="flex items-center" v-hasPermi="['market:evaluatereport:query']">
<el-form ref="searchForm" inline size="small" :model="searchForm">
<el-form-item>
<el-select style="width: 130px" v-model="searchForm.type">
......@@ -56,11 +53,7 @@
</el-form-item>
</el-form>
</div>
<el-popover
placement="bottom"
trigger="click"
v-hasPermi="['market:evaluatereport:query']"
>
<el-popover placement="bottom" trigger="click" v-hasPermi="['market:evaluatereport:query']">
<div class="w-full">
<el-form ref="searchForm2" inline size="small" :model="searchForm2">
<el-form-item>
......@@ -179,26 +172,26 @@
</template>
<script>
import EvaluateDetails from "./components/EvaluateDetails.vue";
import { getEvaluateList } from "@/api/market";
import { getDepartment, getHall } from "@/api/site";
import { dataSection } from "@/utils";
import { export2Excel } from "@/utils/exportExcel";
import storage from "@/utils/storage";
import EvaluateDetails from './components/EvaluateDetails.vue';
import { getEvaluateList } from '@/api/market';
import { getDepartment, getHall } from '@/api/site';
import { dataSection } from '@/utils';
import { export2Excel } from '@/utils/exportExcel';
import storage from '@/utils/storage';
let searchType = {
windowFromnum: "按窗口编号",
peopleName: "按群众姓名",
peoplePhone: "按群众手机号",
windowFromnum: '按窗口编号',
peopleName: '按群众姓名',
peoplePhone: '按群众手机号'
};
export default {
components: {
EvaluateDetails,
EvaluateDetails
},
props: {
curTreeData: {
required: true,
default: () => {},
},
default: () => {}
}
},
data() {
return {
......@@ -210,20 +203,17 @@ export default {
page: 1,
total: 0,
searchForm: {
type: "windowFromnum",
keyword: "",
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
],
siteId: storage.get(2, "siteId"),
type: 'windowFromnum',
keyword: '',
time: [this.$moment().format('YYYY-MM-DD'), this.$moment().format('YYYY-MM-DD')],
siteId: storage.get(2, 'siteId')
},
searchForm2: {
pjOption: "", // 评价选项
sectionName: "", // 部门名称
hallName: "", // 大厅名称
pjSource: "", // 评价来源
pjType: "", // 评价指向
pjOption: '', // 评价选项
sectionName: '', // 部门名称
hallName: '', // 大厅名称
pjSource: '', // 评价来源
pjType: '' // 评价指向
},
tableData: [],
dict: {},
......@@ -233,153 +223,153 @@ export default {
hallList: [], // 大厅列表
column: [
{
type: "selection",
width: "50",
align: "center",
type: 'selection',
width: '50',
align: 'center',
reserveSelection: true,
fixed: "left",
fixed: 'left'
},
{
type: "index",
label: "序号",
width: "50",
align: "center",
fixed: "left",
type: 'index',
label: '序号',
width: '50',
align: 'center',
fixed: 'left',
index: (index) => {
return index + 1 + (this.page - 1) * this.size;
},
}
},
{
label: "站点名称",
align: "center",
width: "150",
prop: "siteName",
label: '站点名称',
align: 'center',
width: '150',
prop: 'siteName'
},
{
label: "身份证号",
align: "center",
width: "150",
prop: "peopleIdcard",
label: '身份证号',
align: 'center',
width: '150',
prop: 'peopleIdcard'
},
{
label: "姓名",
align: "center",
width: "150",
prop: "peopleName",
label: '姓名',
align: 'center',
width: '150',
prop: 'peopleName'
},
{
label: "性别",
align: "center",
width: "150",
prop: "peopleSex",
label: '性别',
align: 'center',
width: '150',
prop: 'peopleSex'
},
{
label: "手机号",
align: "center",
width: "150",
prop: "peoplePhone",
label: '手机号',
align: 'center',
width: '150',
prop: 'peoplePhone'
},
{
label: "评价选项",
align: "center",
width: "150",
prop: "pjOption",
label: '评价选项',
align: 'center',
width: '150',
prop: 'pjOption'
},
{
label: "评价标签",
align: "center",
width: "150",
prop: "contentTag",
label: '评价标签',
align: 'center',
width: '150',
prop: 'contentTag'
},
{
label: "部门",
align: "center",
width: "150",
prop: "sectionName",
label: '部门',
align: 'center',
width: '150',
prop: 'sectionName'
},
{
label: "大厅",
align: "center",
width: "150",
prop: "hallName",
label: '大厅',
align: 'center',
width: '150',
prop: 'hallName'
},
{
label: "评价来源",
align: "center",
width: "150",
prop: "pjSource",
label: '评价来源',
align: 'center',
width: '150',
prop: 'pjSource'
},
{
label: "手输意见",
align: "center",
width: "150",
prop: "opinion",
label: '手输意见',
align: 'center',
width: '150',
prop: 'opinion'
},
{
label: "窗口名",
align: "center",
width: "150",
prop: "windowName",
label: '窗口名',
align: 'center',
width: '150',
prop: 'windowName'
},
{
label: "窗口编号",
align: "center",
width: "150",
prop: "windowFromnum",
label: '窗口编号',
align: 'center',
width: '150',
prop: 'windowFromnum'
},
{
label: "窗口评价",
align: "center",
width: "150",
prop: "pjxt",
label: '窗口评价',
align: 'center',
width: '150',
prop: 'pjxt'
},
{
label: "工作人员",
align: "center",
width: "150",
prop: "workmanName",
label: '工作人员',
align: 'center',
width: '150',
prop: 'workmanName'
},
{
label: "工号",
align: "center",
width: "150",
prop: "workmanNumber",
label: '工号',
align: 'center',
width: '150',
prop: 'workmanNumber'
},
{
label: "评价状态",
align: "center",
width: "150",
prop: "evaluatestatus",
label: '评价状态',
align: 'center',
width: '150',
prop: 'evaluatestatus'
},
{
label: "评价指向",
align: "center",
width: "150",
prop: "pjType",
label: '评价指向',
align: 'center',
width: '150',
prop: 'pjType'
},
{
label: "评价时间",
align: "center",
width: "150",
prop: "pjTime",
label: '评价时间',
align: 'center',
width: '150',
prop: 'pjTime'
},
{
label: "扩展编号",
align: "center",
width: "150",
prop: "extNum",
label: '扩展编号',
align: 'center',
width: '150',
prop: 'extNum'
},
{
label: "操作",
align: "center",
fixed: "right",
width: "100",
label: '操作',
align: 'center',
fixed: 'right',
width: '100',
formatter: (row) => {
return (
<span
class="primary cursor-pointer"
v-hasPermi={["market:evaluatereport:details"]}
v-hasPermi={['market:evaluatereport:details']}
onClick={() => {
this.checkDetails(row);
}}
......@@ -387,9 +377,9 @@ export default {
查看详情
</span>
);
},
},
],
}
}
]
};
},
created() {},
......@@ -399,16 +389,16 @@ export default {
this.getSite(newVal);
},
deep: true,
immediate: true,
},
immediate: true
}
},
methods: {
// 获取站点
getSite(data) {
if (JSON.stringify(data) !== "{}") {
if (JSON.stringify(data) !== '{}') {
this.page = 1;
this.size = 10;
if (data.type == "site") {
if (data.type == 'site') {
this.searchForm.siteId = data.id;
this.getEvaluateList();
this.getDepartment();
......@@ -432,7 +422,7 @@ export default {
size: this.size,
pjTimeStart: this.searchForm.time[0],
pjTimeEnd: this.searchForm.time[1],
siteId: this.searchForm.siteId,
siteId: this.searchForm.siteId
};
let val = `%${this.searchForm.keyword}%`;
obj[this.searchForm.type] = val;
......@@ -440,14 +430,14 @@ export default {
let res = await getEvaluateList({
...obj,
...this.searchForm2,
...form,
...form
});
if (res.data.code == 1) {
return res.data.data;
} else {
return {
data: [],
total: 0,
total: 0
};
}
},
......@@ -457,7 +447,7 @@ export default {
this.loading = true;
let { data, total, dict } = await this.getData(form);
data.forEach((v) => {
v.pjTime = this.$moment(v.pjTime).format("YYYY-MM-DD HH:mm:ss");
v.pjTime = this.$moment(v.pjTime).format('YYYY-MM-DD HH:mm:ss');
});
this.tableData = data;
this.total = total;
......@@ -470,7 +460,7 @@ export default {
let res = await getDepartment({
page: 1,
size: -1,
siteId: this.searchForm.siteId,
siteId: this.searchForm.siteId
});
if (res.data.code == 1) {
let { data } = res.data.data;
......@@ -483,7 +473,7 @@ export default {
let res = await getHall({
page: 1,
size: -1,
siteId: this.searchForm.siteId,
siteId: this.searchForm.siteId
});
if (res.data.code == 1) {
let { data } = res.data.data;
......@@ -501,7 +491,7 @@ export default {
},
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getSite(this.curTreeData);
},
// 导出表格
......@@ -516,28 +506,28 @@ export default {
tHeader,
filterVal,
data,
"评价数据报表" + this.$moment().format("YYYYMMDDHHmmss")
'评价数据报表' + this.$moment().format('YYYYMMDDHHmmss')
);
} else {
dataSection(this.getData, {}, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
data.forEach((v) => {
v.pjTime = this.$moment(v.pjTime).format("YYYY-MM-DD HH:mm:ss");
v.pjTime = this.$moment(v.pjTime).format('YYYY-MM-DD HH:mm:ss');
});
export2Excel(
tHeader,
filterVal,
data,
"评价数据报表" + this.$moment().format("YYYYMMDDHHmmss")
'评价数据报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
}
this.exportLoading = false;
},
},
}
}
};
</script>
......
<template>
<div class="flex h-full w-full gap-5">
<div
class="area-tree-box flex h-full w-[20%] flex-col rounded-[4px] bg-white"
>
<div class="area-tree-box flex h-full w-[20%] flex-col rounded-[4px] bg-white">
<TabHeader icon="el-icon-notebook-2" label="组织架构"></TabHeader>
<div class="w-full flex-1 overflow-auto p-[20px]">
<AreaTree @change="changeSite"></AreaTree>
......@@ -12,10 +10,7 @@
<el-tabs :value="activeKey" @tab-click="changeRouter">
<el-tab-pane v-for="v in secondaryRoutes" :key="v.path" :name="v.path">
<template slot="label">
<i
v-if="v.meta.icon"
:class="['mr-[5px]', 'primary', v.meta.icon]"
></i>
<i v-if="v.meta.icon" :class="['mr-[5px]', 'primary', v.meta.icon]"></i>
<span class="tab-label">{{ v.meta.title }}</span>
</template>
</el-tab-pane>
......@@ -28,18 +23,18 @@
</template>
<script>
import { mapGetters } from "vuex";
import { mapGetters } from 'vuex';
export default {
data() {
return {
curTreeData: {}, // 当前选择的站点
curTreeData: {} // 当前选择的站点
};
},
computed: {
...mapGetters("user", ["secondaryRoutes"]),
...mapGetters('user', ['secondaryRoutes']),
activeKey() {
return this.$route.path;
},
}
},
created() {},
methods: {
......@@ -51,8 +46,8 @@ export default {
changeSite(data) {
this.curTreeData = data;
// this.$refs.Page.getSite(data);
},
},
}
}
};
</script>
......
......@@ -18,10 +18,7 @@
统计时间段:{{ searchForm.time[0] }} ~ {{ searchForm.time[1] }}
</div>
</div>
<div
class="flex items-center"
v-hasPermi="['market:queueupreport:query']"
>
<div class="flex items-center" v-hasPermi="['market:queueupreport:query']">
<el-form ref="searchForm" inline size="small" :model="searchForm">
<el-form-item>
<el-select style="width: 130px" v-model="searchForm.type">
......@@ -56,11 +53,7 @@
</el-form-item>
</el-form>
</div>
<el-popover
placement="bottom"
trigger="click"
v-hasPermi="['market:queueupreport:query']"
>
<el-popover placement="bottom" trigger="click" v-hasPermi="['market:queueupreport:query']">
<div class="w-full">
<el-form ref="searchForm2" inline size="small" :model="searchForm2">
<!-- <el-form-item>
......@@ -150,27 +143,27 @@
</template>
<script>
import QueueUpDetails from "./components/QueueUpDetails.vue";
import QueueUpDetails from './components/QueueUpDetails.vue';
let searchType = {
business: "按业务",
windowFromnum: "按窗口编号",
peopleName: "按群众姓名",
peoplePhone: "按群众手机号",
business: '按业务',
windowFromnum: '按窗口编号',
peopleName: '按群众姓名',
peoplePhone: '按群众手机号'
};
import { getQueueList } from "@/api/market";
import { getDepartment, getHall } from "@/api/site";
import storage from "@/utils/storage";
import { formatSeconds, dataSection } from "@/utils";
import { export2Excel } from "@/utils/exportExcel";
import { getQueueList } from '@/api/market';
import { getDepartment, getHall } from '@/api/site';
import storage from '@/utils/storage';
import { formatSeconds, dataSection } from '@/utils';
import { export2Excel } from '@/utils/exportExcel';
export default {
components: {
QueueUpDetails,
QueueUpDetails
},
props: {
curTreeData: {
required: true,
default: () => {},
},
default: () => {}
}
},
data() {
return {
......@@ -183,183 +176,178 @@ export default {
page: 1,
selectionRow: [],
searchForm: {
type: "business",
keyword: "",
time: [
this.$moment().format("YYYY-MM-DD"),
this.$moment().format("YYYY-MM-DD"),
],
siteId: this.$route.params.siteId
? this.$route.params.siteId
: storage.get(2, "siteId"),
type: 'business',
keyword: '',
time: [this.$moment().format('YYYY-MM-DD'), this.$moment().format('YYYY-MM-DD')],
siteId: this.$route.params.siteId ? this.$route.params.siteId : storage.get(2, 'siteId')
},
searchForm2: {
wySignin: "", // 取号方式(现场取号,微信取号)
hallName: "", // 大厅名称
sectionName: "", // 部门名称
wySignin: '', // 取号方式(现场取号,微信取号)
hallName: '', // 大厅名称
sectionName: '' // 部门名称
},
tableData: [],
column: [
{
type: "selection",
width: "50",
align: "center",
type: 'selection',
width: '50',
align: 'center',
reserveSelection: true,
fixed: "left",
fixed: 'left'
},
{
type: "index",
label: "序号",
width: "50",
align: "center",
fixed: "left",
type: 'index',
label: '序号',
width: '50',
align: 'center',
fixed: 'left',
index: (index) => {
return index + 1 + (this.page - 1) * this.size;
},
}
},
{
label: "站点名称",
align: "center",
width: "150",
prop: "siteName",
label: '站点名称',
align: 'center',
width: '150',
prop: 'siteName'
},
{
label: "业务名称",
align: "center",
width: "150",
prop: "business",
label: '业务名称',
align: 'center',
width: '150',
prop: 'business'
},
{
label: "预约编码",
align: "center",
width: "150",
prop: "ordernumber",
label: '预约编码',
align: 'center',
width: '150',
prop: 'ordernumber'
},
{
label: "叫号状态",
align: "center",
width: "150",
prop: "style",
label: '叫号状态',
align: 'center',
width: '150',
prop: 'style'
},
{
label: "窗口名",
align: "center",
width: "150",
prop: "windowName",
label: '窗口名',
align: 'center',
width: '150',
prop: 'windowName'
},
{
label: "窗口编号",
align: "center",
width: "150",
prop: "windowFromnum",
label: '窗口编号',
align: 'center',
width: '150',
prop: 'windowFromnum'
},
{
label: "流水号",
align: "center",
width: "150",
prop: "flownum",
label: '流水号',
align: 'center',
width: '150',
prop: 'flownum'
},
{
label: "呼叫转移",
align: "center",
width: "150",
prop: "formernum",
label: '呼叫转移',
align: 'center',
width: '150',
prop: 'formernum'
},
{
label: "身份证号",
align: "center",
width: "150",
prop: "peopleIdcard",
label: '身份证号',
align: 'center',
width: '150',
prop: 'peopleIdcard'
},
{
label: "姓名",
align: "center",
width: "150",
prop: "peopleName",
label: '姓名',
align: 'center',
width: '150',
prop: 'peopleName'
},
{
label: "手机号",
align: "center",
width: "150",
prop: "peoplePhone",
label: '手机号',
align: 'center',
width: '150',
prop: 'peoplePhone'
},
{
label: "工作人员",
align: "center",
width: "150",
prop: "workmanName",
label: '工作人员',
align: 'center',
width: '150',
prop: 'workmanName'
},
{
label: "工号",
align: "center",
width: "150",
prop: "workmanNumber",
label: '工号',
align: 'center',
width: '150',
prop: 'workmanNumber'
},
{
label: "取号方式",
align: "center",
width: "150",
prop: "wySignin",
label: '取号方式',
align: 'center',
width: '150',
prop: 'wySignin'
},
{
label: "部门名称",
align: "center",
width: "150",
prop: "sectionName",
label: '部门名称',
align: 'center',
width: '150',
prop: 'sectionName'
},
{
label: "大厅名称",
align: "center",
width: "150",
prop: "hallName",
label: '大厅名称',
align: 'center',
width: '150',
prop: 'hallName'
},
{
label: "取号时间",
align: "center",
width: "150",
prop: "taketime",
label: '取号时间',
align: 'center',
width: '150',
prop: 'taketime'
},
{
label: "叫号时间",
align: "center",
width: "150",
prop: "calltime",
label: '叫号时间',
align: 'center',
width: '150',
prop: 'calltime'
},
{
label: "结束时间",
align: "center",
width: "150",
prop: "endtime",
label: '结束时间',
align: 'center',
width: '150',
prop: 'endtime'
},
{
label: "等待时间",
align: "center",
width: "150",
prop: "waitTime",
label: '等待时间',
align: 'center',
width: '150',
prop: 'waitTime'
},
{
label: "办理时间",
align: "center",
width: "150",
prop: "handleTime",
label: '办理时间',
align: 'center',
width: '150',
prop: 'handleTime'
},
{
label: "扩展编号",
align: "center",
width: "150",
prop: "extNum",
label: '扩展编号',
align: 'center',
width: '150',
prop: 'extNum'
},
{
label: "操作",
align: "center",
fixed: "right",
width: "100",
label: '操作',
align: 'center',
fixed: 'right',
width: '100',
formatter: (row) => {
return (
<span
class="primary cursor-pointer"
v-hasPermi={["market:queueupreport:details"]}
v-hasPermi={['market:queueupreport:details']}
onClick={() => {
this.checkDetails(row);
}}
......@@ -367,12 +355,12 @@ export default {
查看详情
</span>
);
},
},
}
}
],
detailsInfo: {},
deptList: [], // 部门列表
hallList: [], // 大厅列表
hallList: [] // 大厅列表
};
},
......@@ -382,17 +370,17 @@ export default {
this.getSite(newVal);
},
deep: true,
immediate: true,
},
immediate: true
}
},
created() {},
methods: {
// 获取站点
getSite(data) {
if (JSON.stringify(data) !== "{}") {
if (JSON.stringify(data) !== '{}') {
this.page = 1;
this.size = 10;
if (data.type == "site") {
if (data.type == 'site') {
this.searchForm.siteId = data.id;
this.getQueueList();
this.getDepartment();
......@@ -416,7 +404,7 @@ export default {
size: this.size,
taketimeStart: this.searchForm.time[0],
taketimeEnd: this.searchForm.time[1],
siteId: this.searchForm.siteId,
siteId: this.searchForm.siteId
};
let val = `%${this.searchForm.keyword}%`;
obj[this.searchForm.type] = val;
......@@ -425,12 +413,12 @@ export default {
let { data, count } = res.data.data;
return {
data,
total: count,
total: count
};
} else {
return {
data: [],
total: 0,
total: 0
};
}
},
......@@ -439,14 +427,11 @@ export default {
this.loading = true;
let { data, total } = await this.getData(form);
data.forEach((v) => {
v.taketime =
v.taketime && this.$moment(v.taketime).format("YYYY-MM-DD HH:mm:ss");
v.endtime =
v.endtime && this.$moment(v.endtime).format("YYYY-MM-DD HH:mm:ss");
v.calltime =
v.calltime && this.$moment(v.calltime).format("YYYY-MM-DD HH:mm:ss");
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : "";
v.handleTime = v.handleTime ? formatSeconds(v.handleTime) : "";
v.taketime = v.taketime && this.$moment(v.taketime).format('YYYY-MM-DD HH:mm:ss');
v.endtime = v.endtime && this.$moment(v.endtime).format('YYYY-MM-DD HH:mm:ss');
v.calltime = v.calltime && this.$moment(v.calltime).format('YYYY-MM-DD HH:mm:ss');
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : '';
v.handleTime = v.handleTime ? formatSeconds(v.handleTime) : '';
});
this.tableData = data;
this.total = total;
......@@ -458,7 +443,7 @@ export default {
let res = await getDepartment({
page: 1,
size: -1,
siteId: this.searchForm.siteId,
siteId: this.searchForm.siteId
});
if (res.data.code == 1) {
let { data } = res.data.data;
......@@ -471,7 +456,7 @@ export default {
let res = await getHall({
page: 1,
size: -1,
siteId: this.searchForm.siteId,
siteId: this.searchForm.siteId
});
if (res.data.code == 1) {
let { data } = res.data.data;
......@@ -481,7 +466,7 @@ export default {
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getSite(this.curTreeData);
},
checkDetails(row) {
......@@ -504,38 +489,32 @@ export default {
tHeader,
filterVal,
data,
"排队数据报表" + this.$moment().format("YYYYMMDDHHmmss")
'排队数据报表' + this.$moment().format('YYYYMMDDHHmmss')
);
} else {
dataSection(this.getData, {}, (data) => {
if (!data.length) {
this.$message.warning("暂无数据");
this.$message.warning('暂无数据');
return;
}
data.forEach((v) => {
v.taketime =
v.taketime &&
this.$moment(v.taketime).format("YYYY-MM-DD HH:mm:ss");
v.endtime =
v.endtime &&
this.$moment(v.endtime).format("YYYY-MM-DD HH:mm:ss");
v.calltime =
v.calltime &&
this.$moment(v.calltime).format("YYYY-MM-DD HH:mm:ss");
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : "";
v.handleTime = v.handleTime ? formatSeconds(v.handleTime) : "";
v.taketime = v.taketime && this.$moment(v.taketime).format('YYYY-MM-DD HH:mm:ss');
v.endtime = v.endtime && this.$moment(v.endtime).format('YYYY-MM-DD HH:mm:ss');
v.calltime = v.calltime && this.$moment(v.calltime).format('YYYY-MM-DD HH:mm:ss');
v.waitTime = v.waitTime ? formatSeconds(v.waitTime) : '';
v.handleTime = v.handleTime ? formatSeconds(v.handleTime) : '';
});
export2Excel(
tHeader,
filterVal,
data,
"排队数据报表" + this.$moment().format("YYYYMMDDHHmmss")
'排队数据报表' + this.$moment().format('YYYYMMDDHHmmss')
);
});
}
this.exportLoading = false;
},
},
}
}
};
</script>
......
<template>
<el-drawer
title="详情"
:visible.sync="drawer"
size="60%"
@close="drawer = false"
>
<el-drawer title="详情" :visible.sync="drawer" size="60%" @close="drawer = false">
<div class="main h-full w-full p-[20px]">
<el-descriptions
:column="3"
border
size="medium"
labelClassName="label-name"
>
<el-descriptions :column="3" border size="medium" labelClassName="label-name">
<template v-for="(v, i) in dataInfo">
<el-descriptions-item
v-if="
(v.prop == 'photoautograph' || v.prop == 'picture') && v.content
"
v-if="(v.prop == 'photoautograph' || v.prop == 'picture') && v.content"
:key="i"
:label="v.title"
>
<el-image
style="width: 50px"
:src="v.content"
:preview-src-list="[v.content]"
>
<el-image style="width: 50px" :src="v.content" :preview-src-list="[v.content]">
</el-image>
</el-descriptions-item>
<el-descriptions-item v-else :key="i" :label="v.title">
......@@ -41,168 +25,168 @@ export default {
props: {
show: {
type: Boolean,
default: false,
default: false
},
info: {
required: true,
type: Object,
default: () => {},
},
default: () => {}
}
},
data() {
return {
detailsList: [
{
title: "身份证号",
prop: "peopleIdcard",
content: "",
title: '身份证号',
prop: 'peopleIdcard',
content: ''
},
{
title: "姓名",
prop: "peopleName",
content: "",
title: '姓名',
prop: 'peopleName',
content: ''
},
{
title: "性别",
prop: "peopleSex",
content: "",
title: '性别',
prop: 'peopleSex',
content: ''
},
{
title: "手机号",
prop: "peoplePhone",
content: "",
title: '手机号',
prop: 'peoplePhone',
content: ''
},
{
title: "评价选项",
prop: "pjOption",
content: "",
title: '评价选项',
prop: 'pjOption',
content: ''
},
{
title: "评价标签",
prop: "contentTag",
content: "",
title: '评价标签',
prop: 'contentTag',
content: ''
},
{
title: "评价人图片地址",
prop: "picUrl",
content: "",
title: '评价人图片地址',
prop: 'picUrl',
content: ''
},
{
title: "部门",
prop: "sectionName",
content: "",
title: '部门',
prop: 'sectionName',
content: ''
},
{
title: "大厅名称",
prop: "hallName",
content: "",
title: '大厅名称',
prop: 'hallName',
content: ''
},
{
title: "评价来源",
prop: "pjSource",
content: "",
title: '评价来源',
prop: 'pjSource',
content: ''
},
{
title: "手输意见",
prop: "opinion",
content: "",
title: '手输意见',
prop: 'opinion',
content: ''
},
{
title: "窗口名称",
prop: "windowName",
content: "",
title: '窗口名称',
prop: 'windowName',
content: ''
},
{
title: "窗口编号",
prop: "windowFromnum",
content: "",
title: '窗口编号',
prop: 'windowFromnum',
content: ''
},
{
title: "排队编号",
prop: "flounum",
content: "",
title: '排队编号',
prop: 'flounum',
content: ''
},
{
title: "窗口评价",
prop: "pjxt",
content: "",
title: '窗口评价',
prop: 'pjxt',
content: ''
},
{
title: "工作人员姓名",
prop: "workmanName",
content: "",
title: '工作人员姓名',
prop: 'workmanName',
content: ''
},
{
title: "工作人员工号",
prop: "workmanNumber",
content: "",
title: '工作人员工号',
prop: 'workmanNumber',
content: ''
},
{
title: "评价器MAC地址",
prop: "devicenum",
content: "",
title: '评价器MAC地址',
prop: 'devicenum',
content: ''
},
{
title: "评价状态",
prop: "evaluatestatus",
content: "",
title: '评价状态',
prop: 'evaluatestatus',
content: ''
},
{
title: "截图还是评价",
prop: "evaluatetype",
content: "",
title: '截图还是评价',
prop: 'evaluatetype',
content: ''
},
{
title: "截图地址",
prop: "photobefor",
content: "",
title: '截图地址',
prop: 'photobefor',
content: ''
},
{
title: "签字图片",
prop: "photoautograph",
content: "",
title: '签字图片',
prop: 'photoautograph',
content: ''
},
{
title: "抓拍评价人照片",
prop: "picture",
content: "",
title: '抓拍评价人照片',
prop: 'picture',
content: ''
},
{
title: "音视频地址",
prop: "process",
content: "",
title: '音视频地址',
prop: 'process',
content: ''
},
{
title: "评价标记",
prop: "eyevaluate",
content: "",
title: '评价标记',
prop: 'eyevaluate',
content: ''
},
{
title: "评价指向",
prop: "pjType",
content: "",
title: '评价指向',
prop: 'pjType',
content: ''
},
{
title: "评价时间",
prop: "pjTime",
content: "",
title: '评价时间',
prop: 'pjTime',
content: ''
},
{
title: "站点编码",
prop: "siteCode",
content: "",
title: '站点编码',
prop: 'siteCode',
content: ''
},
{
title: "站点名称",
prop: "siteName",
content: "",
title: '站点名称',
prop: 'siteName',
content: ''
},
{
title: "扩展编号",
prop: "extNum",
content: "",
},
],
title: '扩展编号',
prop: 'extNum',
content: ''
}
]
};
},
computed: {
......@@ -211,17 +195,17 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
this.$emit('update:show', val);
}
},
dataInfo() {
this.detailsList.forEach((v) => {
v.content = this.info[v.prop];
});
return this.detailsList;
},
}
},
methods: {},
methods: {}
};
</script>
......
<template>
<el-drawer
title="详情"
:visible.sync="drawer"
size="60%"
@close="drawer = false"
>
<el-drawer title="详情" :visible.sync="drawer" size="60%" @close="drawer = false">
<div class="main h-full w-full p-[20px]">
<el-descriptions
:column="3"
border
size="medium"
labelClassName="label-name"
>
<el-descriptions-item
v-for="(v, i) in dataInfo"
:key="i"
:label="v.title"
>
<el-descriptions :column="3" border size="medium" labelClassName="label-name">
<el-descriptions-item v-for="(v, i) in dataInfo" :key="i" :label="v.title">
{{ v.content }}
</el-descriptions-item>
</el-descriptions>
......@@ -29,158 +15,158 @@ export default {
props: {
show: {
type: Boolean,
default: false,
default: false
},
info: {
required: true,
type: Object,
default: () => {},
},
default: () => {}
}
},
data() {
return {
detailsList: [
{
title: "预约编号",
prop: "ordernumber",
content: "",
title: '预约编号',
prop: 'ordernumber',
content: ''
},
{
title: "叫号状态",
prop: "style",
content: "",
title: '叫号状态',
prop: 'style',
content: ''
},
{
title: "业务名称",
prop: "business",
content: "",
title: '业务名称',
prop: 'business',
content: ''
},
{
title: "窗口名称",
prop: "windowName",
content: "",
title: '窗口名称',
prop: 'windowName',
content: ''
},
{
title: "窗口编号",
prop: "windowFromnum",
content: "",
title: '窗口编号',
prop: 'windowFromnum',
content: ''
},
{
title: "流水编号,当天的第xxx号",
prop: "flownum",
content: "",
title: '流水编号,当天的第xxx号',
prop: 'flownum',
content: ''
},
{
title: "呼叫转移号",
prop: "formernum",
content: "",
title: '呼叫转移号',
prop: 'formernum',
content: ''
},
{
title: "姓名",
prop: "peopleName",
content: "",
title: '姓名',
prop: 'peopleName',
content: ''
},
{
title: "身份证号",
prop: "peopleIdcard",
content: "",
title: '身份证号',
prop: 'peopleIdcard',
content: ''
},
{
title: "性别",
prop: "peopleSex",
content: "",
title: '性别',
prop: 'peopleSex',
content: ''
},
{
title: "手机号",
prop: "peoplePhone",
content: "",
title: '手机号',
prop: 'peoplePhone',
content: ''
},
{
title: "工作人员姓名",
prop: "workmanName",
content: "",
title: '工作人员姓名',
prop: 'workmanName',
content: ''
},
{
title: "工作人员工号",
prop: "workmanNumber",
content: "",
title: '工作人员工号',
prop: 'workmanNumber',
content: ''
},
{
title: "取号时间",
prop: "taketime",
content: "",
title: '取号时间',
prop: 'taketime',
content: ''
},
{
title: "叫号时间",
prop: "calltime",
content: "",
title: '叫号时间',
prop: 'calltime',
content: ''
},
{
title: "结束时间",
prop: "endtime",
content: "",
title: '结束时间',
prop: 'endtime',
content: ''
},
{
title: "等待时间",
prop: "waitTime",
content: "",
title: '等待时间',
prop: 'waitTime',
content: ''
},
{
title: "办理时间",
prop: "handleTime",
content: "",
title: '办理时间',
prop: 'handleTime',
content: ''
},
{
title: "取号设备类型",
prop: "deviceType",
content: "",
title: '取号设备类型',
prop: 'deviceType',
content: ''
},
{
title: "取号设备名称",
prop: "deviceName",
content: "",
title: '取号设备名称',
prop: 'deviceName',
content: ''
},
{
title: "呼叫设备",
prop: "callName",
content: "",
title: '呼叫设备',
prop: 'callName',
content: ''
},
{
title: "事项名称",
prop: "matterName",
content: "",
title: '事项名称',
prop: 'matterName',
content: ''
},
{
title: "排号队列ID,唯一",
prop: "queueid",
content: "",
title: '排号队列ID,唯一',
prop: 'queueid',
content: ''
},
{
title: "大厅名称",
prop: "hallName",
content: "测试",
title: '大厅名称',
prop: 'hallName',
content: '测试'
},
{
title: "站点ID",
prop: "siteId",
content: "",
title: '站点ID',
prop: 'siteId',
content: ''
},
{
title: "站点编码",
prop: "siteCode",
content: "",
title: '站点编码',
prop: 'siteCode',
content: ''
},
{
title: "站点名称",
prop: "siteName",
content: "",
title: '站点名称',
prop: 'siteName',
content: ''
},
{
title: "扩展编号",
prop: "extNum",
content: "",
},
],
title: '扩展编号',
prop: 'extNum',
content: ''
}
]
};
},
computed: {
......@@ -189,17 +175,17 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
this.$emit('update:show', val);
}
},
dataInfo() {
this.detailsList.forEach((v) => {
v.content = this.info[v.prop];
});
return this.detailsList;
},
}
},
methods: {},
methods: {}
};
</script>
......
......@@ -5,35 +5,34 @@
</template>
<script>
import storage from "@/utils/storage";
import { mapMutations } from "vuex";
import { getHomeData } from "@/api/home";
import { generateRoutes, filterBtn } from "@/utils";
import { calcMenu } from "@/router";
import storage from '@/utils/storage';
import { mapMutations } from 'vuex';
import { getHomeData } from '@/api/home';
import { generateRoutes, filterBtn } from '@/utils';
import { calcMenu } from '@/router';
export default {
data() {
return {
menuList: [],
menuList: []
};
},
created() {
this.getToken();
},
methods: {
...mapMutations("user", [
"SET_token",
"SET_sysName",
"SET_sysLogo",
"SET_path",
"SET_userInfo",
"SET_permissions",
"SET_routes",
"SET_menusList",
...mapMutations('user', [
'SET_token',
'SET_sysName',
'SET_sysLogo',
'SET_path',
'SET_userInfo',
'SET_permissions',
'SET_routes',
'SET_menusList'
]),
// 获取token
async getToken() {
let { token, userInfo, siteid, siteName, sysName, sysLogo, path } =
this.$route.query;
let { token, userInfo, siteid, siteName, sysName, sysLogo, path } = this.$route.query;
if (token && userInfo) {
userInfo = JSON.parse(userInfo);
this.SET_userInfo(userInfo);
......@@ -41,11 +40,11 @@ export default {
this.SET_sysName(sysName);
this.SET_sysLogo(sysLogo);
this.SET_path(path);
storage.set(2, "siteId", siteid);
storage.set(2, "siteName", siteName);
storage.set(2, 'siteId', siteid);
storage.set(2, 'siteName', siteName);
await this.getIndixData();
} else {
this.$message.warning("跳转失败,请重新登录");
this.$message.warning('跳转失败,请重新登录');
setTimeout(() => {
location.href = process.env.VUE_APP_API_portal_URL;
}, 2000);
......@@ -67,7 +66,7 @@ export default {
let path = routes[0].path;
this.$router.push(path);
} else {
this.$message.warning("暂无权限,请联系管理员!");
this.$message.warning('暂无权限,请联系管理员!');
}
}
},
......@@ -78,8 +77,8 @@ export default {
.filter((v) => v.perms)
.map((v) => v.perms);
this.SET_permissions(btnPermissions);
},
},
}
}
};
</script>
......
......@@ -8,12 +8,12 @@
export default {
data() {
return {
subMenus: [],
subMenus: []
};
},
computed: {},
created() {},
methods: {},
methods: {}
};
</script>
......
......@@ -2,11 +2,7 @@
<div class="h-full w-full">
<TableHeader>
<div slot="left">
<el-button
size="small"
type="primary"
v-hasPermi="['system:access:add']"
@click="handleAdd"
<el-button size="small" type="primary" v-hasPermi="['system:access:add']" @click="handleAdd"
>新增</el-button
>
<el-button
......@@ -30,9 +26,7 @@
></el-input>
</el-form-item>
<el-form-item>
<el-button size="small" type="primary" @click="handleSearch"
>搜 索</el-button
>
<el-button size="small" type="primary" @click="handleSearch">搜 索</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="handleReset">重 置</el-button>
......@@ -77,63 +71,57 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import AddAccess from "./components/AddAccess.vue";
import AccessSystem from "./components/AccessSystem.vue";
import { getAccessList, delAccess } from "@/api/system";
import TableHeader from '@/components/TableHeader.vue';
import AddAccess from './components/AddAccess.vue';
import AccessSystem from './components/AccessSystem.vue';
import { getAccessList, delAccess } from '@/api/system';
export default {
components: {
TableHeader,
AddAccess,
AccessSystem,
AccessSystem
},
data() {
return {
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "区域名称",
prop: "areaName",
align: "center",
label: '区域名称',
prop: 'areaName',
align: 'center'
},
{
label: "区域编码",
prop: "areaCode",
align: "center",
label: '区域编码',
prop: 'areaCode',
align: 'center'
},
{
label: "背景图片",
prop: "bigPath",
align: "center",
label: '背景图片',
prop: 'bigPath',
align: 'center',
formatter: (row) => {
return (
<el-image
src={row.bigPath}
previewSrcList={[row.bigPath]}
class="h-[25px]"
/>
);
},
return <el-image src={row.bigPath} previewSrcList={[row.bigPath]} class="h-[25px]" />;
}
},
{
label: "接入系统",
align: "center",
label: '接入系统',
align: 'center',
formatter: (row) => {
if (row.accessSystemList && row.accessSystemList.length) {
return (
......@@ -144,16 +132,16 @@ export default {
</div>
);
}
},
}
},
{
label: "系统标签",
align: "center",
label: '系统标签',
align: 'center',
formatter: (row) => {
if (row.tag) {
return (
<div class="flex flex-wrap gap-2">
{row.tag.split(",").map((v) => {
{row.tag.split(',').map((v) => {
return (
<el-tag type="info" size="small">
{v}
......@@ -163,59 +151,59 @@ export default {
</div>
);
}
},
}
},
{
label: "对接时间",
align: "center",
label: '对接时间',
align: 'center',
formatter: (row) => {
if (row.accessTime) {
return this.$moment(row.accessTime).format("YYYY-MM-DD");
return this.$moment(row.accessTime).format('YYYY-MM-DD');
}
},
}
},
{
label: "排序",
prop: "sort",
width: "100",
align: "center",
label: '排序',
prop: 'sort',
width: '100',
align: 'center'
},
{
label: "描述",
prop: "content",
align: "center",
showOverflowTooltip: true,
label: '描述',
prop: 'content',
align: 'center',
showOverflowTooltip: true
},
{
label: "备注",
prop: "remark",
align: "center",
showOverflowTooltip: true,
label: '备注',
prop: 'remark',
align: 'center',
showOverflowTooltip: true
},
{
label: "操作",
align: "center",
width: "180",
label: '操作',
align: 'center',
width: '180',
formatter: (row) => {
return (
<div class="flex justify-center gap-4">
<span
v-hasPermi={["system:access:accessSystem"]}
v-hasPermi={['system:access:accessSystem']}
class="primary cursor-pointer"
onClick={() => this.accessSystem(row)}
>
接入系统
</span>
<span
v-hasPermi={["system:access:edit"]}
v-hasPermi={['system:access:edit']}
class="primary cursor-pointer"
onClick={() => this.handleEdit(row)}
>
编辑
</span>
<span
v-hasPermi={["system:access:remove"]}
v-hasPermi={['system:access:remove']}
class="delete cursor-pointer"
onClick={() => this.handleDel(row.id)}
>
......@@ -223,11 +211,11 @@ export default {
</span>
</div>
);
},
},
}
}
],
searchForm: {
areaName: "",
areaName: ''
},
tableData: [],
page: 1,
......@@ -236,11 +224,11 @@ export default {
loading: false,
selectRows: [],
show: false,
title: "新增",
title: '新增',
dict: {}, // 字典
systemList: [],
accessShow: false,
areaInfo: {},
areaInfo: {}
};
},
created() {
......@@ -254,7 +242,7 @@ export default {
let res = await getAccessList({
page: this.page,
size: this.size,
areaName: `%${this.searchForm.areaName}%`,
areaName: `%${this.searchForm.areaName}%`
});
this.loading = false;
if (res.data.code == 1) {
......@@ -271,23 +259,23 @@ export default {
// 批量移除
handleDelAll() {
if (!this.selectRows.length) {
this.$message.warning("请先勾选数据");
this.$message.warning('请先勾选数据');
return;
}
let ids = this.selectRows.map((v) => v.id).join(",");
let ids = this.selectRows.map((v) => v.id).join(',');
this.handleDel(ids);
},
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getAccessList();
},
// 重置
handleReset() {
this.page = 1;
this.$clearSelection("MyTable");
this.$resetForm("searchForm");
this.$clearSelection('MyTable');
this.$resetForm('searchForm');
this.getAccessList();
},
// 选中
......@@ -297,24 +285,24 @@ export default {
// 新增
handleAdd() {
this.title = "新增";
this.title = '新增';
this.$refs.AddAccess.onAdd();
this.show = true;
},
// 编辑
handleEdit(row) {
this.title = "编辑";
this.title = '编辑';
let data = this.$cloneDeep(row);
this.$refs.AddAccess.onEdit(data);
this.show = true;
},
// 移除
handleDel(id) {
this.$confirm("此操作将删除所选数据,是否继续?", "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "btn-custom-cancel",
type: "warning",
this.$confirm('此操作将删除所选数据,是否继续?', '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
})
.then(async () => {
let res = await delAccess({ id });
......@@ -322,19 +310,19 @@ export default {
if (code === 1) {
this.$message.success(msg);
this.getAccessList();
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
}
})
.catch(() => {
console.log("取消成功!");
console.log('取消成功!');
});
},
accessSystem(row) {
let data = this.$cloneDeep(row);
this.$refs.AccessSystem.onAdd(data);
this.accessShow = true;
},
},
}
}
};
</script>
......
......@@ -8,32 +8,18 @@
<div class="main w-full">
<el-button size="small" type="primary" @click="addSystem">添加</el-button>
<el-table :data="accessSystemList" style="width: 100%">
<el-table-column type="index" :index="1" label="序号" align="center">
</el-table-column>
<el-table-column type="index" :index="1" label="序号" align="center"> </el-table-column>
<el-table-column prop="systemName" align="center" label="系统名称">
<template slot-scope="scope">
<el-input
size="small"
placeholder="请输入"
v-model="scope.row.systemName"
></el-input>
<el-input size="small" placeholder="请输入" v-model="scope.row.systemName"></el-input>
</template>
</el-table-column>
<el-table-column prop="systemCode" align="center" label="系统编码">
<template slot-scope="scope">
<el-input
size="small"
placeholder="请输入"
v-model="scope.row.systemCode"
></el-input>
<el-input size="small" placeholder="请输入" v-model="scope.row.systemCode"></el-input>
</template>
</el-table-column>
<el-table-column
prop="accessTime"
align="center"
label="接入日期"
width="220"
>
<el-table-column prop="accessTime" align="center" label="接入日期" width="220">
<template slot-scope="scope">
<el-date-picker
style="width: 150px"
......@@ -46,18 +32,9 @@
</el-date-picker>
</template>
</el-table-column>
<el-table-column
width="80"
align="center"
prop="enabled"
label="启\停用"
>
<el-table-column width="80" align="center" prop="enabled" label="启\停用">
<template slot-scope="scope">
<YSwitch
active-text="启用"
inactive-text="停用"
v-model="scope.row.enabled"
></YSwitch>
<YSwitch active-text="启用" inactive-text="停用" v-model="scope.row.enabled"></YSwitch>
</template>
</el-table-column>
<el-table-column align="center" width="60" prop="enabled" label="删除">
......@@ -73,42 +50,36 @@
<div class="footer">
<el-button size="small" @click="handleClose">取 消</el-button>
<el-button size="small" @click="handleReset">重 置</el-button>
<el-button
size="small"
type="primary"
:loading="loading"
@click="handleOk"
>确 定</el-button
>
<el-button size="small" type="primary" :loading="loading" @click="handleOk">确 定</el-button>
</div>
</el-drawer>
</template>
<script>
import { saveAccess, deleteSystem } from "@/api/system";
import { saveAccess, deleteSystem } from '@/api/system';
export default {
props: {
show: {
type: Boolean,
default: false,
default: false
},
systemList: {
required: true,
type: Array,
default: () => [],
},
default: () => []
}
},
data() {
return {
loading: false,
form: {
systemName: "",
systemCode: "",
accessTime: "",
enabled: 1,
systemName: '',
systemCode: '',
accessTime: '',
enabled: 1
},
accessSystemList: [],
areaInfo: {},
areaInfo: {}
};
},
computed: {
......@@ -117,9 +88,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
methods: {
......@@ -128,11 +99,11 @@ export default {
this.accessSystemList.push(row);
},
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.drawer = false;
},
handleReset() {
this.$resetForm("form");
this.$resetForm('form');
this.drawer = false;
},
......@@ -150,7 +121,7 @@ export default {
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -163,8 +134,8 @@ export default {
}
}
this.accessSystemList.splice($index, 1);
},
},
}
}
};
</script>
......
......@@ -9,19 +9,9 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
:model="form"
:rules="rules"
size="medium"
label-width="100px"
>
<el-form ref="form" :model="form" :rules="rules" size="medium" label-width="100px">
<el-form-item label="区域" prop="areaName">
<InputTree
:treeData="initTree"
v-model="form.areaName"
@change="changeArea"
></InputTree>
<InputTree :treeData="initTree" v-model="form.areaName" @change="changeArea"></InputTree>
</el-form-item>
<el-form-item label="系统标签" prop="tag">
<div class="flex gap-2">
......@@ -65,11 +55,7 @@
</el-date-picker>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number
v-model="form.sort"
controls-position="right"
:min="0"
></el-input-number>
<el-input-number v-model="form.sort" controls-position="right" :min="0"></el-input-number>
</el-form-item>
<el-form-item label="描述" prop="content">
<el-input
......@@ -93,11 +79,7 @@
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
type="primary"
:loading="loading"
@click="handleOk"
<el-button size="medium" type="primary" :loading="loading" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -106,74 +88,70 @@
</template>
<script>
import { mapState } from "vuex";
import { saveAccess } from "@/api/system";
import InputTree from "./InputTree.vue";
import { mapState } from 'vuex';
import { saveAccess } from '@/api/system';
import InputTree from './InputTree.vue';
export default {
components: {
InputTree,
InputTree
},
props: {
title: {
type: String,
required: true,
default: "",
default: ''
},
show: {
type: Boolean,
required: true,
default: false,
},
default: false
}
},
data() {
return {
api: process.env.VUE_APP_API_BASE_URL,
loading: false,
inputVisible: false,
inputValue: "",
inputValue: '',
bigPathList: [],
form: {
areaName: "",
areaCode: "",
areaId: "",
siteId: "",
siteCode: "",
siteName: "",
latitude: "",
longitude: "",
type: "",
bigPath: "",
areaName: '',
areaCode: '',
areaId: '',
siteId: '',
siteCode: '',
siteName: '',
latitude: '',
longitude: '',
type: '',
bigPath: '',
tag: [],
sort: 99,
remark: "",
icon: "",
accessTime: "", // 接入时间
content: "", // 内容
accessSystemList: [],
remark: '',
icon: '',
accessTime: '', // 接入时间
content: '', // 内容
accessSystemList: []
},
rules: {
areaName: [
{ required: true, message: "请选择区域", trigger: "change" },
],
bigPath: [
{ required: true, message: "请上传背景图片", trigger: "change" },
],
},
areaName: [{ required: true, message: '请选择区域', trigger: 'change' }],
bigPath: [{ required: true, message: '请上传背景图片', trigger: 'change' }]
}
};
},
computed: {
...mapState("user", ["areaTree"]),
...mapState('user', ['areaTree']),
Visible: {
get() {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
this.$emit('update:show', val);
}
},
initTree() {
return this.addAreaNameField(this.areaTree);
},
}
},
methods: {
// 确定
......@@ -183,12 +161,12 @@ export default {
this.loading = true;
let res = await saveAccess({
...this.form,
tag: this.form.tag.join(","),
tag: this.form.tag.join(',')
});
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -198,14 +176,14 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
setTimeout(() => {
this.form = row;
if (this.form.tag) {
this.form.tag = this.form.tag.split(",");
this.form.tag = this.form.tag.split(',');
} else {
this.form.tag = [];
}
......@@ -213,8 +191,8 @@ export default {
this.bigPathList = [
{
name: this.form.bigPath,
url: this.form.bigPath,
},
url: this.form.bigPath
}
];
}
}, 10);
......@@ -222,33 +200,24 @@ export default {
// 重置
handleRest() {
this.bigPathList = [];
this.$resetForm("form");
this.$resetForm('form');
},
// 关闭
handleClose() {
this.bigPathList = [];
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
changeArea(row) {
let {
areaName,
areaCode,
id,
label,
siteCode,
latitude,
longitude,
type,
} = row;
let { areaName, areaCode, id, label, siteCode, latitude, longitude, type } = row;
this.form.areaId = "";
this.form.siteId = "";
this.form.siteName = "";
this.form.areaId = '';
this.form.siteId = '';
this.form.siteName = '';
if (type === "area") {
if (type === 'area') {
this.form.areaId = id;
} else if (type === "site") {
} else if (type === 'site') {
this.form.siteId = id;
this.form.siteName = label;
}
......@@ -280,7 +249,7 @@ export default {
showInput() {
if (this.form.tag.length >= 2) {
this.$message.warning("暂时只能添加两个系统标签");
this.$message.warning('暂时只能添加两个系统标签');
return;
}
this.inputVisible = true;
......@@ -293,15 +262,15 @@ export default {
let inputValue = this.inputValue;
if (inputValue) {
if (this.form.tag.includes(inputValue)) {
this.$message.warning("已存在相同标签");
this.$message.warning('已存在相同标签');
return;
}
this.form.tag.push(inputValue);
}
this.inputVisible = false;
this.inputValue = "";
},
},
this.inputValue = '';
}
}
};
</script>
......
......@@ -23,41 +23,41 @@
<script>
export default {
name: "InputTree",
name: 'InputTree',
props: {
treeData: {
type: Array,
default: () => {
return [];
},
}
},
value: {
default: "",
default: ''
},
defaultProps: {
type: Object,
default: () => {
return {
children: "children",
label: "areaName",
children: 'children',
label: 'areaName'
};
},
},
}
}
},
data() {
return {};
},
methods: {
handleClear() {
this.$emit("input", "");
this.$emit("change", {});
this.$emit('input', '');
this.$emit('change', {});
this.$refs.tree.setCurrentKey(null);
},
handleNodeClick(row) {
this.$emit("input", row.areaName);
this.$emit("change", row);
},
},
this.$emit('input', row.areaName);
this.$emit('change', row);
}
}
};
</script>
......
......@@ -2,12 +2,8 @@
<div class="h-full w-full">
<TableHeader>
<div slot="left">
<el-button size="small" type="primary" @click="handleAdd"
>新增</el-button
>
<el-button size="small" type="danger" @click="handleDelAll"
>批量删除</el-button
>
<el-button size="small" type="primary" @click="handleAdd">新增</el-button>
<el-button size="small" type="danger" @click="handleDelAll">批量删除</el-button>
</div>
<div slot="right">
<el-form ref="searchForm" :model="searchForm" inline>
......@@ -22,9 +18,7 @@
></el-input>
</el-form-item>
<el-form-item>
<el-button size="small" type="primary" @click="handleSearch"
>搜 索</el-button
>
<el-button size="small" type="primary" @click="handleSearch">搜 索</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="handleReset">重 置</el-button>
......@@ -63,89 +57,83 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import { getSystemList, deleteSystem } from "@/api/system";
import AddAreaSystem from "./components/AddAreaSystem.vue";
import TableHeader from '@/components/TableHeader.vue';
import { getSystemList, deleteSystem } from '@/api/system';
import AddAreaSystem from './components/AddAreaSystem.vue';
export default {
components: {
TableHeader,
AddAreaSystem,
AddAreaSystem
},
data() {
return {
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "系统名称",
prop: "systemName",
align: "center",
label: '系统名称',
prop: 'systemName',
align: 'center'
},
{
label: "系统编码",
prop: "systemCode",
align: "center",
label: '系统编码',
prop: 'systemCode',
align: 'center'
},
{
label: "创建时间",
align: "center",
label: '创建时间',
align: 'center',
formatter: (row) => {
if (row.createTime) {
return this.$moment(row.createTime).format("YYYY-MM-DD HH:mm:ss");
return this.$moment(row.createTime).format('YYYY-MM-DD HH:mm:ss');
}
},
}
},
{
label: "排序",
prop: "sort",
align: "center",
label: '排序',
prop: 'sort',
align: 'center'
},
{
label: "备注",
prop: "remark",
align: "center",
label: '备注',
prop: 'remark',
align: 'center'
},
{
label: "操作",
align: "center",
width: "120",
label: '操作',
align: 'center',
width: '120',
formatter: (row) => {
return (
<div class="flex justify-center gap-4">
<span
class="primary cursor-pointer"
onClick={() => this.handleEdit(row)}
>
<span class="primary cursor-pointer" onClick={() => this.handleEdit(row)}>
编辑
</span>
<span
class="delete cursor-pointer"
onClick={() => this.handleDel(row.id)}
>
<span class="delete cursor-pointer" onClick={() => this.handleDel(row.id)}>
删除
</span>
</div>
);
},
},
}
}
],
searchForm: {
systemName: "",
systemName: ''
},
tableData: [],
page: 1,
......@@ -154,8 +142,8 @@ export default {
loading: false,
selectRows: [],
show: false,
title: "新增",
dict: {}, // 字典
title: '新增',
dict: {} // 字典
};
},
created() {
......@@ -169,7 +157,7 @@ export default {
let res = await getSystemList({
page: this.page,
size: this.size,
systemName: `%${this.searchForm.systemName}%`,
systemName: `%${this.searchForm.systemName}%`
});
this.loading = false;
if (res.data.code == 1) {
......@@ -186,23 +174,23 @@ export default {
// 批量移除
handleDelAll() {
if (!this.selectRows.length) {
this.$message.warning("请先勾选数据");
this.$message.warning('请先勾选数据');
return;
}
let ids = this.selectRows.map((v) => v.id).join(",");
let ids = this.selectRows.map((v) => v.id).join(',');
this.handleDel(ids);
},
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getSystemList();
},
// 重置
handleReset() {
this.page = 1;
this.$clearSelection("MyTable");
this.$resetForm("searchForm");
this.$clearSelection('MyTable');
this.$resetForm('searchForm');
this.getSystemList();
},
// 选中
......@@ -212,24 +200,24 @@ export default {
// 新增
handleAdd() {
this.title = "新增";
this.title = '新增';
this.$refs.AddAreaSystem.onAdd();
this.show = true;
},
// 编辑
handleEdit(row) {
this.title = "编辑";
this.title = '编辑';
let data = this.$cloneDeep(row);
this.$refs.AddAreaSystem.onEdit(data);
this.show = true;
},
// 移除
handleDel(id) {
this.$confirm("此操作将删除所选数据,是否继续?", "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "btn-custom-cancel",
type: "warning",
this.$confirm('此操作将删除所选数据,是否继续?', '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
})
.then(async () => {
let res = await deleteSystem({ id });
......@@ -237,14 +225,14 @@ export default {
if (code === 1) {
this.$message.success(msg);
this.getSystemList();
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
}
})
.catch(() => {
console.log("取消成功!");
console.log('取消成功!');
});
},
},
}
}
};
</script>
......
......@@ -9,31 +9,15 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
:model="form"
:rules="rules"
size="small"
label-width="100px"
>
<el-form ref="form" :model="form" :rules="rules" size="small" label-width="100px">
<el-form-item label="系统名称" prop="systemName">
<el-input
placeholder="请输入系统名称"
v-model="form.systemName"
></el-input>
<el-input placeholder="请输入系统名称" v-model="form.systemName"></el-input>
</el-form-item>
<el-form-item label="系统编码" prop="systemCode">
<el-input
placeholder="请输入系统编码"
v-model="form.systemCode"
></el-input>
<el-input placeholder="请输入系统编码" v-model="form.systemCode"></el-input>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number
v-model="form.sort"
controls-position="right"
:min="0"
></el-input-number>
<el-input-number v-model="form.sort" controls-position="right" :min="0"></el-input-number>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
......@@ -47,11 +31,7 @@
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="small" @click="handleRest">重 置</el-button>
<el-button
size="small"
type="primary"
:loading="loading"
@click="handleOk"
<el-button size="small" type="primary" :loading="loading" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -60,38 +40,34 @@
</template>
<script>
import { saveSystem } from "@/api/system";
import { saveSystem } from '@/api/system';
export default {
components: {},
props: {
title: {
type: String,
required: true,
default: "",
default: ''
},
show: {
type: Boolean,
required: true,
default: false,
},
default: false
}
},
data() {
return {
loading: false,
form: {
systemName: "",
systemCode: "",
systemName: '',
systemCode: '',
sort: 99,
remark: "",
remark: ''
},
rules: {
systemName: [
{ required: true, message: "请输入系统名称", trigger: "blur" },
],
systemCode: [
{ required: true, message: "请输入系统编码", trigger: "blur" },
],
},
systemName: [{ required: true, message: '请输入系统名称', trigger: 'blur' }],
systemCode: [{ required: true, message: '请输入系统编码', trigger: 'blur' }]
}
};
},
computed: {
......@@ -100,9 +76,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
methods: {
// 确定
......@@ -114,7 +90,7 @@ export default {
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -124,7 +100,7 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
......@@ -134,14 +110,14 @@ export default {
},
// 重置
handleRest() {
this.$resetForm("form");
this.$resetForm('form');
},
// 关闭
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
},
}
}
};
</script>
......
......@@ -2,11 +2,7 @@
<div class="h-full w-full">
<TableHeader>
<div slot="left">
<el-button
size="small"
type="primary"
v-hasPermi="['system:menu:add']"
@click="handleAdd"
<el-button size="small" type="primary" v-hasPermi="['system:menu:add']" @click="handleAdd"
>新增</el-button
>
<!-- <el-button size="small" type="danger" @click="handleDelAll"
......@@ -70,19 +66,14 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import AddMenu from "./components/AddMenu.vue";
import {
getMenuList,
deleteMenu,
saveMenu,
changeMenuSort,
} from "@/api/system";
import { buildTree } from "@/utils";
import TableHeader from '@/components/TableHeader.vue';
import AddMenu from './components/AddMenu.vue';
import { getMenuList, deleteMenu, saveMenu, changeMenuSort } from '@/api/system';
import { buildTree } from '@/utils';
export default {
components: {
TableHeader,
AddMenu,
AddMenu
},
data() {
return {
......@@ -109,55 +100,55 @@ export default {
// align: "center",
// },
{
label: "菜单名称",
prop: "name",
label: '菜单名称',
prop: 'name'
// align: "center",
},
{
label: "ID",
prop: "id",
align: "center",
label: 'ID',
prop: 'id',
align: 'center'
},
{
label: "图标",
align: "center",
prop: "imgPath",
label: '图标',
align: 'center',
prop: 'imgPath',
formatter: (row) => {
if (row.imgPath) {
return <i class={row.imgPath}></i>;
}
},
}
},
{
label: "权限类型",
prop: "authType",
align: "center",
label: '权限类型',
prop: 'authType',
align: 'center',
formatter: (row) => {
return this.dict.authType[row.authType];
},
}
},
{
label: "父ID",
prop: "parentId",
align: "center",
label: '父ID',
prop: 'parentId',
align: 'center'
},
{
label: "地址",
prop: "url",
align: "center",
label: '地址',
prop: 'url',
align: 'center'
},
{
label: "类型",
prop: "menuType",
align: "center",
label: '类型',
prop: 'menuType',
align: 'center',
formatter: (row) => {
return this.dict.menuType[row.menuType];
},
}
},
{
label: "状态",
prop: "status",
align: "center",
label: '状态',
prop: 'status',
align: 'center',
formatter: (row) => {
return (
<el-switch
......@@ -169,35 +160,35 @@ export default {
}}
></el-switch>
);
},
}
},
{
label: "操作",
align: "center",
width: "180",
label: '操作',
align: 'center',
width: '180',
formatter: (row) => {
return (
<div class="flex items-center justify-center gap-4">
<i
v-hasPermi={["system:menu:up"]}
v-hasPermi={['system:menu:up']}
class="el-icon-top primary cursor-pointer"
onClick={() => this.changeMenuSort(row.id, 0)}
></i>
<i
v-hasPermi={["system:menu:down"]}
v-hasPermi={['system:menu:down']}
class="el-icon-bottom primary cursor-pointer"
onClick={() => this.changeMenuSort(row.id, 1)}
></i>
<span
v-hasPermi={["system:menu:edit"]}
v-hasPermi={['system:menu:edit']}
class="primary cursor-pointer"
onClick={() => this.handleEdit(row)}
>
编辑
</span>
<span
v-hasPermi={["system:menu:remove"]}
v-hasPermi={['system:menu:remove']}
class="delete cursor-pointer"
onClick={() => this.handleDel(row.id)}
>
......@@ -205,11 +196,11 @@ export default {
</span>
</div>
);
},
},
}
}
],
searchForm: {
name: "",
name: ''
},
tableData: [],
menuList: [],
......@@ -219,9 +210,9 @@ export default {
loading: false,
selectRows: [],
show: false,
title: "新增",
title: '新增',
dict: {}, // 字典
isAllSelected: false,
isAllSelected: false
};
},
created() {
......@@ -235,13 +226,13 @@ export default {
this.menuList = [
{
id: 0,
name: "",
},
name: ''
}
];
let res = await getMenuList({
page: this.page,
size: this.size,
name: `%${this.searchForm.name}%`,
name: `%${this.searchForm.name}%`
});
this.loading = false;
if (res.data.code == 1) {
......@@ -259,23 +250,23 @@ export default {
// 批量移除
handleDelAll() {
if (!this.selectRows.length) {
this.$message.warning("请先勾选数据");
this.$message.warning('请先勾选数据');
return;
}
let ids = this.selectRows.map((v) => v.id).join(",");
let ids = this.selectRows.map((v) => v.id).join(',');
this.handleDel(ids);
},
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getMenuList();
},
// 重置
handleReset() {
this.page = 1;
this.$clearSelection("MyTable");
this.$resetForm("searchForm");
this.$clearSelection('MyTable');
this.$resetForm('searchForm');
this.getMenuList();
},
// 选中
......@@ -285,24 +276,24 @@ export default {
// 新增
handleAdd() {
this.title = "新增";
this.title = '新增';
this.$refs.AddMenu.onAdd();
this.show = true;
},
// 编辑
handleEdit(row) {
this.title = "编辑";
this.title = '编辑';
let data = this.$cloneDeep(row);
this.$refs.AddMenu.onEdit(data);
this.show = true;
},
// 移除
handleDel(id) {
this.$confirm("此操作将删除所选数据,是否继续?", "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "btn-custom-cancel",
type: "warning",
this.$confirm('此操作将删除所选数据,是否继续?', '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
})
.then(async () => {
let res = await deleteMenu({ id });
......@@ -310,11 +301,11 @@ export default {
if (code === 1) {
this.$message.success(msg);
this.getMenuList();
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
}
})
.catch(() => {
console.log("取消成功!");
console.log('取消成功!');
});
},
async handleStatus(row, status) {
......@@ -330,11 +321,11 @@ export default {
async changeMenuSort(id, type) {
let res = await changeMenuSort({ id, type });
if (res.data.code == 1) {
this.$message.success("更改排序成功");
this.$message.success('更改排序成功');
this.getMenuList();
}
},
},
}
}
};
</script>
......
......@@ -9,13 +9,7 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
:model="form"
:rules="rules"
size="medium"
label-width="130px"
>
<el-form ref="form" :model="form" :rules="rules" size="medium" label-width="130px">
<el-form-item label="父级菜单" prop="parentId">
<treeselect
v-model="form.parentId"
......@@ -27,36 +21,21 @@
</el-form-item>
<el-form-item label="菜单类型" prop="menuType">
<el-radio-group v-model="form.menuType">
<el-radio
v-for="(item, key) in dict.menuType"
:key="key"
:label="Number(key)"
>{{ item }}</el-radio
>
<el-radio v-for="(item, key) in dict.menuType" :key="key" :label="Number(key)">{{
item
}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="菜单名称" prop="name">
<el-input
placeholder="请输入菜单名称"
v-model="form.name"
clearable
></el-input>
<el-input placeholder="请输入菜单名称" v-model="form.name" clearable></el-input>
</el-form-item>
<el-form-item label="菜单图标" prop="imgPath" v-if="form.menuType != 2">
<IconSelect v-model="form.imgPath"></IconSelect>
</el-form-item>
<el-form-item
label="权限类型"
prop="authType"
v-if="form.menuType != 2"
>
<el-select
clearable
v-model="form.authType"
placeholder="请选择权限类型"
>
<el-form-item label="权限类型" prop="authType" v-if="form.menuType != 2">
<el-select clearable v-model="form.authType" placeholder="请选择权限类型">
<el-option
v-for="(item, key) in dict.authType"
:key="key"
......@@ -73,11 +52,7 @@
</el-tooltip>
路由地址
</span>
<el-input
clearable
placeholder="请输入菜单路由地址"
v-model="form.url"
></el-input>
<el-input clearable placeholder="请输入菜单路由地址" v-model="form.url"></el-input>
</el-form-item>
<el-form-item prop="component" v-if="form.menuType != 2">
<span slot="label">
......@@ -89,11 +64,7 @@
</el-tooltip>
组件路径
</span>
<el-input
clearable
placeholder="请输入组件路径"
v-model="form.component"
></el-input>
<el-input clearable placeholder="请输入组件路径" v-model="form.component"></el-input>
</el-form-item>
<el-form-item prop="activeDir" v-if="form.menuType != 2">
<span slot="label">
......@@ -102,57 +73,37 @@
</el-tooltip>
激活菜单
</span>
<el-input
clearable
placeholder="请输入激活菜单地址"
v-model="form.activeDir"
></el-input>
<el-input clearable placeholder="请输入激活菜单地址" v-model="form.activeDir"></el-input>
</el-form-item>
<el-form-item prop="perms" v-if="form.menuType == 2">
<span slot="label">
<el-tooltip
content="控制器中定义的权限字符,如:'system:menu:add'"
placement="top"
>
<el-tooltip content="控制器中定义的权限字符,如:'system:menu:add'" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
权限字符
</span>
<el-input
clearable
placeholder="请输入权限字符"
v-model="form.perms"
></el-input>
<el-input clearable placeholder="请输入权限字符" v-model="form.perms"></el-input>
</el-form-item>
<el-row>
<el-col :span="12" v-if="form.menuType != 2">
<el-form-item prop="visible">
<span slot="label">
<el-tooltip
content="控制路由和子路由是否显示在菜单栏"
placement="top"
>
<el-tooltip content="控制路由和子路由是否显示在菜单栏" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
显示状态
</span>
<el-radio-group v-model="form.visible">
<el-radio
v-for="(item, key) in dict.visible"
:key="key"
:label="Number(key)"
>{{ item }}</el-radio
>
<el-radio v-for="(item, key) in dict.visible" :key="key" :label="Number(key)">{{
item
}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12" v-if="form.menuType != 2">
<el-form-item prop="cache">
<span slot="label">
<el-tooltip
content="选择是则会被`keep-alive`缓存"
placement="top"
>
<el-tooltip content="选择是则会被`keep-alive`缓存" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
是否缓存
......@@ -168,10 +119,7 @@
<el-col :span="12" v-if="form.menuType != 2">
<el-form-item prop="hideChildrenInMenu">
<span slot="label">
<el-tooltip
content="强制菜单显示为Item而不是SubItem"
placement="top"
>
<el-tooltip content="强制菜单显示为Item而不是SubItem" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
是否隐藏子菜单
......@@ -185,12 +133,9 @@
<el-col :span="12">
<el-form-item label="菜单状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
v-for="(item, key) in dict.status"
:key="key"
:label="Number(key)"
>{{ item }}</el-radio
>
<el-radio v-for="(item, key) in dict.status" :key="key" :label="Number(key)">{{
item
}}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
......@@ -198,11 +143,7 @@
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
type="primary"
:loading="loading"
@click="handleOk"
<el-button size="medium" type="primary" :loading="loading" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -211,80 +152,74 @@
</template>
<script>
import { saveMenu } from "@/api/system";
import IconSelect from "./IconSelect.vue";
import iconJson from "@/assets/icon.json";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { saveMenu } from '@/api/system';
import IconSelect from './IconSelect.vue';
import iconJson from '@/assets/icon.json';
import Treeselect from '@riophae/vue-treeselect';
import '@riophae/vue-treeselect/dist/vue-treeselect.css';
export default {
components: {
IconSelect,
Treeselect,
Treeselect
},
props: {
title: {
type: String,
required: true,
default: "",
default: ''
},
show: {
type: Boolean,
required: true,
default: false,
default: false
},
menuList: {
required: true,
type: Array,
default: () => [],
default: () => []
},
dict: {
required: true,
type: Object,
default: () => {},
},
default: () => {}
}
},
data() {
return {
iconJson,
loading: false,
defaultProps: {
children: "childList",
label: "name",
children: 'childList',
label: 'name'
},
form: {
name: "", // 菜单名称
url: "", // 路由地址
ancestors: "", // 当前激活根目录
name: '', // 菜单名称
url: '', // 路由地址
ancestors: '', // 当前激活根目录
parentId: 0, // 父菜单ID,一级菜单的该字段值为-1
linkType: 0, // 链接方式 (0.普通,1.弹出,2.脚本)
imgPath: "", // 主菜单图标,主菜单图标的css样式名
buttonImgPath: "", // 按钮图标,按钮图标的css样式名
imgCommPath: "", // 常用菜单图标,常用菜单图标的css样式名
imgPath: '', // 主菜单图标,主菜单图标的css样式名
buttonImgPath: '', // 按钮图标,按钮图标的css样式名
imgCommPath: '', // 常用菜单图标,常用菜单图标的css样式名
commMenu: 1, // 是否常用菜单 (0.非常用,1.常用)
component: "", // vue组件路径
component: '', // vue组件路径
menuType: 0, // 菜单类型 (0.目录,1.菜单,2.按钮)
authType: 0, // 权限类型 (0.无限制,1.无需登录查看,2.需要登录查看,3.需要角色权限查看)
visible: 0, // 菜单显示状态 (0.显示,1.隐藏)
perms: "", // 权限标识,多个逗号分割
remark: "", // 备注信息
orderId: "", // 排序编号
perms: '', // 权限标识,多个逗号分割
remark: '', // 备注信息
orderId: '', // 排序编号
status: 1, // 菜单状态 (0.停用,1.启用)
cache: 0, // 是否缓存
activeDir: "", // 激活菜单
hideChildrenInMenu: 1, // 是否隐藏子菜单
activeDir: '', // 激活菜单
hideChildrenInMenu: 1 // 是否隐藏子菜单
},
rules: {
name: [{ required: true, message: "请输入菜单名称", trigger: "blur" }],
url: [
{ required: true, message: "请输入菜单访问地址", trigger: "blur" },
],
component: [
{ required: true, message: "请输入组件路径", trigger: "blur" },
],
authType: [
{ required: true, message: "请输入选择权限类型", trigger: "change" },
],
},
name: [{ required: true, message: '请输入菜单名称', trigger: 'blur' }],
url: [{ required: true, message: '请输入菜单访问地址', trigger: 'blur' }],
component: [{ required: true, message: '请输入组件路径', trigger: 'blur' }],
authType: [{ required: true, message: '请输入选择权限类型', trigger: 'change' }]
}
};
},
computed: {
......@@ -293,9 +228,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
methods: {
// 确定
......@@ -307,7 +242,7 @@ export default {
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -317,7 +252,7 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
......@@ -327,11 +262,11 @@ export default {
},
// 重置
handleRest() {
this.$resetForm("form");
this.$resetForm('form');
},
// 关闭
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
/** 转换菜单数据结构 */
......@@ -342,13 +277,13 @@ export default {
return {
id: node.id,
label: node.name,
children: node.childList,
children: node.childList
};
},
changeParent(row) {
console.log(row);
},
},
}
}
};
</script>
......
<template>
<el-popover placement="bottom-start" trigger="click" width="100%">
<div
class="content grid max-h-[300px] w-full grid-cols-2 gap-x-4 gap-y-2 overflow-auto"
>
<div class="content grid max-h-[300px] w-full grid-cols-2 gap-x-4 gap-y-2 overflow-auto">
<div v-for="(v, i) in iconJson" :key="i">
<div
:class="[
'flex',
'cursor-pointer',
'items-center',
'gap-4',
{ active: v === value },
]"
:class="['flex', 'cursor-pointer', 'items-center', 'gap-4', { active: v === value }]"
@click="handleChange(v)"
>
<i :class="v"></i>
......@@ -34,32 +26,32 @@
</template>
<script>
import iconJson from "@/assets/icon.json";
import iconJson from '@/assets/icon.json';
export default {
model: {
prop: "value",
event: "change",
prop: 'value',
event: 'change'
},
props: {
value: {
type: String,
default: "",
default: ''
},
placeholder: {
type: String,
default: "点击选择图标",
},
default: '点击选择图标'
}
},
data() {
return {
iconJson,
iconJson
};
},
methods: {
handleChange(v) {
this.$emit("change", v);
},
},
this.$emit('change', v);
}
}
};
</script>
......
......@@ -20,11 +20,7 @@
<div slot="right" v-hasPermi="['system:parameter:query']">
<el-form ref="searchForm" :model="searchForm" inline>
<el-form-item prop="type">
<el-select
size="small"
style="width: 150px"
v-model="searchForm.type"
>
<el-select size="small" style="width: 150px" v-model="searchForm.type">
<el-option label="按参数名称" value="name"></el-option>
<el-option label="按二级组织" value="secondOrganize"></el-option>
</el-select>
......@@ -40,9 +36,7 @@
></el-input>
</el-form-item>
<el-form-item>
<el-button size="small" type="primary" @click="handleSearch"
>搜 索</el-button
>
<el-button size="small" type="primary" @click="handleSearch">搜 索</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="handleReset">重 置</el-button>
......@@ -82,63 +76,63 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import AddParameter from "./components/AddParameter.vue";
import { getParamList, delParam } from "@/api/system";
import TableHeader from '@/components/TableHeader.vue';
import AddParameter from './components/AddParameter.vue';
import { getParamList, delParam } from '@/api/system';
export default {
components: {
TableHeader,
AddParameter,
AddParameter
},
data() {
return {
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "参数名称",
prop: "name",
align: "center",
label: '参数名称',
prop: 'name',
align: 'center'
},
{
label: "一级组织",
prop: "firstOrganize",
align: "center",
label: '一级组织',
prop: 'firstOrganize',
align: 'center'
},
{
label: "二级组织",
prop: "secondOrganize",
align: "center",
label: '二级组织',
prop: 'secondOrganize',
align: 'center'
},
{
label: "参数键",
prop: "paramKey",
align: "center",
label: '参数键',
prop: 'paramKey',
align: 'center'
},
{
label: "参数值",
prop: "paramValue",
align: "center",
label: '参数值',
prop: 'paramValue',
align: 'center'
},
{
label: "参数有效状态",
prop: "validStatus",
align: "center",
label: '参数有效状态',
prop: 'validStatus',
align: 'center',
formatter: (row) => {
if (this.dict.validStatus) {
return (
......@@ -147,29 +141,29 @@ export default {
</el-tag>
);
}
},
}
},
{
label: "备注",
prop: "remark",
align: "center",
label: '备注',
prop: 'remark',
align: 'center'
},
{
label: "操作",
align: "center",
width: "120",
label: '操作',
align: 'center',
width: '120',
formatter: (row) => {
return (
<div class="flex justify-center gap-4">
<span
v-hasPermi={["system:parameter:edit"]}
v-hasPermi={['system:parameter:edit']}
class="primary cursor-pointer"
onClick={() => this.handleEdit(row)}
>
编辑
</span>
<span
v-hasPermi={["system:parameter:remove"]}
v-hasPermi={['system:parameter:remove']}
class="delete cursor-pointer"
onClick={() => this.handleDel(row.id)}
>
......@@ -177,12 +171,12 @@ export default {
</span>
</div>
);
},
},
}
}
],
searchForm: {
type: "name",
keyword: "",
type: 'name',
keyword: ''
},
tableData: [],
page: 1,
......@@ -191,8 +185,8 @@ export default {
loading: false,
selectKeys: [],
addVisible: false,
title: "新增参数",
dict: {}, // 字典
title: '新增参数',
dict: {} // 字典
};
},
created() {
......@@ -204,7 +198,7 @@ export default {
this.loading = true;
let form = {};
let value = `%${this.searchForm.keyword}%`;
if (this.searchForm.type == "name") {
if (this.searchForm.type == 'name') {
form.name = value;
} else {
form.secondOrganize = value;
......@@ -212,7 +206,7 @@ export default {
let res = await getParamList({
page: this.page,
size: this.size,
...form,
...form
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
......@@ -230,23 +224,23 @@ export default {
// 批量移除
handleDelAll() {
if (!this.selectKeys.length) {
this.$message.warning("请先勾选数据");
this.$message.warning('请先勾选数据');
return;
}
let ids = this.selectKeys.map((v) => v.id).join(",");
let ids = this.selectKeys.map((v) => v.id).join(',');
this.handleDel(ids);
},
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getParamList();
},
// 重置
handleReset() {
this.page = 1;
this.$clearSelection("MyTable");
this.$resetForm("searchForm");
this.$clearSelection('MyTable');
this.$resetForm('searchForm');
this.getParamList();
},
// 选中
......@@ -256,23 +250,23 @@ export default {
// 新增
handleAdd() {
this.title = "新增参数";
this.title = '新增参数';
this.$refs.AddParameter.onAdd();
this.addVisible = true;
},
// 编辑
handleEdit(row) {
this.title = "编辑参数";
this.title = '编辑参数';
this.$refs.AddParameter.onEdit(row);
this.addVisible = true;
},
// 移除
handleDel(id) {
this.$confirm("此操作将删除所选数据,是否继续?", "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "btn-custom-cancel",
type: "warning",
this.$confirm('此操作将删除所选数据,是否继续?', '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
})
.then(async () => {
let res = await delParam({ id });
......@@ -280,14 +274,14 @@ export default {
if (code === 1) {
this.$message.success(msg);
this.getParamList();
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
}
})
.catch(() => {
console.log("取消成功!");
console.log('取消成功!');
});
},
},
}
}
};
</script>
......
......@@ -9,39 +9,21 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
size="medium"
:model="form"
:rules="rules"
label-width="100px"
>
<el-form ref="form" size="medium" :model="form" :rules="rules" label-width="100px">
<el-form-item label="参数名称" prop="name">
<el-input v-model="form.name" placeholder="请输入参数名称"></el-input>
</el-form-item>
<el-form-item label="一级组织" prop="firstOrganize">
<el-input
v-model="form.firstOrganize"
placeholder="请输入一级组织"
></el-input>
<el-input v-model="form.firstOrganize" placeholder="请输入一级组织"></el-input>
</el-form-item>
<el-form-item label="二级组织" prop="secondOrganize">
<el-input
v-model="form.secondOrganize"
placeholder="请输入二级组织"
></el-input>
<el-input v-model="form.secondOrganize" placeholder="请输入二级组织"></el-input>
</el-form-item>
<el-form-item label="参数键" prop="paramKey">
<el-input
v-model="form.paramKey"
placeholder="请输入参数键"
></el-input>
<el-input v-model="form.paramKey" placeholder="请输入参数键"></el-input>
</el-form-item>
<el-form-item label="参数值" prop="paramValue">
<el-input
v-model="form.paramValue"
placeholder="请输入参数值"
></el-input>
<el-input v-model="form.paramValue" placeholder="请输入参数值"></el-input>
</el-form-item>
<el-form-item label="参数修改状态" prop="modStatus">
<el-select v-model="form.modStatus" placeholder="请选择参数有效状态">
......@@ -67,11 +49,7 @@
</el-form-item>
<el-form-item label="参数有效状态" prop="validStatus">
<el-radio-group v-model="form.validStatus">
<el-radio
v-for="(v, key) in dict.validStatus"
:key="key"
:label="Number(key)"
>
<el-radio v-for="(v, key) in dict.validStatus" :key="key" :label="Number(key)">
{{ v }}
</el-radio>
</el-radio-group>
......@@ -88,11 +66,7 @@
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
type="primary"
:loading="loading"
@click="handleOk"
<el-button size="medium" type="primary" :loading="loading" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -101,50 +75,46 @@
</template>
<script>
import { saveParam } from "@/api/system";
import { saveParam } from '@/api/system';
export default {
props: {
title: {
type: String,
required: true,
default: "",
default: ''
},
show: {
type: Boolean,
required: true,
default: false,
default: false
},
dict: {
type: Object,
required: true,
default: () => {
return {};
},
},
}
}
},
data() {
return {
loading: false,
form: {
name: "", // 参数名称
firstOrganize: "", // 一级组织
secondOrganize: "", // 二级组织
paramKey: "", // 参数键
paramValue: "", // 参数值
modStatus: "", // 参数修改状态
displayType: "", // 展现类型
name: '', // 参数名称
firstOrganize: '', // 一级组织
secondOrganize: '', // 二级组织
paramKey: '', // 参数键
paramValue: '', // 参数值
modStatus: '', // 参数修改状态
displayType: '', // 展现类型
validStatus: 1, // 参数有效状态
remark: "", // 备注
remark: '' // 备注
},
rules: {
name: [{ required: true, message: "请输入参数名称", trigger: "blur" }],
paramKey: [
{ required: true, message: "请输入参数键", trigger: "blur" },
],
paramValue: [
{ required: true, message: "请输入参数值", trigger: "blur" },
],
},
name: [{ required: true, message: '请输入参数名称', trigger: 'blur' }],
paramKey: [{ required: true, message: '请输入参数键', trigger: 'blur' }],
paramValue: [{ required: true, message: '请输入参数值', trigger: 'blur' }]
}
};
},
computed: {
......@@ -153,9 +123,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
methods: {
// 确定
......@@ -167,7 +137,7 @@ export default {
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -177,7 +147,7 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
......@@ -187,14 +157,14 @@ export default {
},
// 重置
handleRest() {
this.$resetForm("form");
this.$resetForm('form');
},
// 关闭
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
},
}
}
};
</script>
......
......@@ -20,11 +20,7 @@
<div slot="right" v-hasPermi="['system:resourcemanage:query']">
<el-form ref="searchForm" :model="searchForm" inline>
<el-form-item prop="authType">
<el-select
size="small"
style="width: 150px"
v-model="searchForm.authType"
>
<el-select size="small" style="width: 150px" v-model="searchForm.authType">
<el-option label="全部认证类型" value=""></el-option>
<el-option
v-for="(v, key) in dict.authType"
......@@ -45,9 +41,7 @@
></el-input>
</el-form-item>
<el-form-item>
<el-button size="small" type="primary" @click="handleSearch"
>搜 索</el-button
>
<el-button size="small" type="primary" @click="handleSearch">搜 索</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="handleReset">重 置</el-button>
......@@ -86,55 +80,55 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import { getResourceList, deleteResource } from "@/api/system";
import AddResource from "./components/AddResource.vue";
import TableHeader from '@/components/TableHeader.vue';
import { getResourceList, deleteResource } from '@/api/system';
import AddResource from './components/AddResource.vue';
export default {
components: {
TableHeader,
AddResource,
AddResource
},
data() {
return {
loading: false,
show: false,
title: "新增资源",
title: '新增资源',
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "所属分组",
prop: "groupName",
align: "center",
label: '所属分组',
prop: 'groupName',
align: 'center'
},
{
label: "名称",
prop: "name",
align: "center",
label: '名称',
prop: 'name',
align: 'center'
},
{
label: "资源",
prop: "url",
align: "center",
label: '资源',
prop: 'url',
align: 'center',
formatter: (row) => {
if (row.url) {
return row.url.split(",").map((v) => {
return row.url.split(',').map((v) => {
return (
<el-tag class="mb-2 mr-2" type="info" size="mini">
{v}
......@@ -142,32 +136,32 @@ export default {
);
});
}
},
}
},
{
label: "认证类型",
prop: "authType",
align: "center",
label: '认证类型',
prop: 'authType',
align: 'center',
formatter: (row) => {
return this.dict.authType[row.authType];
},
}
},
{
label: "操作",
align: "center",
width: "120",
label: '操作',
align: 'center',
width: '120',
formatter: (row) => {
return (
<div class="flex justify-center gap-4">
<span
v-hasPermi={["system:resourcemanage:edit"]}
v-hasPermi={['system:resourcemanage:edit']}
class="primary cursor-pointer"
onClick={() => this.handleEdit(row)}
>
编辑
</span>
<span
v-hasPermi={["system:resourcemanage:remove"]}
v-hasPermi={['system:resourcemanage:remove']}
class="delete cursor-pointer"
onClick={() => this.handleDel(row.id)}
>
......@@ -175,19 +169,19 @@ export default {
</span>
</div>
);
},
},
}
}
],
searchForm: {
authType: "",
name: "",
authType: '',
name: ''
},
total: 0,
size: 10,
page: 1,
tableData: [],
selectionRows: [],
dict: {},
dict: {}
};
},
created() {
......@@ -201,7 +195,7 @@ export default {
page: this.page,
size: this.size,
...this.searchForm,
name: `%${this.searchForm.name}%`,
name: `%${this.searchForm.name}%`
});
this.loading = false;
if (res.data.code == 1) {
......@@ -216,7 +210,7 @@ export default {
}
},
handleAdd() {
this.title = "新增资源";
this.title = '新增资源';
this.$refs.AddResource.onAdd();
this.show = true;
},
......@@ -225,10 +219,10 @@ export default {
},
handleDelAll() {
if (!this.selectionRows.length) {
this.$message.warning("请先勾选数据");
this.$message.warning('请先勾选数据');
return;
}
let ids = this.selectionRows.map((v) => v.id).join(",");
let ids = this.selectionRows.map((v) => v.id).join(',');
this.handleDel(ids);
},
handleSearch() {
......@@ -237,23 +231,23 @@ export default {
},
handleReset() {
this.page = 1;
this.$resetForm("searchForm");
this.$clearSelection("MyTable");
this.$resetForm('searchForm');
this.$clearSelection('MyTable');
this.getResourceList();
},
handleEdit(row) {
let data = this.$cloneDeep(row);
this.title = "编辑资源";
this.title = '编辑资源';
this.$refs.AddResource.onEdit(data);
this.show = true;
},
handleDel(id) {
this.$confirm("此操作将删除所选数据,是否继续?", "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "btn-custom-cancel",
type: "warning",
this.$confirm('此操作将删除所选数据,是否继续?', '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
})
.then(async () => {
let res = await deleteResource({ id });
......@@ -261,14 +255,14 @@ export default {
if (code === 1) {
this.$message.success(msg);
this.getResourceList();
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
}
})
.catch(() => {
console.log("取消成功!");
console.log('取消成功!');
});
},
},
}
}
};
</script>
......
......@@ -9,13 +9,7 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
:model="form"
:rules="rules"
size="medium"
label-width="100px"
>
<el-form ref="form" :model="form" :rules="rules" size="medium" label-width="100px">
<el-form-item label="资源名称" prop="name">
<el-input v-model="form.name" placeholder="请输入资源名称"></el-input>
</el-form-item>
......@@ -35,23 +29,14 @@
v-for="(v, i) in form.urls"
:key="i"
:prop="`urls.${i}.value`"
:rules="[
{ required: true, validator: validatorUrl, trigger: 'blur' },
]"
:rules="[{ required: true, validator: validatorUrl, trigger: 'blur' }]"
>
<el-input
class="mr-[10px]"
v-model="v.value"
placeholder="请输入链接地址"
/>
<el-input class="mr-[10px]" v-model="v.value" placeholder="请输入链接地址" />
<div class="flex">
<el-button type="primary" @click="changeParams(i, 'add')">
<i class="el-icon-plus"></i>
</el-button>
<el-button
type="danger"
v-if="i > 0"
@click="changeParams(i, 'remove')"
<el-button type="danger" v-if="i > 0" @click="changeParams(i, 'remove')"
><i class="el-icon-minus"></i
></el-button>
</div>
......@@ -60,11 +45,7 @@
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
type="primary"
@click="handleOk"
:loading="loading"
<el-button size="medium" type="primary" @click="handleOk" :loading="loading"
>确 定</el-button
>
</span>
......@@ -73,46 +54,44 @@
</template>
<script>
import { saveResource } from "@/api/system";
import { saveResource } from '@/api/system';
export default {
props: {
title: {
type: String,
required: true,
default: "",
default: ''
},
show: {
type: Boolean,
required: true,
default: false,
default: false
},
dict: {
type: Object,
required: true,
default: () => {
return {};
},
},
}
}
},
data() {
return {
loading: false,
form: {
name: "",
authType: "",
url: "",
name: '',
authType: '',
url: '',
urls: [
{
value: "",
},
],
value: ''
}
]
},
rules: {
name: [{ required: true, message: "请输入资源名称", trigger: "blur" }],
authType: [
{ required: true, message: "请选择权限类型", trigger: "change" },
],
},
name: [{ required: true, message: '请输入资源名称', trigger: 'blur' }],
authType: [{ required: true, message: '请选择权限类型', trigger: 'change' }]
}
};
},
computed: {
......@@ -121,9 +100,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
created() {},
methods: {
......@@ -134,12 +113,12 @@ export default {
this.loading = true;
let res = await saveResource({
...this.form,
url: this.form.urls.map((v) => v.value).join(","),
url: this.form.urls.map((v) => v.value).join(',')
});
let { code, msg } = res.data;
if (code == 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -149,7 +128,7 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
......@@ -157,23 +136,23 @@ export default {
this.form = { ...row };
let arr = [];
if (this.form.url) {
arr = this.form.url.split(",").map((v) => {
arr = this.form.url.split(',').map((v) => {
return {
value: v,
value: v
};
});
}
this.$set(this.form, "urls", arr);
this.$set(this.form, 'urls', arr);
}, 10);
},
// 重置
handleRest() {
this.$resetForm("form");
this.$set(this.form, "urls", [{ value: "" }]);
this.$resetForm('form');
this.$set(this.form, 'urls', [{ value: '' }]);
},
// 关闭
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
// 判断是否存在链接
......@@ -183,20 +162,20 @@ export default {
// 校验链接地址
validatorUrl(rule, value, callback) {
if (!value) {
callback(new Error("请输入链接"));
callback(new Error('请输入链接'));
} else if (this.isRepeat(value)) {
callback(new Error("重复的链接地址"));
callback(new Error('重复的链接地址'));
} else {
callback();
}
},
changeParams(index, type) {
if (type == "add") {
if (type == 'add') {
let obj = {
value: "",
value: ''
};
if (this.form.urls.some((v) => !v.value)) {
this.$message.warning("请先完成前面地址的填写");
this.$message.warning('请先完成前面地址的填写');
return;
}
this.form.urls.splice(index + 1, 0, obj);
......@@ -204,8 +183,8 @@ export default {
this.form.urls.splice(index, 1);
}
// this.$forceUpdate();
},
},
}
}
};
</script>
......
......@@ -2,11 +2,7 @@
<div class="h-full w-full">
<TableHeader>
<div slot="left">
<el-button
size="small"
type="primary"
v-hasPermi="['system:role:add']"
@click="handleAdd"
<el-button size="small" type="primary" v-hasPermi="['system:role:add']" @click="handleAdd"
>新增</el-button
>
<el-button
......@@ -30,9 +26,7 @@
></el-input>
</el-form-item>
<el-form-item>
<el-button size="small" type="primary" @click="handleSearch"
>搜 索</el-button
>
<el-button size="small" type="primary" @click="handleSearch">搜 索</el-button>
</el-form-item>
<el-form-item>
<el-button size="small" @click="handleReset">重 置</el-button>
......@@ -61,18 +55,9 @@
@change="getRoleList"
></Pagination>
<!-- 新增 -->
<AddRole
ref="AddRole"
:show.sync="show"
:title="title"
@success="getRoleList"
></AddRole>
<AddRole ref="AddRole" :show.sync="show" :title="title" @success="getRoleList"></AddRole>
<!-- 分配资源 -->
<ApportionRes
ref="ApportionRes"
:show.sync="resShow"
@success="getRoleList"
></ApportionRes>
<ApportionRes ref="ApportionRes" :show.sync="resShow" @success="getRoleList"></ApportionRes>
<!-- 分配菜单 -->
<ApportionMenu
ref="ApportionMenu"
......@@ -85,85 +70,85 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import { getRoleList, deleteRole, getMenuTreeselect } from "@/api/system";
import AddRole from "./components/AddRole.vue";
import ApportionRes from "./components/ApportionRes.vue";
import ApportionMenu from "./components/ApportionMenu.vue";
import TableHeader from '@/components/TableHeader.vue';
import { getRoleList, deleteRole, getMenuTreeselect } from '@/api/system';
import AddRole from './components/AddRole.vue';
import ApportionRes from './components/ApportionRes.vue';
import ApportionMenu from './components/ApportionMenu.vue';
export default {
components: {
TableHeader,
AddRole,
ApportionRes,
ApportionMenu,
ApportionMenu
},
data() {
return {
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "角色名称",
prop: "name",
align: "center",
label: '角色名称',
prop: 'name',
align: 'center'
},
{
label: "备注",
prop: "remark",
align: "center",
label: '备注',
prop: 'remark',
align: 'center'
},
{
label: "创建时间",
prop: "createTime",
align: "center",
label: '创建时间',
prop: 'createTime',
align: 'center',
formatter: (row) => {
return this.$moment(row.createTime).format("YYYY-MM-DD HH:mm:ss");
},
return this.$moment(row.createTime).format('YYYY-MM-DD HH:mm:ss');
}
},
{
label: "操作",
align: "center",
width: "260",
label: '操作',
align: 'center',
width: '260',
formatter: (row) => {
return (
<div class="flex justify-center gap-4">
<span
v-hasPermi={["system:role:roleRes"]}
v-hasPermi={['system:role:roleRes']}
class="primary cursor-pointer"
onClick={() => this.apportion(row)}
>
分配资源
</span>
<span
v-hasPermi={["system:role:roleMenu"]}
v-hasPermi={['system:role:roleMenu']}
class="primary cursor-pointer"
onClick={() => this.apportionMenu(row)}
>
分配菜单
</span>
<span
v-hasPermi={["system:role:edit"]}
v-hasPermi={['system:role:edit']}
class="primary cursor-pointer"
onClick={() => this.handleEdit(row)}
>
编辑
</span>
<span
v-hasPermi={["system:role:remove"]}
v-hasPermi={['system:role:remove']}
class="delete cursor-pointer"
onClick={() => this.handleDel(row.id)}
>
......@@ -171,11 +156,11 @@ export default {
</span>
</div>
);
},
},
}
}
],
searchForm: {
name: "",
name: ''
},
tableData: [],
menuTree: [], // 菜单树
......@@ -186,10 +171,10 @@ export default {
selectRows: [],
show: false,
menuShow: false,
title: "新增",
title: '新增',
dict: {}, // 字典
resShow: false,
roleInfo: {},
roleInfo: {}
};
},
created() {
......@@ -202,7 +187,7 @@ export default {
async getMenuTreeselect() {
let res = await getMenuTreeselect({
page: 1,
size: -1,
size: -1
});
if (res.data.code == 1) {
let { result } = res.data.data;
......@@ -214,7 +199,7 @@ export default {
let res = await getRoleList({
page: this.page,
size: this.size,
name: `%${this.searchForm.name}%`,
name: `%${this.searchForm.name}%`
});
this.loading = false;
if (res.data.code == 1) {
......@@ -231,23 +216,23 @@ export default {
// 批量移除
handleDelAll() {
if (!this.selectRows.length) {
this.$message.warning("请先勾选数据");
this.$message.warning('请先勾选数据');
return;
}
let ids = this.selectRows.map((v) => v.id).join(",");
let ids = this.selectRows.map((v) => v.id).join(',');
this.handleDel(ids);
},
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getRoleList();
},
// 重置
handleReset() {
this.page = 1;
this.$clearSelection("MyTable");
this.$resetForm("searchForm");
this.$clearSelection('MyTable');
this.$resetForm('searchForm');
this.getRoleList();
},
// 选中
......@@ -257,24 +242,24 @@ export default {
// 新增
handleAdd() {
this.title = "新增";
this.title = '新增';
this.$refs.AddRole.onAdd();
this.show = true;
},
// 编辑
handleEdit(row) {
this.title = "编辑";
this.title = '编辑';
let data = this.$cloneDeep(row);
this.$refs.AddRole.onEdit(data);
this.show = true;
},
// 移除
handleDel(id) {
this.$confirm("此操作将删除所选数据,是否继续?", "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "btn-custom-cancel",
type: "warning",
this.$confirm('此操作将删除所选数据,是否继续?', '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
})
.then(async () => {
let res = await deleteRole({ id });
......@@ -282,11 +267,11 @@ export default {
if (code === 1) {
this.$message.success(msg);
this.getRoleList();
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
}
})
.catch(() => {
console.log("取消成功!");
console.log('取消成功!');
});
},
// 分配资源
......@@ -299,8 +284,8 @@ export default {
this.roleInfo = row;
this.$refs.ApportionMenu.onAdd(row);
this.menuShow = true;
},
},
}
}
};
</script>
......
......@@ -9,13 +9,7 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
:model="form"
:rules="rules"
size="medium"
label-width="100px"
>
<el-form ref="form" :model="form" :rules="rules" size="medium" label-width="100px">
<el-form-item label="角色名称" prop="name">
<el-input placeholder="请输入角色名称" v-model="form.name"></el-input>
</el-form-item>
......@@ -31,11 +25,7 @@
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
type="primary"
:loading="loading"
@click="handleOk"
<el-button size="medium" type="primary" :loading="loading" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -44,31 +34,31 @@
</template>
<script>
import { addRole } from "@/api/system";
import { addRole } from '@/api/system';
export default {
components: {},
props: {
title: {
type: String,
required: true,
default: "",
default: ''
},
show: {
type: Boolean,
required: true,
default: false,
},
default: false
}
},
data() {
return {
loading: false,
form: {
name: "",
remark: "",
name: '',
remark: ''
},
rules: {
name: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
},
name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }]
}
};
},
computed: {
......@@ -77,9 +67,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
methods: {
// 确定
......@@ -91,7 +81,7 @@ export default {
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -101,7 +91,7 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
......@@ -111,14 +101,14 @@ export default {
},
// 重置
handleRest() {
this.$resetForm("form");
this.$resetForm('form');
},
// 关闭
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
},
}
}
};
</script>
......
......@@ -14,9 +14,7 @@
<el-input readonly :value="roleInfo.name"></el-input>
</el-form-item>
<el-form-item label="菜单权限">
<el-checkbox v-model="isExpand" @change="handleCheckedTreeExpand"
>展开/折叠</el-checkbox
>
<el-checkbox v-model="isExpand" @change="handleCheckedTreeExpand">展开/折叠</el-checkbox>
<el-checkbox v-model="isNodeAll" @change="handleCheckedTreeNodeAll"
>全选/全不选</el-checkbox
>
......@@ -35,11 +33,7 @@
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
:loading="loading"
type="primary"
@click="handleOk"
<el-button size="medium" :loading="loading" type="primary" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -48,25 +42,25 @@
</template>
<script>
import { addRoleMenu, getRoleMenuList } from "@/api/system";
import { addRoleMenu, getRoleMenuList } from '@/api/system';
export default {
components: {},
props: {
show: {
type: Boolean,
required: true,
default: false,
default: false
},
roleInfo: {
type: Object,
required: true,
default: () => {},
default: () => {}
},
menuTree: {
type: Array,
required: true,
default: () => [],
},
default: () => []
}
},
data() {
return {
......@@ -77,13 +71,13 @@ export default {
isNodeAll: false,
checkStrictly: true,
defaultProps: {
label: "label",
children: "children",
label: 'label',
children: 'children'
},
form: {
menuIdList: [],
roleId: "",
},
roleId: ''
}
};
},
computed: {
......@@ -92,9 +86,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
methods: {
// 获取角色菜单列表
......@@ -102,7 +96,7 @@ export default {
let res = await getRoleMenuList({
roleId: this.form.roleId,
page: 1,
size: -1,
size: -1
});
if (res.data.code == 1) {
let { data } = res.data;
......@@ -119,12 +113,12 @@ export default {
this.loading = true;
let res = await addRoleMenu({
roleId: this.form.roleId,
menuIdList: this.getMenuAllCheckedKeys(),
menuIdList: this.getMenuAllCheckedKeys()
});
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg || "添加成功");
this.$emit("success");
this.$message.success(msg || '添加成功');
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -178,8 +172,8 @@ export default {
};
getData(data);
return result;
},
},
}
}
};
</script>
......
......@@ -19,10 +19,7 @@
>全选</el-checkbox
>
</div>
<el-checkbox-group
v-model="form.resourceIdList"
@change="onChange($event, v)"
>
<el-checkbox-group v-model="form.resourceIdList" @change="onChange($event, v)">
<el-row>
<el-col :span="6" v-for="item in v.list" :key="item.id">
<el-checkbox :label="item.id">{{ item.name }}</el-checkbox>
......@@ -32,11 +29,7 @@
</div>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
type="primary"
:loading="loading"
@click="handleOk"
<el-button size="medium" type="primary" :loading="loading" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -45,19 +38,15 @@
</template>
<script>
import {
getRoleResourceList,
addRoleResource,
getResourceGroup,
} from "@/api/system";
import { getRoleResourceList, addRoleResource, getResourceGroup } from '@/api/system';
export default {
components: {},
props: {
show: {
type: Boolean,
required: true,
default: false,
},
default: false
}
},
data() {
return {
......@@ -66,8 +55,8 @@ export default {
userResourceList: [], // 用户资源列表
form: {
resourceIdList: [],
roleId: "",
},
roleId: ''
}
};
},
computed: {
......@@ -76,16 +65,16 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
methods: {
// 获取资源分组
async getResourceGroup() {
let res = await getResourceGroup({
page: 1,
size: -1,
size: -1
});
if (res.data.code == 1) {
let { data } = res.data.data;
......@@ -99,7 +88,7 @@ export default {
let res = await getRoleResourceList({
size: -1,
page: 1,
roleId,
roleId
});
if (res.data.code == 1) {
let { data } = res.data.data;
......@@ -131,7 +120,7 @@ export default {
group[key] = {
isIndeterminate: false,
checkAll: false,
list: [],
list: []
};
group[key].list.push(...data[key]);
});
......@@ -144,8 +133,8 @@ export default {
let res = await addRoleResource(this.form);
let { code } = res.data;
if (code === 1) {
this.$message.success("添加成功");
this.$emit("success");
this.$message.success('添加成功');
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -175,9 +164,7 @@ export default {
let rowIds = row.list.map((v) => v.id);
row.isIndeterminate = false;
if (checked) {
this.form.resourceIdList = [
...new Set([...this.form.resourceIdList, ...rowIds]),
];
this.form.resourceIdList = [...new Set([...this.form.resourceIdList, ...rowIds])];
} else {
this.form.resourceIdList = this.form.resourceIdList.filter((v) => {
return !rowIds.includes(v);
......@@ -191,8 +178,8 @@ export default {
});
row.isIndeterminate = !!list.length && list.length < rowIds.length;
row.checkAll = list.length === rowIds.length;
},
},
}
}
};
</script>
......
......@@ -10,9 +10,7 @@
placeholder="请输入请求地址搜索"
@keyup.native.enter="handleSearch"
></el-input>
<el-button size="small" type="primary" @click="handleSearch"
>搜 索</el-button
>
<el-button size="small" type="primary" @click="handleSearch">搜 索</el-button>
<el-button size="small" @click="handleReset">重 置</el-button>
</div>
</TableHeader>
......@@ -39,67 +37,67 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import { getlogsList } from "@/api/system";
import TableHeader from '@/components/TableHeader.vue';
import { getlogsList } from '@/api/system';
export default {
components: {
TableHeader,
TableHeader
},
data() {
return {
column: [
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "用户名称",
prop: "userName",
align: "center",
label: '用户名称',
prop: 'userName',
align: 'center'
},
{
label: "登录名称",
prop: "loginName",
align: "center",
label: '登录名称',
prop: 'loginName',
align: 'center'
},
{
label: "请求地址",
prop: "requestUrl",
align: "center",
label: '请求地址',
prop: 'requestUrl',
align: 'center'
},
{
label: "操作内容",
prop: "content",
align: "center",
label: '操作内容',
prop: 'content',
align: 'center'
},
{
label: "操作IP地址",
prop: "ip",
align: "center",
label: '操作IP地址',
prop: 'ip',
align: 'center'
},
{
label: "操作时间",
prop: "logDate",
align: "center",
label: '操作时间',
prop: 'logDate',
align: 'center',
formatter: (row) => {
return this.$moment(row.logDate).format("YYYY-MM-DD HH:mm:ss");
},
},
return this.$moment(row.logDate).format('YYYY-MM-DD HH:mm:ss');
}
}
],
searchVal: "",
searchVal: '',
tableData: [],
page: 1,
size: 10,
total: 10,
loading: false,
selectKeys: [],
dict: {}, // 字典
dict: {} // 字典
};
},
created() {
......@@ -113,7 +111,7 @@ export default {
let res = await getlogsList({
page: this.page,
size: this.size,
requestUrl: `%${this.searchVal}%`,
requestUrl: `%${this.searchVal}%`
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
......@@ -131,17 +129,17 @@ export default {
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getlogsList();
},
// 重置
handleReset() {
this.searchVal = "";
this.searchVal = '';
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getlogsList();
},
},
}
}
};
</script>
......
......@@ -2,11 +2,7 @@
<div class="task-set h-ull w-full">
<TableHeader>
<div slot="left">
<el-button
size="small"
type="primary"
v-hasPermi="['system:task:add']"
@click="handleAdd"
<el-button size="small" type="primary" v-hasPermi="['system:task:add']" @click="handleAdd"
>新增任务</el-button
>
<el-button
......@@ -26,9 +22,7 @@
placeholder="请输入任务名称搜索"
@keyup.native.enter="handleSearch"
></el-input>
<el-button size="small" type="primary" @click="handleSearch"
>搜 索</el-button
>
<el-button size="small" type="primary" @click="handleSearch">搜 索</el-button>
<el-button size="small" @click="handleReset">重 置</el-button>
</div>
</TableHeader>
......@@ -64,100 +58,100 @@
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import AddTask from "./components/AddTask.vue";
import { getTaskList, delTask } from "@/api/system";
import TableHeader from '@/components/TableHeader.vue';
import AddTask from './components/AddTask.vue';
import { getTaskList, delTask } from '@/api/system';
export default {
components: {
TableHeader,
AddTask,
AddTask
},
data() {
return {
column: [
{
label: "全选",
type: "selection",
width: "55",
align: "center",
reserveSelection: true,
label: '全选',
type: 'selection',
width: '55',
align: 'center',
reserveSelection: true
},
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "任务名称",
prop: "name",
align: "center",
label: '任务名称',
prop: 'name',
align: 'center'
},
{
label: "执行主机",
prop: "excuteHost",
align: "center",
label: '执行主机',
prop: 'excuteHost',
align: 'center'
},
{
label: "执行关键字",
prop: "taskKey",
align: "center",
label: '执行关键字',
prop: 'taskKey',
align: 'center'
},
{
label: "执行策略",
prop: "excuteStrategy",
align: "center",
label: '执行策略',
prop: 'excuteStrategy',
align: 'center',
formatter: (row) => {
return (
<el-tag size="small" type="info">
{this.dict.excuteStrategy[row.excuteStrategy]}
</el-tag>
);
},
}
},
{
label: "最后执行主机",
prop: "lastExcuteHost",
align: "center",
label: '最后执行主机',
prop: 'lastExcuteHost',
align: 'center'
},
{
label: "最后执行时间",
prop: "lastExcuteTime",
align: "center",
label: '最后执行时间',
prop: 'lastExcuteTime',
align: 'center'
},
{
label: "任务状态",
prop: "status",
align: "center",
label: '任务状态',
prop: 'status',
align: 'center',
formatter: (row) => {
return (
<el-tag size="small" type="info">
{this.dict.status[row.status]}
</el-tag>
);
},
}
},
{
label: "操作",
align: "center",
width: "120",
label: '操作',
align: 'center',
width: '120',
formatter: (row) => {
return (
<div class="flex justify-center gap-4">
<span
v-hasPermi={["system:task:edit"]}
v-hasPermi={['system:task:edit']}
class="primary cursor-pointer"
onClick={() => this.handleEdit(row)}
>
编辑
</span>
<span
v-hasPermi={["system:task:remove"]}
v-hasPermi={['system:task:remove']}
class="delete cursor-pointer"
onClick={() => this.handleDel(row.id)}
>
......@@ -165,10 +159,10 @@ export default {
</span>
</div>
);
},
},
}
}
],
searchVal: "",
searchVal: '',
tableData: [],
page: 1,
size: 10,
......@@ -176,8 +170,8 @@ export default {
loading: false,
selectKeys: [],
addVisible: false,
title: "新增参数",
dict: {}, // 字典
title: '新增参数',
dict: {} // 字典
};
},
created() {
......@@ -191,7 +185,7 @@ export default {
let res = await getTaskList({
page: this.page,
size: this.size,
name: `%${this.searchVal}%`,
name: `%${this.searchVal}%`
});
if (res.data.code == 1) {
let { data, total, dict } = res.data.data;
......@@ -209,23 +203,23 @@ export default {
// 批量移除
handleDelAll() {
if (!this.selectKeys.length) {
this.$message.warning("请先勾选数据");
this.$message.warning('请先勾选数据');
return;
}
let ids = this.selectKeys.map((v) => v.id).join(",");
let ids = this.selectKeys.map((v) => v.id).join(',');
this.handleDel(ids);
},
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getTaskList();
},
// 重置
handleReset() {
this.searchVal = "";
this.searchVal = '';
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getTaskList();
},
// 选中
......@@ -234,23 +228,23 @@ export default {
},
// 新增
handleAdd() {
this.title = "新增任务";
this.title = '新增任务';
this.$refs.AddTask.onAdd();
this.addVisible = true;
},
// 编辑
handleEdit(row) {
this.title = "编辑任务";
this.title = '编辑任务';
this.$refs.AddTask.onEdit(row);
this.addVisible = true;
},
// 移除
handleDel(id) {
this.$confirm("此操作将删除所选数据,是否继续?", "系统提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
cancelButtonClass: "btn-custom-cancel",
type: "warning",
this.$confirm('此操作将删除所选数据,是否继续?', '系统提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
cancelButtonClass: 'btn-custom-cancel',
type: 'warning'
})
.then(async () => {
let res = await delTask({ id });
......@@ -258,14 +252,14 @@ export default {
if (code === 1) {
this.$message.success(msg);
this.getTaskList();
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
}
})
.catch(() => {
console.log("取消成功!");
console.log('取消成功!');
});
},
},
}
}
};
</script>
......
......@@ -9,27 +9,15 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
:model="form"
size="medium"
:rules="rules"
label-width="100px"
>
<el-form ref="form" :model="form" size="medium" :rules="rules" label-width="100px">
<el-form-item label="任务名称" prop="name">
<el-input v-model="form.name" placeholder="请输入任务名称"></el-input>
</el-form-item>
<el-form-item label="关键字" prop="taskKey">
<el-input
v-model="form.taskKey"
placeholder="请输入关键字"
></el-input>
<el-input v-model="form.taskKey" placeholder="请输入关键字"></el-input>
</el-form-item>
<el-form-item label="执行服务" prop="excuteService">
<el-input
v-model="form.excuteService"
placeholder="请输入执行服务"
></el-input>
<el-input v-model="form.excuteService" placeholder="请输入执行服务"></el-input>
</el-form-item>
<el-form-item label="执行策略" prop="excuteStrategy">
<el-select
......@@ -46,11 +34,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item
label="执行日期"
v-if="form.excuteStrategy != 4"
prop="excuteDate"
>
<el-form-item label="执行日期" v-if="form.excuteStrategy != 4" prop="excuteDate">
<el-input
disabled
v-if="form.excuteStrategy == 1"
......@@ -62,12 +46,7 @@
v-model.number="form.excuteDate"
v-else-if="form.excuteStrategy == 2"
>
<el-option
v-for="(v, key) in weeks"
:key="key"
:value="Number(key)"
:label="v"
>
<el-option v-for="(v, key) in weeks" :key="key" :value="Number(key)" :label="v">
</el-option>
</el-select>
<el-select
......@@ -75,12 +54,7 @@
v-else-if="form.excuteStrategy == 3"
v-model="form.excuteDate"
>
<el-option
v-for="(v, key) in days"
:key="key"
:value="Number(key)"
:label="v"
>
<el-option v-for="(v, key) in days" :key="key" :value="Number(key)" :label="v">
</el-option>
</el-select>
</el-form-item>
......@@ -99,16 +73,10 @@
</el-time-picker>
</el-form-item>
<el-form-item label="执行主机" prop="excuteHost">
<el-input
v-model="form.excuteHost"
placeholder="请输入执行主机"
></el-input>
<el-input v-model="form.excuteHost" placeholder="请输入执行主机"></el-input>
</el-form-item>
<el-form-item label="执行参数" prop="excuteParam">
<el-input
v-model="form.excuteParam"
placeholder="请输入执行参数"
></el-input>
<el-input v-model="form.excuteParam" placeholder="请输入执行参数"></el-input>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input
......@@ -122,11 +90,7 @@
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button
size="medium"
type="primary"
:loading="loading"
@click="handleOk"
<el-button size="medium" type="primary" :loading="loading" @click="handleOk"
>确 定</el-button
>
</span>
......@@ -135,26 +99,26 @@
</template>
<script>
import { saveTask } from "@/api/system";
import { saveTask } from '@/api/system';
export default {
props: {
title: {
type: String,
required: true,
default: "",
default: ''
},
show: {
type: Boolean,
required: true,
default: false,
default: false
},
dict: {
type: Object,
required: true,
default: () => {
return {};
},
},
}
}
},
data() {
return {
......@@ -162,25 +126,21 @@ export default {
days: {}, // 号数
weeks: {}, // 周
form: {
name: "", // 任务名称
taskKey: "", // 关键字
excuteService: "", // 执行服务
name: '', // 任务名称
taskKey: '', // 关键字
excuteService: '', // 执行服务
excuteStrategy: 1, // 执行策略
excuteDate: 0, // 执行日期
excuteTime: "", // 执行时间
excuteHost: "", // 执行主机
excuteParam: "", // 执行参数
remark: "", // 备注
excuteTime: '', // 执行时间
excuteHost: '', // 执行主机
excuteParam: '', // 执行参数
remark: '' // 备注
},
rules: {
name: [{ required: true, message: "请输入参数名称", trigger: "blur" }],
paramKey: [
{ required: true, message: "请输入参数键", trigger: "blur" },
],
paramValue: [
{ required: true, message: "请输入参数值", trigger: "blur" },
],
},
name: [{ required: true, message: '请输入参数名称', trigger: 'blur' }],
paramKey: [{ required: true, message: '请输入参数键', trigger: 'blur' }],
paramValue: [{ required: true, message: '请输入参数值', trigger: 'blur' }]
}
};
},
computed: {
......@@ -189,17 +149,17 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
created() {
for (let i = 1; i <= 31; i++) {
this.days[i] = i + "";
this.days[i] = i + '';
}
let numArr = ["", "", "", "", "", "", ""];
let numArr = ['', '', '', '', '', '', ''];
for (let i = 1; i <= 7; i++) {
this.weeks[i] = "星期" + numArr[i - 1];
this.weeks[i] = '星期' + numArr[i - 1];
}
},
methods: {
......@@ -212,7 +172,7 @@ export default {
let { code, msg } = res.data;
if (code === 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -222,7 +182,7 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
......@@ -232,11 +192,11 @@ export default {
},
// 重置
handleRest() {
this.$resetForm("form");
this.$resetForm('form');
},
// 关闭
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
// 切换策略
......@@ -244,13 +204,13 @@ export default {
if (val == 1) {
this.form.excuteDate = 0;
} else {
this.form.excuteDate = "";
this.form.excuteDate = '';
}
if (val == 4) {
this.form.excuteTime = "";
this.form.excuteTime = '';
}
},
},
}
}
};
</script>
......
......@@ -4,17 +4,8 @@
<div slot="right" v-hasPermi="['system:user:query']">
<el-form ref="searchForm" :model="searchForm" inline size="small">
<el-form-item prop="type">
<el-select
style="width: 120px"
v-model="searchForm.type"
placeholder="请选择"
>
<el-option
v-for="(v, key) in typeList"
:key="key"
:label="v"
:value="key"
>
<el-select style="width: 120px" v-model="searchForm.type" placeholder="请选择">
<el-option v-for="(v, key) in typeList" :key="key" :label="v" :value="key">
</el-option>
</el-select>
</el-form-item>
......@@ -57,65 +48,61 @@
></Pagination>
<!-- 分配角色 -->
<AddUserRole
ref="AddUserRole"
:show.sync="show"
@success="getUserList"
></AddUserRole>
<AddUserRole ref="AddUserRole" :show.sync="show" @success="getUserList"></AddUserRole>
</div>
</template>
<script>
import TableHeader from "@/components/TableHeader.vue";
import AddUserRole from "./components/AddUserRole.vue";
import { getUserList } from "@/api/system";
import TableHeader from '@/components/TableHeader.vue';
import AddUserRole from './components/AddUserRole.vue';
import { getUserList } from '@/api/system';
let typeList = {
loginName: "按登录名",
realName: "按用户姓名",
mobile: "按手机号码",
loginName: '按登录名',
realName: '按用户姓名',
mobile: '按手机号码'
};
export default {
components: {
TableHeader,
AddUserRole,
AddUserRole
},
data() {
return {
typeList,
column: [
{
label: "序号",
type: "index",
width: "55",
align: "center",
label: '序号',
type: 'index',
width: '55',
align: 'center',
index: (index) => {
return (this.page - 1) * this.size + index + 1;
},
}
},
{
label: "登录名",
prop: "loginName",
align: "center",
label: '登录名',
prop: 'loginName',
align: 'center'
},
{
label: "用户姓名",
prop: "realName",
align: "center",
label: '用户姓名',
prop: 'realName',
align: 'center'
},
{
label: "手机号码",
prop: "mobile",
align: "center",
label: '手机号码',
prop: 'mobile',
align: 'center'
},
{
label: "所属角色",
prop: "roleIds",
align: "center",
label: '所属角色',
prop: 'roleIds',
align: 'center',
formatter: (row) => {
if (row.roleIds) {
return (
<div class="flex justify-center gap-2">
{row.roleIds.split(",").map((v) => {
{row.roleIds.split(',').map((v) => {
return (
<el-tag size="small" type="info">
{this.dict.roleIds[v]}
......@@ -125,35 +112,35 @@ export default {
</div>
);
}
},
}
},
{
label: "状态",
prop: "status",
align: "center",
label: '状态',
prop: 'status',
align: 'center',
formatter: (row) => {
if (this.dict.status) {
return this.dict.status[row.status];
}
},
}
},
{
label: "创建时间",
prop: "createTime",
align: "center",
label: '创建时间',
prop: 'createTime',
align: 'center',
formatter: (row) => {
return this.$moment(row.createTime).format("YYYY-MM-DD HH:mm:ss");
},
return this.$moment(row.createTime).format('YYYY-MM-DD HH:mm:ss');
}
},
{
label: "操作",
align: "center",
width: "120",
label: '操作',
align: 'center',
width: '120',
formatter: (row) => {
return (
<div class="flex justify-center gap-4">
<span
v-hasPermi={["system:user:userRole"]}
v-hasPermi={['system:user:userRole']}
class="primary cursor-pointer"
onClick={() => this.apportion(row)}
>
......@@ -161,12 +148,12 @@ export default {
</span>
</div>
);
},
},
}
}
],
searchForm: {
type: "loginName",
keyword: "",
type: 'loginName',
keyword: ''
},
tableData: [],
page: 1,
......@@ -175,9 +162,9 @@ export default {
loading: false,
selectRows: [],
show: false,
title: "新增",
title: '新增',
dict: {}, // 字典
resShow: false,
resShow: false
};
},
created() {
......@@ -194,7 +181,7 @@ export default {
let res = await getUserList({
page: this.page,
size: this.size,
...obj,
...obj
});
this.loading = false;
if (res.data.code == 1) {
......@@ -212,22 +199,22 @@ export default {
// 搜索
handleSearch() {
this.page = 1;
this.$clearSelection("MyTable");
this.$clearSelection('MyTable');
this.getUserList();
},
// 重置
handleReset() {
this.page = 1;
this.$clearSelection("MyTable");
this.$resetForm("searchForm");
this.$clearSelection('MyTable');
this.$resetForm('searchForm');
this.getUserList();
},
apportion(row) {
let data = this.$cloneDeep(row);
this.$refs.AddUserRole.onEdit(data);
this.show = true;
},
},
}
}
};
</script>
......
......@@ -9,13 +9,7 @@
:close-on-click-modal="false"
top="10vh"
>
<el-form
ref="form"
:model="form"
:rules="rules"
size="medium"
label-width="100px"
>
<el-form ref="form" :model="form" :rules="rules" size="medium" label-width="100px">
<el-form-item label="角色名称" prop="roleIds">
<el-select
multiple
......@@ -24,46 +18,38 @@
v-model="form.roleIds"
placeholder="请选择角色"
>
<el-option
v-for="v in roleList"
:key="v.id"
:label="v.name"
:value="v.id"
>
</el-option>
<el-option v-for="v in roleList" :key="v.id" :label="v.name" :value="v.id"> </el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button size="medium" @click="handleRest">重 置</el-button>
<el-button size="medium" type="primary" @click="handleOk"
>确 定</el-button
>
<el-button size="medium" type="primary" @click="handleOk">确 定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { getRoleList, saveUser } from "@/api/system";
import { getRoleList, saveUser } from '@/api/system';
export default {
components: {},
props: {
show: {
type: Boolean,
required: true,
default: false,
},
default: false
}
},
data() {
return {
roleList: [],
form: {
roleIds: [],
roleIds: []
},
rules: {
roleIds: [{ required: true, message: "请选择角色", trigger: "change" }],
},
roleIds: [{ required: true, message: '请选择角色', trigger: 'change' }]
}
};
},
computed: {
......@@ -72,9 +58,9 @@ export default {
return this.show;
},
set(val) {
this.$emit("update:show", val);
},
},
this.$emit('update:show', val);
}
}
},
created() {
this.getRoleList();
......@@ -84,7 +70,7 @@ export default {
async getRoleList() {
let res = await getRoleList({
page: 1,
size: -1,
size: -1
});
if (res.data.code == 1) {
let { data } = res.data.data;
......@@ -101,12 +87,12 @@ export default {
id,
lastLoginAddress,
mobile,
roleIds: roleIds.join(","),
roleIds: roleIds.join(',')
});
let { code, msg } = res.data;
if (code == 1) {
this.$message.success(msg);
this.$emit("success");
this.$emit('success');
this.handleClose();
}
this.loading = false;
......@@ -116,14 +102,14 @@ export default {
// 新增
onAdd() {
Object.assign(this.form, this.$options.data().form);
this.form.id && this.$delete(this.form, "id");
this.form.id && this.$delete(this.form, 'id');
},
// 编辑
onEdit(row) {
setTimeout(() => {
this.form = { ...row };
if (this.form.roleIds) {
this.form.roleIds = this.form.roleIds.split(",").map(Number);
this.form.roleIds = this.form.roleIds.split(',').map(Number);
} else {
this.form.roleIds = [];
}
......@@ -131,14 +117,14 @@ export default {
},
// 重置
handleRest() {
this.$resetForm("form");
this.$resetForm('form');
},
// 关闭
handleClose() {
this.$resetForm("form");
this.$resetForm('form');
this.Visible = false;
},
},
}
}
};
</script>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment