master
飘泊客 1 year ago
parent 2b75b549f4
commit 490de4ea67

@ -34,6 +34,7 @@ export interface LoginUserInfo {
organizationId: number
nickname: string
avatar?: string
salesmanType: number
}
/**

@ -96,3 +96,14 @@ export function getDetail(customId: customId) {
params: customId
})
}
/**
*
*
*/
export function updateCustomerAudit(customId: number, status: number, salesmanType: number) {
return httpClient.post<ApiResult>('/custom/audit', {
customId,
status,
salesmanType
})
}

@ -224,6 +224,7 @@ export type GeopoliticalCustomersRecord = {
market?: string
enrollStatus?: string
radius?: string
comprehensiveAddress?: string
}
/**
*

@ -0,0 +1,12 @@
import httpClient from '@/utils/axios'
import type { ApiResult } from '@/api/types'
import type { shopPageParam } from './types'
export function pageQueryAll(pageParams: shopPageParam) {
return httpClient.get<ApiResult>('/store/queryAll', {
params: pageParams
})
}
export function storeUserQueryAll() {
return httpClient.get<ApiResult>('/storeUser/queryAll', {})
}

@ -0,0 +1,19 @@
import type { PageParam } from '@/api/types'
export type shopParam = {
storeName?: string
storeType?: number
province?: string
city?: string
county?: string
createStartTime?: string
createEndTime?: string
}
export type shopPageParam = shopParam & PageParam
export type shopDTO = shopParam & {
id: number
reservationNum?: number
storeType: number
storeStatus: number
}

@ -0,0 +1,159 @@
<template>
<!-- 头部 -->
<a-card :bordered="false" :body-style="{ paddingBottom: 0 }">
<div class="geopoliticalCustomers-title">质检分发</div>
</a-card>
<!-- 工具栏 -->
<inspection-search :loading="tableRef?.loading" @search="searchTable" />
<!-- 底部表格 -->
<pro-table
ref="tableRef"
row-key="customId"
:request="tableRequest"
:columns="columns"
:scroll="{ x: 1100 }"
:tool-bar-render="false"
class="protable"
:pagination="{ showQuickJumper: true }"
>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'companyId'">
<a>
<!-- {{ record.companyId }} -->
蘑菇
</a>
</template>
<template v-else-if="column.key === 'operate'">
<operation-group>
<a @click="handleView(record)"></a>
</operation-group>
</template>
</template>
</pro-table>
<!-- 新建预约新建/编辑弹窗 -->
<inspection-modal ref="inspectionModalRef" @submit-success="reloadTable" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
// import { message } from 'ant-design-vue'
// import { doRequest } from '@/utils/axios/request'
//
import ProTable from '#/table'
import type { ProTableInstanceExpose, TableRequest, ProColumns } from '#/table'
import { mergePageParam } from '@/utils/page-utils'
import { FormAction } from '@/hooks/form'
import inspectionModal from './inspectionModal.vue'
import inspectionSearch from './inspectionSearch.vue'
import { pageAccessLogs } from '@/api/geopoliticalCustomers'
import type {
GeopoliticalCustomersRecord,
GeopoliticalCustomersPageParam
} from '@/api/geopoliticalCustomers/types'
defineOptions({ name: 'GeopoliticalCustomers' })
//
//
const tableRef = ref<ProTableInstanceExpose>()
//ref
const inspectionModalRef = ref<InstanceType<typeof inspectionModal>>()
//
let searchParams: GeopoliticalCustomersPageParam = {}
//
const tableRequest: TableRequest = (params, sorter, filter) => {
console.log('11111111111111111')
const pageParam = mergePageParam(params, sorter, filter)
return pageAccessLogs({ ...pageParam, ...searchParams })
}
//
const reloadTable = (resetPageIndex?: boolean) => {
tableRef.value?.actionRef?.reload(resetPageIndex)
}
//
const searchTable = (params: GeopoliticalCustomersPageParam) => {
searchParams = params
reloadTable(true) // tableRequest
}
//
const handleView = (record: GeopoliticalCustomersRecord) => {
inspectionModalRef.value?.open(FormAction.OTHER, record)
}
const columns: ProColumns[] = [
{
title: '编号',
width: 80,
customRender: function ({ index }) {
return `${index + 1}`
}
},
{
title: '客户名称',
dataIndex: 'customName'
},
{
title: '联系方式',
dataIndex: 'customNid'
},
{
title: '分发状态',
dataIndex: 'enrollStatus',
customRender: function ({ record }: any) {
if (record.enrollStatus === 0) {
return h('div', '待分发')
} else if (record.enrollStatus === 1) {
return h('div', '已分发')
}
}
},
{
title: '录入日期',
dataIndex: 'createTime',
width: 230,
align: 'center',
customRender: function ({ record }: any) {
if (record.createTime) {
return record.createTime
} else if (record.createTime === null) {
return '--'
}
}
},
{
title: '录入员',
dataIndex: 'companyId'
},
{
key: 'operate',
title: '操作',
align: 'center',
width: 160,
fixed: 'right'
}
]
</script>
<style lang="less" scoped>
.geopoliticalCustomers-title {
font-size: 17px;
font-weight: 600;
color: #000;
}
//
.operationButtonArea {
padding-bottom: 20px;
}
.operationButton {
background-color: #f4f4f5;
border-radius: 5px;
color: #909399;
margin-right: 10px;
}
.editable-row-operations a {
margin-right: 8px;
}
</style>

@ -0,0 +1,305 @@
<!--
* @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @Date: 2023-09-12 13:56:02
* @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2023-09-14 17:37:10
* @FilePath: \byhl-zt\src\views\qualityInspectionDistribution\inspectionModal.vue
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
-->
<template>
<a-modal
:title="title"
:visible="visible"
:mask-closable="false"
:centered="true"
:body-style="{ paddingBottom: '8px' }"
:confirm-loading="submitLoading"
:width="650"
@cancel="handleClose"
>
<a-form
:model="formModel"
:label-col="{ sm: { span: 24 }, md: { span: 8 } }"
:wrapper-col="wrapperCol"
>
<a-row justify="start">
<a-col :span="12">
<a-form-item label="客户称呼">
<a-input v-model:value="formModel.customName" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="12">
<a-form-item label="客户联系方式">
<a-input v-model:value="formModel.customNid" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="24">
<a-form-item
label="客户地址信息"
:label-col="{ sm: { span: 24 }, md: { span: 4 } }"
:wrapper-col="{ sm: { span: 24 }, md: { span: 20 } }"
>
<a-input v-model:value="formModel.comprehensiveAddress" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<template v-for="item in formModel.customStoreVOList" :key="item.storeId">
<a-row justify="start">
<a-col xs="24" :sm="24" :md="12">
<a-form-item label="预约门店">
<a-input v-model:value="item.storeName" placeholder="请输入" readonly />
</a-form-item>
</a-col>
<a-col xs="24" :sm="24" :md="12">
<a-form-item label="预约时间">
<a-input v-model:value="item.reservationTime" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
</template>
</a-form>
<template #footer>
<div v-if="title !== '详情'">
<a-button v-if="title !== '审核'" @click="visible = false"></a-button>
<a-button type="primary" html-type="submit" style="margin-left: 10px" @click="toExamine(0)"
>重审</a-button
>
<a-button type="primary" html-type="submit" style="margin-left: 10px" @click="toExamine(1)"
>分发</a-button
>
</div>
</template>
</a-modal>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted, toRefs } from 'vue'
import { useModal } from '@/hooks/modal'
import type { FormRequestMapping } from '@/hooks/form'
import { overrideProperties } from '@/utils/bean-utils'
import { message } from 'ant-design-vue'
import type { CustomerDTO, GeopoliticalCustomersRecord } from '@/api/geopoliticalCustomers/types'
import { updateCustomerAudit } from '@/api/geopoliticalCustomers/index'
import { doRequest } from '@/utils/axios/request'
import { useAdminForm, useFormAction, FormAction, labelCol, wrapperCol } from '@/hooks/form'
import { useUserStore } from '@/stores/user-store'
//
import 'dayjs/locale/zh-cn'
// import dayjs from 'dayjs'
const emits = defineEmits<{
(e: 'submit-success'): void
}>()
//dom:rules = 'rulesData'
// const rulesData = {
// required: true,
// trigger: 'change'
// }
const { userInfo } = useUserStore()
interface ReservationShop {
customStoreId?: number
storeName: string
reservationTime: string
}
interface SysUserPageVO {
customId: number | undefined
customName: string
customNid: string
comprehensiveAddress?: string
customStoreVOList: ReservationShop[]
}
const formModel = reactive<SysUserPageVO>({
customId: undefined,
customName: '',
customNid: '',
comprehensiveAddress: '',
customStoreVOList: []
})
//
const formRule = ref({})
//
const formRequestMapping: FormRequestMapping<SysUserPageVO> = {}
const { title, visible, openModal, closeModal } = useModal()
const { formAction } = useFormAction()
const { submitLoading, resetFields } = useAdminForm(
formAction,
formRequestMapping,
formModel,
formRule
)
// onMounted(() => {})
const handleClose = () => {
submitLoading.value = false
}
const toExamine = (type: number) => {
updateCustomerAudit(formModel.customId as number, type, userInfo!.salesmanType).then(res => {
message.info(res.message)
if (res.code == 200) {
closeModal()
emits('submit-success')
}
})
}
defineExpose({
open(newFormAction: FormAction, record?: GeopoliticalCustomersRecord) {
console.log(record, 'record')
openModal()
resetFields()
if (newFormAction === FormAction.OTHER) {
title.value = '预约详情'
record!.comprehensiveAddress = `${record?.economize}${record?.market}${record?.distinguish}${record?.detailAddress}`
// record!.customStoreVOList = [
// {
// storeName: '',
// reservationTime: '2023-9-14 10:12:15'
// }
// ]
overrideProperties(formModel, record)
}
formAction.value = newFormAction
}
})
</script>
<style lang="less" scoped>
//
.weightAllocation {
.ant-form {
display: grid;
// grid-auto-flow: column;
grid-template-columns: 50% 50%;
// grid-template-rows: 50% 50%;
}
}
//
::v-deep .ant-input-number-out-of-range input {
color: #000000;
}
////////////////////////////////////////////////////////////////
.ant-list-item {
width: 330px;
}
.ant-list-item-meta-title {
font-size: 13x !important;
}
::v-deep .ant-list-item-meta-description {
font-size: 12px !important;
}
::v-deep .ant-space-item {
width: 100% !important;
}
.storeForm {
margin-top: 20px;
overflow-y: auto;
height: 100px;
}
.ant-list-item {
// align-items: unset;
width: 225px;
padding-right: 3px;
}
.ant-list-item-action > li {
// position: relative;
display: unset;
}
::v-deep .ant-list-item-action {
margin-left: 5px;
}
::v-deep .ant-list-item-meta-title {
font-size: 12px;
}
::v-deep .ant-list-item-action > li {
padding: 0 5px;
}
.ant-btn-sm {
font-size: 12px;
height: 20px;
padding: 0px 3px;
}
::v-deep .amap-overlay-text-container {
z-index: 999;
white-space: unset;
overflow: unset;
text-overflow: unset;
font-size: 15px !important;
color: rgba(0, 0, 0, 0.85) !important;
}
////
#mapContainer {
width: 100%;
height: 500px;
}
::v-deep .bubble-card {
z-index: 999999999;
position: relative;
// top: -62px;
padding: 15px 10px;
background-color: white;
border-radius: 6px;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
font-size: 13px;
width: 180px;
filter: drop-shadow(0px 0px 1px gray);
// height: 100px;
display: flex;
align-items: center;
justify-content: center;
}
.medium-card {
height: 50px;
}
.large-card {
height: 100px;
}
::v-deep .bubble-card::before {
content: '';
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
border-width: 5px;
border-style: solid;
border-color: white transparent transparent;
// transform: rotate(180deg);
// font-family: 'anticon'; /* */
// content: '\e66a'; /* Unicode close-outlined */
// color: red;
// font-size: 16px;
}
::v-deep .spanDom {
position: absolute;
top: 3px;
color: #d9d2d2;
right: 3px;
font-size: 15px;
}
</style>

@ -0,0 +1,110 @@
<template>
<a-card :bordered="false" style="margin-bottom: 16px" :body-style="{ paddingBottom: 0 }">
<a-form :model="formModel" :label-col="labelCol">
<a-row :gutter="16">
<!-- v-if="userInfoCurrent === 'ROLE_ADMIN'" -->
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="客户名称">
<a-input v-model:value="formModel.customName" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="填写时间">
<a-range-picker
v-model:value="searchTimeValue"
show-time
format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
:ranges="{
Today: [dayjs().startOf('date'), dayjs()]
}"
/>
</a-form-item>
</a-col>
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="分发门店">
<a-input v-model:value="formModel.customNid" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="分发时间">
<a-range-picker
v-model:value="searchTimeValue"
show-time
format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
:ranges="{
Today: [dayjs().startOf('date'), dayjs()]
}"
/>
</a-form-item>
</a-col>
<a-col :xl="24" :md="24" :sm="24">
<search-actions :loading="props.loading" @search="search" @reset="reset" />
</a-col>
</a-row>
</a-form>
</a-card>
</template>
<script setup lang="ts">
import { Form } from 'ant-design-vue'
import type { GeopoliticalCustomersSearch } from '@/api/geopoliticalCustomers/types'
import dayjs from 'dayjs'
import type { Dayjs } from 'dayjs'
//
import { useUserStore } from '@/stores/user-store'
const { userInfo } = useUserStore()
const userInfoCurrent = ref<string | undefined>('')
onMounted(() => {
console.log(userInfo, 'userInfo?.permissions')
// userInfoCurrent = userInfo?.roleCodes
userInfoCurrent.value = userInfo?.roleCodes?.toLocaleString()
})
const useForm = Form.useForm
// label
const labelCol = { md: { span: 6 } }
const props = withDefaults(
defineProps<{
loading?: boolean
}>(),
{ loading: false }
)
const emits = defineEmits<{
(e: 'search', params: Record<string, any>): void
}>()
const searchTimeValue = ref<[Dayjs, Dayjs]>()
const formModel = reactive<GeopoliticalCustomersSearch>({
customName: '',
customNid: '',
enrollStatus: undefined
})
const { resetFields } = useForm(formModel)
const search = () => {
const param = toRaw(formModel)
if (searchTimeValue.value && searchTimeValue.value.length == 2) {
param.startTime = searchTimeValue.value[0].format('YYYY-MM-DD HH:mm:ss')
param.endTime = searchTimeValue.value[1].format('YYYY-MM-DD HH:mm:ss')
} else {
param.startTime = ''
param.endTime = ''
}
emits('search', param)
}
const reset = () => {
//
resetFields()
//
searchTimeValue.value = undefined
search()
}
</script>

@ -0,0 +1,186 @@
<template>
<!-- 头部 -->
<a-card :bordered="false" :body-style="{ paddingBottom: 0 }">
<div class="geopoliticalCustomers-title">店铺管理</div>
</a-card>
<!-- 搜索 -->
<shop-search :loading="tableRef?.loading" @search="searchTable" />
<!-- 工具栏 -->
<a-card :bordered="false" :body-style="{ paddingBottom: 0 }">
<div class="operationButtonArea">
<a-button class="operationButton" @click="addShop"></a-button>
<a-button class="operationButton" @click="batchAddShop"></a-button>
<!-- 更多操作 -->
</div>
</a-card>
<!-- 底部表格 -->
<pro-table
ref="tableRef"
row-key="customId"
:request="tableRequest"
:columns="columns"
:scroll="{ x: 1100 }"
:tool-bar-render="false"
class="protable"
:pagination="{ showQuickJumper: true }"
>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'id'">
<a>{{ record.id }}</a>
</template>
<template v-else-if="column.key === 'operate'">
<operation-group>
<!-- <a @click="handleView(record)"></a> -->
</operation-group>
</template>
</template>
</pro-table>
<!-- 新建/编辑弹窗 -->
<shop-modal ref="shopModalRef" @submit-success="reloadTable" />
</template>
<script setup lang="ts">
import { ref } from 'vue'
// import { message } from 'ant-design-vue'
// import { doRequest } from '@/utils/axios/request'
//
import ProTable from '#/table'
import type { ProTableInstanceExpose, TableRequest, ProColumns } from '#/table'
import { mergePageParam } from '@/utils/page-utils'
import { FormAction } from '@/hooks/form'
import shopModal from './shopModal.vue'
import shopSearch from './shopSearch.vue'
import { pageQueryAll } from '@/api/shopManage'
import type {
shopDTO,
shopParam
} from '@/api/shopManage/types'
defineOptions({ name: 'GeopoliticalCustomers' })
//
//
const tableRef = ref<ProTableInstanceExpose>()
// add ref
const shopModalRef = ref<InstanceType<typeof shopModal>>()
//
let searchParams: shopParam = {}
//
const tableRequest: TableRequest = (params, sorter, filter) => {
const pageParam = mergePageParam(params, sorter, filter)
return pageQueryAll({ ...pageParam, ...searchParams })
}
//
const reloadTable = (resetPageIndex?: boolean) => {
tableRef.value?.actionRef?.reload(resetPageIndex)
}
//
const searchTable = (params: shopParam) => {
searchParams = params
reloadTable(true) // tableRequest
}
//
const addShop = () => {
console.log('00000', shopModalRef.value)
shopModalRef.value?.open(FormAction.CREATE)
}
//
const batchAddShop = () => {}
// //
// const handleView = (record: shopDTO) => {
// shopModalRef.value?.open(FormAction.OTHER, record)
// }
const columns: ProColumns[] = [
{
title: '序号',
width: 80,
dataIndex: 'id'
},
{
title: '门店名称',
dataIndex: 'storeName'
},
{
title: '门店类型',
dataIndex: 'storeType',
customRender: ({ record }: any) => {
if (record.storeType === 0) {
return h('div', '直营店')
} else if (record.storeType === 1) {
return h('div', '加盟店')
}
}
},
{
title: '门店状态',
dataIndex: 'storeStatus',
customRender: function ({ record }: any) {
if (record.storeStatus === 0) {
return h('div', '正常')
} else if (record.storeStatus === 1) {
return h('div', '未营业')
}
}
},
{
title: '营业时间',
dataIndex: 'tradeTime'
},
{
title: '总预约人数',
dataIndex: 'reservationNum',
customRender: ({ record }: any) => {
if (record.reservationNum == null) {
return h('div', 0)
} else {
return record.reservationNum
}
}
},
{
title: '创建日期',
dataIndex: 'createTime',
width: 230,
align: 'center',
customRender: function ({ record }: any) {
if (record.createTime) {
return record.createTime
} else if (record.createTime == null) {
return '--'
}
}
},
{
key: 'operate',
title: '操作',
align: 'center',
width: 160,
fixed: 'right'
}
]
</script>
<style lang="less" scoped>
.geopoliticalCustomers-title {
font-size: 17px;
font-weight: 600;
color: #000;
}
//
.operationButtonArea {
padding-bottom: 20px;
}
.operationButton {
background-color: #f4f4f5;
border-radius: 5px;
color: #909399;
margin-right: 10px;
}
.editable-row-operations a {
margin-right: 8px;
}
</style>

@ -0,0 +1,294 @@
<template>
<a-modal
:title="title"
:visible="visible"
:mask-closable="false"
:centered="true"
:body-style="{ paddingBottom: '8px' }"
:confirm-loading="submitLoading"
:width="650"
@cancel="handleClose"
>
<a-form
:model="formModel"
:label-col="{ sm: { span: 24 }, md: { span: 8 } }"
:wrapper-col="wrapperCol"
>
<a-row justify="start">
<a-col :span="12">
<a-form-item label="客户称呼">
<a-input v-model:value="formModel.customName" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="12">
<a-form-item label="客户联系方式">
<a-input v-model:value="formModel.customNid" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="24">
<a-form-item
label="客户地址信息"
:label-col="{ sm: { span: 24 }, md: { span: 4 } }"
:wrapper-col="{ sm: { span: 24 }, md: { span: 20 } }"
>
<a-input v-model:value="formModel.comprehensiveAddress" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<template v-for="item in formModel.customStoreVOList" :key="item.storeId">
<a-row justify="start">
<a-col xs="24" :sm="24" :md="12">
<a-form-item label="预约门店">
<a-input v-model:value="item.storeName" placeholder="请输入" readonly />
</a-form-item>
</a-col>
<a-col xs="24" :sm="24" :md="12">
<a-form-item label="预约时间">
<a-input v-model:value="item.reservationTime" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
</template>
</a-form>
<template #footer>
<div v-if="title !== '详情'">
<a-button v-if="title !== '审核'" @click="visible = false"></a-button>
<a-button type="primary" html-type="submit" style="margin-left: 10px" @click="toExamine(0)"
>重审</a-button
>
<a-button type="primary" html-type="submit" style="margin-left: 10px" @click="toExamine(1)"
>分发</a-button
>
</div>
</template>
</a-modal>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted, toRefs } from 'vue'
import { useModal } from '@/hooks/modal'
import type { FormRequestMapping } from '@/hooks/form'
import { overrideProperties } from '@/utils/bean-utils'
import { message } from 'ant-design-vue'
import type { CustomerDTO, GeopoliticalCustomersRecord } from '@/api/geopoliticalCustomers/types'
import { updateCustomerAudit } from '@/api/geopoliticalCustomers/index'
import { doRequest } from '@/utils/axios/request'
import { useAdminForm, useFormAction, FormAction, labelCol, wrapperCol } from '@/hooks/form'
//
import 'dayjs/locale/zh-cn'
// import dayjs from 'dayjs'
const emits = defineEmits<{
(e: 'submit-success'): void
}>()
//dom:rules = 'rulesData'
// const rulesData = {
// required: true,
// trigger: 'change'
// }
interface ReservationShop {
customStoreId?: number
storeName: string
reservationTime: string
}
interface SysUserPageVO {
customId: number | undefined
customName: string
customNid: string
comprehensiveAddress?: string
customStoreVOList: ReservationShop[]
}
const formModel = reactive<SysUserPageVO>({
customId: undefined,
customName: '',
customNid: '',
comprehensiveAddress: '',
customStoreVOList: []
})
//
const formRule = ref({})
//
const formRequestMapping: FormRequestMapping<SysUserPageVO> = {}
const { title, visible, openModal, closeModal } = useModal()
const { formAction } = useFormAction()
const { submitLoading, resetFields } = useAdminForm(
formAction,
formRequestMapping,
formModel,
formRule
)
// onMounted(() => {})
const handleClose = () => {
submitLoading.value = false
}
const toExamine = (type: number) => {
updateCustomerAudit(type).then(res => {
message.info(res.message)
if (res.code == 200) {
closeModal()
emits('submit-success')
}
})
}
defineExpose({
open(newFormAction: FormAction, record?: GeopoliticalCustomersRecord) {
console.log(record, 'record')
openModal()
resetFields()
if (newFormAction === FormAction.OTHER) {
title.value = '预约详情'
record!.comprehensiveAddress = `${record?.economize}${record?.market}${record?.distinguish}${record?.detailAddress}`
record!.customStoreVOList = [
{
storeName: '测试',
reservationTime: '2023-9-14 10:12:15'
}
]
overrideProperties(formModel, record)
}
formAction.value = newFormAction
}
})
</script>
<style lang="less" scoped>
//
.weightAllocation {
.ant-form {
display: grid;
// grid-auto-flow: column;
grid-template-columns: 50% 50%;
// grid-template-rows: 50% 50%;
}
}
//
::v-deep .ant-input-number-out-of-range input {
color: #000000;
}
////////////////////////////////////////////////////////////////
.ant-list-item {
width: 330px;
}
.ant-list-item-meta-title {
font-size: 13x !important;
}
::v-deep .ant-list-item-meta-description {
font-size: 12px !important;
}
::v-deep .ant-space-item {
width: 100% !important;
}
.storeForm {
margin-top: 20px;
overflow-y: auto;
height: 100px;
}
.ant-list-item {
// align-items: unset;
width: 225px;
padding-right: 3px;
}
.ant-list-item-action > li {
// position: relative;
display: unset;
}
::v-deep .ant-list-item-action {
margin-left: 5px;
}
::v-deep .ant-list-item-meta-title {
font-size: 12px;
}
::v-deep .ant-list-item-action > li {
padding: 0 5px;
}
.ant-btn-sm {
font-size: 12px;
height: 20px;
padding: 0px 3px;
}
::v-deep .amap-overlay-text-container {
z-index: 999;
white-space: unset;
overflow: unset;
text-overflow: unset;
font-size: 15px !important;
color: rgba(0, 0, 0, 0.85) !important;
}
////
#mapContainer {
width: 100%;
height: 500px;
}
::v-deep .bubble-card {
z-index: 999999999;
position: relative;
// top: -62px;
padding: 15px 10px;
background-color: white;
border-radius: 6px;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
font-size: 13px;
width: 180px;
filter: drop-shadow(0px 0px 1px gray);
// height: 100px;
display: flex;
align-items: center;
justify-content: center;
}
.medium-card {
height: 50px;
}
.large-card {
height: 100px;
}
::v-deep .bubble-card::before {
content: '';
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
border-width: 5px;
border-style: solid;
border-color: white transparent transparent;
// transform: rotate(180deg);
// font-family: 'anticon'; /* */
// content: '\e66a'; /* Unicode close-outlined */
// color: red;
// font-size: 16px;
}
::v-deep .spanDom {
position: absolute;
top: 3px;
color: #d9d2d2;
right: 3px;
font-size: 15px;
}
</style>

@ -0,0 +1,294 @@
<template>
<a-modal
:title="title"
:visible="visible"
:mask-closable="false"
:centered="true"
:body-style="{ paddingBottom: '8px' }"
:confirm-loading="submitLoading"
:width="650"
@cancel="handleClose"
>
<a-form
:model="formModel"
:label-col="{ sm: { span: 24 }, md: { span: 8 } }"
:wrapper-col="wrapperCol"
>
<a-row justify="start">
<a-col :span="12">
<a-form-item label="客户称呼">
<a-input v-model:value="formModel.customName" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="12">
<a-form-item label="客户联系方式">
<a-input v-model:value="formModel.customNid" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="24">
<a-form-item
label="客户地址信息"
:label-col="{ sm: { span: 24 }, md: { span: 4 } }"
:wrapper-col="{ sm: { span: 24 }, md: { span: 20 } }"
>
<a-input v-model:value="formModel.comprehensiveAddress" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
<template v-for="item in formModel.customStoreVOList" :key="item.storeId">
<a-row justify="start">
<a-col xs="24" :sm="24" :md="12">
<a-form-item label="预约门店">
<a-input v-model:value="item.storeName" placeholder="请输入" readonly />
</a-form-item>
</a-col>
<a-col xs="24" :sm="24" :md="12">
<a-form-item label="预约时间">
<a-input v-model:value="item.reservationTime" placeholder="请输入" readonly />
</a-form-item>
</a-col>
</a-row>
</template>
</a-form>
<template #footer>
<div v-if="title !== '详情'">
<a-button v-if="title !== '审核'" @click="visible = false"></a-button>
<a-button type="primary" html-type="submit" style="margin-left: 10px" @click="toExamine(0)"
>重审</a-button
>
<a-button type="primary" html-type="submit" style="margin-left: 10px" @click="toExamine(1)"
>分发</a-button
>
</div>
</template>
</a-modal>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted, toRefs } from 'vue'
import { useModal } from '@/hooks/modal'
import type { FormRequestMapping } from '@/hooks/form'
import { overrideProperties } from '@/utils/bean-utils'
import { message } from 'ant-design-vue'
import type { CustomerDTO, GeopoliticalCustomersRecord } from '@/api/geopoliticalCustomers/types'
import { updateCustomerAudit } from '@/api/geopoliticalCustomers/index'
import { doRequest } from '@/utils/axios/request'
import { useAdminForm, useFormAction, FormAction, labelCol, wrapperCol } from '@/hooks/form'
//
import 'dayjs/locale/zh-cn'
// import dayjs from 'dayjs'
const emits = defineEmits<{
(e: 'submit-success'): void
}>()
//dom:rules = 'rulesData'
// const rulesData = {
// required: true,
// trigger: 'change'
// }
interface ReservationShop {
customStoreId?: number
storeName: string
reservationTime: string
}
interface SysUserPageVO {
customId: number | undefined
customName: string
customNid: string
comprehensiveAddress?: string
customStoreVOList: ReservationShop[]
}
const formModel = reactive<SysUserPageVO>({
customId: undefined,
customName: '',
customNid: '',
comprehensiveAddress: '',
customStoreVOList: []
})
//
const formRule = ref({})
//
const formRequestMapping: FormRequestMapping<SysUserPageVO> = {}
const { title, visible, openModal, closeModal } = useModal()
const { formAction } = useFormAction()
const { submitLoading, resetFields } = useAdminForm(
formAction,
formRequestMapping,
formModel,
formRule
)
// onMounted(() => {})
const handleClose = () => {
submitLoading.value = false
}
const toExamine = (type: number) => {
updateCustomerAudit(type).then(res => {
message.info(res.message)
if (res.code == 200) {
closeModal()
emits('submit-success')
}
})
}
defineExpose({
open(newFormAction: FormAction, record?: GeopoliticalCustomersRecord) {
console.log(record, 'record')
openModal()
resetFields()
if (newFormAction === FormAction.OTHER) {
title.value = '预约详情'
record!.comprehensiveAddress = `${record?.economize}${record?.market}${record?.distinguish}${record?.detailAddress}`
record!.customStoreVOList = [
{
storeName: '测试',
reservationTime: '2023-9-14 10:12:15'
}
]
overrideProperties(formModel, record)
}
formAction.value = newFormAction
}
})
</script>
<style lang="less" scoped>
//
.weightAllocation {
.ant-form {
display: grid;
// grid-auto-flow: column;
grid-template-columns: 50% 50%;
// grid-template-rows: 50% 50%;
}
}
//
::v-deep .ant-input-number-out-of-range input {
color: #000000;
}
////////////////////////////////////////////////////////////////
.ant-list-item {
width: 330px;
}
.ant-list-item-meta-title {
font-size: 13x !important;
}
::v-deep .ant-list-item-meta-description {
font-size: 12px !important;
}
::v-deep .ant-space-item {
width: 100% !important;
}
.storeForm {
margin-top: 20px;
overflow-y: auto;
height: 100px;
}
.ant-list-item {
// align-items: unset;
width: 225px;
padding-right: 3px;
}
.ant-list-item-action > li {
// position: relative;
display: unset;
}
::v-deep .ant-list-item-action {
margin-left: 5px;
}
::v-deep .ant-list-item-meta-title {
font-size: 12px;
}
::v-deep .ant-list-item-action > li {
padding: 0 5px;
}
.ant-btn-sm {
font-size: 12px;
height: 20px;
padding: 0px 3px;
}
::v-deep .amap-overlay-text-container {
z-index: 999;
white-space: unset;
overflow: unset;
text-overflow: unset;
font-size: 15px !important;
color: rgba(0, 0, 0, 0.85) !important;
}
////
#mapContainer {
width: 100%;
height: 500px;
}
::v-deep .bubble-card {
z-index: 999999999;
position: relative;
// top: -62px;
padding: 15px 10px;
background-color: white;
border-radius: 6px;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
font-size: 13px;
width: 180px;
filter: drop-shadow(0px 0px 1px gray);
// height: 100px;
display: flex;
align-items: center;
justify-content: center;
}
.medium-card {
height: 50px;
}
.large-card {
height: 100px;
}
::v-deep .bubble-card::before {
content: '';
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
border-width: 5px;
border-style: solid;
border-color: white transparent transparent;
// transform: rotate(180deg);
// font-family: 'anticon'; /* */
// content: '\e66a'; /* Unicode close-outlined */
// color: red;
// font-size: 16px;
}
::v-deep .spanDom {
position: absolute;
top: 3px;
color: #d9d2d2;
right: 3px;
font-size: 15px;
}
</style>

@ -0,0 +1,517 @@
<template>
<a-modal
:title="title"
:visible="visible"
:mask-closable="false"
:centered="true"
:body-style="{ paddingBottom: '8px' }"
:confirm-loading="submitLoading"
:width="650"
@cancel="handleClose"
>
<a-form
:model="formModel"
:label-col="{ sm: { span: 24 }, md: { span: 8 } }"
:wrapper-col="wrapperCol"
>
<a-row justify="start">
<a-col :span="24">
<a-form-item
label="门店名称"
:label-col="{ sm: { span: 24 }, md: { span: 4 } }"
:wrapper-col="{ sm: { span: 24 }, md: { span: 20 } }"
:rules="[{ required: true, message: '请选择输入门店名称', trigger: ['blur'] }]"
>
<a-input v-model:value="formModel.storeName" placeholder="请输入" />
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="12">
<a-form-item
label="门店类型"
:rules="[{ required: true, message: '请选择门店类型', trigger: ['blur'] }]"
>
<a-select v-model:value="formModel.storeType">
<a-select-option :value="0">直营店</a-select-option>
<a-select-option :value="1">加盟店</a-select-option>
</a-select>
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="12">
<a-form-item
label="门店状态"
:rules="[{ required: true, message: '请选择门店状态', trigger: ['blur'] }]"
>
<a-radio-group v-model:value="formModel.storeStatus">
<a-radio :value="0">正常</a-radio>
<a-radio :value="1">未营业</a-radio>
</a-radio-group>
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="12">
<a-form-item
label="营业时间"
:rules="[{ required: true, message: '请选择营业时间', trigger: ['blur'] }]"
>
<a-time-range-picker v-model:value="formModel.tradeTime" />
</a-form-item>
</a-col>
</a-row>
<!-- <a-row justify="start">
<a-col :span="12">
<a-form-item
label="承接销售"
:rules="[{ required: true, message: '请选择承接销售', trigger: ['blur'] }]"
>
<a-select
v-model:value="formModel.storeType"
:options="userList"
placeholder="请选择承接销售"
/>
</a-form-item>
</a-col>
</a-row> -->
<a-row :gutter="16">
<a-col :xl="14" :md="14" :sm="14">
<a-form-item
label="门店地址"
:label-col="{ sm: { span: 24 }, md: { span: 7 } }"
:wrapper-col="{ sm: { span: 24 }, md: { span: 17 } }"
:rules="[{ required: true, message: '请选择地址信息', trigger: ['blur', 'change'] }]"
name="address"
>
<a-cascader
v-model:value="formModel.address"
:options="provincesAndCitiesAndAutonomousOptions"
placeholder="请选择"
:show-search="{ filter }"
style="margin-right: 20px"
:disabled="title === '详情'"
class="readonly-cascader"
/>
</a-form-item>
</a-col>
<a-col :xl="10" :md="10" :sm="10">
<a-form-item
:rules="[{ required: true, message: '请输入小区名称', trigger: 'change' }]"
name="detailAddress"
>
<div class="fields">
<a-input
v-model:value="formModel.detail"
allow-clear
placeholder="请输入小区名称"
:readonly="title === '详情'"
/>
<a-button type="primary" @click="match"></a-button>
</div>
</a-form-item>
</a-col>
</a-row>
<a-row justify="start">
<a-col :span="24">
<div class="clueImport-page">
<div class="drawStation">
<div class="input"></div>
<div id="draw-station-container">
<!-- <div
v-if="listData.length > 0"
id="aa"
style="
position: absolute;
left: 0;
top: 0;
background-color: #fff;
width: 235px;
overflow-y: auto;
"
@scroll="scrollClick"
>
<a-list item-layout="horizontal" :data-source="listData">
<template #renderItem="{ item }">
<a-list-item @click="storeItemClick(item)">
<a-list-item-meta :description="item.description">
<template #title>
<a :href="item.href" target="_blank">{{ item.title }}</a>
</template>
</a-list-item-meta>
<template #actions>
<img width="35" height="35" alt="logo" :src="item.href" />
<a-button size="small" :disabled="item.disabled" @click="addStore(item)"
>添加</a-button
>
</template>
</a-list-item>
</template>
</a-list>
</div> -->
</div>
</div>
</div>
</a-col>
</a-row>
</a-form>
</a-modal>
</template>
<script setup lang="ts">
import { reactive, ref, onMounted, toRefs } from 'vue'
import { useModal } from '@/hooks/modal'
import type { FormRequestMapping } from '@/hooks/form'
import { overrideProperties } from '@/utils/bean-utils'
import { message } from 'ant-design-vue'
// import type { shopDTO } from '@/api/geopoliticalCustomers/types'
import { storeUserQueryAll } from '@/api/shopManage/index'
import { doRequest } from '@/utils/axios/request'
import { provincesAndCitiesAndAutonomousRegions } from '@/utils/geopolitical-customers'
import type { ShowSearchType } from 'ant-design-vue/es/cascader'
import { useAdminForm, useFormAction, FormAction, labelCol, wrapperCol } from '@/hooks/form'
//
import 'dayjs/locale/zh-cn'
import { reverse } from 'dns'
import { useUserStore } from '@/stores/user-store'
// import dayjs from 'dayjs'
const emits = defineEmits<{
(e: 'submit-success'): void
}>()
const { userInfo } = useUserStore()
declare const AMap: any
interface ReservationShop {
customStoreId?: number
storeName: string
reservationTime: string
}
interface shopDetailVO {
storeName: string
storeType: number | string
storeStatus: number | string
detail: string
address: string
tradeTime: string[]
tradeStartTime: string
tradeEndTime: string
longitude: number
latitude: number
}
const formModel = reactive<shopDetailVO>({
storeName: '',
storeType: '',
storeStatus: '',
detail: '',
address: '',
tradeTime: [],
tradeStartTime: '',
tradeEndTime: '',
longitude: 0,
latitude: 0
})
const companyOptions = reactive({})
const userList: any = reactive([])
//
const formRule = ref({})
const provincesAndCitiesAndAutonomousOptions: any = ref([])
//
const formRequestMapping: FormRequestMapping<shopDetailVO> = {}
const { title, visible, openModal, closeModal } = useModal()
const { formAction } = useFormAction()
const { submitLoading, resetFields } = useAdminForm(
formAction,
formRequestMapping,
formModel,
formRule
)
onMounted(() => {
provincesAndCitiesAndAutonomousOptions.value = provincesAndCitiesAndAutonomousRegions
// selectUserList()
})
const filter: ShowSearchType['filter'] = (val, path) => {
return path.some(option => option.label.toLowerCase().indexOf(val.toLowerCase()) > -1)
}
//AMap.Autocomplete
const autoComplete = ref()
//POIAMap.PlaceSearch
const placeSearch = ref()
//AMap.Marker
// Marker
const marker = ref<any>({})
//AMap.Map
const map = ref<any>({})
//使geocoder/
// AMap.GeocodergetLocation
// AMap.GeocodergetAddress
const geocoder = ref<any>({})
//
const initMap = () => {
map.value = new AMap.Map('draw-station-container', {
center: [120.1551, 30.2741], //
zoom: 13 //
})
// marker.value = new AMap.Marker({
// position: [116.397428, 39.90923] //
// })
const geolocation = new AMap.Geolocation({
enableHighAccuracy: true, // 使false
timeout: 10000, //
maximumAge: 0, // 0
showCircle: false, // true
showMarker: false, // true
zoomToAccuracy: true // true
})
geolocation.getCurrentPosition(function (status: any, result: any) {
// console.log(status, 'status')
if (status === 'complete') {
const position = result.position //
console.log('当前位置:', position)
} else {
console.log('定位失败:', result.message)
}
})
AMap.plugin('AMap.AutoComplete', function () {
// Autocomplete
const autoOptions = {
//city
input: 'tipinput'
}
autoComplete.value = new AMap.AutoComplete(autoOptions)
// geocoder.value = new AMap.Geocoder({
// city: '010' //
// })
})
// map.value.add(marker.value)
}
const selectUserList = () => {
storeUserQueryAll().then(res => {
console.log(res)
})
}
const handleClose = () => {
submitLoading.value = false
}
const match = () => {}
const toExamine = (type: number) => {
// updateCustomerAudit(type).then(res => {
// message.info(res.message)
// if (res.code == 200) {
// closeModal()
// emits('submit-success')
// }
// })
}
defineExpose({
open(newFormAction: FormAction, record?: shopDetailVO) {
console.log(record, 'record')
console.log(1111111)
openModal()
resetFields()
if (newFormAction === FormAction.CREATE) {
nextTick(() => {
initMap()
})
title.value = '添加门店'
} else if (newFormAction === FormAction.UPDATE) {
nextTick(() => {
initMap()
})
title.value = '编辑门店'
// record!.comprehensiveAddress = `${record?.economize}${record?.market}${record?.distinguish}${record?.detailAddress}`
// record!.customStoreVOList = [
// {
// storeName: '',
// reservationTime: '2023-9-14 10:12:15'
// }
// ]
overrideProperties(formModel, record)
}
formAction.value = newFormAction
}
})
</script>
<style lang="less" scoped>
.fields {
display: flex;
width: 127%;
button {
margin-left: 3px;
}
}
.drawStation {
#draw-station-container {
padding: 0px;
margin: 0px;
width: 100%;
min-height: 400px;
max-height: 800px;
// height: calc(100vh - 184px);
}
#aa {
padding: 0px;
margin: 0px;
// width: 100%;
height: calc(100% - 20px);
min-height: 300px;
max-height: 800px;
// height: calc(100vh - 214px);
}
.input {
display: flex;
justify-content: space-between;
margin-bottom: 10px;
.el-input {
width: 220px;
margin-right: 20px;
}
}
}
//
.weightAllocation {
.ant-form {
display: grid;
// grid-auto-flow: column;
grid-template-columns: 50% 50%;
// grid-template-rows: 50% 50%;
}
}
//
::v-deep .ant-input-number-out-of-range input {
color: #000000;
}
////////////////////////////////////////////////////////////////
.ant-list-item {
width: 330px;
}
.ant-list-item-meta-title {
font-size: 13x !important;
}
::v-deep .ant-list-item-meta-description {
font-size: 12px !important;
}
::v-deep .ant-space-item {
width: 100% !important;
}
.storeForm {
margin-top: 20px;
overflow-y: auto;
height: 100px;
}
.ant-list-item {
// align-items: unset;
width: 225px;
padding-right: 3px;
}
.ant-list-item-action > li {
// position: relative;
display: unset;
}
::v-deep .ant-list-item-action {
margin-left: 5px;
}
::v-deep .ant-list-item-meta-title {
font-size: 12px;
}
::v-deep .ant-list-item-action > li {
padding: 0 5px;
}
.ant-btn-sm {
font-size: 12px;
height: 20px;
padding: 0px 3px;
}
::v-deep .amap-overlay-text-container {
z-index: 999;
white-space: unset;
overflow: unset;
text-overflow: unset;
font-size: 15px !important;
color: rgba(0, 0, 0, 0.85) !important;
}
////
#mapContainer {
width: 100%;
height: 500px;
}
::v-deep .bubble-card {
z-index: 999999999;
position: relative;
// top: -62px;
padding: 15px 10px;
background-color: white;
border-radius: 6px;
box-shadow: 0 0 4px rgba(0, 0, 0, 0.1);
font-size: 13px;
width: 180px;
filter: drop-shadow(0px 0px 1px gray);
// height: 100px;
display: flex;
align-items: center;
justify-content: center;
}
.medium-card {
height: 50px;
}
.large-card {
height: 100px;
}
::v-deep .bubble-card::before {
content: '';
position: absolute;
bottom: -10px;
left: 50%;
transform: translateX(-50%);
border-width: 5px;
border-style: solid;
border-color: white transparent transparent;
// transform: rotate(180deg);
// font-family: 'anticon'; /* */
// content: '\e66a'; /* Unicode close-outlined */
// color: red;
// font-size: 16px;
}
::v-deep .spanDom {
position: absolute;
top: 3px;
color: #d9d2d2;
right: 3px;
font-size: 15px;
}
</style>

@ -0,0 +1,110 @@
<template>
<a-card :bordered="false" style="margin-bottom: 16px" :body-style="{ paddingBottom: 0 }">
<a-form :model="formModel" :label-col="labelCol">
<a-row :gutter="16">
<!-- v-if="userInfoCurrent === 'ROLE_ADMIN'" -->
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="客户名称">
<a-input v-model:value="formModel.customName" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="填写时间">
<a-range-picker
v-model:value="searchTimeValue"
show-time
format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
:ranges="{
Today: [dayjs().startOf('date'), dayjs()]
}"
/>
</a-form-item>
</a-col>
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="分发门店">
<a-input v-model:value="formModel.customNid" placeholder="请输入" />
</a-form-item>
</a-col>
<a-col :xl="8" :md="12" :sm="24">
<a-form-item label="分发时间">
<a-range-picker
v-model:value="searchTimeValue"
show-time
format="YYYY-MM-DD HH:mm:ss"
style="width: 100%"
:ranges="{
Today: [dayjs().startOf('date'), dayjs()]
}"
/>
</a-form-item>
</a-col>
<a-col :xl="24" :md="24" :sm="24">
<search-actions :loading="props.loading" @search="search" @reset="reset" />
</a-col>
</a-row>
</a-form>
</a-card>
</template>
<script setup lang="ts">
import { Form } from 'ant-design-vue'
import type { GeopoliticalCustomersSearch } from '@/api/geopoliticalCustomers/types'
import dayjs from 'dayjs'
import type { Dayjs } from 'dayjs'
//
import { useUserStore } from '@/stores/user-store'
const { userInfo } = useUserStore()
const userInfoCurrent = ref<string | undefined>('')
onMounted(() => {
console.log(userInfo, 'userInfo?.permissions')
// userInfoCurrent = userInfo?.roleCodes
userInfoCurrent.value = userInfo?.roleCodes?.toLocaleString()
})
const useForm = Form.useForm
// label
const labelCol = { md: { span: 6 } }
const props = withDefaults(
defineProps<{
loading?: boolean
}>(),
{ loading: false }
)
const emits = defineEmits<{
(e: 'search', params: Record<string, any>): void
}>()
const searchTimeValue = ref<[Dayjs, Dayjs]>()
const formModel = reactive<GeopoliticalCustomersSearch>({
customName: '',
customNid: '',
enrollStatus: undefined
})
const { resetFields } = useForm(formModel)
const search = () => {
const param = toRaw(formModel)
if (searchTimeValue.value && searchTimeValue.value.length == 2) {
param.startTime = searchTimeValue.value[0].format('YYYY-MM-DD HH:mm:ss')
param.endTime = searchTimeValue.value[1].format('YYYY-MM-DD HH:mm:ss')
} else {
param.startTime = ''
param.endTime = ''
}
emits('search', param)
}
const reset = () => {
//
resetFields()
//
searchTimeValue.value = undefined
search()
}
</script>
Loading…
Cancel
Save