You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

326 lines
12 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" v-has="'erp:order:add'" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('订单')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>项
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
bordered
rowKey="id"
class="j-table-force-nowrap"
:scroll="{x:true}"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<template #state="text, record">
<div>
<a-tag color="green" v-if="record.state === 3">
{{ record.state_dictText }}
</a-tag>
<a-tag v-else-if="record.state === 5">
{{ record.state_dictText }}
</a-tag>
<a-tag color="red" v-else>
{{ record.state_dictText }}
</a-tag>
</div>
</template>
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a v-has="'erp:order:edit'" @click="handleEdit(record)">编辑</a>
<a v-if='record.state === 0' v-has="'erp:order:check'" @click="handleConfirm(1, record, )">审核</a>
<a v-if='record.state === 1' v-has="'erp:order:dispatch'" @click="handleConfirm(2, record, )">派发</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a v-has="'erp:order:delete'">删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<order-modal ref="modalForm" @ok="modalFormOk"/>
<a-modal
:title="infoModel.title"
:visible="infoModel.visible"
:confirm-loading="infoModel.confirmLoading"
@cancel="handleCloseInfoModal"
>
<a-form-model
ref="ruleForm"
:model="form"
:rules="rules"
:label-col="labelCol"
:wrapper-col="wrapperCol"
>
<a-form-model-item ref="logistics_id" label="物流单号" prop="logistics_id" v-if="rowInfo.state === 2">
<a-input
v-model="form.logistics_id"
@blur="
() => {
$refs.logistics_id.onFieldBlur();
}
"
/>
</a-form-model-item>
<a-form-model-item label="备注" prop="desc">
<a-input v-model="form.desc" type="textarea" />
</a-form-model-item>
</a-form-model>
<template v-slot:footer>
<a-button key="back" type='danger' :loading="infoModel.confirmLoading" @click="handleOk('cancel')">
不通过
</a-button>
<a-button key="submit" type="primary" :loading="infoModel.confirmLoading" @click="handleOk('ok')">
</a-button>
</template>
</a-modal>
</a-card>
</template>
<script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import OrderModal from './modules/OrderModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
import '@/assets/less/TableExpand.less'
import { editOrder } from '@/api/shop'
import orderList from '@views/erp/const/orderList'
import { mapGetters } from 'vuex'
import moment from 'moment'
export default {
name: "OrderList",
mixins:[JeecgListMixin],
components: {
OrderModal
},
data () {
return {
labelCol: { span: 4 },
wrapperCol: { span: 18 },
other: '',
rowInfo: {
state: -1,
row: {}
},
form: { },
rules: {
},
infoModel: {
title: '审核',
visible: false,
confirmLoading: false,
ModalText: 'Content of the modal',
},
description: '订单管理页面',
// 表头
columns: orderList,
url: {
list: "/erp/order/list",
delete: "/erp/order/delete",
deleteBatch: "/erp/order/deleteBatch",
exportXlsUrl: "/erp/order/exportXls",
importExcelUrl: "erp/order/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
}
},
methods: {
...mapGetters(["userInfo"]),
handleOk(type) {
const that = this
const user = that.userInfo()
if (type === "ok" && that.rowInfo.state === 2 && !that.form.logistics_id) {
this.$message.warn('请填写物流单号')
return
}
if (type === "cancel" && [1, 2].includes(that.rowInfo.state) && !that.form.desc) {
this.$message.warn('不通过,请填写备注信息')
return
}
this.$refs.ruleForm.validate(valid => {
if (valid) {
this.$confirm({
title: "确认操作",
content: "是否确认此操作?",
onOk: function () {
that.infoModel.confirmLoading = true
const state = type === 'cancel'? 5 : that.rowInfo.state
const time = moment().format('YYYY-MM-DD HH:mm:ss')
let params = {
state,
id: that.rowInfo.row.id
}
if (that.rowInfo.state === 1) {
params.financeReview = user.realname
params.financeTime = time
params.financeId = user.id
params.financeRemark = that.form.desc
} else if (that.rowInfo.state === 2) {
params.dispacher = user.realname
params.dispacherId = user.id
params.logisticsId = that.form.logistics_id
params.dispacherTime = time
params.dispacherRemark = that.form.desc
}
params = Object.assign({}, that.rowInfo.row, params)
editOrder(params).then(res => {
that.infoModel.confirmLoading = false
that.infoModel.visible = false
if (res.result) {
that.$message.success('操作成功');
that.loadData(1);
} else {
that.$message.warn(res.message);
}
}).catch(() => {
that.infoModel.confirmLoading = false
that.infoModel.visible = false
})
}
})
} else {
return false;
}
});
},
handleCancel() {
console.log()
},
handleCloseInfoModal() {
this.infoModel.visible = false
},
handleConfirm(state, row) {
if (![0, 1].includes(row.state)) {
this.$message.error('该状态无权限操作')
return
}
this.form = {}
this.rules = {}
const baseObject = {desc: ''}
const baseObjectRules = { desc: [{ message: '填写备注', trigger: 'blur' }]}
const textOBj = {
1: '审核',
2: '派发'
}
const obj = {
1: Object.assign({}, baseObject),
2: Object.assign({
logistics_id: '',
}, baseObject)
}
this.form = obj[state]
// 派发填写物流单号
// this.rules = state === 2 ? Object.assign({}, this.rules, {
// logistics_id: [
// { required: true, message: '填写物流单号', trigger: 'blur' },
// ],}) : this.rules
this.infoModel.title = textOBj[state]
this.infoModel.visible = true
this.rowInfo = {
row,
state
}
},
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'recipient',text:'收件人',dictCode:''})
fieldList.push({type:'string',value:'mobile',text:'手机',dictCode:''})
fieldList.push({type:'BigDecimal',value:'totalAmount',text:'总金额',dictCode:''})
fieldList.push({type:'string',value:'userId',text:'用户id',dictCode:''})
fieldList.push({type:'string',value:'addr',text:'地址',dictCode:''})
fieldList.push({type:'string',value:'financeReview',text:'审核人',dictCode:''})
fieldList.push({type:'datetime',value:'financeTime',text:'审核时间'})
fieldList.push({type:'string',value:'financeRemark',text:'审核意见',dictCode:''})
fieldList.push({type:'string',value:'dispacher',text:'派单人',dictCode:''})
fieldList.push({type:'datetime',value:'dispacherTime',text:'派发时间'})
fieldList.push({type:'int',value:'state',text:'状态,0:待付款 默认1待发货2已发货3完结4退换货',dictCode:'orderState'})
fieldList.push({type:'string',value:'remark',text:'备注',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>