Commit d65b22f3 authored by “yiyousong”'s avatar “yiyousong”

feat:添加预约报表

parent e8d4690e
......@@ -28,10 +28,9 @@ export function getWorkerInfo(params) {
return http.get(`${baseURL}/base/workman/info`, params);
}
//评价选项
export function getOptonList(params){
return http.post(`${BASEURL}/bkb/bkbset/optionlist`,params)
export function getOptonList(params) {
return http.post(`${BASEURL}/bkb/bkbset/optionlist`, params);
}
//评价数据列表
export function getEvaList(params) {
......@@ -96,3 +95,37 @@ export function getCalllist(params) {
export function getCallQueList(params) {
return http.post(`${BASEURL}/inter/reportform/callQueList`, params);
}
/**
* 预约报表
*/
// 获取列表
export function getOrderList(params) {
return http.post(`${BASEURL}/wechat/order_data/orderList`, params);
}
// 查看详情
export function getOrderinfo(params) {
return http.get(`${BASEURL}/wechat/order_data/orderinfo`, params);
}
/**
* 取件记录报表
*/
// 获取取件柜列表
export function getSitePickupDevice(params) {
return http.get(`${BASEURL}/pickup/reportform/siteDevice`, params);
}
// 获取取件记录报表
export function getPickupList(params) {
return http.post(`${BASEURL}/pickup/reportform/pickuplist`, params);
}
// 获取存件记录报表
export function getStorageList(params) {
return http.post(`${BASEURL}/pickup/reportform/storagelist`, params);
}
// 获取其他记录操作记录
export function getOtherList(params) {
return http.post(`${BASEURL}/pickup/reportform/otherlist`, params);
}
......@@ -20,6 +20,9 @@ import * as directives from "@/directive";
Object.keys(directives).forEach((name) =>
Vue.directive(name, directives[name])
);
// 引入lodash
import lodash from "lodash";
Vue.prototype.$_ = lodash;
// moment 时间处理
import moment from "moment";
Vue.prototype.$moment = moment;
......@@ -29,8 +32,8 @@ Object.keys(filters).forEach((key) => {
Vue.filter(key, filters[key]);
});
//引入字典
import codeMap from "@/utils/codeMap"
Vue.prototype.$codeMap = codeMap
import codeMap from "@/utils/codeMap";
Vue.prototype.$codeMap = codeMap;
Vue.prototype.$bus = new Vue();
......
......@@ -410,7 +410,9 @@ export default {
6: "一体化评价",
};
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
this.tableSelectedRows.forEach((item) => {
// 深度克隆避免影响页面表格展示
let data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.pjxt == keys) {
item.pjxt = obj[keys];
......@@ -420,14 +422,16 @@ export default {
export2Excel(
this.tHeader,
this.filterVal,
this.tableSelectedRows,
data,
"办事部门评价记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
let data = await this.togetevalist({
page: 1,
size: -1,
});
let data = this.$_.cloneDeep(
await this.togetevalist({
page: 1,
size: -1,
})
);
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
......
......@@ -413,7 +413,9 @@ export default {
6: "一体化评价",
};
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
this.tableSelectedRows.forEach((item) => {
// 深度克隆避免影响页面表格展示
let data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.pjxt == keys) {
item.pjxt = obj[keys];
......@@ -423,14 +425,16 @@ export default {
export2Excel(
this.tHeader,
this.filterVal,
this.tableSelectedRows,
data,
"办理事项评价记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
let data = await this.togetevalist({
page: 1,
size: -1,
});
let data = this.$_.cloneDeep(
await this.togetevalist({
page: 1,
size: -1,
})
);
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
......
......@@ -416,7 +416,9 @@ export default {
6: "一体化评价",
};
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
this.tableSelectedRows.forEach((item) => {
// 深度克隆避免影响页面表格展示
let data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.pjxt == keys) {
item.pjxt = obj[keys];
......@@ -426,14 +428,16 @@ export default {
export2Excel(
this.tHeader,
this.filterVal,
this.tableSelectedRows,
data,
"窗口服务评价记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
let data = await this.togetevalist({
page: 1,
size: -1,
});
let data = this.$_.cloneDeep(
await this.togetevalist({
page: 1,
size: -1,
})
);
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
......
......@@ -302,7 +302,9 @@ export default {
2: "在线提交",
};
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
this.tableSelectedRows.forEach((item) => {
// 深度克隆避免影响页面表格展示
let data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.type == keys) {
item.type = obj[keys];
......@@ -312,11 +314,13 @@ export default {
export2Excel(
this.tHeader,
this.filterVal,
this.tableSelectedRows,
data,
"填单记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
let data = await this.togetPrintList({ page: 1, size: -1 });
let data = this.$_.cloneDeep(
await this.togetPrintList({ page: 1, size: -1 })
);
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
......
......@@ -2,39 +2,45 @@
<div class="PoliticsShow-Container">
<div class="header_box">
<div>
<a-button type="success" @click="exportTable">
<a-button
:loading="btnLoading"
type="success"
@click="handleExportTable"
>
<span>{{ tableSelectedRows.length ? "导出" : "导出全部" }}</span>
</a-button>
</div>
<span>
<a-input
allowClear
v-model="searchName"
placeholder="请输入预约人姓名/事项名称搜索"
>
<a-icon slot="prefix" type="search" />
</a-input>
<a-range-picker
format="YYYY年MM月DD日"
class="range_picker_style"
@change="rangePickerChange"
v-model="BegindAndEndTime"
>
</a-range-picker>
<a-select default-value="001">
<!-- <a-select-option
v-for="(item, index) of selectOptions"
:key="index"
:value="item.value"
<a-space>
<a-input
allowClear
style="width: 300px"
v-model="searchForm.title"
placeholder="请输入预约人姓名/业务名称搜索"
@pressEnter="handleSearch"
>
{{ item.label }}
</a-select-option> -->
<a-select-option value="001"> 状态001 </a-select-option>
<a-select-option value="002"> 状态002 </a-select-option>
</a-select>
<a-button type="primary">搜索</a-button>
<a-icon slot="prefix" type="search" />
</a-input>
<a-range-picker
style="width: 200px"
format="YYYY-MM-DD"
valueFormat="YYYY-MM-DD"
v-model="searchForm.time"
>
</a-range-picker>
<a-select v-model="searchForm.status">
<a-select-option value=""> 全部 </a-select-option>
<a-select-option
v-for="(v, key) in statusItem"
:key="key"
:value="Number(key)"
>
{{ v }}
</a-select-option>
</a-select>
<a-button type="primary" @click="handleSearch">搜索</a-button>
<a-button @click="handleReset">重置</a-button>
</a-space>
</span>
</div>
<div class="main">
......@@ -47,14 +53,55 @@
onChange: onSelectChange,
}"
:scroll="{ y: 590 }"
:pagination="tablePagination"
@change="pagTableChange"
:pagination="{
showTotal: (total) => `共 ${total} 条`,
current: current,
total: total,
pageSize: size,
showSizeChanger: true,
showQuickJumper: true,
pageSizeOptions: pageSizeOptions,
onChange: changePage,
onShowSizeChange: changSize,
}"
:loading="tableLoading"
:columns="tableHeaders"
:dataSource="tableSourceData"
>
<template slot="状态" slot-scope="text, record, index">
<a-button type="link" @click="openDetails">{{ text }}</a-button>
<!-- 序号 -->
<span slot="index" slot-scope="text, record, index">{{
(current - 1) * size + index + 1
}}</span>
<!-- 状态 -->
<template slot="status" slot-scope="text">
<a-tag
@click="openDetails(text.id)"
v-if="text.status == 0"
color="#108ee9"
>
未签到
</a-tag>
<a-tag
@click="openDetails(text.id)"
v-else-if="text.status == 1"
color="#2db7f5"
>
排队中
</a-tag>
<a-tag
@click="openDetails(text.id)"
v-else-if="text.status == 2"
color="#f50"
>
超时未取号
</a-tag>
<a-tag
@click="openDetails(text.id)"
v-else-if="text.status == 3"
color="red"
>
已取消
</a-tag>
</template>
</a-table>
</div>
......@@ -62,135 +109,277 @@
</template>
<script>
import table from "@/mixins/table";
import { getOrderList } from "@/api/dataAdmin";
import { export2Excel } from "@/utils/js/exportExcel";
let tHeader = [
// 导出的表头名信息
"预约人姓名",
"电话",
"身份证",
"办理地点",
"预约编号",
"预约时间",
"签到时间",
"取消时间",
"创建时间",
"状态",
];
let filterVal = [
// 导出的表头字段名,需要导出表格字段名
"idcard_Name",
"phone",
"idcard_IDCardNo",
"address",
"number",
"starttime",
"taketime",
"canceltime",
"create_time",
"status",
];
let statusItem = {
0: "预约中",
1: "成功取号",
2: "超时未取号",
3: "预约取消",
};
export default {
mixins: [table],
name: "PortalAdminVueMakeRecordReport",
data() {
return {
BegindAndEndTime: [],
tableHeaders: [
{
title: "序号",
dataIndex: "index",
width: "60px",
key: "index",
align: "center",
customRender: (text, record, index) => `${index + 1}`,
},
{
title: "预约人姓名",
align: "center",
dataIndex: "预约人姓名",
},
{
title: "电话",
align: "center",
dataIndex: "电话",
},
{
title: "身份证",
align: "center",
dataIndex: "身份证",
width: "180px",
},
{
title: "事项主题名称",
align: "center",
dataIndex: "事项主题名称",
},
{
title: "办理地点",
align: "center",
dataIndex: "办理地点",
let tableHeaders = [
{
title: "序号",
dataIndex: "index",
width: "60px",
align: "center",
scopedSlots: {
customRender: "index",
},
{
title: "预约编号",
align: "center",
dataIndex: "预约编号",
},
{
title: "预约人姓名",
align: "center",
customRender: (text) => {
return text.people.idcard_Name || "--";
},
{
title: "预约时间",
align: "center",
dataIndex: "预约时间",
},
{
title: "电话",
align: "center",
customRender: (text) => {
return text.people.phone || "--";
},
{
title: "签到时间",
align: "center",
dataIndex: "签到时间",
},
{
title: "身份证",
align: "center",
customRender: (text) => {
return text.people.idcard_IDCardNo || "--";
},
{
title: "取消时间",
align: "center",
dataIndex: "取消时间",
},
// {
// title: "事项主题名称",
// align: "center",
// dataIndex: "事项主题名称",
// },
{
title: "办理地点",
align: "center",
dataIndex: "address",
},
{
title: "预约编号",
align: "center",
dataIndex: "number",
},
{
title: "预约时间",
align: "center",
dataIndex: "starttime",
},
{
title: "签到时间",
align: "center",
customRender: (text) => {
return text.taketime || "--";
},
{
title: "创建时间",
align: "center",
dataIndex: "创建时间",
},
{
title: "取消时间",
align: "center",
customRender: (text) => {
return text.canceltime || "--";
},
{
title: "状态",
align: "center",
dataIndex: "状态",
scopedSlots: {
customRender: "状态",
},
},
{
title: "创建时间",
align: "center",
dataIndex: "create_time",
},
{
title: "状态",
align: "center",
scopedSlots: {
customRender: "status",
},
],
searchName: undefined,
},
];
return {
tableLoading: false,
tHeader,
filterVal,
tableHeaders,
statusItem,
btnLoading: false,
searchForm: {
status: "",
title: "",
time: [
this.$moment(new Date()).format("YYYY-MM-DD"),
this.$moment(new Date()).format("YYYY-MM-DD"),
],
},
current: 1,
size: 10,
total: 0,
pageSizeOptions: ["10", "20", "30", "40", "50", "100", "200"],
tableSelectedKeys: [],
tableSelectedRows: [],
tableSourceData: [],
};
},
components: {},
mounted() {
this.setMoment();
for (let key = 0; key < 20; key++) {
this.tableSourceData.push({
id: `00${key + 1}`,
预约人姓名: `戴校庆${key + 1}`,
电话: `13880888834`,
身份证: `512111198802301988`,
事项主题名称: `生育证办理${key + 1}`,
办理地点: `高新政务服务中心${key + 1}`,
预约编号: `UMII9876${key + 1}`,
预约时间: `2021-01-03 09:00:00~18:00:00`,
签到时间: `2022-01-03 09:00:00`,
取消时间: `2022-01-03 18:00:00`,
创建时间: `2021-01-03 09:00:00`,
状态: `未办理${key + 1}`,
});
}
created() {
this.getOrderList();
},
methods: {
rangePickerChange(val) {
console.log(val);
},
QueueState(type) {
switch (type) {
case 0:
return "type1";
case 1:
return "type2";
default:
return "type0";
// 获取报表数据
async getOrderList(search = {}) {
let res = await getOrderList({
page: this.current,
size: this.size,
...this.searchForm,
...search,
});
if (res.code == 1) {
let { data, total } = res.data;
if (!data.length && this.current > 1) {
this.current -= 1;
this.getOrderList();
}
this.tableSourceData = data.map((v) => {
delete v.people.id;
return { ...v, ...v.people };
});
this.total = total;
return this.tableSourceData;
}
},
openDetails() {
// 翻页
changePage(cur) {
this.current = cur;
this.getOrderList();
},
// 改变每页显示数量
changSize(cur, size) {
this.current = cur;
this.size = size;
this.getOrderList();
},
// 搜索
handleSearch() {
this.current = 1;
this.tableSelectedKeys = [];
this.tableSelectedRows = [];
this.getOrderList();
},
// 重置搜索
handleReset() {
this.current = 1;
this.tableSelectedKeys = [];
this.tableSelectedRows = [];
this.searchForm = {
status: "",
title: "",
time: [
this.$moment(new Date()).format("YYYY-MM-DD"),
this.$moment(new Date()).format("YYYY-MM-DD"),
],
};
this.getOrderList();
},
// 选中
onSelectChange(keys, rows) {
this.tableSelectedKeys = keys;
const res = new Map();
this.tableSelectedRows = [...this.tableSelectedRows, ...rows]
.filter((v) => {
return !res.has(v.id) && res.set(v.id, 1);
})
.filter((v) => {
return this.tableSelectedKeys.some((val) => v.id == val);
});
},
openDetails(id) {
// 跳转详情
this.$router.push({ path: "/home/dataManagement/recordReportdetails" });
this.$router.push({
path: "/home/dataManagement/recordReportdetails",
query: {
id,
},
});
},
// 导出
async handleExportTable() {
this.btnLoading = true;
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
// 深度克隆避免影响页面表格展示
let data = this.$_.cloneDeep(this.tableSelectedRows);
for (let item of data) {
Object.keys(this.statusItem).forEach((key) => {
if (item.status == key) {
item.status = this.statusItem[key];
}
});
}
export2Excel(
this.tHeader,
this.filterVal,
data,
"预约记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
let data = this.$_.cloneDeep(
await this.getOrderList({ page: 1, size: -1 })
);
if (!data.length) return;
for (let item of data) {
Object.keys(this.statusItem).forEach((key) => {
if (item.status == key) {
item.status = this.statusItem[key];
}
});
}
export2Excel(
this.tHeader,
this.filterVal,
data,
"预约记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
}
this.btnLoading = false;
},
},
};
</script>
<style lang="less" scoped>
/deep/.ant-spin-container {
display: block;
}
/deep/.ant-tag {
cursor: pointer;
}
</style>
......@@ -8,50 +8,108 @@
<div class="top">
<div class="info">
<h1>预约信息</h1>
<p><span>预约编号:</span>A051511051332</p>
<p><span>预约人:</span>*黎</p>
<p><span>手机号:</span>13080888888</p>
<p><span>证件号码:</span>**********2112</p>
<p><span>预约时段:</span>2022-03-02 09:00:00</p>
<p><span>预约编号:</span>{{ orderInfo.number || "--" }}</p>
<p>
<span>预约人:</span
>{{ (orderInfo.people && orderInfo.people.idcard_Name) || "--" }}
</p>
<p>
<span>手机号:</span
>{{ (orderInfo.people && orderInfo.people.phone) || "--" }}
</p>
<p>
<span>证件号码:</span
>{{
(orderInfo.people && orderInfo.people.idcard_IDCardNo) || "--"
}}
</p>
<p>
<span>预约时段:</span>{{ orderInfo.starttime }}~{{
orderInfo.endtime
}}
</p>
</div>
<div class="qrcode">
<img src="~@/assets/images/logo.png" alt="" />
<p>预约信息二维码</p>
<!-- <img src="~@/assets/images/logo.png" alt="" />
<p>预约信息二维码</p> -->
</div>
</div>
<ul class="bottom">
<li v-for="item of 4">
<p>0{{ item }}</p>
<p>预约状态</p>
<li v-for="(v, key) of orderStatus" :key="key">
<p>0{{ key }}</p>
<p>{{ v }}</p>
</li>
</ul>
</div>
<div class="right_">
<div class="box1">
<div class="left_">
<h1>生育业务</h1>
<p v-for="item of 3">事项1:生育证津贴办理</p>
<h1>{{ orderInfo.business || "--" }}</h1>
<!-- <p v-for="item of 3">事项1:生育证津贴办理</p> -->
</div>
<div class="right_">
<span>未签到</span>
<span class="status1" v-if="orderInfo.status != 1">未签到</span>
<span class="status2" v-else>排队中</span>
</div>
</div>
<div class="box2">
<h1>办理地点</h1>
<h2><span v-for="item of 3">办理地点:xxx政务服务中心</span></h2>
<h2><span v-for="item of 3">办理地点:xxx政务服务中心</span></h2>
<h2>
<span
>办理地点:{{
orderInfo.siteinfo && orderInfo.siteinfo.siteName
}}</span
>
<span
>办理窗口:{{
(orderInfo.window && orderInfo.window.join(",")) || "--"
}}</span
>
<span
>服务热线:{{
orderInfo.siteinfo && orderInfo.siteinfo.siteTel
}}</span
>
</h2>
<h2>
<span
>办理时间:{{
orderInfo.siteinfo &&
Number(orderInfo.siteinfo.amWorkStartTime) | times
}}
~
{{
orderInfo.siteinfo &&
Number(orderInfo.siteinfo.pmWorkEndTime) | times
}}</span
>
<span
>办理地址:{{
orderInfo.siteinfo && orderInfo.siteinfo.detailAddress
}}</span
>
</h2>
</div>
<div class="box3">
<h1>签到信息</h1>
<h2><span v-for="item of 2">签到时间:2022-08-03 09:00:00</span></h2>
<h2>
<span>签到时间:{{ orderInfo.taketime || "--" }}</span>
</h2>
<h2>
<span
>签到地址:{{
orderInfo.siteinfo && orderInfo.siteinfo.detailAddress
}}</span
>
</h2>
</div>
</div>
</div>
<div class="footer">
<h1>操作信息</h1>
<h2>
<span>操作时间:2021-08-02 16:00:00</span>
<span>预约方式:手机端预约系统 </span>
<span>操作时间:{{ orderInfo.create_time }}</span>
<span>预约方式:-- </span>
<span>操作站点:-- </span>
</h2>
</div>
......@@ -59,16 +117,41 @@
</template>
<script>
import { getOrderinfo } from "@/api/dataAdmin";
let orderStatus = {
1: "预约成功",
2: "签到成功",
3: "办理中",
4: "完成",
};
let statusItem = {
0: "预约中",
1: "成功取号",
2: "超时未取号",
3: "预约取消",
};
export default {
name: "PortalAdminVueRecordReportdetails",
data() {
return {};
return {
orderStatus,
statusItem,
orderInfo: {}, // 预约信息
};
},
mounted() {},
created() {
this.getOrderinfo();
},
methods: {},
methods: {
async getOrderinfo() {
let id = this.$route.query.id;
let res = await getOrderinfo({ id });
this.orderInfo = res.data;
console.log(res.data);
},
},
};
</script>
......@@ -236,13 +319,23 @@ export default {
width: 100px;
line-height: 100px;
text-align: center;
border: 1px solid #fe8625;
border-radius: 50%;
color: #fe8625;
font-weight: bold;
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}
.status1 {
color: #fe8625;
border: 1px solid #fe8625;
}
.status2 {
color: #1890ff;
border: 1px solid #1890ff;
}
.status3 {
color: #03d76f;
border: 1px solid #03d76f;
}
}
}
.box2 {
......
......@@ -458,7 +458,9 @@ export default {
4: "办理完成",
};
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
this.tableSelectedRows.forEach((item) => {
// 深度克隆避免影响页面表格展示
let data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.style == keys) {
item.style = obj[keys];
......@@ -468,14 +470,16 @@ export default {
export2Excel(
this.tHeader,
this.filterVal,
this.tableSelectedRows,
data,
"呼叫记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
let data = await this.getCallQueListArr({
page: 1,
size: -1,
});
let data = this.$_.cloneDeep(
await this.getCallQueListArr({
page: 1,
size: -1,
})
);
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
......
......@@ -452,7 +452,9 @@ export default {
4: "办理完成",
};
if (this.tableSelectedKeys.length && this.tableSelectedRows.length) {
this.tableSelectedRows.forEach((item) => {
// 深度克隆避免影响页面表格展示
let data = this.$_.cloneDeep(this.tableSelectedRows);
data.forEach((item) => {
Object.keys(obj).forEach((keys) => {
if (item.style == keys) {
item.style = obj[keys];
......@@ -462,11 +464,13 @@ export default {
export2Excel(
this.tHeader,
this.filterVal,
this.tableSelectedRows,
data,
"排队记录报表" + this.$moment().format("YYYYMMDDHHmmss")
);
} else {
let data = await this.getQueueDataArr({ page: 1, size: -1 });
let data = this.$_.cloneDeep(
await this.getQueueDataArr({ page: 1, size: -1 })
);
if (!data.length) return;
for (let item of data) {
Object.keys(obj).forEach((key) => {
......
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