基础框架搭建

This commit is contained in:
2023-07-13 11:30:33 +08:00
parent 4094e7cc4b
commit 4db49ff2d1
45 changed files with 3936 additions and 984 deletions

View File

@@ -10,17 +10,12 @@ import {
BasicLayout, BasicLayout,
UserLayout UserLayout
} from '@/layouts' } from '@/layouts'
import assign from './routes/assign'
import firstCheck from './routes/firstCheck'
import reCheck from './routes/reCheck'
import signIn from './routes/signIn'
import address from './routes/address'
import detail from './routes/detail' import detail from './routes/detail'
import organization from './routes/organization' import stock from './routes/stock'
import handleService from './routes/handleService' import user from './routes/user'
import completeOrder from './routes/completeOrder' import coupon from './routes/coupon'
import permission from './routes/permission' import permission from './routes/permission'
import pendingOrder from './routes/pendingOrder' import sales from './routes/sales'
export const asyncRouterMap = [{ export const asyncRouterMap = [{
path: '/', path: '/',
@@ -37,20 +32,15 @@ export const asyncRouterMap = [{
meta: { meta: {
title: '数据看板', title: '数据看板',
keepAlive: true, keepAlive: true,
icon: 'dashboard', icon: 'user',
permission: ['home'] permission: ['home']
} }
}, },
...pendingOrder,
...assign,
...firstCheck,
...signIn,
...reCheck,
...detail, ...detail,
...handleService, ...stock,
...completeOrder, ...sales,
...address, ...user,
...organization, ...coupon,
...permission ...permission
] ]
}, },

View File

@@ -0,0 +1,10 @@
export default [{
path: '/coupon',
name: 'CouponIndex',
meta: {
title: '优惠券管理',
icon: 'bank'
},
component: () => import('@/views/coupon/Index')
}]

View File

@@ -7,13 +7,13 @@ export default [
component: () => import('@/views/detail/Detail'), component: () => import('@/views/detail/Detail'),
meta: { title: '订单详情' } meta: { title: '订单详情' }
}, },
{ // {
path: '/organization/detail/:orderId/:itemId', // path: '/organization/detail/:orderId/:itemId',
name: 'OrganizationDetail', // name: 'OrganizationDetail',
hidden: true, // hidden: true,
component: () => import('@/views/organization/Detail'), // component: () => import('@/views/organization/Detail'),
meta: { title: '机构详情' } // meta: { title: '机构详情' }
}, // },
{ {
path: '/detail/:id/logistics', path: '/detail/:id/logistics',
name: 'DetailLogistics', name: 'DetailLogistics',

View File

@@ -1,25 +0,0 @@
import {
RouteView
} from '@/layouts'
export default [{
path: '/organization',
component: RouteView,
name: 'organizationIndex',
redirect: '/organization/index',
meta: {
title: '机构信息列表',
icon: 'bank'
},
children: [
{
path: '/organization/index',
name: 'OrganizationIndex',
component: () => import('@/views/organization/Index'),
meta: {
title: '机构列表',
icon: 'unordered-list'
}
}
]
}]

View File

@@ -11,10 +11,10 @@ export default [
{ {
path: '/permissions/index', path: '/permissions/index',
name: 'PermissionsIndex', name: 'PermissionsIndex',
hidden: true,
component: () => import('@/views/permissions/Index'), component: () => import('@/views/permissions/Index'),
meta: { meta: {
title: '组织结构(权限管理' title: '权限管理',
icon: 'bank'
} }
} }
] ]

View File

@@ -0,0 +1,42 @@
import {
RouteView
} from '@/layouts'
export default [{
path: '/sales',
name: 'StockIndex',
meta: {
title: '销售管理',
icon: 'bank'
},
component: RouteView,
children: [
{
path: '/sales/online',
name: 'SalesOnline',
meta: {
title: '线上零售订单',
icon: 'unordered-list'
},
component: () => import('@/views/sales/Online')
},
{
path: '/sales/stock',
name: 'SalesStock',
meta: {
title: '线上进货订单',
icon: 'unordered-list'
},
component: () => import('@/views/sales/OnStock')
},
{
path: '/sales/offline',
name: 'SalesOffline',
meta: {
title: '线下出货列表',
icon: 'unordered-list'
},
component: () => import('@/views/sales/Offline')
}
]
}]

View File

@@ -0,0 +1,54 @@
import {
RouteView
} from '@/layouts'
export default [{
path: '/stock',
name: 'StockIndex',
meta: {
title: '库存管理',
icon: 'bank'
},
component: RouteView,
children: [
{
path: '/stock/ins',
name: 'StockIns',
meta: {
title: '分公司库存管理',
icon: 'unordered-list'
},
component: RouteView,
redirect: '/stock/in',
children: [
{
path: '/stock/in',
name: 'StockIn',
component: () => import('@/views/stock/In'),
meta: {
title: '入库管理',
icon: 'unordered-list'
}
},
{
path: '/stock/out',
name: 'StockOut',
component: () => import('@/views/stock/Out'),
meta: {
title: '出库管理',
icon: 'unordered-list'
}
}
]
},
{
path: '/stock/dealer',
name: 'StockDealer',
meta: {
title: '经销商库存管理',
icon: 'unordered-list'
},
component: () => import('@/views/stock/DealerIndex')
}
]
}]

View File

@@ -0,0 +1,9 @@
export default [{
path: '/user',
name: 'UserIndex',
meta: {
title: '用户管理',
icon: 'bank'
},
component: () => import('@/views/user/Index')
}]

View File

@@ -18,7 +18,7 @@
</template> </template>
<template v-slot:rightContentRender> <template v-slot:rightContentRender>
<span class="rightContentRenderTitle">欢迎使用水感应大数据综合管理平台</span> <span class="rightContentRenderTitle">欢迎使用水感应代理商综合管理平台</span>
<right-content :is-mobile="isMobile" :theme="settings.theme" :top-menu="settings.layout === 'topmenu'" /> <right-content :is-mobile="isMobile" :theme="settings.theme" :top-menu="settings.layout === 'topmenu'" />
</template> </template>
@@ -61,7 +61,7 @@ export default {
menus: [], menus: [],
// 侧栏收起状态 // 侧栏收起状态
collapsed: false, collapsed: false,
title: ' 水感应法律 ', title: ' 水感应代理商 ',
logo: '', logo: '',
settings: { settings: {
// 布局类型 // 布局类型

344
src/views/coupon/Index.vue Normal file
View File

@@ -0,0 +1,344 @@
<template>
<page-header-wrapper>
<template v-slot:content>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="优惠券生成人姓名">
<a-input v-model="queryParam.item_id" placeholder="优惠券生成人姓名" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="优惠券类型" has-feedback>
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="优惠券类型">
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="优惠券状态" has-feedback>
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="优惠券状态">
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<!-- <a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button> -->
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
<a-button
v-if="exports_can"
class="ml8"
type="dashed"
shape="round"
icon="download"
@click="exports"/>
</a-col>
</a-row>
</a-form>
</div>
</template>
<!-- 列表 -->
<a-card :bordered="false">
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.order_item_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1200, y: 1000 }">
<div slot="name">
<div>zdx</div>
</div>
<div slot="phone">
<div>14745798066</div>
</div>
<div slot="time">
<div>2023-11-11~2029-11-11</div>
</div>
<div slot="type">
<div>3瓶优惠券</div>
</div>
<div slot="status">
<div>待使用</div>
</div>
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<a class="ant-dropdown-link" @click="onEdit(record)">查看明细</a>
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage'
import moment from 'moment'
import Info from '@/views/home/components/Info'
import {
getList,
init,
canExport
} from '@/api/organization'
import storage from 'store'
import StockInfo from './widgets/StockInfo.vue'
import AddRole from './widgets/AddRole.vue'
// 列表规格
const columns = [
{
title: '优惠券生成人',
children: [
{
title: '姓名',
scopedSlots: { customRender: 'name' },
align: 'center'
},
{
title: '手机号',
scopedSlots: { customRender: 'phone' },
align: 'center'
}
],
align: 'center'
},
{
title: '使用人',
children: [
{
title: '姓名',
scopedSlots: { customRender: 'name' },
align: 'center'
},
{
title: '手机号',
scopedSlots: { customRender: 'phone' },
align: 'center'
}
],
align: 'center'
},
{
title: '优惠券有效期',
scopedSlots: { customRender: 'time' },
width: 240,
align: 'center'
},
{
title: '优惠券类型',
scopedSlots: { customRender: 'type' },
width: 140,
align: 'center'
},
{
title: '优惠券状态',
scopedSlots: { customRender: 'status' },
width: 140,
align: 'center'
}
// {
// title: '操作',
// scopedSlots: { customRender: 'actions' },
// align: 'center',
// width: 160,
// fixed: 'right'
// }
]
export default {
name: 'CouponIndex',
components: {
STable,
UserInfo,
Info,
DeriveButton
},
data () {
return {
exports_can: false,
columns,
searchType: false, // 展示全部的搜索
businessArray: [], // 业务类型
statusArray: [], // 机构列表
queryParam: {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined // 结案时间
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
return getList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
created () {
this.init()
},
methods: {
moment,
// 获取检索的基本样式
init () {
init().then(res => {
this.statusArray = res.status // 机构状态
this.businessArray = res.type // 业务类型
// this.canExports()
})
},
// 更改创建时间
onCreateChange (dates, dateStrings) {
this.queryParam.paid_at = dateStrings
},
// 更改执行时间
onCarryChange (dates, dateStrings) {
this.queryParam.audit_at = dateStrings
},
// 更改结案时间
onSettleChange (dates, dateStrings) {
this.queryParam.settle_at = dateStrings
},
// 处理状态
onDisposeChange (e) {
this.queryParam.dispose = e
},
// 业务类型
onBusinessChange (e) {
this.queryParam.business_type_id = e
},
// 机构状态
onOrganizationChange (e) {
this.queryParam.status = e
},
// 搜索列表
search () {
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 重置搜索列表
resetSearch () {
this.queryParam = {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined// 结案时间
}
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 机构是否能导出
canExports () {
console.log('canExports')
canExport(storage.get('userid')).then(res => {
this.exports_can = res.exports
})
},
// 导出列表
exports () {
const params = this.queryParam
params.audit_at = this.queryParam.audit_at || ''
params.paid_at = this.queryParam.paid_at || ''
params.settle_at = this.queryParam.settle_at || ''
if (this.listCount > 0) {
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
for (const key in params) {
downUrl = downUrl + '&' + key + '=' + params[key]
}
window.open(downUrl)
} else {
this.$notification.error({
message: '温馨提醒',
description: '数据为空不能下载!'
})
}
},
// 新增用户
onAddRole () {
console.log('add....')
const success = {
title: '新增用户',
width: 600,
maskClosable: true,
closable: true,
okText: '确认新增',
cancelText: '取消'
}
this.$dialog(
AddRole,
{
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 修改用户
onEdit (item) {
const success = {
title: '库变详情',
width: 1000,
maskClosable: true,
closable: true,
footer: '',
okText: '知道了'
}
this.$dialog(
StockInfo,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

View File

@@ -0,0 +1,76 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<a-form
ref="form"
v-bind="formItemLayout"
:form="form"
>
<a-form-item label="机构状态" style="padding-top:30px;">
<a-select
v-decorator="[
'status',
{
rules: [
{ required: true, message: `请选择机构状态!`, type: 'string' },
]
}
]"
:placeholder="`请选择机构状态!`"
>
<a-select-option v-for="(it) in item.status_two.texts" :key="it.key" :value="it.key+''">
{{ it.title }}
</a-select-option>
</a-select>
</a-form-item>
</a-form>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'AddRole',
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -29,7 +29,7 @@
<script> <script>
import { changeStatusTwo } from '@/api/organization' import { changeStatusTwo } from '@/api/organization'
export default { export default {
name: 'EditStatus', name: 'EditRole',
props: { props: {
item: { item: {
type: Object, type: Object,

View File

@@ -0,0 +1,119 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<div>
<a-descriptions title="用户信息" :column="4">
<a-descriptions-item label="姓名" span="2">张冬雪</a-descriptions-item>
<a-descriptions-item label="电话" span="2">1810000000</a-descriptions-item>
<a-descriptions-item label="身份" span="2">创客</a-descriptions-item>
</a-descriptions>
<!-- 出库 线上出库 -->
<a-descriptions title="线上出库" :column="4">
<a-descriptions-item label="线上出库方式" span="2">线上零售优惠券扣除库存</a-descriptions-item>
<a-descriptions-item label="出库数量" span="2">12</a-descriptions-item>
</a-descriptions>
<!-- 出库 线下出库 物流 -->
<a-descriptions title="线下出库(线上发货)" :column="4">
<a-descriptions-item label="出库数量" span="2">12</a-descriptions-item>
<a-descriptions-item label="发货状态" span="2">线上发货</a-descriptions-item>
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
<a-descriptions-item label="发货时间" span="2">2023-12-12 12:12:12</a-descriptions-item>
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="收货人名" span="2">张冬雪</a-descriptions-item>
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
</a-descriptions>
<!-- 出库 线下出库 自提 -->
<a-descriptions title="线下出库(自提)" :column="4">
<a-descriptions-item label="自提数量" span="2">12</a-descriptions-item>
<a-descriptions-item label="发货状态" span="2">自提</a-descriptions-item>
<a-descriptions-item label="提货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
<!-- 入库 线上 -->
<a-descriptions title="入库(线上)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
<!-- 入库 线下 线上发货-->
<a-descriptions title="入库(线下发货)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
</a-descriptions>
<!-- 入库 线下 自提-->
<a-descriptions title="入库(线下发货)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="自提时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
</div>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'StockInfo',
props: {
item: {
type: Object,
default: () => {
return {}
}
}
},
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -105,7 +105,6 @@ import RealName from '@/components/OrderDetailInfo/RealName.vue'
import Services from '@/components/OrderDetailInfo/Services.vue' import Services from '@/components/OrderDetailInfo/Services.vue'
import BankList from '@/components/OrderDetailInfo/BankList.vue' import BankList from '@/components/OrderDetailInfo/BankList.vue'
import OrderSteps from '@/components/OrderDetailInfo/OrderSteps.vue' import OrderSteps from '@/components/OrderDetailInfo/OrderSteps.vue'
import SelctAddr from '@/views/address/modules/SelctAddr.vue'
export default { export default {
name: 'Detail', name: 'Detail',
@@ -254,7 +253,7 @@ export default {
// 选择邮寄地址操作 // 选择邮寄地址操作
selectAddr (order) { selectAddr (order) {
this.$dialog( this.$dialog(
SelctAddr, // SelctAddr,
{ {
order, order,
on: { on: {

View File

@@ -1,12 +1,16 @@
<template> <template>
<a-row :gutter="[24, 24]"> <a-row :gutter="[24, 24]">
<a-col :lg="10" :md="24" :sm="24" :xl="8" :xxl="7"> <!-- <a-col :lg="10" :md="24" :sm="24" :xl="8" :xxl="7">
<UserInfo /> <UserInfo />
</a-col> </a-col>
<a-col :lg="14" :md="24" :sm="24" :xl="16" :xxl="17"> <a-col :lg="24" :md="24" :sm="24" :xl="24" :xxl="24">
<Count v-if="info!=={}" :info="info" /> <Count v-if="info!=={}" :info="info" />
</a-col> -->
<a-col :lg="24" :md="24" :sm="24" :xl="24" :xxl="24">
<!-- <Analysis /> -->
首页展示
</a-col> </a-col>
</a-row> </a-row>
@@ -16,11 +20,12 @@
import { getStatistical } from '@/api/statistical' import { getStatistical } from '@/api/statistical'
import UserInfo from '@/views/home/components/UserInfo' import UserInfo from '@/views/home/components/UserInfo'
import Count from '@/views/home/components/Count' import Count from '@/views/home/components/Count'
import Analysis from '@/views/home/components/Analysis.vue'
export default { export default {
name: 'Home', name: 'Home',
components: { components: {
UserInfo, Count UserInfo, Count, Analysis
}, },
data () { data () {
return { return {

View File

@@ -0,0 +1,252 @@
<template>
<div>
<a-row>
<a-col :xl="12" :lg="24" :md="24" :sm="24" :xs="24">
<a-card class="antd-pro-pages-dashboard-analysis-salesCard" :loading="loading" :bordered="false" title="数据统计" :style="{ height: '100%' }">
<div slot="extra" style="height: inherit;">
<span class="dashboard-analysis-iconGroup">
<a-dropdown :trigger="['click']" placement="bottomLeft">
<a-icon type="ellipsis" class="ant-dropdown-link" />
<a-menu slot="overlay">
<a-menu-item>
<a href="javascript:;">当日</a>
</a-menu-item>
<a-menu-item>
<a href="javascript:;">当周</a>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
<div class="analysis-salesTypeRadio">
<a-radio-group defaultValue="a">
<a-radio-button value="a">当周</a-radio-button>
<a-radio-button value="b">当日</a-radio-button>
<a-radio-button value="c">当月</a-radio-button>
<a-radio-button value="c"></a-radio-button>
</a-radio-group>
</div>
</div>
<h4>副标题</h4>
<div>
<v-chart :force-fit="true" :height="405" :data="pieData" :scale="pieScale">
<v-tooltip :showTitle="false" dataKey="item*percent" />
<v-axis />
<v-legend dataKey="item" />
<v-pie position="percent" color="item" :vStyle="pieStyle" />
<v-coord type="theta" :radius="0.75" :innerRadius="0.6" />
</v-chart>
</div>
</a-card>
</a-col>
</a-row>
</div>
</template>
<script>
import moment from 'moment'
import {
ChartCard,
MiniArea,
MiniBar,
MiniProgress,
RankList,
Bar,
Trend,
NumberInfo,
MiniSmoothArea
} from '@/components'
import { baseMixin } from '@/store/app-mixin'
const barData = []
const barData2 = []
for (let i = 0; i < 12; i += 1) {
barData.push({
x: `${i + 1}`,
y: Math.floor(Math.random() * 1000) + 200
})
barData2.push({
x: `${i + 1}`,
y: Math.floor(Math.random() * 1000) + 200
})
}
const rankList = []
for (let i = 0; i < 7; i++) {
rankList.push({
name: '白鹭岛 ' + (i + 1) + ' 号店',
total: 1234.56 - i * 100
})
}
const searchUserData = []
for (let i = 0; i < 7; i++) {
searchUserData.push({
x: moment().add(i, 'days').format('YYYY-MM-DD'),
y: Math.ceil(Math.random() * 10)
})
}
const searchUserScale = [
{
dataKey: 'x',
alias: '时间'
},
{
dataKey: 'y',
alias: '用户数',
min: 0,
max: 10
}]
const searchData = []
for (let i = 0; i < 50; i += 1) {
searchData.push({
index: i + 1,
keyword: `搜索关键词-${i}`,
count: Math.floor(Math.random() * 1000),
range: Math.floor(Math.random() * 100),
status: Math.floor((Math.random() * 10) % 2)
})
}
const DataSet = require('@antv/data-set')
const sourceData = [
{ item: '家用电器', count: 32.2 },
{ item: '食用酒水', count: 21 },
{ item: '个护健康', count: 17 },
{ item: '服饰箱包', count: 13 },
{ item: '母婴产品', count: 9 },
{ item: '其他', count: 7.8 }
]
const pieScale = [{
dataKey: 'percent',
min: 0,
formatter: '.0%'
}]
const dv = new DataSet.View().source(sourceData)
dv.transform({
type: 'percent',
field: 'count',
dimension: 'item',
as: 'percent'
})
const pieData = dv.rows
export default {
name: 'Analysis',
mixins: [baseMixin],
components: {
ChartCard,
MiniArea,
MiniBar,
MiniProgress,
RankList,
Bar,
Trend,
NumberInfo,
MiniSmoothArea
},
data () {
return {
loading: true,
rankList,
// 搜索用户数
searchUserData,
searchUserScale,
searchData,
barData,
barData2,
//
pieScale,
pieData,
sourceData,
pieStyle: {
stroke: '#fff',
lineWidth: 1
}
}
},
computed: {
searchTableColumns () {
return [
{
dataIndex: 'index',
title: this.$t('dashboard.analysis.table.rank'),
width: 90
},
{
dataIndex: 'keyword',
title: this.$t('dashboard.analysis.table.search-keyword')
},
{
dataIndex: 'count',
title: this.$t('dashboard.analysis.table.users')
},
{
dataIndex: 'range',
title: this.$t('dashboard.analysis.table.weekly-range'),
align: 'right',
sorter: (a, b) => a.range - b.range,
scopedSlots: { customRender: 'range' }
}
]
}
},
created () {
setTimeout(() => {
this.loading = !this.loading
}, 1000)
}
}
</script>
<style lang="less" scoped>
.extra-wrapper {
line-height: 55px;
padding-right: 24px;
.extra-item {
display: inline-block;
margin-right: 24px;
a {
margin-left: 24px;
}
}
}
.antd-pro-pages-dashboard-analysis-twoColLayout {
position: relative;
display: flex;
display: block;
flex-flow: row wrap;
}
.antd-pro-pages-dashboard-analysis-salesCard {
height: calc(100% - 24px);
:deep(.ant-card-head) {
position: relative;
}
}
.dashboard-analysis-iconGroup {
i {
margin-left: 16px;
color: rgba(0, 0, 0, .45);
cursor: pointer;
transition: color .32s;
color: black;
}
}
.analysis-salesTypeRadio {
position: absolute;
right: 54px;
bottom: 12px;
}</style>

View File

@@ -1,353 +0,0 @@
<template>
<page-header-wrapper @back="() => $router.go(-1)" :title="('订单号: ' + infos.order_no)" v-if="!loading">
<!-- 订单详情 -->
<template v-slot:content>
<a-descriptions size="small">
<!-- <a-descriptions-item label="实习顾问"> {{ infos.manager || '-' }} </a-descriptions-item> -->
<!-- <a-descriptions-item label="法务助理"> {{ infos.tutor || '-' }} </a-descriptions-item> -->
<!-- <a-descriptions-item label="法务老师"> {{ infos.teachers || '-' }} </a-descriptions-item> -->
<!-- <a-descriptions-item label="协办人"> {{ infos.transactor || '-' }} </a-descriptions-item> -->
<!-- <a-descriptions-item label="下单时间"> {{ infos.created_at || '-' }} </a-descriptions-item> -->
<!-- <a-descriptions-item label="提交审核次数" v-if="(infos.logs_sum > 0)"> {{ infos.logs_sum || '-' }} -->
<!-- </a-descriptions-item> -->
<!-- <a-descriptions-item label="驳回待审总数" v-if="infos.log_count">
<a-tooltip>
<template slot="title">驳回信息全部都确认后<br />才可以操作初审/复审通过</template>
<span count="">{{ infos.log_count || '-' }}</span>
<a-icon type="info-circle" :style="{ fontSize: '15px', color: '#ff4d4f', padding: '0 0 0 6px' }" />
</a-tooltip>
</a-descriptions-item> -->
<!-- <a-descriptions-item label="订单状态" v-if="infos.status"> {{ infos.status.text || '-' }} </a-descriptions-item> -->
<!-- <a-descriptions-item label="指派签收地址">
<span v-if="infos.can&&infos.can.edit_sign_address">
<a @click="selectAddr(infos)" class="change">{{ infos.express ==''?'指派':'更改' }}地址 </a>
<a @click="$router.push({ name: 'AddressCreate'})" class="plus">( <a-icon type="plus" /> )</a>
</span>
<span v-else>-</span>
</a-descriptions-item> -->
<!-- <a-descriptions-item label="资料签收地址" :span="2" v-if="infos.express != ''">{{ infos.express }}</a-descriptions-item>
<a-descriptions-item label="查看邮寄进度" v-if="infos.express != ''">
<router-link tag="a" target="_blank" :to="{ name: 'DetailLogistics', params: { id: infos.business_order_id } }"> 查看详情 </router-link>
</a-descriptions-item> -->
</a-descriptions>
</template>
<!-- 右上角审核功能 -->
<template v-slot:extra>
<!-- 复审按钮 -->
<a-popconfirm
v-if="infos.can && infos.can.first && infos.can.recheck"
placement="bottomLeft"
title="是否确认通过当前审核"
ok-text="确认"
cancel-text="取消"
@confirm="firstPassActions">
<a-button :loading="loading" type="primary">复审核通过</a-button>
</a-popconfirm>
<!-- 初审按钮 -->
<a-popconfirm
v-if="infos.can && infos.can.first && !infos.can.recheck"
placement="bottomLeft"
title="是否确认通过当前审核"
ok-text="确认"
cancel-text="取消"
@confirm="firstPassActions">
<a-button :loading="loading" type="primary">初审核通过</a-button>
</a-popconfirm>
<!-- 法务老师确认按钮展示 -->
<a-popconfirm
v-if="infos.can && infos.can.teacher_makesure"
placement="bottomLeft"
title="是否确认通过当前审核"
ok-text="确认"
cancel-text="取消"
@confirm="teachearSure(infos)">
<a-button :loading="loading" type="primary">法务老师确认复审</a-button>
</a-popconfirm>
</template>
<!-- 流程进度 -->
<OrderSteps :steps="infos.steps" :stepsCount="stepsCount" />
<!-- 用户实名信息 -->
<OrganizationRealName :info="infos.userbase" :orderId="$route.params.orderId + ''" :can="infos.can" />
<!-- 机构信息 -->
<OrganizationInfo :institution="infos.institution" :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''" :can="infos.can" />
<!-- 跟进记录 -->
<OrganizationInfoFollow :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''" :can="infos.can" :userLogs="userLogs" :systemLogs="systemLogs" />
<!-- 机构信息 -->
<OrganizationSchemes :closeScheme="closeScheme" :schemes="schemes" :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''"/>
<!-- 服务包 -->
<OrganizationServiceInfo :orderId="$route.params.orderId + ''" :itemId="$route.params.itemId + ''" :can="infos.can" :services="services" :remark="services.remark || ''" />
</page-header-wrapper>
</template>
<script>
import {
firstPass, secondPass, teachermakesure
} from '@/api/order'
import {
getOriganizationInfo
} from '@/api/organization'
import OrganizationRealName from '@/components/OrderDetailInfo/OrganizationRealNames.vue'
import Services from '@/components/OrderDetailInfo/Services.vue'
import BankList from '@/components/OrderDetailInfo/BankList.vue'
import OrderSteps from '@/components/OrderDetailInfo/OrderSteps.vue'
import SelctAddr from '@/views/address/modules/SelctAddr.vue'
import OrganizationInfo from '@/components/OrderDetailInfo/OrganizationBankInfo.vue'
import OrganizationInfoFollow from '@/components/OrderDetailInfo/OrganizationInfoFollow.vue'
import OrganizationServiceInfo from '@/components/OrderDetailInfo/OrganizationServiceInfo.vue'
import OrganizationSchemes from '@/components/OrderDetailInfo/OrganizationSchemes.vue'
export default {
name: 'Detail',
components: {
OrganizationRealName, Services, BankList, OrderSteps, OrganizationInfo, OrganizationInfoFollow, OrganizationServiceInfo, OrganizationSchemes
},
data () {
return {
infos: {},
systemLogs: [], // 系统展示记录
userLogs: [], // 用户展示记录
schemes: [], // 预估方案
services: {}, // 服务包
id: '',
loading: false,
stepsCount: 0,
IdCardVisible: false,
closeScheme: {}
}
},
activated () {
this.getInfo()
this.eventBus.$on('updateOrderInfo', (res) => {
this.getInfo()
})
},
deactivated () {
this.eventBus.$off('updateOrderInfo')
},
filters: {
statusFilter (status) {
const statusMap = {
'agree': '成功',
'reject': '驳回'
}
return statusMap[status]
},
statusTypeFilter (type) {
const statusTypeMap = {
'agree': 'success',
'reject': 'error'
}
return statusTypeMap[type]
}
},
methods: {
// 老师确认复审
teachearSure (item) {
teachermakesure(item.business_order_id).then(res => {
this.$notification.success({
message: '老师确认成功',
description: '审核通过'
})
this.getInfo()
}).catch(err => {
this.$notification.error(err)
})
},
// 初审复审操作
firstPassActions () {
// 复审
if (this.infos.can.recheck) {
if (this.infos.alert) {
const key = `open${Date.now()}`
this.$notification.open({
message: '温馨提示',
description: '该订单存在减免结清业务,请确认是否通过.',
btn: h => {
return h(
'a-button',
{
props: {
type: 'primary',
size: 'small'
},
on: {
click: () => {
secondPass(this.$route.params.id).then(res => {
this.$notification.success({
message: '成功',
description: '复审核通过'
})
this.getInfo()
this.$notification.close(key)
}).catch(err => {
if (err.status_code === 400) {
this.$notification.error({
message: '失败',
description: err.message
})
}
this.$notification.close(key)
})
}
}
},
'确认通过'
)
},
key,
onClose: () => { }
})
} else {
// 复审
secondPass(this.$route.params.id).then(res => {
this.$notification.success({
message: '成功',
description: '复审核通过'
})
this.getInfo()
}).catch(err => {
if (err.status_code === 400) {
this.$notification.error({
message: '失败',
description: err.message
})
}
})
}
} else {
// 初审
firstPass(this.$route.params.id).then(res => {
this.$notification.success({
message: '成功',
description: '初审核通过'
})
this.getInfo()
}).catch(err => {
if (err.status_code === 400) {
this.$notification.error({
message: '失败',
description: err.message
})
}
})
}
},
// 获取订单信息
getInfo () {
getOriganizationInfo(this.$route.params.itemId).then(res => {
this.infos = res
this.userLogs = res.user_logs.reverse() || []
this.systemLogs = res.system_logs.reverse() || []
this.schemes = res.schemes || []
const services = res.service
services.parent = res.parent
services.remark = res.remark
services.center = res.center
this.services = services
let stepsCount = 0
res.steps.map(item => {
if (item.status) {
stepsCount = stepsCount + 1
}
})
this.stepsCount = stepsCount
this.closeScheme = res.closeScheme || '{}'
})
},
// 选择邮寄地址操作
selectAddr (order) {
this.$dialog(
SelctAddr,
{
order,
on: {
ok: () => {
// this.eventBus.$emit('editRealName', { data: true })
},
cancel: () => {
}
}
},
{
title: '指派签收地址',
width: 500,
maskClosable: true,
closable: true,
okText: '确认',
cancelText: '取消'
}
)
}
}
}
</script>
<style lang="less" scoped>
.detail-layout {
margin-left: 44px;
}
.text {
color: rgba(0, 0, 0, .45);
}
.heading {
color: rgba(0, 0, 0, .85);
font-size: 20px;
}
.no-data {
color: rgba(0, 0, 0, .25);
text-align: center;
line-height: 64px;
font-size: 16px;
i {
font-size: 24px;
margin-right: 16px;
position: relative;
top: 3px;
}
}
.mobile {
.detail-layout {
margin-left: unset;
}
.status-list {
text-align: left;
}
}
.active {
font-size: 10px;
color: rgb(9, 100, 237);
cursor: pointer;
}
.plus {
padding-top: 8px;
padding-left: 8px;
color: rgb(9, 100, 237);
cursor: pointer;
}
.change {
cursor: pointer;
}
.count {
color: #ff4d4f;
font-size: 16px;
font-weight: bold;
}
</style>

View File

@@ -28,15 +28,15 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="6" :sm="24"> <a-col :md="6" :sm="24">
<a-form-item label="用户手机"> <a-form-item label="用户手机">
<a-input v-model="userQueryParam.username" placeholder="" /> <a-input v-model="userQueryParam.username" placeholder="" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button> <a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
<a-button class="ml8" type="primary" @click="addPromissions">新增</a-button>
<a-button <a-button
class="ml8" class="ml8"
@click="() => ((this.queryParam = { state: 'role' }), $refs.table.refresh(true))">重置</a-button> @click="() => ((this.queryParam = { state: 'role' }), $refs.table.refresh(true))">重置</a-button>
<a-button class="ml8" type="primary" @click="addPromissions">新增</a-button>
</a-row> </a-row>
</a-form> </a-form>
</div> </div>
@@ -246,7 +246,7 @@ export default {
} }
}, },
{ {
title: '新增权限', title: '新增用户',
width: 500, width: 500,
maskClosable: true, maskClosable: true,
closable: true, closable: true,

View File

@@ -1,46 +1,18 @@
<!-- 驳回原因客户姓名输入 --> <!-- 驳回原因客户姓名输入 -->
<template> <template>
<a-form ref="form" v-bind="formItemLayout" :form="form"> <a-form ref="form" v-bind="formItemLayout" :form="form">
<a-form-item label="新增角色权限"> <a-form-item label="登录账号">
<a-select <a-input
:maxLength="11"
v-decorator="[ v-decorator="[
'role', 'username',
{ {
rules: [ rules: [
{ required: true, message: '请选择添加记录类型!', type: 'string' }, { required: true, message: '请输入添加登录账号!', type: 'string' },
] ]
} }
]" ]"
@change="handleRoleChange" placeholder="请输入添加登录账号!" />
placeholder="请选择添加记录类型">
<a-select-option
:value="item.key+''"
v-for="item in permission"
:key="item.key">
<a-icon
type="user"
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />{{ item.title }}</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="选择上级用户">
<a-select
v-decorator="[
'parent_id',
{
rules: [
{ required: true, message: '选择上级用户!', type: 'string' },
]
}
]"
placeholder="选择上级用户">
<a-select-option
:value="item.staff_id + ''"
v-for="item in users"
:key="item.staff_id">
<a-icon
type="user"
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />{{ item.name }}({{ item.type }}){{ item.username }}</a-select-option>
</a-select>
</a-form-item> </a-form-item>
<a-form-item label="用户姓名"> <a-form-item label="用户姓名">
<a-input <a-input
@@ -55,19 +27,6 @@
]" ]"
placeholder="请输入添加姓名!" /> placeholder="请输入添加姓名!" />
</a-form-item> </a-form-item>
<a-form-item label="手机号码">
<a-input
:maxLength="11"
v-decorator="[
'username',
{
rules: [
{ required: true, message: '请输入添加手机号码!', type: 'string' },
]
}
]"
placeholder="请输入添加手机号码!" />
</a-form-item>
<a-form-item label="初始密码"> <a-form-item label="初始密码">
<a-input <a-input
:maxLength="6" :maxLength="6"

View File

@@ -1,45 +1,6 @@
<!-- 驳回原因客户姓名输入 --> <!-- 驳回原因客户姓名输入 -->
<template> <template>
<a-form ref="form" v-bind="formItemLayout" :form="form"> <a-form ref="form" v-bind="formItemLayout" :form="form">
<a-form-item label="角色权限">
<a-select
v-decorator="[
'role',
{
rules: [
{ required: true, message: '请选择添加记录类型!', type: 'string' },
],
initialValue: defaultRoleName
},
]"
@change="handleRoleChange"
placeholder="请选择添加记录类型">
<a-select-option :value="it.key + ''" v-for="it in permissions" :key="it.key">
<a-icon
type="user"
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />{{ it.title }}</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="上级用户">
<a-select
v-decorator="[
'parent_id',
{
rules: [
{ required: true, message: '选择上级用户!', type: 'string' },
],
initialValue: defaultParentsName
}
]"
placeholder="选择上级用户">
<a-select-option :value="its.staff_id + ''" v-for="its in users" :key="its.staff_id">
<a-icon
type="user"
:style="{ fontSize: '14px', color: '#1890ff', padding: '6px 16px 6px 0' }" />
{{ its.name }}({{ its.type }}){{ its.username }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="用户姓名"> <a-form-item label="用户姓名">
<a-input <a-input
:rows="4" :rows="4"

View File

@@ -1,291 +0,0 @@
<template>
<page-header-wrapper
:tab-active-key="tabActiveKey"
:tab-change="handleTabChange"
:tab-list="tabsList"
:title="pageTitle"
>
<!-- <template v-slot:content>
<a-descriptions size="small">
<a-descriptions-item :label="item.tab" v-for="item in tabList" :key="item.key" >
<div><a style="font-size:18px;font-weight:600;">{{ item.count }}</a> </div>
</a-descriptions-item>
</a-descriptions>
</template> -->
<a-card :bordered="false">
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="6" :sm="24">
<a-form-item label="订单编号">
<a-input v-model="queryParam.order_no" placeholder="" />
</a-form-item>
</a-col>
<a-col :md="6" :sm="24">
<a-form-item label="申请用户">
<a-input v-model="queryParam.nickname" placeholder="" />
</a-form-item>
</a-col>
<a-col :md="6" :sm="24">
<a-form-item label="法务老师">
<a-input v-model="queryParam.teacher" placeholder="" />
</a-form-item>
</a-col>
<a-button type="primary" @click="$refs.table.refresh(true)">查询</a-button>
<a-button class="ml8" @click="() => ((this.queryParam = {state: tabActiveKey}), $refs.table.refresh(true))">重置</a-button>
<!-- <DeriveButton :queryParam="queryParam" :listCount="listCount" /> -->
</a-row>
</a-form>
</div>
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.business_order_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1500, y: 1000 }"
>
<!-- 订单单号 -->
<span slot="order_no" slot-scope="text, record">
<router-link tag="a" target="_blank" :to="{ name: 'Detail', params: {id: record.business_order_id } }">
{{ record.order_no }}
</router-link>
</span>
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record">
<user-info :info="{...record.user,sex:record.cert.sex}" />
</div>
<div slot="transactor" slot-scope="text, record">
{{ record.transactor != '' ?record.transactor:'--' }}
</div>
<div slot="teachers" slot-scope="text, record">
{{ record.teachers != '' ? record.teachers : '--' }}
</div>
<!-- 业务类型 -->
<span slot="one" slot-scope="text, record"><a> {{ record.item_type.one>0?'x '+record.item_type.one :'--' }}</a></span>
<span slot="two" slot-scope="text, record"><a> {{ record.item_type.two>0?'x '+record.item_type.two :'--' }}</a></span>
<span slot="price" slot-scope="text, record"> <span>{{ record.price }}</span></span>
<span slot="total" slot-scope="text, record"><span>{{ record.total }}</span></span>
<!-- 订单状态 -->
<span slot="status" slot-scope="text, record">
<a-tag color="blue">{{ record.status.text }}</a-tag>
</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<router-link tag="a" target="_blank" :to="{ name: 'Detail', params: { id: record.business_order_id } }"> 查看详情 </router-link>
<span v-if="(record.can && record.can.teacher_makesure && queryParam.state === 'tea_make')">
<a-divider type="vertical" />
<a-popconfirm
placement="bottomLeft"
title="是否确认通过审核"
ok-text="确认"
cancel-text="取消"
@confirm="teachearSure(record)"
><a> 通过审核 </a></a-popconfirm>
</span>
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import {
getOrderList,
teachermakesure,
getOrdersCount
} from '@/api/order'
const columns = [
{
title: '订单号',
dataIndex: 'order_no',
scopedSlots: { customRender: 'order_no' },
align: 'center',
width: 160,
fixed: 'left'
},
{
title: '申请用户',
dataIndex: 'user',
key: 'user',
scopedSlots: { customRender: 'user' },
width: 180,
align: 'center'
},
{
title: '实习顾问',
dataIndex: 'manager',
key: 'manager',
scopedSlots: { customRender: 'manager' },
align: 'center',
width: 120
},
{
title: '法务老师',
dataIndex: 'teachers',
key: 'teachers',
scopedSlots: { customRender: 'teachers' },
align: 'center',
width: 120
},
{
title: '业务类型',
children: [
{
title: '信用卡业务',
dataIndex: 'one',
key: 'one',
scopedSlots: { customRender: 'one' },
align: 'center'
},
{
title: '网贷业务',
dataIndex: 'two',
scopedSlots: { customRender: 'two' },
key: 'two',
align: 'center'
},
{
title: '总申请额度',
dataIndex: 'price',
scopedSlots: { customRender: 'price' },
key: 'price',
align: 'center'
},
{
title: '服务包总金额',
dataIndex: 'total',
scopedSlots: { customRender: 'total' },
key: 'total',
align: 'center'
}
]
},
{
title: '订单状态',
dataIndex: 'status',
scopedSlots: { customRender: 'status' },
align: 'center'
},
{
title: '下单时间',
dataIndex: 'created_at',
align: 'center',
sorter: true
},
{
title: '操作',
scopedSlots: { customRender: 'actions' },
align: 'center',
width: 180,
fixed: 'right'
}
]
export default {
name: 'Index',
components: {
STable,
UserInfo,
DeriveButton
},
data () {
this.columns = columns
return {
// diff 待补价 | first 初审 | firstcheck 修改 | tea_make 待老师确认
tabList: [
{ key: 'first', tab: '初审中' },
{ key: 'firstcheck', tab: '待修改' },
{ key: 'diff', tab: '待补价' }
// { key: 'tea_make', tab: '待老师确认' }
],
tabsList: [],
tabActiveKey: 'first',
pageTitle: '初审中',
dataList: [],
queryParam: {
state: 'first',
order_no: '',
nickname: '',
teacher: ''
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
getOrderList(requestParameters).then(res => {
this.listCount = res.data.length
})
return getOrderList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
activated () {
getOrdersCount({ state: this.tabList }).then(res => {
this.tabsList = []
res.map(item => {
item.tab = item.tab + '(' + item.count + ')'
this.tabsList.push(item)
})
}).catch(err => {
console.log(err)
})
},
methods: {
teachearSure (item) {
teachermakesure(item.business_order_id).then(res => {
this.$notification.success({
message: '成功',
description: '审核通过'
})
this.$refs.table.loadData()
}).catch(err => {
this.$notification.error(err)
})
},
logistic (order) {
this.$router.push({
name: 'OrderLogistic',
params: { orderId: order.order_no }
})
},
handleTabChange (key) {
this.tabActiveKey = key
this.queryParam.state = key
this.$refs.table.refresh(true)
this.pageTitle = this.tabList.find((item) => item.key === key).tab
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

359
src/views/sales/Offline.vue Normal file
View File

@@ -0,0 +1,359 @@
<template>
<!-- 线下出货列表 -->
<page-header-wrapper>
<template v-slot:content>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="订单号码">
<a-input v-model="queryParam.item_id" placeholder="订单号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="手机号码">
<a-input v-model="queryParam.order_no" placeholder="购买人手机号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="真实姓名">
<a-input v-model="queryParam.item_id" placeholder="购买人真实姓名" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="发货数量" has-feedback>
<a-input v-model="queryParam.order_no" placeholder="发货数量" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="快递类型" has-feedback>
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="快递类型">
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="快递单号">
<a-input v-model="queryParam.item_id" placeholder="快递单号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增线下出货</a-button>
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
<a-button
v-if="exports_can"
class="ml8"
type="dashed"
shape="round"
icon="download"
@click="exports"/>
</a-col>
</a-row>
</a-form>
</div>
</template>
<!-- 列表 -->
<a-card :bordered="false">
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.order_item_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1200, y: 1000 }">
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record" style="color: #1890ff">
<div>{{ record.user }}</div>
</div>
<!-- 创建时间 -->
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<a class="ant-dropdown-link" @click="onInfo(record)">查看详情</a>
<!-- <a-divider type="vertical" /> -->
<!-- <a class="ant-dropdown-link" @click="onEdit(record)">发货</a> -->
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage'
import moment from 'moment'
import Info from '@/views/home/components/Info'
import {
getList,
init,
canExport
} from '@/api/organization'
import storage from 'store'
import EditSend from './widgets/EditSend.vue'
import StockInfo from './widgets/StockInfo.vue'
import AddOffline from './widgets/AddOffline.vue'
// 列表规格
const columns = [
{
title: '订单号',
dataIndex: 'user22',
align: 'center'
},
{
title: '收货人',
dataIndex: 'created_at',
align: 'center'
},
{
title: '发货数量',
dataIndex: 'created_at1',
align: 'center'
},
{
title: '订单信息',
children: [
{
title: '状态',
dataIndex: 'name',
key: 'name',
align: 'center'
},
{
title: '金额',
dataIndex: 'name1',
key: 'name1',
align: 'center'
}
],
width: 300,
align: 'center'
},
{
title: '操作',
scopedSlots: { customRender: 'actions' },
align: 'center',
width: 160,
fixed: 'right'
}
]
export default {
name: 'Online',
components: {
STable,
UserInfo,
Info,
DeriveButton
},
data () {
return {
exports_can: false,
columns,
searchType: false, // 展示全部的搜索
businessArray: [], // 业务类型
statusArray: [], // 机构列表
queryParam: {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined // 结案时间
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
return getList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
created () {
this.init()
},
methods: {
moment,
// 获取检索的基本样式
init () {
init().then(res => {
this.statusArray = res.status // 机构状态
this.businessArray = res.type // 业务类型
// this.canExports()
})
},
// 更改创建时间
onCreateChange (dates, dateStrings) {
this.queryParam.paid_at = dateStrings
},
// 更改执行时间
onCarryChange (dates, dateStrings) {
this.queryParam.audit_at = dateStrings
},
// 更改结案时间
onSettleChange (dates, dateStrings) {
this.queryParam.settle_at = dateStrings
},
// 处理状态
onDisposeChange (e) {
this.queryParam.dispose = e
},
// 业务类型
onBusinessChange (e) {
this.queryParam.business_type_id = e
},
// 机构状态
onOrganizationChange (e) {
this.queryParam.status = e
},
// 搜索列表
search () {
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 重置搜索列表
resetSearch () {
this.queryParam = {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined// 结案时间
}
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 机构是否能导出
canExports () {
console.log('canExports')
canExport(storage.get('userid')).then(res => {
this.exports_can = res.exports
})
},
// 导出列表
exports () {
const params = this.queryParam
params.audit_at = this.queryParam.audit_at || ''
params.paid_at = this.queryParam.paid_at || ''
params.settle_at = this.queryParam.settle_at || ''
if (this.listCount > 0) {
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
for (const key in params) {
downUrl = downUrl + '&' + key + '=' + params[key]
}
window.open(downUrl)
} else {
this.$notification.error({
message: '温馨提醒',
description: '数据为空不能下载!'
})
}
},
// 新增用户
onAddRole () {
console.log('add....')
const success = {
title: '新增用户',
width: 600,
maskClosable: true,
closable: true,
okText: '确认新增',
cancelText: '取消'
}
this.$dialog(
AddOffline,
{
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 查看详情
onInfo (item) {
const success = {
title: '立即发货',
width: 1000,
maskClosable: true,
closable: true,
footer: '',
cancelText: '取消'
}
this.$dialog(
StockInfo,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 发货
onEdit (item) {
console.log(item)
const success = {
title: '立即发货',
width: 600,
maskClosable: true,
closable: true,
okText: '确认发货',
cancelText: '取消'
}
this.$dialog(
EditSend,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

335
src/views/sales/OnStock.vue Normal file
View File

@@ -0,0 +1,335 @@
<template>
<!-- 线上进货 -->
<page-header-wrapper>
<template v-slot:content>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="订单号码">
<a-input v-model="queryParam.item_id" placeholder="订单号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="手机号码">
<a-input v-model="queryParam.order_no" placeholder="购买人手机号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="真实姓名">
<a-input v-model="queryParam.item_id" placeholder="购买人真实姓名" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="进货数量" has-feedback>
<a-input v-model="queryParam.order_no" placeholder="发货数量" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="快递类型" has-feedback>
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="快递类型">
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="快递单号">
<a-input v-model="queryParam.item_id" placeholder="快递单号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<!-- <a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button> -->
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
<a-button
v-if="exports_can"
class="ml8"
type="dashed"
shape="round"
icon="download"
@click="exports"/>
</a-col>
</a-row>
</a-form>
</div>
</template>
<!-- 列表 -->
<a-card :bordered="false">
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.order_item_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1200, y: 1000 }">
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record" style="color: #1890ff">
<div>{{ record.user }}</div>
</div>
<!-- 创建时间 -->
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<a class="ant-dropdown-link" @click="onInfo(record)">查看详情</a>
<!-- <a-divider type="vertical" /> -->
<!-- <a class="ant-dropdown-link" @click="onEdit(record)">发货</a> -->
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage'
import moment from 'moment'
import Info from '@/views/home/components/Info'
import {
getList,
init,
canExport
} from '@/api/organization'
import storage from 'store'
import EditSend from './widgets/EditSend.vue'
import StockInfo from './widgets/StockInfo.vue'
// 列表规格
const columns = [
{
title: '订单号',
dataIndex: 'order_no',
align: 'center',
width: 160
},
{
title: '收货人',
dataIndex: 'tutor',
align: 'center'
},
{
title: '进货数量',
dataIndex: 'order_id',
align: 'center'
},
{
title: '订单信息',
children: [
{
title: '状态',
dataIndex: 'status',
key: 'status',
align: 'center'
},
{
title: '金额',
dataIndex: 'price',
key: 'price',
align: 'center'
}
],
width: 300,
align: 'center'
},
{
title: '操作',
scopedSlots: { customRender: 'actions' },
align: 'center',
width: 160,
fixed: 'right'
}
]
export default {
name: 'Online',
components: {
STable,
UserInfo,
Info,
DeriveButton
},
data () {
return {
exports_can: false,
columns,
searchType: false, // 展示全部的搜索
businessArray: [], // 业务类型
statusArray: [], // 机构列表
queryParam: {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined // 结案时间
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
return getList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
created () {
this.init()
},
methods: {
moment,
// 获取检索的基本样式
init () {
init().then(res => {
this.statusArray = res.status // 机构状态
this.businessArray = res.type // 业务类型
// this.canExports()
})
},
// 更改创建时间
onCreateChange (dates, dateStrings) {
this.queryParam.paid_at = dateStrings
},
// 更改执行时间
onCarryChange (dates, dateStrings) {
this.queryParam.audit_at = dateStrings
},
// 更改结案时间
onSettleChange (dates, dateStrings) {
this.queryParam.settle_at = dateStrings
},
// 处理状态
onDisposeChange (e) {
this.queryParam.dispose = e
},
// 业务类型
onBusinessChange (e) {
this.queryParam.business_type_id = e
},
// 机构状态
onOrganizationChange (e) {
this.queryParam.status = e
},
// 搜索列表
search () {
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 重置搜索列表
resetSearch () {
this.queryParam = {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined// 结案时间
}
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 机构是否能导出
canExports () {
console.log('canExports')
canExport(storage.get('userid')).then(res => {
this.exports_can = res.exports
})
},
// 导出列表
exports () {
const params = this.queryParam
params.audit_at = this.queryParam.audit_at || ''
params.paid_at = this.queryParam.paid_at || ''
params.settle_at = this.queryParam.settle_at || ''
if (this.listCount > 0) {
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
for (const key in params) {
downUrl = downUrl + '&' + key + '=' + params[key]
}
window.open(downUrl)
} else {
this.$notification.error({
message: '温馨提醒',
description: '数据为空不能下载!'
})
}
},
// 查看详情
onInfo (item) {
const success = {
title: '立即发货',
width: 1000,
maskClosable: true,
closable: true,
footer: '',
cancelText: '取消'
}
this.$dialog(
StockInfo,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 发货
onEdit (item) {
console.log(item)
const success = {
title: '立即发货',
width: 600,
maskClosable: true,
closable: true,
okText: '确认发货',
cancelText: '取消'
}
this.$dialog(
EditSend,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

335
src/views/sales/Online.vue Normal file
View File

@@ -0,0 +1,335 @@
<template>
<!-- 线上零售 -->
<page-header-wrapper>
<template v-slot:content>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="订单号码">
<a-input v-model="queryParam.item_id" placeholder="订单号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="手机号码">
<a-input v-model="queryParam.order_no" placeholder="购买人手机号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="真实姓名">
<a-input v-model="queryParam.item_id" placeholder="购买人真实姓名" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="发货数量" has-feedback>
<a-input v-model="queryParam.order_no" placeholder="发货数量" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="快递类型" has-feedback>
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="快递类型">
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="快递单号">
<a-input v-model="queryParam.item_id" placeholder="快递单号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<!-- <a-button class="ml8" type="primary" @click="onAdd">新增</a-button> -->
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
<a-button
v-if="exports_can"
class="ml8"
type="dashed"
shape="round"
icon="download"
@click="exports"/>
</a-col>
</a-row>
</a-form>
</div>
</template>
<!-- 列表 -->
<a-card :bordered="false">
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.order_item_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1200, y: 1000 }">
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record" style="color: #1890ff">
<div>{{ record.user }}</div>
</div>
<!-- 创建时间 -->
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<a class="ant-dropdown-link" @click="onInfo(record)">查看详情</a>
<!-- <a-divider type="vertical" /> -->
<!-- <a class="ant-dropdown-link" @click="onEdit(record)">发货</a> -->
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage'
import moment from 'moment'
import Info from '@/views/home/components/Info'
import {
getList,
init,
canExport
} from '@/api/organization'
import storage from 'store'
import EditSend from './widgets/EditSend.vue'
import StockInfo from './widgets/StockInfo.vue'
// 列表规格
const columns = [
{
title: '订单号',
dataIndex: 'order_no',
align: 'center',
width: 160
},
{
title: '收货人',
dataIndex: 'tutor',
align: 'center'
},
{
title: '进货数量',
dataIndex: 'order_id',
align: 'center'
},
{
title: '订单信息',
children: [
{
title: '状态',
dataIndex: 'status',
key: 'status',
align: 'center'
},
{
title: '金额',
dataIndex: 'price',
key: 'price',
align: 'center'
}
],
width: 300,
align: 'center'
},
{
title: '操作',
scopedSlots: { customRender: 'actions' },
align: 'center',
width: 160,
fixed: 'right'
}
]
export default {
name: 'Online',
components: {
STable,
UserInfo,
Info,
DeriveButton
},
data () {
return {
exports_can: false,
columns,
searchType: false, // 展示全部的搜索
businessArray: [], // 业务类型
statusArray: [], // 机构列表
queryParam: {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined // 结案时间
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
return getList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
created () {
this.init()
},
methods: {
moment,
// 获取检索的基本样式
init () {
init().then(res => {
this.statusArray = res.status // 机构状态
this.businessArray = res.type // 业务类型
// this.canExports()
})
},
// 更改创建时间
onCreateChange (dates, dateStrings) {
this.queryParam.paid_at = dateStrings
},
// 更改执行时间
onCarryChange (dates, dateStrings) {
this.queryParam.audit_at = dateStrings
},
// 更改结案时间
onSettleChange (dates, dateStrings) {
this.queryParam.settle_at = dateStrings
},
// 处理状态
onDisposeChange (e) {
this.queryParam.dispose = e
},
// 业务类型
onBusinessChange (e) {
this.queryParam.business_type_id = e
},
// 机构状态
onOrganizationChange (e) {
this.queryParam.status = e
},
// 搜索列表
search () {
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 重置搜索列表
resetSearch () {
this.queryParam = {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined// 结案时间
}
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 机构是否能导出
canExports () {
console.log('canExports')
canExport(storage.get('userid')).then(res => {
this.exports_can = res.exports
})
},
// 导出列表
exports () {
const params = this.queryParam
params.audit_at = this.queryParam.audit_at || ''
params.paid_at = this.queryParam.paid_at || ''
params.settle_at = this.queryParam.settle_at || ''
if (this.listCount > 0) {
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
for (const key in params) {
downUrl = downUrl + '&' + key + '=' + params[key]
}
window.open(downUrl)
} else {
this.$notification.error({
message: '温馨提醒',
description: '数据为空不能下载!'
})
}
},
// 查看详情
onInfo (item) {
const success = {
title: '立即发货',
width: 1000,
maskClosable: true,
closable: true,
footer: '',
cancelText: '取消'
}
this.$dialog(
StockInfo,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 发货
onEdit (item) {
console.log(item)
const success = {
title: '立即发货',
width: 600,
maskClosable: true,
closable: true,
okText: '确认发货',
cancelText: '取消'
}
this.$dialog(
EditSend,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

View File

@@ -0,0 +1,173 @@
<template>
<a-form
ref="form"
v-bind="formItemLayout"
:form="form"
>
<a-form-item label="收货人名">
<a-input
v-decorator="[
'no1',
{
rules: [
{ required: true, message: `请选择收货人名!`, type: 'string' },
]
}
]"
:placeholder="`请选择收货人名!`"
/>
</a-form-item>
<a-form-item label="收货地址">
<a-input
v-decorator="[
'no2',
{
rules: [
{ required: true, message: `请选择收货地址!`, type: 'string' },
]
}
]"
:placeholder="`请选择收货地址!`"
/>
</a-form-item>
<a-form-item label="购买数量">
<a-input
v-decorator="[
'no3',
{
rules: [
{ required: true, message: `请选择购买数量!`, type: 'string' },
]
}
]"
:placeholder="`请选择购买数量!`"
/>
</a-form-item>
<a-form-item label="发货方式">
<a-select
@change="typeChange"
v-decorator="[
'status',
{
rules: [
{ required: true, message: `请选择发货方式!`, type: 'string' }
]
}
]"
:placeholder="`请选择发货方式!`">
<a-select-option value="online">线上发货</a-select-option>
<a-select-option value="offline">线下自提</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="快递类型" v-if="currentType === 'online'">
<a-select
v-decorator="[
'tpe',
{
rules: [
{ required: true, message: `请选择快递类型!`, type: 'string' }
]
}
]"
:placeholder="`请选择快递类型!`">
<a-select-option value="shunfeng">顺丰速递</a-select-option>
<a-select-option value="yunda">韵达快递</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="快递单号" v-if="currentType === 'online'">
<a-input
v-decorator="[
'no',
{
rules: [
{ required: true, message: `请选择快递单号!`, type: 'string' },
]
}
]"
:placeholder="`请选择快递单号!`"
/>
</a-form-item>
<a-form-item
label="自提时间"
v-if="currentType === 'offline'"
>
<a-date-picker
v-decorator="[
'time',
{
rules: [
{ required: true, message: `请选择自提时间!` },
]
}
]"
:placeholder="`请选择自提时间!`"
style="width: 100%" />
</a-form-item>
</a-form>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
import moment from 'moment'
export default {
name: 'EditSend',
props: {
item: {
type: Object,
default: () => {
return {}
}
}
},
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false,
currentType: ''
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
moment,
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
if (!errors) {
console.log(values)
console.log(moment(values.time).format('YYYY-MM-DD'))
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
},
// 切换发货方式(线上发货 自提发货)
typeChange (e) {
this.currentType = e
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,126 @@
<template>
<a-form
ref="form"
v-bind="formItemLayout"
:form="form"
>
<a-form-item label="发货类型">
<a-select
@change="typeChange"
v-decorator="[
'status',
{
rules: [
{ required: true, message: `请选择发货类型!`, type: 'string' }
]
}
]"
:placeholder="`请选择发货类型!`">
<a-select-option value="online">线上发货</a-select-option>
<a-select-option value="offline">线下自提</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="快递类型" v-if="currentType === 'online'">
<a-select
v-decorator="[
'tpe',
{
rules: [
{ required: true, message: `请选择快递类型!`, type: 'string' }
]
}
]"
:placeholder="`请选择快递类型!`">
<a-select-option value="shunfeng">顺丰速递</a-select-option>
<a-select-option value="yunda">韵达快递</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="快递单号" v-if="currentType === 'online'">
<a-input
v-decorator="[
'no',
{
rules: [
{ required: true, message: `请选择快递单号!`, type: 'string' },
]
}
]"
:placeholder="`请选择快递单号!`"
/>
</a-form-item>
<a-form-item label="原因">
<a-textarea
:rows="4"
v-decorator="[
'remark',
{
rules: [
{ required: true, message: '请输入详细的添加原因!', type: 'string' },
]
}
]"
placeholder="请输入详细的添加补差价原因" />
</a-form-item>
</a-form>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'EditSend',
props: {
item: {
type: Object,
default: () => {
return {}
}
}
},
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false,
currentType: ''
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
},
typeChange (e) {
this.currentType = e
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,119 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<div>
<a-descriptions title="用户信息" :column="4">
<a-descriptions-item label="姓名" span="2">张冬雪</a-descriptions-item>
<a-descriptions-item label="电话" span="2">1810000000</a-descriptions-item>
<a-descriptions-item label="身份" span="2">创客</a-descriptions-item>
</a-descriptions>
<!-- 出库 线上出库 -->
<a-descriptions title="线上出库" :column="4">
<a-descriptions-item label="线上出库方式" span="2">线上零售优惠券扣除库存</a-descriptions-item>
<a-descriptions-item label="出库数量" span="2">12</a-descriptions-item>
</a-descriptions>
<!-- 出库 线下出库 物流 -->
<a-descriptions title="线下出库(线上发货)" :column="4">
<a-descriptions-item label="出库数量" span="2">12</a-descriptions-item>
<a-descriptions-item label="发货状态" span="2">线上发货</a-descriptions-item>
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
<a-descriptions-item label="发货时间" span="2">2023-12-12 12:12:12</a-descriptions-item>
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="收货人名" span="2">张冬雪</a-descriptions-item>
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
</a-descriptions>
<!-- 出库 线下出库 自提 -->
<a-descriptions title="线下出库(自提)" :column="4">
<a-descriptions-item label="自提数量" span="2">12</a-descriptions-item>
<a-descriptions-item label="发货状态" span="2">自提</a-descriptions-item>
<a-descriptions-item label="提货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
<!-- 入库 线上 -->
<a-descriptions title="入库(线上)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
<!-- 入库 线下 线上发货-->
<a-descriptions title="入库(线下发货)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
</a-descriptions>
<!-- 入库 线下 自提-->
<a-descriptions title="入库(线下发货)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="自提时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
</div>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'StockInfo',
props: {
item: {
type: Object,
default: () => {
return {}
}
}
},
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -6,50 +6,36 @@
<a-form layout="inline"> <a-form layout="inline">
<a-row :gutter="48"> <a-row :gutter="48">
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
<a-form-item label="订单号码"> <a-form-item label="用户昵称">
<a-input v-model="queryParam.order_no" placeholder="订单号码" /> <a-input v-model="queryParam.item_id" placeholder="用户昵称" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
<a-form-item label="机构号码"> <a-form-item label="用户手机">
<a-input v-model="queryParam.item_id" placeholder="机构号码" /> <a-input v-model="queryParam.order_no" placeholder="用户手机" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
<a-form-item label="机构名称"> <a-form-item label="顶点账号">
<a-input v-model="queryParam.institution" placeholder="机构名称" /> <a-input v-model="queryParam.item_id" placeholder="顶点账号" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
<a-form-item label="客户姓名"> <a-form-item label="身份筛选" has-feedback>
<a-input v-model="queryParam.nickname" placeholder="客户姓名" /> <a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="身份筛选">
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="业务类型" has-feedback>
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="业务类型">
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option> <a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
<a-form-item label="机构状态"> <a-form-item label="库变类型" has-feedback>
<a-select v-model="queryParam.status" @change="onOrganizationChange" placeholder="机构状态"> <a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="库变类型">
<a-select-option v-for="item in statusArray" :key="item.key" :value="item.key">{{ item.value }}</a-select-option> <a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<!-- <a-col :md="8" :sm="24" v-if="searchType">
<a-form-item label="处理状态" >
<a-select v-model="queryParam.dispose" placeholder="处理状态" @change="onDisposeChange">
<a-select-option value="1">Option 1</a-select-option>
<a-select-option value="2">Option 2</a-select-option>
<a-select-option value="3">Option 3</a-select-option>
</a-select>
</a-form-item>
</a-col> -->
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
<a-form-item label="下单时间"> <a-form-item label="入库时间">
<a-range-picker <a-range-picker
:placeholder="['开始日期', '结束日期']" :placeholder="['开始日期', '结束日期']"
v-model="queryParam.paid_at" v-model="queryParam.paid_at"
@@ -57,26 +43,9 @@
@change="onCreateChange" /> @change="onCreateChange" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="8" :sm="24">
<a-form-item label="执行时间">
<a-range-picker
:placeholder="['开始日期', '结束日期']"
v-model="queryParam.audit_at"
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
@change="onCarryChange" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="结案时间">
<a-range-picker
:placeholder="['开始日期', '结束日期']"
v-model="queryParam.settle_at"
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
@change="onSettleChange" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24"> <a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button> <a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<!-- <a-button class="ml8" t ype="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button> -->
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button> <a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
<a-button <a-button
v-if="exports_can" v-if="exports_can"
@@ -101,48 +70,16 @@
showPagination="auto" showPagination="auto"
bordered bordered
size="default" size="default"
:scroll="{ x: 1500, y: 1000 }"> :scroll="{ x: 1200, y: 1000 }">
<!-- 机构详情 --> <div slot="user" slot-scope="text, record" style="color: #1890ff">
<span slot="order_no" slot-scope="text, record"> <div>{{ record.user }}</div>
<router-link tag="a" target="_blank" :to="{ name: 'OrganizationDetail', params: { orderId: record.order_id, itemId: record.order_item_id }}"> </div>
{{ record.order_no }}
</router-link>
</span>
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record"><user-info :info="{ ...record.user, sex: record.cert.sex }" /></div>
<div slot="transactor" slot-scope="text, record">{{ record.transactor != '' ? record.transactor : '--' }}</div>
<div slot="teachers" slot-scope="text, record">{{ record.teachers != '' ? record.teachers : '--' }}</div>
<span slot="institution_name" slot-scope="text, record">{{ record.institution_name || '-' }}</span>
<!-- 业务类型 -->
<span slot="price" slot-scope="text, record"> <span>{{ record.price }}</span></span>
<!-- 机构状态 -->
<span slot="status" slot-scope="text, record"><a-tag color="blue">{{ record.status }}</a-tag></span>
<!-- 机构状态2 -->
<span slot="status_two_text" slot-scope="text, record">
<a-tag color="#87d068">{{ record.status_two_text }}</a-tag>
<a-icon v-if="record.status_two.can_set" type="edit" :style="{ fontSize: '16px', color: '#87d068' }" @click="onEditStatus(record)" />
</span>
<!-- 创建时间 -->
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span> <span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 申请时间 -->
<span slot="audit_at" slot-scope="text, record">{{ record.audit_at || '-' }}</span>
<!-- 结案时间 -->
<span slot="settle_at" slot-scope="text, record">{{ record.settle_at || '-' }}</span>
<!-- 处理时效 -->
<span
slot="prescription"
slot-scope="text, record">{{ record.prescription > 0 ? record.prescription + '天' : '-' }}</span>
<!-- 操作 --> <!-- 操作 -->
<div slot="actions" slot-scope="text, record"> <div slot="actions" slot-scope="text, record">
<a-dropdown v-if="record.can_status" :trigger="['click']"> <a class="ant-dropdown-link" @click="onEdit(record)">查看明细</a>
<a class="ant-dropdown-link">操作<a-icon type="down" /></a> <a-divider type="vertical" />
<a-menu slot="overlay"> <a class="ant-dropdown-link" @click="onUpData(record)">更改库存</a>
<a-menu-item v-for="item in record.update_status" :key="item.key" @click="actions(item.key, record)">
<a>{{ `${item.title}` }}</a>
</a-menu-item>
</a-menu>
</a-dropdown>
<a v-else>-</a>
</div> </div>
</s-table> </s-table>
</a-card> </a-card>
@@ -154,130 +91,93 @@ import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton' import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage' import { institutionsExports } from '@/api/storage'
import moment from 'moment' import moment from 'moment'
import Info from '@/views/home/components/Info'
import { import {
getList, getList,
init, init,
changeStatus,
canExport canExport
} from '@/api/organization' } from '@/api/organization'
import storage from 'store' import storage from 'store'
import EditStatus from './widgets/EditStatu.vue' import StockInfo from './widgets/StockInfo.vue'
import onUpData from './widgets/onUpData.vue'
// //
const columns = [ const columns = [
{ {
title: '订单号码', title: '用户ID',
dataIndex: 'order_no', dataIndex: 'order_id',
scopedSlots: { customRender: 'order_no' },
align: 'center', align: 'center',
width: 160, width: 80
fixed: 'left'
}, },
{ {
title: '机构号码', title: '当前用户信息',
dataIndex: 'order_item_id', children: [
width: 100, {
title: '昵称',
dataIndex: 'name',
key: 'name',
align: 'center',
width: 200
},
{
title: '账号',
dataIndex: 'name23',
key: 'name23',
align: 'center',
width: 140
},
{
title: '身份',
dataIndex: 'name2',
key: 'name2',
align: 'center',
width: 140
}
],
width: 300,
align: 'center' align: 'center'
}, },
{ {
title: '机构名称', title: '库变类型(入库、出库)',
dataIndex: 'institution', dataIndex: 'user212',
width: 140, width: 140,
align: 'center' align: 'center'
}, },
{ {
title: '机构名称2', title: '库变数量',
scopedSlots: { customRender: 'institution_name' }, dataIndex: 'user232',
width: 140, width: 140,
align: 'center' align: 'center'
}, },
{ {
title: '机构状态', title: '当前库存',
scopedSlots: { customRender: 'status' }, dataIndex: 'user22',
width: 160,
align: 'center'
},
{
title: '机构状态2',
scopedSlots: { customRender: 'status_two_text' },
width: 160,
align: 'center'
},
{
title: '客户姓名',
dataIndex: 'user',
key: 'user',
width: 180,
align: 'center'
},
{
title: '业务类型',
dataIndex: 'business_type',
width: 140,
align: 'center'
}, {
title: '欠款金额',
dataIndex: 'price',
scopedSlots: { customRender: 'price' },
width: 140,
align: 'center'
}, {
title: '匹配额度',
dataIndex: 'allocation',
scopedSlots: { customRender: 'allocation' },
width: 140,
align: 'center'
}, {
title: '法务老师',
dataIndex: 'teacher',
width: 140,
align: 'center'
}, {
title: '法务助理',
dataIndex: 'tutor',
width: 140, width: 140,
align: 'center' align: 'center'
}, },
{ {
title: '下单时间', title: '库变时间',
dataIndex: 'paid_at', dataIndex: 'created_at',
width: 200,
align: 'center', align: 'center',
width: 140,
sorter: true sorter: true
}, },
{ {
title: '申请时间',
dataIndex: 'audit_at',
scopedSlots: { customRender: 'audit_at' },
width: 140,
align: 'center'
}, {
title: '结案时间',
dataIndex: 'settle_at',
scopedSlots: { customRender: 'settle_at' },
width: 140,
align: 'center'
}, {
title: '处理时效',
dataIndex: 'prescription',
scopedSlots: { customRender: 'prescription' },
width: 140,
align: 'center'
}, {
title: '操作', title: '操作',
dataIndex: 'status10', dataIndex: 'status110',
scopedSlots: { customRender: 'actions' }, scopedSlots: { customRender: 'actions' },
width: 180,
align: 'center', align: 'center',
width: 200,
fixed: 'right' fixed: 'right'
} }
] ]
export default { export default {
name: 'Index', name: 'DealerIndex',
components: { components: {
STable, STable,
UserInfo, UserInfo,
Info,
DeriveButton DeriveButton
}, },
data () { data () {
@@ -302,9 +202,6 @@ export default {
listCount: 0, listCount: 0,
loadData: (parameter) => { loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam) const requestParameters = Object.assign({}, parameter, this.queryParam)
getList(requestParameters).then(res => {
this.listCount = res.data.length
})
return getList(requestParameters) return getList(requestParameters)
} }
} }
@@ -329,28 +226,12 @@ export default {
}, },
methods: { methods: {
moment, moment,
//
actions (status, record) {
console.log(status, record.order_item_id)
const params = {
status: status
}
changeStatus(record.order_item_id, params).then(res => {
this.$notification.success({
message: '成功',
description: '机构状态修改成功'
})
this.$refs.table.loadData()
}).catch(err => {
console.log(err)
})
},
// //
init () { init () {
init().then(res => { init().then(res => {
this.statusArray = res.status // this.statusArray = res.status //
this.businessArray = res.type // this.businessArray = res.type //
this.canExports() // this.canExports()
}) })
}, },
// //
@@ -422,19 +303,42 @@ export default {
}) })
} }
}, },
// 2 //
onEditStatus (item) { onUpData (item) {
console.log(item) console.log(item)
const success = { const success = {
title: '修改机构状态2', title: '更改库存',
width: 600, width: 600,
maskClosable: true, maskClosable: true,
closable: true, closable: true,
okText: '确认修改', okText: '知道了'
cancelText: '取消'
} }
this.$dialog( this.$dialog(
EditStatus, onUpData,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
//
onEdit (item) {
const success = {
title: '库变详情',
width: 1000,
maskClosable: true,
closable: true,
footer: '',
okText: '知道了'
}
this.$dialog(
StockInfo,
{ {
item, item,
on: { on: {

308
src/views/stock/In.vue Normal file
View File

@@ -0,0 +1,308 @@
<template>
<page-header-wrapper>
<template v-slot:content>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="入库时间">
<a-range-picker
:placeholder="['开始日期', '结束日期']"
v-model="queryParam.paid_at"
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
@change="onCreateChange" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
</a-col>
</a-row>
</a-form>
</div>
</template>
<!-- 列表 -->
<a-card :bordered="false">
<a-card :bordered="false">
<a-row>
<a-col :sm="12" :xs="24">
<info title="线上库存量剩余" value="222" :bordered="true" />
</a-col>
<a-col :sm="12" :xs="24">
<info title="线下库存量剩余" value="333" :bordered="false" />
</a-col>
</a-row>
</a-card>
<br/>
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.order_item_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1200, y: 1000 }">
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record" style="color: #1890ff">
<div>{{ record.user }}</div>
</div>
<!-- 创建时间 -->
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<a class="ant-dropdown-link" @click="onEdit(record)">修改<a-icon type="down" /></a>
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage'
import moment from 'moment'
import Info from '@/views/home/components/Info'
import {
getList,
init,
canExport
} from '@/api/organization'
import storage from 'store'
// import EditRole from './widgets/EditRole.vue'
import AddRole from './widgets/AddRole.vue'
// 列表规格
const columns = [
{
title: '创客进货金额',
dataIndex: 'user22',
align: 'center'
},
{
title: '补充库存时间',
dataIndex: 'created_at',
align: 'center',
sorter: true
},
{
title: '补充库存数量',
children: [
{
title: '线上',
dataIndex: 'name',
key: 'name',
align: 'center'
},
{
title: '线下',
dataIndex: 'name1',
key: 'name1',
align: 'center'
}
],
width: 300,
align: 'center'
}
// {
// title: '操作',
// dataIndex: 'status10',
// scopedSlots: { customRender: 'actions' },
// align: 'center',
// width: 160,
// fixed: 'right'
// }
]
export default {
name: 'StockIn',
components: {
STable,
UserInfo,
Info,
DeriveButton
},
data () {
return {
exports_can: false,
columns,
searchType: false, // 展示全部的搜索
businessArray: [], // 业务类型
statusArray: [], // 机构列表
queryParam: {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined // 结案时间
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
return getList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
created () {
this.init()
},
methods: {
moment,
// 获取检索的基本样式
init () {
init().then(res => {
this.statusArray = res.status // 机构状态
this.businessArray = res.type // 业务类型
// this.canExports()
})
},
// 更改创建时间
onCreateChange (dates, dateStrings) {
this.queryParam.paid_at = dateStrings
},
// 更改执行时间
onCarryChange (dates, dateStrings) {
this.queryParam.audit_at = dateStrings
},
// 更改结案时间
onSettleChange (dates, dateStrings) {
this.queryParam.settle_at = dateStrings
},
// 处理状态
onDisposeChange (e) {
this.queryParam.dispose = e
},
// 业务类型
onBusinessChange (e) {
this.queryParam.business_type_id = e
},
// 机构状态
onOrganizationChange (e) {
this.queryParam.status = e
},
// 搜索列表
search () {
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 重置搜索列表
resetSearch () {
this.queryParam = {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined// 结案时间
}
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 机构是否能导出
canExports () {
console.log('canExports')
canExport(storage.get('userid')).then(res => {
this.exports_can = res.exports
})
},
// 导出列表
exports () {
const params = this.queryParam
params.audit_at = this.queryParam.audit_at || ''
params.paid_at = this.queryParam.paid_at || ''
params.settle_at = this.queryParam.settle_at || ''
if (this.listCount > 0) {
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
for (const key in params) {
downUrl = downUrl + '&' + key + '=' + params[key]
}
window.open(downUrl)
} else {
this.$notification.error({
message: '温馨提醒',
description: '数据为空不能下载!'
})
}
},
// 新增用户
onAddRole () {
console.log('add....')
const success = {
title: '新增用户',
width: 600,
maskClosable: true,
closable: true,
okText: '确认新增',
cancelText: '取消'
}
this.$dialog(
AddRole,
{
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 修改用户
onEdit (item) {
console.log(item)
// const success = {
// title: '修改用户',
// width: 600,
// maskClosable: true,
// closable: true,
// okText: '确认修改',
// cancelText: '取消'
// }
// this.$dialog(
// EditRole,
// {
// item,
// on: {
// ok: () => {
// console.log('成功了。。')
// this.$refs.table.loadData()
// }
// }
// },
// success
// )
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

326
src/views/stock/Out.vue Normal file
View File

@@ -0,0 +1,326 @@
<template>
<page-header-wrapper>
<template v-slot:content>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="出库时间">
<a-range-picker
:placeholder="['开始日期', '结束日期']"
v-model="queryParam.paid_at"
:ranges="{ Today: [moment(), moment()], 'This Month': [moment(), moment().endOf('month')] }"
@change="onCreateChange" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
</a-col>
</a-row>
</a-form>
</div>
</template>
<!-- 列表 -->
<a-card :bordered="false">
<a-card :bordered="false">
<a-row>
<a-col :sm="12" :xs="24">
<info title="线上库存量剩余" value="222" :bordered="true" />
</a-col>
<a-col :sm="12" :xs="24">
<info title="线下库存量剩余" value="333" :bordered="false" />
</a-col>
</a-row>
</a-card>
<br/>
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.order_item_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1200, y: 1000 }">
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record" style="color: #1890ff">
<div>{{ record.user }}</div>
</div>
<!-- 创建时间 -->
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<a class="ant-dropdown-link" @click="onEdit(record)">修改<a-icon type="down" /></a>
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage'
import moment from 'moment'
import Info from '@/views/home/components/Info'
import {
getList,
init,
canExport
} from '@/api/organization'
import storage from 'store'
// import EditRole from './widgets/EditRole.vue'
import AddRole from './widgets/AddRole.vue'
// 列表规格
const columns = [
{
title: '用户名',
dataIndex: 'user22',
align: 'center'
},
{
title: '出库时间',
dataIndex: 'created_at',
align: 'center',
sorter: true
},
{
title: '经销商进货明细',
children: [
{
title: '线上数量',
dataIndex: 'name33',
key: 'name',
align: 'center'
},
{
title: '线下数量',
dataIndex: 'name1333',
key: 'name1',
align: 'center'
}
],
width: 300,
align: 'center'
},
{
title: '零售出库明细',
children: [
{
title: '线上数量',
dataIndex: 'name11',
key: 'name11',
align: 'center'
},
{
title: '线下数量',
dataIndex: 'name12',
key: 'name12',
align: 'center'
}
],
width: 300,
align: 'center'
}
// {
// title: '操作',
// dataIndex: 'status10',
// scopedSlots: { customRender: 'actions' },
// align: 'center',
// width: 160,
// fixed: 'right'
// }
]
export default {
name: 'StockOut',
components: {
Info,
STable,
UserInfo,
DeriveButton
},
data () {
return {
exports_can: false,
columns,
searchType: false, // 展示全部的搜索
businessArray: [], // 业务类型
statusArray: [], // 机构列表
queryParam: {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined // 结案时间
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
return getList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
created () {
this.init()
},
methods: {
moment,
// 获取检索的基本样式
init () {
init().then(res => {
this.statusArray = res.status // 机构状态
this.businessArray = res.type // 业务类型
this.canExports()
})
},
// 更改创建时间
onCreateChange (dates, dateStrings) {
this.queryParam.paid_at = dateStrings
},
// 更改执行时间
onCarryChange (dates, dateStrings) {
this.queryParam.audit_at = dateStrings
},
// 更改结案时间
onSettleChange (dates, dateStrings) {
this.queryParam.settle_at = dateStrings
},
// 处理状态
onDisposeChange (e) {
this.queryParam.dispose = e
},
// 业务类型
onBusinessChange (e) {
this.queryParam.business_type_id = e
},
// 机构状态
onOrganizationChange (e) {
this.queryParam.status = e
},
// 搜索列表
search () {
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 重置搜索列表
resetSearch () {
this.queryParam = {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined// 结案时间
}
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 机构是否能导出
canExports () {
console.log('canExports')
canExport(storage.get('userid')).then(res => {
this.exports_can = res.exports
})
},
// 导出列表
exports () {
const params = this.queryParam
params.audit_at = this.queryParam.audit_at || ''
params.paid_at = this.queryParam.paid_at || ''
params.settle_at = this.queryParam.settle_at || ''
if (this.listCount > 0) {
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
for (const key in params) {
downUrl = downUrl + '&' + key + '=' + params[key]
}
window.open(downUrl)
} else {
this.$notification.error({
message: '温馨提醒',
description: '数据为空不能下载!'
})
}
},
// 新增用户
onAddRole () {
console.log('add....')
const success = {
title: '新增用户',
width: 600,
maskClosable: true,
closable: true,
okText: '确认新增',
cancelText: '取消'
}
this.$dialog(
AddRole,
{
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 修改用户
onEdit (item) {
console.log(item)
// const success = {
// title: '修改用户',
// width: 600,
// maskClosable: true,
// closable: true,
// okText: '确认修改',
// cancelText: '取消'
// }
// this.$dialog(
// EditRole,
// {
// item,
// on: {
// ok: () => {
// console.log('成功了。。')
// this.$refs.table.loadData()
// }
// }
// },
// success
// )
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

View File

@@ -0,0 +1,76 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<a-form
ref="form"
v-bind="formItemLayout"
:form="form"
>
<a-form-item label="机构状态" style="padding-top:30px;">
<a-select
v-decorator="[
'status',
{
rules: [
{ required: true, message: `请选择机构状态!`, type: 'string' },
]
}
]"
:placeholder="`请选择机构状态!`"
>
<a-select-option v-for="(it) in item.status_two.texts" :key="it.key" :value="it.key+''">
{{ it.title }}
</a-select-option>
</a-select>
</a-form-item>
</a-form>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'AddRole',
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,119 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<div>
<a-descriptions title="用户信息" :column="4">
<a-descriptions-item label="姓名" span="2">张冬雪</a-descriptions-item>
<a-descriptions-item label="电话" span="2">1810000000</a-descriptions-item>
<a-descriptions-item label="身份" span="2">创客</a-descriptions-item>
</a-descriptions>
<!-- 出库 线上出库 -->
<a-descriptions title="线上出库" :column="4">
<a-descriptions-item label="线上出库方式" span="2">线上零售优惠券扣除库存</a-descriptions-item>
<a-descriptions-item label="出库数量" span="2">12</a-descriptions-item>
</a-descriptions>
<!-- 出库 线下出库 物流 -->
<a-descriptions title="线下出库(线上发货)" :column="4">
<a-descriptions-item label="出库数量" span="2">12</a-descriptions-item>
<a-descriptions-item label="发货状态" span="2">线上发货</a-descriptions-item>
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
<a-descriptions-item label="发货时间" span="2">2023-12-12 12:12:12</a-descriptions-item>
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="收货人名" span="2">张冬雪</a-descriptions-item>
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
</a-descriptions>
<!-- 出库 线下出库 自提 -->
<a-descriptions title="线下出库(自提)" :column="4">
<a-descriptions-item label="自提数量" span="2">12</a-descriptions-item>
<a-descriptions-item label="发货状态" span="2">自提</a-descriptions-item>
<a-descriptions-item label="提货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
<!-- 入库 线上 -->
<a-descriptions title="入库(线上)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
<!-- 入库 线下 线上发货-->
<a-descriptions title="入库(线下发货)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="进货时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
<a-descriptions-item label="快递单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="快递状态" span="2">待发货</a-descriptions-item>
<a-descriptions-item label="收货地址" span="3">哈尔滨市香坊区香顺街98号-2-201</a-descriptions-item>
</a-descriptions>
<!-- 入库 线下 自提-->
<a-descriptions title="入库(线下发货)" :column="4">
<a-descriptions-item label="订单号" span="2">20398475766539979</a-descriptions-item>
<a-descriptions-item label="进货数量" span="2">99</a-descriptions-item>
<a-descriptions-item label="经销商姓名手机号" span="2">张冬雪14745798055</a-descriptions-item>
<a-descriptions-item label="自提时间" span="2">2023-11-11 10:12:12</a-descriptions-item>
</a-descriptions>
</div>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'StockInfo',
props: {
item: {
type: Object,
default: () => {
return {}
}
}
},
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,96 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<a-form
ref="form"
v-bind="formItemLayout"
:form="form"
>
<a-form-item label="新增库存" style="padding-top:10px;">
<a-input-number
style="width: 100%;"
:min="1"
:max="10"
v-decorator="[
'number',
{
rules: [
{ required: true, message: `请填写库存!`, type: 'number' },
]
}
]"
:placeholder="`请填写库存!`"
/>
</a-form-item>
<a-form-item label="备注">
<a-textarea
:rows="4"
v-decorator="[
'remark',
{
rules: [
{ required: true, message: '请输入备注!', type: 'string' },
]
}
]"
placeholder="请输入备注!" />
</a-form-item>
</a-form>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'EditRole',
props: {
item: {
type: Object,
default: () => {
return {}
}
}
},
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>

347
src/views/user/Index.vue Normal file
View File

@@ -0,0 +1,347 @@
<template>
<page-header-wrapper>
<template v-slot:content>
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="48">
<a-col :md="8" :sm="24">
<a-form-item label="用户昵称">
<a-input v-model="queryParam.order_no" placeholder="用户昵称" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="用户昵称">
<a-input v-model="queryParam.item_id" placeholder="用户昵称" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="顶点账号">
<a-input v-model="queryParam.item_id" placeholder="顶点账号" />
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-form-item label="身份筛选" has-feedback>
<a-select v-model="queryParam.business_type_id" @change="onBusinessChange" placeholder="身份筛选">
<a-select-option v-for="item in businessArray" :key="item.id" :value="item.id">{{ item.title }}</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="8" :sm="24">
<a-button type="primary" @click="search"><a-icon type="search" />搜索</a-button>
<a-button class="ml8" type="primary" @click="onAddRole"><a-icon type="plus" />新增</a-button>
<a-button class="ml8" @click="resetSearch"><a-icon type="undo" />重置</a-button>
<a-button
v-if="exports_can"
class="ml8"
type="dashed"
shape="round"
icon="download"
@click="exports"/>
</a-col>
</a-row>
</a-form>
</div>
</template>
<!-- 列表 -->
<a-card :bordered="false">
<s-table
ref="table"
:columns="columns"
:data="loadData"
:rowKey="(row) => row.order_item_id"
showPagination="auto"
bordered
size="default"
:scroll="{ x: 1200, y: 1000 }">
<!-- 申请用户 实习顾问 法务老师 -->
<div slot="user" slot-scope="text, record" style="color: #1890ff">
<div>{{ record.user }}</div>
</div>
<!-- 创建时间 -->
<span slot="created_at" slot-scope="text, record">{{ record.created_at }}</span>
<!-- 操作 -->
<div slot="actions" slot-scope="text, record">
<a class="ant-dropdown-link" @click="onEdit(record)">更改推荐人</a>
</div>
</s-table>
</a-card>
</page-header-wrapper>
</template>
<script>
import { STable, UserInfo } from '@/components'
import DeriveButton from '@/components/OrderDetailInfo/DeriveButton'
import { institutionsExports } from '@/api/storage'
import moment from 'moment'
import {
getList,
init,
canExport
} from '@/api/organization'
import storage from 'store'
import EditInvite from './widgets/EditInvite.vue'
import AddRole from './widgets/AddRole.vue'
// 列表规格
const columns = [
{
title: '用户id',
dataIndex: 'order_id',
align: 'center',
width: 80
},
{
title: '当前用户信息',
children: [
{
title: '昵称',
dataIndex: 'name',
key: 'name',
align: 'center',
width: 200
},
{
title: '真实姓名',
dataIndex: 'name1',
key: 'name1',
align: 'center',
width: 140
},
{
title: '用户手机',
dataIndex: 'name23',
key: 'name23',
align: 'center',
width: 140
},
{
title: '身份',
dataIndex: 'name2',
key: 'name2',
align: 'center',
width: 140
},
{
title: '邀请码',
dataIndex: 'name554',
key: 'name5',
align: 'center',
width: 140
}
],
width: 300,
align: 'center'
},
{
title: '推荐人手机号',
dataIndex: 'user22',
width: 140,
align: 'center'
},
{
title: '注册时间',
dataIndex: 'created_at',
width: 200,
align: 'center',
sorter: true
},
{
title: '操作',
dataIndex: 'status10',
scopedSlots: { customRender: 'actions' },
align: 'center',
width: 160,
fixed: 'right'
}
]
export default {
name: 'UserIndex',
components: {
STable,
UserInfo,
DeriveButton
},
data () {
return {
exports_can: false,
columns,
searchType: false, // 展示全部的搜索
businessArray: [], // 业务类型
statusArray: [], // 机构列表
queryParam: {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined // 结案时间
},
listCount: 0,
loadData: (parameter) => {
const requestParameters = Object.assign({}, parameter, this.queryParam)
return getList(requestParameters)
}
}
},
watch: {
$route (to, from) {
if (
(from.name === 'Detail' && to.name === 'FristCheckrderIndex') ||
(from.name === 'Home' && to.name === 'FristCheckrderIndex') ||
(from.name === 'AssignrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'SignInrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'ReCheckrderIndex' && to.name === 'FristCheckrderIndex') ||
(from.name === 'HandleService' && to.name === 'FristCheckrderIndex') ||
(from.name === 'CompleteOrder' && to.name === 'FristCheckrderIndex')
) {
this.$refs.table.loadData()
}
}
},
created () {
this.init()
},
methods: {
moment,
// 获取检索的基本样式
init () {
init().then(res => {
this.statusArray = res.status // 机构状态
this.businessArray = res.type // 业务类型
this.canExports()
})
},
// 更改创建时间
onCreateChange (dates, dateStrings) {
this.queryParam.paid_at = dateStrings
},
// 更改执行时间
onCarryChange (dates, dateStrings) {
this.queryParam.audit_at = dateStrings
},
// 更改结案时间
onSettleChange (dates, dateStrings) {
this.queryParam.settle_at = dateStrings
},
// 处理状态
onDisposeChange (e) {
this.queryParam.dispose = e
},
// 业务类型
onBusinessChange (e) {
this.queryParam.business_type_id = e
},
// 机构状态
onOrganizationChange (e) {
this.queryParam.status = e
},
// 搜索列表
search () {
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 重置搜索列表
resetSearch () {
this.queryParam = {
order_no: '', // 订单编号
institution: '', // 机构名称
item_id: '', // 机构编号
nickname: '', // 下单人
business_type_id: '', // 业务类型
status: '', // 机构状态
paid_at: undefined, // 下单时间
audit_at: undefined, // 执行时间
settle_at: undefined// 结案时间
}
this.$refs.table.refresh(true) // 重置接口且刷先到第一页
},
// 机构是否能导出
canExports () {
console.log('canExports')
canExport(storage.get('userid')).then(res => {
this.exports_can = res.exports
})
},
// 导出列表
exports () {
const params = this.queryParam
params.audit_at = this.queryParam.audit_at || ''
params.paid_at = this.queryParam.paid_at || ''
params.settle_at = this.queryParam.settle_at || ''
if (this.listCount > 0) {
let downUrl = institutionsExports() + '?user_id=' + storage.get('userid')
for (const key in params) {
downUrl = downUrl + '&' + key + '=' + params[key]
}
window.open(downUrl)
} else {
this.$notification.error({
message: '温馨提醒',
description: '数据为空不能下载!'
})
}
},
// 新增用户
onAddRole () {
console.log('add....')
const success = {
title: '新增用户',
width: 600,
maskClosable: true,
closable: true,
okText: '确认新增',
cancelText: '取消'
}
this.$dialog(
AddRole,
{
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
},
// 修改用户
onEdit (item) {
console.log(item)
const success = {
title: '更改推荐人',
width: 600,
maskClosable: true,
closable: true,
okText: '确认变更',
cancelText: '取消'
}
this.$dialog(
EditInvite,
{
item,
on: {
ok: () => {
console.log('成功了。。')
this.$refs.table.loadData()
}
}
},
success
)
}
}
}
</script>
<style lang="less" scoped>
.ml8 {
margin-left: 8px;
}
</style>

View File

@@ -0,0 +1,98 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<a-form
ref="form"
v-bind="formItemLayout"
:form="form"
>
<a-form-item label="用户手机">
<a-input
v-decorator="[
'phone',
{
rules: [
{ required: true, message: `请添加用户手机!`, type: 'string' },
]
}
]"
:placeholder="`请添加用户手机!`"
/>
</a-form-item>
<a-form-item label="真实姓名">
<a-input
v-decorator="[
'name',
{
rules: [
{ required: true, message: `请添加真实姓名!`, type: 'string' },
]
}
]"
:placeholder="`请添加真实姓名!`"
/>
</a-form-item>
<a-form-item label="推荐人信息">
<a-input
v-decorator="[
'invite',
{
rules: [
{ required: true, message: `请添加推荐人手机号!`, type: 'string' },
]
}
]"
:placeholder="`请添加推荐人手机号!`"
/>
</a-form-item>
</a-form>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'AddRole',
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>

View File

@@ -0,0 +1,80 @@
<!-- 驳回原因用户姓名输入 -->
<template>
<a-form
ref="form"
v-bind="formItemLayout"
:form="form"
>
<a-form-item label="推荐人信息" style="padding-top:30px;">
<a-input
v-decorator="[
'name',
{
rules: [
{ required: true, message: `请输入推荐人信息!`, type: 'string' },
]
}
]"
:placeholder="`请输入推荐人信息!`"
/>
</a-form-item>
</a-form>
</template>
<script>
import { changeStatusTwo } from '@/api/organization'
export default {
name: 'EditRole',
props: {
item: {
type: Object,
default: () => {
return {}
}
}
},
data: () => ({
formItemLayout: {
labelCol: { span: 6 },
wrapperCol: { span: 14 }
},
loading: false
}),
beforeCreate () {
this.form = this.$form.createForm(this)
},
methods: {
onOk () {
return new Promise(resolve => {
this.form.validateFields((errors, values) => {
console.log(values)
if (!errors) {
console.log(values)
const params = {
status: values.status
}
changeStatusTwo(this.item.order_item_id, params).then((res) => {
this.$notification.success({
message: '成功',
description: '修改成功'
})
resolve(true)
}).catch((err) => {
this.$notification.error({
message: '失败',
description: err.message
})
resolve(false)
})
}
})
})
}
}
}
</script>
<style scoped>
</style>