123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683 |
- <template>
-
- <div class="app-container">
- <el-card class="filter-container" shadow="never">
- <div>
- <i class="el-icon-search"></i>
- <span>筛选搜索</span>
- <el-button
- style="float: right; "
- @click="onExport()"
- size="small"
- type="danger"
- >
- 导出
- </el-button>
- <el-button
- style="float: right; margin-right: 15px"
- type="primary"
- @click="handleSearchList()"
- size="small"
- >
- 查询搜索
- </el-button>
- <el-button
- style="float: right; margin-right: 15px"
- @click="handleResetSearch()"
- size="small"
- >
- 重置
- </el-button>
- </div>
- <div style="margin-top: 15px">
- <el-form
- :inline="true"
- :model="listQuery"
- size="small"
- label-width="140px"
- >
- <el-form-item label="输入搜索:">
- <el-input
- v-model="listQuery.orderSn"
- class="input-width"
- placeholder="订单编号"
- ></el-input>
- </el-form-item>
- <el-form-item label="收货人:">
- <el-input
- v-model="listQuery.receiverKeyword"
- class="input-width"
- placeholder="收货人姓名/手机号码"
- ></el-input>
- </el-form-item>
- <el-form-item label="提交时间:">
- <el-date-picker
- class="input-width"
- v-model="listQuery.dateRange"
- value-format="yyyy-MM-dd"
- type="daterange"
- placeholder="请选择时间"
- range-separator="~"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- style="width: 260px;"
- >
- </el-date-picker>
- </el-form-item>
- <el-form-item label="订单状态:">
- <el-select
- v-model="listQuery.status"
- class="input-width"
- placeholder="全部"
- clearable
- >
- <el-option
- v-for="item in statusOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="订单分类:">
- <el-select
- v-model="listQuery.orderType"
- class="input-width"
- placeholder="全部"
- clearable
- >
- <el-option
- v-for="item in orderTypeOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- <el-form-item label="订单来源:">
- <el-select
- v-model="listQuery.sourceType"
- class="input-width"
- placeholder="全部"
- clearable
- >
- <el-option
- v-for="item in sourceTypeOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- </el-form-item>
- </el-form>
- </div>
- </el-card>
- <el-card class="operate-container" shadow="never">
- <i class="el-icon-tickets"></i>
- <span>数据列表</span>
- </el-card>
- <div class="table-container">
- <el-table
- ref="orderTable"
- :data="list"
- style="width: 100%"
- @selection-change="handleSelectionChange"
- v-loading="listLoading"
- border
- >
- <el-table-column
- type="selection"
- width="60"
- align="center"
- ></el-table-column>
- <el-table-column label="编号" width="80" align="center">
- <template slot-scope="scope">{{ scope.row.id }}</template>
- </el-table-column>
- <el-table-column label="订单编号" width="180" align="center">
- <template slot-scope="scope">{{ scope.row.orderSn }}</template>
- </el-table-column>
- <el-table-column label="提交时间" width="180" align="center">
- <template slot-scope="scope">{{
- scope.row.createTime | formatCreateTime
- }}</template>
- </el-table-column>
- <el-table-column label="来源" align="center">
- <template slot-scope="scope">{{ scope.row.orderFormType | formatOrderFormType }}</template>
- </el-table-column>
- <el-table-column label="用户类型" align="center">
- <template slot-scope="scope">
- <p v-if="scope.row.platformType == 'STUDENT'">学生</p>
- <p v-else-if="scope.row.platformType == 'TEACHER'">老师</p>
- <p v-else-if="scope.row.platformType == 'SCHOOL'">学校</p>
- <p v-else>--</p>
- </template>
- </el-table-column>
- <el-table-column label="用户编号" align="center">
- <template slot-scope="scope">{{ scope.row.userId }}</template>
- </el-table-column>
- <el-table-column label="用户名" align="center">
- <template slot-scope="scope">{{ scope.row.username }}</template>
- </el-table-column>
- <el-table-column label="手机号" align="center">
- <template slot-scope="scope">{{ scope.row.phone || '-' }}</template>
- </el-table-column>
- <el-table-column label="订单金额" width="120" align="center">
- <template slot-scope="scope">¥{{ scope.row.totalAmount }}</template>
- </el-table-column>
- <el-table-column label="支付方式" width="120" align="center">
- <template slot-scope="scope">{{
- scope.row.payType | formatPayType
- }}</template>
- </el-table-column>
- <el-table-column label="订单来源" width="120" align="center">
- <template slot-scope="scope">{{
- scope.row.sourceType | formatSourceType
- }}</template>
- </el-table-column>
- <el-table-column label="订单状态" width="120" align="center">
- <template slot-scope="scope">{{
- scope.row.status | formatStatus
- }}</template>
- </el-table-column>
- <el-table-column label="操作" width="200" align="center">
- <template slot-scope="scope">
- <p class="table-btn-group">
- <el-button
- size="mini"
- @click="handleViewOrder(scope.$index, scope.row)"
- >查看订单</el-button
- >
- <!-- <el-button
- size="mini"
- @click="handleCloseOrder(scope.$index, scope.row)"
- v-show="scope.row.status === 0 || scope.row.status === 6"
- >关闭订单</el-button
- > -->
- <el-button
- size="mini"
- @click="handleDeliveryOrder(scope.$index, scope.row)"
- v-show="scope.row.status === 1"
- >订单发货</el-button
- >
- <el-button
- size="mini"
- @click="handleOverOrder(scope.$index, scope.row)"
- v-show="scope.row.status === 1"
- >完成订单</el-button
- >
- <!-- <el-button
- size="mini"
- @click="handleViewLogistics(scope.$index, scope.row)"
- v-show="scope.row.status===2||scope.row.status===3">订单跟踪</el-button> -->
- <!-- <el-button
- size="mini"
- type="danger"
- @click="handleDeleteOrder(scope.$index, scope.row)"
- v-show="scope.row.status === 4"
- >删除订单</el-button
- > -->
- </p>
- </template>
- </el-table-column>
- </el-table>
- </div>
- <!-- <div class="batch-operate-container">
- <el-select size="small" v-model="operateType" placeholder="批量操作">
- <el-option
- v-for="item in operateOptions"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- >
- </el-option>
- </el-select>
- <el-button
- style="margin-left: 20px"
- class="search-button"
- @click="handleBatchOperate()"
- type="primary"
- size="small"
- >
- 确定
- </el-button>
- </div> -->
- <div class="pagination-container">
- <el-pagination
- background
- @size-change="handleSizeChange"
- @current-change="handleCurrentChange"
- layout="total, sizes,prev, pager, next,jumper"
- :current-page.sync="listQuery.pageNum"
- :page-size="listQuery.pageSize"
- :page-sizes="[5, 10, 15]"
- :total="total"
- >
- </el-pagination>
- </div>
- <el-dialog
- title="关闭订单"
- :visible.sync="closeOrder.dialogVisible"
- width="30%"
- >
- <el-form :model="closeOrder" label-width="150px" ref="closeOrder">
- <el-form-item
- label="操作备注:"
- prop="content"
- :rules="[
- { required: true, message: '请填写操作备注', trigger: 'blur' },
- ]"
- >
- <el-input v-model="closeOrder.content" type="textarea" rows="3">
- </el-input>
- </el-form-item>
- </el-form>
- <!-- <span style="vertical-align: top">操作备注:</span>
- <el-input
- style="width: 80%"
- type="textarea"
- :rows="5"
- placeholder="请输入内容"
- v-model="closeOrder.content"
- >
- </el-input> -->
- <span slot="footer" class="dialog-footer">
- <el-button @click="closeOrder.dialogVisible = false">取 消</el-button>
- <el-button type="primary" @click="handleCloseOrderConfirm"
- >确 定</el-button
- >
- </span>
- </el-dialog>
- <logistics-dialog v-model="logisticsDialogVisible"></logistics-dialog>
- </div>
- </template>
- <script>
- import { fetchList, closeOrder, deleteOrder, updateOrderSuccess } from "@/api/order";
- import { formatDate } from "@/utils/date";
- import { Export } from "@/utils/downLoadFile";
- import dayjs from 'dayjs'
- import LogisticsDialog from "@/views/oms/order/components/logisticsDialog";
- const defaultListQuery = {
- pageNum: 1,
- pageSize: 10,
- orderSn: null,
- receiverKeyword: null,
- status: null,
- orderType: null,
- sourceType: null,
- dateRange: [],
- createTime: null,
- endTime: null,
- };
- export default {
- name: "orderList",
- components: { LogisticsDialog },
- data() {
- return {
- listQuery: Object.assign({}, defaultListQuery),
- listLoading: true,
- list: null,
- total: null,
- operateType: null,
- multipleSelection: [],
- closeOrder: {
- dialogVisible: false,
- content: null,
- orderIds: [],
- },
- statusOptions: [
- {
- label: "待付款",
- value: 0,
- },
- {
- label: "待发货",
- value: 1,
- },
- {
- label: "已发货",
- value: 2,
- },
- {
- label: "已完成",
- value: 3,
- },
- {
- label: "已关闭",
- value: 4,
- },
- ],
- orderTypeOptions: [
- {
- label: "正常订单",
- value: 0,
- },
- {
- label: "秒杀订单",
- value: 1,
- },
- ],
- sourceTypeOptions: [
- {
- label: "PC订单",
- value: 0,
- },
- {
- label: "APP订单",
- value: 1,
- },
- ],
- operateOptions: [
- {
- label: "批量发货",
- value: 1,
- },
- {
- label: "关闭订单",
- value: 2,
- },
- {
- label: "删除订单",
- value: 3,
- },
- ],
- logisticsDialogVisible: false,
- };
- },
- created() {
- this.getList();
- // console.log(this.$route)
- if (this.$route.params.status + "") {
- this.listQuery.status = this.$route.params.status;
- }
- if(this.$route.query.orderSn){
- this.listQuery.orderSn = this.$route.query.orderSn
- }
- },
- filters: {
- formatCreateTime(time) {
- let date = new Date(time);
- return formatDate(date, "yyyy-MM-dd hh:mm:ss");
- },
- formatPayType(value) {
- if (value === 1) {
- return "支付宝";
- } else if (value === 2) {
- return "微信";
- } else if (value === 3) {
- return "余额";
- }else {
- return "未支付";
- }
- },
- formatOrderFormType(value) {
- if(value === 'MEC') {
- return '管乐迷'
- }
- },
- formatSourceType(value) {
- // 0->PC订单;1->app订单 2->学校采购 3 个人订单 4 其他订单")
- if(value === 0) {
- return "PC订单";
- } else if (value === 1) {
- return "APP订单";
- } else if (value === 2) {
- return "学校采购";
- } else if (value === 3) {
- return "个人订单";
- } else {
- return "其他订单";
- }
- },
- formatStatus(value) {
- if (value === 1) {
- return "待发货";
- } else if (value === 2) {
- return "已发货";
- } else if (value === 3) {
- return "已完成";
- } else if (value === 4) {
- return "已关闭";
- } else if (value === 5) {
- return "无效订单";
- } else {
- return "待付款";
- }
- },
- },
- methods: {
- handleResetSearch() {
- this.listQuery = Object.assign({}, defaultListQuery);
- },
- handleSearchList() {
- this.listQuery.pageNum = 1;
- this.getList();
- },
- handleSelectionChange(val) {
- this.multipleSelection = val;
- },
- handleViewOrder(index, row) {
- this.$router.push({ path: "/oms/orderDetail", query: { id: row.id } });
- },
- handleCloseOrder(index, row) {
- this.closeOrder.dialogVisible = true;
- this.closeOrder.content = "";
- this.closeOrder.orderIds = [row.id];
- },
- handleDeliveryOrder(index, row) {
- let listItem = this.covertOrder(row);
- this.$router.push({
- path: "/oms/deliverOrderList",
- query: { list: [listItem] },
- });
- },
- /** 完成订单 */
- handleOverOrder(index, row) {
- this.$confirm("是否要完成订单?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- }).then(() => {
- // let obj = {
- // ids:ids.join(',')
- // }
- updateOrderSuccess([row.id]).then((response) => {
- this.$message({
- message: "完成成功!",
- type: "success",
- duration: 1000,
- });
- this.getList();
- });
- });
- },
- handleViewLogistics(index, row) {
- this.logisticsDialogVisible = true;
- },
- handleDeleteOrder(index, row) {
- let ids = [];
- ids.push(row.id);
- this.deleteOrder(ids);
- },
- handleBatchOperate() {
- if (this.multipleSelection == null || this.multipleSelection.length < 1) {
- this.$message({
- message: "请选择要操作的订单",
- type: "warning",
- duration: 1000,
- });
- return;
- }
- if (this.operateType === 1) {
- //批量发货
- let list = [];
- for (let i = 0; i < this.multipleSelection.length; i++) {
- if (this.multipleSelection[i].status === 1) {
- list.push(this.covertOrder(this.multipleSelection[i]));
- }
- }
- if (list.length === 0) {
- this.$message({
- message: "选中订单中没有可以发货的订单",
- type: "warning",
- duration: 1000,
- });
- return;
- }
- this.$router.push({
- path: "/oms/deliverOrderList",
- query: { list: list },
- });
- } else if (this.operateType === 2) {
- //关闭订单
- this.closeOrder.orderIds = [];
- for (let i = 0; i < this.multipleSelection.length; i++) {
- this.closeOrder.orderIds.push(this.multipleSelection[i].id);
- }
- this.closeOrder.dialogVisible = true;
- } else if (this.operateType === 3) {
- //删除订单
- let ids = [];
- for (let i = 0; i < this.multipleSelection.length; i++) {
- ids.push(this.multipleSelection[i].id);
- }
- this.deleteOrder(ids);
- }
- },
- handleSizeChange(val) {
- this.listQuery.pageNum = 1;
- this.listQuery.pageSize = val;
- this.getList();
- },
- handleCurrentChange(val) {
- this.listQuery.pageNum = val;
- this.getList();
- },
- handleCloseOrderConfirm() {
- // if (this.closeOrder.content == null || this.closeOrder.content === "") {
- // this.$message({
- // message: "操作备注不能为空",
- // type: "warning",
- // duration: 1000,
- // });
- // return;
- // }
- this.$refs.closeOrder.validate((valid) => {
- if (valid) {
- // let params = new URLSearchParams();
- // params.append("ids", this.closeOrder.orderIds);
- // params.append("note", this.closeOrder.content);
- let obj = {
- ids:this.closeOrder.orderIds.join(','),
- note: this.closeOrder.content
- }
- closeOrder(obj).then((response) => {
- this.closeOrder.orderIds = [];
- // this.closeOrder.dialogVisible = false;
- (this.closeOrder = {
- dialogVisible: false,
- content: null,
- orderIds: [],
- }),
- this.getList();
- this.$message({
- message: "修改成功",
- type: "success",
- duration: 1000,
- });
- });
- }
- });
- },
- getList() {
- this.listLoading = true;
- console.log(this.listQuery, 'listQuery')
- let { dateRange, createTime, endTime, ...res } = this.listQuery
- if(dateRange && dateRange.length > 0) {
- createTime = dayjs(dateRange[0]).format('YYYY-MM-DD')
- endTime = dayjs(dateRange[1]).format('YYYY-MM-DD')
- }
- fetchList({
- createTime: createTime,
- endTime: endTime,
- ...res
- }).then((response) => {
- this.listLoading = false;
- this.list = response.data.list;
- this.total = response.data.total;
- });
- },
- deleteOrder(ids) {
- this.$confirm("是否要进行该删除操作?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning",
- }).then(() => {
- // let params = new URLSearchParams();
- // params.append("ids", ids);
- let obj = {
- ids:ids.join(',')
- }
- deleteOrder(obj).then((response) => {
- this.$message({
- message: "删除成功!",
- type: "success",
- duration: 1000,
- });
- this.getList();
- });
- });
- },
- covertOrder(order) {
- let address =
- order.receiverProvince +
- order.receiverCity +
- order.receiverRegion +
- order.receiverDetailAddress;
- let listItem = {
- orderId: order.id,
- orderSn: order.orderSn,
- receiverName: order.receiverName,
- receiverPhone: order.receiverPhone,
- receiverPostCode: order.receiverPostCode,
- address: address,
- deliveryCompany: null,
- deliverySn: null,
- };
- return listItem;
- },
- onExport() {
- Export(
- this,
- {
- url: "/api-mall-admin/export/orderDetail",
- fileName: "订单列表.xls",
- method: "post",
- params: { ...this.listQuery },
- },
- "您确定导出订单列表?"
- );
- },
- },
- };
- </script>
- <style scoped>
- .input-width {
- width: 203px;
- }
- .table-btn-group {
- .el-button {
- margin: 5px 3px;
- }
- }
- </style>
|