lion 12 months ago
parent af6c22cdd6
commit 5aa14bd266

@ -1,10 +1,31 @@
import request from '@/utils/request'
function customParamsSerializer(params) {
let result = '';
for (let key in params) {
if (params.hasOwnProperty(key)) {
if (Array.isArray(params[key])) {
params[key].forEach((item,index) => {
if(item.key){
result += `${key}[${index}][key]=${item.key}&${key}[${index}][op]=${item.op}&${key}[${index}][value]=${item.value}&`;
}else{
result +=`${key}[${index}]=${item}&`
}
});
} else {
result += `${key}=${params[key]}&`;
}
}
}
return result.slice(0, -1);
}
export function index(params, isLoading = true) {
return request({
method: 'get',
url: '/api/admin/accompany-order/index',
params,
paramsSerializer: customParamsSerializer,
isLoading
})
}

@ -0,0 +1,20 @@
import request from '@/utils/request'
export function getNotice(params) {
return request({
url: '/api/admin/notification/todo',
method: 'get',
params,
isLoading: false
})
}
export function toggleRead(params) {
return request({
url: '/api/admin/notification/read',
method: 'get',
params,
isLoading: false
})
}

@ -4,7 +4,64 @@
<breadcrumb class="breadcrumb-container" />
<div class="right-menu">
<div class="right-menu">
<el-dropdown
class="message-container"
trigger="click"
:hide-on-click="false"
>
<div class="message-wrapper">
<el-badge :value="noticeData.length>0?noticeData.length:''" :max="99" class="item">
<i class="el-icon-chat-dot-square" />
<span>消息中心</span>
</el-badge>
</div>
<template v-slot:dropdown>
<el-dropdown-menu class="message-dropdown">
<template v-if="noticeData.length > 0">
<template v-for="(item, index) in noticeData">
<el-dropdown-item :divided="!index">
<div style="display: flex; align-items: center">
<div>
{{item.created_at}}-用户下单
</div>
<div>
<Button
style="margin-left: 10px;"
size="small"
:type="'primary'"
@click="goOrder(item)"
>查看订单</Button>
</div>
<!-- <Button
style="margin-left: 10px;"
size="small"
:type="'primary'"
@click="goOrder(value)"
>查看订单</Button> -->
<div>
<Button
style="margin-left: 10px;"
size="small"
:type="item.read_at ? 'success' : 'primary'"
:icon="item.read_at ? 'md-checkmark' : 'ios-create-outline'"
@click="toggleMessage(item)"
>{{ item.read_at ? "已读" : "标为已读" }}</Button
>
</div>
</div>
</el-dropdown-item>
</template>
<!-- <li>查看更多消息</li> -->
</template>
<template v-else>
<div style="text-align: center;color: rgb(140,140,140);padding: 10px 0;">暂无通知</div>
</template>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown class="avatar-container" trigger="click">
<div class="avatar-wrapper">
<img src="../../assets/face.jpg" class="user-avatar">
@ -36,17 +93,25 @@
} from 'vuex'
import Breadcrumb from '@/components/Breadcrumb'
import Hamburger from '@/components/Hamburger'
import { getNotice, toggleRead } from "@/api/notice";
export default {
components: {
Breadcrumb,
Hamburger
},
data(){
return{
noticeData:[]
}
},
computed: {
...mapGetters([
'sidebar',
'avatar'
])
},
mounted() {
this.getNotice();
},
methods: {
toggleSideBar() {
@ -55,11 +120,43 @@
async logout() {
await this.$store.dispatch('user/logout')
this.$router.push(`/login?redirect=${this.$route.fullPath}`)
},
toggleMessage(item){
if(item.read_at) return
toggleRead({
id:item.id
}).then(res => {
this.$message({
type:'success',
message:res?.msg || "成功"
})
this.getNotice()
})
},
async getNotice() {
let res = await getNotice({
page:1,
page_size:99,
});
console.log(res);
this.noticeData = res.list.data;
},
goOrder(item){
this.$router.push("/accompany-order?order_id="+item.data.order_id);
}
}
}
</script>
<style scoped>
/deep/ .el-badge__content.is-fixed{
top:13px;
}
.el-dropdown-menu.el-popper.message-dropdown{
max-height:400px;
overflow: auto;
}
</style>
<style lang="scss" scoped>
.navbar {
height: 50px;
@ -89,7 +186,8 @@
float: right;
height: 100%;
line-height: 50px;
display: flex;
align-items: center;
&:focus {
outline: none;
}
@ -134,6 +232,23 @@
font-size: 12px;
}
}
}
.message-container {
margin-right: 20px;
.message-wrapper {
height: 100%;
padding: 0 6px;
i {
font-weight: 600;
}
span {
font-weight: 600;
padding-left: 6px;
}
}
}
}
}

@ -47,7 +47,7 @@
field="site_id"
width="160"
title="关联站点"
:edit-render="{ name: 'VxeTreeSelect', options: siteType, props: { multiple: false }, optionProps: { value: 'id', label: 'name' } }"
:edit-render="{ name: 'VxeTreeSelect', options: siteType, props: { multiple: true }, optionProps: { value: 'id', label: 'name' } }"
/>
<vxe-column field="cover_id" min-width="180" title="标题图片" header-align="center" align="left" :edit-render="{}">
@ -74,9 +74,9 @@
</template>
</vxe-column>
<vxe-column header-align="center" field="introduce" width="160" title="产品简介"
:edit-render="{ introduce: 'input', attrs: { type: 'textarea' } }" />
:edit-render="{ name: 'input', attrs: { type: 'textarea' } }" />
<vxe-column align="center" header-align="center" field="content" width="120" title="适用人群" :edit-render="{}">
<vxe-column v-if="false" align="center" header-align="center" field="content" width="120" title="适用人群" :edit-render="{}">
<template #default="{ row }">
<el-button slot="reference" size="small" type="primary" icon="el-icon-search"
@click="$refs['RichTextModal'].open({ text: row['content'], readonly: true, fieldName: 'content', row })">查看</el-button>
@ -108,8 +108,7 @@
@click="$refs['RichTextModal'].open({ text: row['price_content'], readonly: false, fieldName: 'price_content', row })">编辑</el-button>
</template>
</vxe-column>
<vxe-column align="center" header-align="center" field="appoint_content" width="120" title="预约须知" :edit-render="{}">
<vxe-column v-if="false" align="center" header-align="center" field="appoint_content" width="120" title="预约须知" :edit-render="{}">
<template #default="{ row }">
<el-button slot="reference" size="small" type="primary" icon="el-icon-search"
@click="$refs['RichTextModal'].open({ text: row['appoint_content'], readonly: true, fieldName: 'appoint_content', row })">查看</el-button>
@ -379,7 +378,10 @@
op:'eq',
value:this.select.type
}]
}, false)
}, false)
res.data.map(item=>{
item.site_id = item.site_id.split(",")
})
this.tableData = res.data
this.total = res.total
this.loading = false
@ -425,6 +427,9 @@
form['images_ids'] = arr
}else{
form['images_ids'] = []
}
if(row.site_id.length>0){
form.site_id = row.site_id.join(",")
}
console.log("this.form",form)
// return

@ -19,7 +19,7 @@
</el-form-item>
<el-form-item label="关联站点" prop="site_id">
<vxe-tree-select v-model="form['site_id']" placeholder="请选择关联站点" :options="siteType" clearable
:multiple="false" :option-props="{ value: 'id', label: 'name' }" style="width: 100%;" />
:multiple="true" :option-props="{ value: 'id', label: 'name' }" style="width: 100%;" />
</el-form-item>
<el-form-item label="标题图片" prop="cover_id">
<el-upload :action="action" :file-list="coverList"
@ -244,6 +244,9 @@
})
}else{
this.form['images_ids'] = []
}
if(this.form.site_id.length>0){
this.form.site_id = this.form.site_id.join(",")
}
console.log("this.form",this.form)

@ -15,8 +15,8 @@
<el-descriptions-item label="状态">
{{ form['status'] ? '启用' : '禁用' }}
</el-descriptions-item>
<el-descriptions-item label="关联站点">
{{ form['site']?form['site']['name']:'' }}
<el-descriptions-item label="关联站点">
<span v-for="item in form['site']" style="display: inline-block;margin-right:5px">{{item.name}}</span>
</el-descriptions-item>
<el-descriptions-item label="标题图片">
<vxe-image :src="form['cover']?form['cover']['url']:''" :width="80"></vxe-image>
@ -104,7 +104,7 @@
try {
const detail = await show({
id,
show_relation: ['site', 'cover']
show_relation: ['cover']
})
for (const key in this.form) {
if (detail.hasOwnProperty(key)) {

@ -12,7 +12,7 @@
type="primary"
plain
size="small"
@click="getList"
@click="order_id='',getList()"
>搜索</el-button>
</template>
</vxe-toolbar>
@ -227,6 +227,7 @@ export default {
loading: false,
tableHeight: 400,
order_id:'',
select: {
page: 1,
page_size: 20,
@ -265,6 +266,9 @@ export default {
}
},
created() {
if(this.$route.query.order_id){
this.order_id = this.$route.query.order_id
}
this.getNurses()
this.getList()
},
@ -350,7 +354,14 @@ export default {
async getList() {
this.loading = true
try {
const res = await index(this.select, false)
const res = await index({
...this.select,
filter:[{
key:'id',
op:'eq',
value:this.order_id?this.order_id:''
}]
}, false)
this.tableData = res.data
this.total = res.total
this.loading = false

Loading…
Cancel
Save