更新文件

This commit is contained in:
mkm 2023-07-31 17:39:32 +08:00
parent e5a8b7d6d4
commit 981980d06a
5 changed files with 1019 additions and 129 deletions

View File

@ -0,0 +1,93 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-form class="mb-[-16px]" :model="queryParams" inline>
<el-form-item label="公司名称" prop="company_name">
<el-input
class="w-[280px]"
v-model="queryParams.company_name"
clearable
placeholder="请输入公司名称"
/>
</el-form-item>
<el-form-item label="公司类型" prop="company_type">
<el-input
class="w-[280px]"
v-model="queryParams.company_type"
clearable
placeholder="请输入公司类型"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button>
</el-form-item>
</el-form>
</el-card>
<el-card class="!border-none" v-loading="pager.loading" shadow="never">
<div class="mt-4">
<el-table :data="pager.lists" @cell-click="handleCurrentChange">
<el-table-column label="签约公司" property="company_name" />
<el-table-column label="公司类型" property="company_type" />
<el-table-column label="区县" property="area" />
<el-table-column label="乡镇" property="street" />
<el-table-column label="主联系人" property="master_name" />
<el-table-column label="联系方式" property="master_phone" />
<el-table-column label="片区经理" property="area_manager" />
<el-table-column label="是否签约" property="is_contract" />
</el-table>
</div>
<div class="flex mt-4 justify-end">
<pagination v-model="pager" @change="getLists" />
</div>
</el-card>
</div>
</template>
<script lang="ts" setup name="companyLists">
import { usePaging } from '@/hooks/usePaging'
import { useDictData } from '@/hooks/useDictOptions'
import { apiCompanyLists, apiCompanyDelete } from '@/api/company'
import { defineEmits } from 'vue'
//
const queryParams = reactive({
level_two: '',
level_one: '',
company_name: '',
organization_code: '',
city: '',
area: '',
street: '',
company_type: '',
master_name: '',
master_position: '',
master_phone: '',
master_email: '',
other_contacts: '',
area_manager: '',
is_contract: '',
account: '',
password: '',
deposit: '',
deposit_time: '',
qualification: '',
status: ''
})
//
const emits = defineEmits(['customEvent'])
//
const handleCurrentChange = (value: any) => {
emits('customEvent', value)
}
//
const { pager, getLists, resetParams, resetPage } = usePaging({
fetchFun: apiCompanyLists,
params: queryParams
})
getLists()
</script>

View File

@ -63,11 +63,7 @@
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column label="id" prop="id" show-overflow-tooltip /> <el-table-column label="id" prop="id" show-overflow-tooltip />
<el-table-column label="名称" prop="name" show-overflow-tooltip /> <el-table-column label="名称" prop="name" show-overflow-tooltip />
<el-table-column label="上级id" prop="pid"> <el-table-column label="上级id" prop="pid" show-overflow-tooltip />
<template #default="{ row }">
<dict-value :options="dictData.pid" :value="row.pid" />
</template>
</el-table-column>
<el-table-column label="排序" prop="sort" show-overflow-tooltip /> <el-table-column label="排序" prop="sort" show-overflow-tooltip />
<el-table-column label="状态" prop="status"> <el-table-column label="状态" prop="status">
<template #default="{ row }"> <template #default="{ row }">

View File

@ -0,0 +1,194 @@
<template>
<div>
<el-card class="!border-none" shadow="never">
<el-page-header content="用户详情" @back="$router.back()" />
</el-card>
<el-card class="mt-4 !border-none" header="基本资料" shadow="never">
<el-form ref="formRef" class="ls-form" :model="formData" label-width="120px">
<div class="bg-page flex py-5 mb-10 items-center">
<div class="basis-40 flex flex-col justify-center items-center">
<div class="mb-2 text-tx-regular">用户头像</div>
<el-avatar :src="formData.avatar" :size="58" />
</div>
<div class="basis-40 flex flex-col justify-center items-center">
<div class="text-tx-regular">账户余额</div>
<div class="mt-2 flex items-center">
¥{{ formData.user_money }}
<el-button
v-perms="['user.user/adjustMoney']"
type="primary"
link
@click="handleAdjust(formData.user_money)"
>
调整
</el-button>
</div>
</div>
</div>
<el-col :span="24" class="el-card pt-6">
<el-row>
<el-col :span="12">
<el-form-item label="用户编号:"> {{ formData.sn }} </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="用户昵称:">
{{ formData.nickname }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="账号:">
{{ formData.account }}
<popover-input
class="ml-[10px]"
@confirm="handleEdit($event, 'account')"
:limit="32"
v-perms="['user.user/edit']"
>
<el-button type="primary" link>
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="真实姓名:">
{{ formData.real_name || '-' }}
<popover-input
class="ml-[10px]"
@confirm="handleEdit($event, 'real_name')"
:limit="32"
v-perms="['user.user/edit']"
>
<el-button type="primary" link>
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别:">
{{ formData.sex }}
<popover-input
class="ml-[10px]"
type="select"
:options="[
{
label: '未知',
value: 0
},
{
label: '男',
value: 1
},
{
label: '女',
value: 2
}
]"
@confirm="handleEdit($event, 'sex')"
v-perms="['user.user/edit']"
>
<el-button type="primary" link>
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系电话:">
{{ formData.mobile || '-' }}
<popover-input
class="ml-[10px]"
type="number"
@confirm="handleEdit($event, 'mobile')"
v-perms="['user.user/edit']"
>
<el-button type="primary" link>
<icon name="el-icon-EditPen" />
</el-button>
</popover-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="注册来源:"> {{ formData.channel }} </el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="注册时间:">
{{ formData.create_time }}
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="最近登录时间:">
{{ formData.login_time }}
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-form>
</el-card>
<account-adjust
v-model:show="adjustState.show"
:value="adjustState.value"
@confirm="handleConfirmAdjust"
/>
</div>
</template>
<script lang="ts" setup name="consumerDetail">
import type { FormInstance } from 'element-plus'
import { adjustMoney, getUserDetail, userEdit } from '@/api/consumer'
import { isEmpty } from '@/utils/util'
import AccountAdjust from '../components/account-adjust.vue'
const route = useRoute()
const formData = reactive({
avatar: '',
channel: '',
create_time: '',
login_time: '',
mobile: '',
nickname: '',
real_name: 0,
sex: 0,
sn: '',
account: '',
user_money: ''
})
const adjustState = reactive({
show: false,
value: ''
})
const formRef = shallowRef<FormInstance>()
const getDetails = async () => {
const data = await getUserDetail({
id: route.query.id
})
Object.keys(formData).forEach((key) => {
//@ts-ignore
formData[key] = data[key]
})
}
const handleEdit = async (value: string, field: string) => {
if (isEmpty(value)) return
await userEdit({
id: route.query.id,
field,
value
})
getDetails()
}
const handleAdjust = (value: string) => {
adjustState.show = true
adjustState.value = value
}
const handleConfirmAdjust = async (value: any) => {
await adjustMoney({ user_id: route.query.id, ...value })
adjustState.show = false
getDetails()
}
getDetails()
</script>

View File

@ -3,101 +3,428 @@
<el-card class="!border-none" shadow="never"> <el-card class="!border-none" shadow="never">
<el-page-header content="用户详情" @back="$router.back()" /> <el-page-header content="用户详情" @back="$router.back()" />
</el-card> </el-card>
<el-card class="mt-4 !border-none" header="基本资料" shadow="never"> <el-card class="mt-4 !border-none" shadow="never">
<el-form ref="formRef" class="ls-form" :model="formData" label-width="120px"> <el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules">
<div class="bg-page flex py-5 mb-10 items-center"> <div style="font-size: 1.2rem; margin: 10px 0">基本信息创建</div>
<div class="basis-40 flex flex-col justify-center items-center"> <div class="headimg">
<div class="mb-2 text-tx-regular">用户头像</div> <el-upload
<el-avatar :src="formData.avatar" :size="58" /> :disabled="isCheck"
</div> v-model="formData.avatar"
<div class="basis-40 flex flex-col justify-center items-center"> class="avatar-uploader-head"
<div class="text-tx-regular">账户余额</div> :data="{ cid: 1 }"
<div class="mt-2 flex items-center"> action="https://worker-task.lihaink.cn/api/upload/image"
¥{{ formData.user_money }} :show-file-list="false"
<el-button :on-success="handleAvatarSuccessAvatar"
v-perms="['user.user/adjustMoney']" >
type="primary" <img v-if="formData.avatar" :src="formData.avatar" class="avatar" />
link <el-icon v-else class="avatar-uploader-icon">
@click="handleAdjust(formData.user_money)" <Plus />
</el-icon>
</el-upload>
</div>
<el-col class="pt-6 !border-none">
<el-row>
<el-col :span="11">
<el-form-item label="姓名" prop="nickname">
<el-input
:disabled="isCheck"
v-model="formData.nickname"
placeholder="请输入姓名"
clearable
:style="{ width: '100%' }"
></el-input>
</el-form-item>
</el-col>
<el-col :span="13">
<el-form-item label="性别" prop="sex">
<el-select
v-model="formData.sex"
placeholder="请选择性别"
:disabled="isCheck"
:style="{ width: '100%' }"
>
<el-option label="男" value="1" />
<el-option label="女" value="2" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="11">
<el-form-item label="身份证号" prop="id_card">
<el-input
:disabled="isCheck"
v-model="formData.id_card"
placeholder="请输入身份证号"
clearable
:style="{ width: '100%' }"
></el-input>
</el-form-item>
</el-col>
<el-col :span="13">
<el-form-item label="联系电话" prop="account">
<el-input
:disabled="isCheck"
v-model="formData.account"
placeholder="请输入联系电话"
clearable
:style="{ width: '100%' }"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-form-item label="省" prop="province" style="flex: 1">
<el-select
:disabled="isCheck"
v-model="formData.province"
placeholder="请选择省"
clearable
@change="province_change"
:style="{ width: '100%' }"
> >
调整 <el-option
</el-button> v-for="(item, index) in datas.provinceOptions"
</div> :key="index"
:label="item.province_name"
:value="item.province_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="市" prop="city" style="flex: 1">
<el-select
:disabled="isCheck"
v-model="formData.city"
placeholder="请选择市"
clearable
@change="city_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.cityOptions"
:key="index"
:label="item.city_name"
:value="item.city_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="区" prop="area" style="flex: 1">
<el-select
:disabled="isCheck"
v-model="formData.area"
placeholder="请选择区"
clearable
@change="area_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.areaOptions"
:key="index"
:label="item.area_name"
:value="item.area_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="镇" prop="street" style="flex: 1">
<el-select
:disabled="isCheck"
v-model="formData.street"
placeholder="请选择镇"
clearable
@change="street_change"
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.streetOptions"
:key="index"
:label="item.street_name"
:value="item.street_code"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="村社小队" prop="address" style="flex: 1.5">
<el-input
:disabled="isCheck"
v-model="formData.address"
placeholder="请输入村社小队"
clearable
:style="{ width: '100%' }"
></el-input>
</el-form-item>
</el-row>
</el-col>
<el-col :span="24" style="margin-top: 1vh">
<el-row>
<el-col :span="12">
<el-form-item label="签约方" prop="field130">
<el-input
:disabled="isCheck"
v-model="formData.party_a_name"
placeholder="请选择签约方"
clearable
:style="{ width: '100%' }"
@click="isCompany = true"
@clear="clearPartyA"
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-col>
<div style="font-size: 1.2rem; margin: 10px 0">资质信息</div>
<div style="display: flex; justify-content: space-between">
<div>
<el-form-item label="身份证" prop="id_card">
<el-upload
:disabled="isCheck"
v-model="formData.qualification.id_card"
class="avatar-uploader pl-3"
:data="{ cid: 1 }"
action="https://worker-task.lihaink.cn/api/upload/image"
:show-file-list="false"
:on-success="handleAvatarSuccessIdA"
>
<img
v-if="formData.qualification.id_card"
:src="formData.qualification.id_card"
class="avatar"
/>
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
<el-upload
:disabled="isCheck"
v-model="formData.qualification.id_card_b"
class="avatar-uploader pl-3"
:data="{ cid: 1 }"
action="https://worker-task.lihaink.cn/api/upload/image"
:show-file-list="false"
:on-success="handleAvatarSuccessIdB"
>
<img
v-if="formData.qualification.id_card_b"
:src="formData.qualification.id_card_b"
class="avatar"
/>
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</el-form-item>
</div>
<div>
<el-form-item label="行驶证" prop="car_card">
<el-upload
:disabled="isCheck"
v-model="formData.qualification.car_card"
class="avatar-uploader pl-3"
:data="{ cid: 1 }"
action="https://worker-task.lihaink.cn/api/upload/image"
:show-file-list="false"
:on-success="handleAvatarSuccessCarA"
>
<img
v-if="formData.qualification.car_card"
:src="formData.qualification.car_card"
class="avatar"
/>
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
<el-upload
:disabled="isCheck"
v-model="formData.qualification.car_card_b"
class="avatar-uploader pl-3"
:data="{ cid: 1 }"
action="https://worker-task.lihaink.cn/api/upload/image"
:show-file-list="false"
:on-success="handleAvatarSuccessCarB"
:before-upload="beforeAvatarUpload_two"
>
<img
v-if="formData.qualification.car_card_b"
:src="formData.qualification.car_card_b"
class="avatar"
/>
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</el-form-item>
</div>
<div>
<el-form-item label="银行卡号" prop="bank_account">
<el-upload
:disabled="isCheck"
v-model="formData.qualification.bank_account"
class="avatar-uploader pl-3"
:data="{ cid: 1 }"
action="https://worker-task.lihaink.cn/api/upload/image"
:show-file-list="false"
:on-success="handleAvatarSuccessBankA"
:before-upload="beforeAvatarUpload_three"
>
<img
v-if="formData.qualification.bank_account"
:src="formData.qualification.bank_account"
class="avatar"
/>
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
<el-upload
:disabled="isCheck"
v-model="formData.qualification.bank_account_b"
class="avatar-uploader pl-3"
:data="{ cid: 1 }"
action="https://worker-task.lihaink.cn/api/upload/image"
:show-file-list="false"
:on-success="handleAvatarSuccessBankB"
:before-upload="beforeAvatarUpload_three"
>
<img
v-if="formData.qualification.bank_account_b"
:src="formData.qualification.bank_account_b"
class="avatar"
/>
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
</el-upload>
</el-form-item>
</div> </div>
</div> </div>
<el-form-item label="用户编号:"> {{ formData.sn }} </el-form-item> <template v-if="disabledPartyA">
<el-form-item label="用户昵称:"> <el-col :span="24">
{{ formData.nickname }} <el-row>
</el-form-item> <el-col :span="12">
<el-form-item label="账号:"> <el-form-item label="签约姓名" prop="name">
{{ formData.account }} <el-input
<popover-input v-model="formData.name"
class="ml-[10px]" placeholder="请输入签约姓名"
@confirm="handleEdit($event, 'account')" :disabled="true"
:limit="32" clearable
v-perms="['user.user/edit']" :style="{ width: '100%' }"
> ></el-input>
<el-button type="primary" link> </el-form-item>
<icon name="el-icon-EditPen" /> </el-col>
</el-button> <el-col :span="12">
</popover-input> <el-form-item label="性别" prop="sex">
</el-form-item> <el-input
<el-form-item label="真实姓名:"> placeholder="请输入性别"
{{ formData.real_name || '-' }} :disabled="true"
<popover-input clearable
class="ml-[10px]" :style="{ width: '100%' }"
@confirm="handleEdit($event, 'real_name')" :value="formData.sex == 1 ? '男' : '女'"
:limit="32" ></el-input>
v-perms="['user.user/edit']" </el-form-item>
> </el-col>
<el-button type="primary" link> <el-col :span="12">
<icon name="el-icon-EditPen" /> <el-form-item label="身份证号" prop="id_card">
</el-button> <el-input
</popover-input> v-model="formData.id_card"
</el-form-item> placeholder="请输入身份证号"
<el-form-item label="性别:"> :disabled="true"
{{ formData.sex }} clearable
<popover-input :style="{ width: '100%' }"
class="ml-[10px]" ></el-input>
type="select" </el-form-item>
:options="[ </el-col>
{ <el-col :span="12">
label: '未知', <el-form-item label="联系电话" prop="account">
value: 0 <el-input
}, v-model="formData.account"
{ placeholder="请输入联系电话"
label: '男', :disabled="true"
value: 1 clearable
}, :style="{ width: '100%' }"
{ ></el-input>
label: '女', </el-form-item>
value: 2 </el-col>
} <el-col :span="12" v-if="formData.name">
]" <el-form-item label="账号">
@confirm="handleEdit($event, 'sex')" <el-input
v-perms="['user.user/edit']" v-model="formData.account"
> :disabled="true"
<el-button type="primary" link> clearable
<icon name="el-icon-EditPen" /> :style="{ width: '100%' }"
</el-button> ></el-input>
</popover-input> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="联系电话:"> <el-col :span="12" v-if="formData.name">
{{ formData.mobile || '-' }} <el-form-item label="初始密码" prop="password">
<popover-input <el-input
class="ml-[10px]" :model-value="'m' + formData.account"
type="number" :disabled="true"
@confirm="handleEdit($event, 'mobile')" clearable
v-perms="['user.user/edit']" :style="{ width: '100%' }"
> ></el-input>
<el-button type="primary" link> </el-form-item>
<icon name="el-icon-EditPen" /> </el-col>
</el-button> <el-col :span="24">
</popover-input> <el-form-item label="合同类型" prop="contract_type">
</el-form-item> <el-col :span="24">
<el-form-item label="注册来源:"> {{ formData.channel }} </el-form-item> <el-select
<el-form-item label="注册时间:"> {{ formData.create_time }} </el-form-item> :disabled="isCheck"
<el-form-item label="最近登录时间:"> {{ formData.login_time }} </el-form-item> v-model="formData.contract_type"
placeholder="请选择合同类型"
clearable
:style="{ width: '100%' }"
>
<el-option
v-for="(item, index) in datas.contract_type"
:key="index"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-col>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="24" v-if="!isCheck && mode != 'view'">
<el-form-item label="合同上传" prop="field127">
<el-upload
:headers="{ Token: userStore.token }"
v-model:file-list="fileList"
class="upload-demo"
action="https://worker-task.lihaink.cn/adminapi/upload/file"
:on-success="handleAvatarSuccess_four"
multiple
:limit="1"
>
<el-button type="primary">上传</el-button>
</el-upload>
</el-form-item>
</el-col>
</template>
<el-col :span="24" v-if="mode == 'view'">
<el-form-item label="合同地址">
<el-link type="success" :href="formData.contract.url" target="_blank"
>在线查看</el-link
>
</el-form-item>
</el-col>
<el-col :span="24" class="pt-6">
<el-form-item label prop="field139">
<el-button v-if="isEdit" type="primary" size="medium" @click="create"
>修改</el-button
>
<el-button
v-else
type="primary"
:disabled="isDisabled"
size="medium"
@click="create"
>创建</el-button
>
</el-form-item>
</el-col>
</el-form> </el-form>
</el-card> </el-card>
@ -106,35 +433,96 @@
:value="adjustState.value" :value="adjustState.value"
@confirm="handleConfirmAdjust" @confirm="handleConfirmAdjust"
/> />
<el-dialog v-model="isCompany" title="选择签约方" width="60%">
<DialogIndex @customEvent="customEvent" />
</el-dialog>
</div> </div>
</template> </template>
<script lang="ts" setup name="consumerDetail"> <script lang="ts" setup name="consumerDetail">
import type { FormInstance } from 'element-plus' import type { FormInstance, UploadProps, ElMessage, UploadUserFile } from 'element-plus'
import { adjustMoney, getUserDetail, userEdit } from '@/api/consumer' import { adjustMoney, getUserDetail, userEdit } from '@/api/consumer'
import { apiCityList, apiAreaList, apiStreetList, apiProvinceList } from '@/api/common'
import { dictDataLists } from '@/api/setting/dict'
import DialogIndex from '@/components/dialog_index.vue'
import { isEmpty } from '@/utils/util' import { isEmpty } from '@/utils/util'
import AccountAdjust from '../components/account-adjust.vue' import AccountAdjust from '../components/account-adjust.vue'
import useMultipleTabs from '@/hooks/useMultipleTabs'
import useUserStore from '@/stores/modules/user'
const { removeTab } = useMultipleTabs()
const router = useRouter()
const route = useRoute() const route = useRoute()
const formData = reactive({ const formData = reactive({
avatar: '', id: '',
channel: '', sex: '',
create_time: '', id_card: '',
login_time: '',
mobile: '',
nickname: '', nickname: '',
real_name: 0, province: '',
sex: 0, city: '',
sn: '', area: '',
street: '',
address: '',
account: '', account: '',
user_money: '' is_contract: 0,
//
party_a_name: '',
party_a: '',
qualification: {
id_card: '',
id_card_b: '',
car_card: '',
car_card_b: '',
bank_account: '',
bank_account_b: ''
},
//
contract_type: '',
file: '',
avatar: '',
multipoint_login: 1,
contract: {
url: ''
}
}) })
const disabledPartyA = ref(false)
const adjustState = reactive({ const adjustState = reactive({
show: false, show: false,
value: '' value: ''
}) })
const formRef = shallowRef<FormInstance>() //
const datas: any = reactive({
provinceOptions: [],
cityOptions: [],
areaOptions: [],
streetOptions: [],
dictTypeLists: [],
contract_type: [],
contract: []
})
const formRef = shallowRef<FormInstance>()
const isEdit = ref(false)
const isCompany = ref(false)
const userStore = useUserStore()
function customEvent(data: any) {
isCompany.value = false
formData.party_a = data.id
formData.party_a_name = data.company_name
disabledPartyA.value = true
}
function clearPartyA() {
formData.party_a = ''
formData.party_a_name = ''
}
const getcontract_type = async () => {
const data = await dictDataLists({ type_id: 7 })
datas['contract_type'] = data['lists']
}
getcontract_type()
const getDetails = async () => { const getDetails = async () => {
const data = await getUserDetail({ const data = await getUserDetail({
id: route.query.id id: route.query.id
@ -143,6 +531,17 @@ const getDetails = async () => {
//@ts-ignore //@ts-ignore
formData[key] = data[key] formData[key] = data[key]
}) })
formData.contract_type = data.contract?.contract_type
formData.party_a_name = data.contract?.party_a_name
formData.party_a = data.contract?.party_a
formData.file = data.contract?.file
fileList.value[0] = {
url: data.contract?.file,
name: data.contract ?? '合同文件'
}
await getCityList()
await getAreaList()
await getStreetList()
} }
const handleEdit = async (value: string, field: string) => { const handleEdit = async (value: string, field: string) => {
@ -154,7 +553,103 @@ const handleEdit = async (value: string, field: string) => {
}) })
getDetails() getDetails()
} }
const fileList = ref<UploadUserFile[]>([])
// url
const handleAvatarSuccessIdA: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.qualification.id_card = response.data.uri
}
const handleAvatarSuccessAvatar: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.avatar = response.data.uri
}
const handleAvatarSuccessIdB: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.qualification.id_card_b = response.data.uri
}
const handleAvatarSuccessCarA: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.qualification.car_card = response.data.uri
}
const handleAvatarSuccessCarB: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.qualification.car_card_b = response.data.uri
}
const beforeAvatarUpload_two: UploadProps['beforeUpload'] = (rawFile) => {
return true
}
const handleAvatarSuccessBankA: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.qualification.bank_account = response.data.uri
}
const handleAvatarSuccessBankB: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.qualification.bank_account_b = response.data.uri
}
const handleAvatarSuccess_four: UploadProps['onSuccess'] = (response, uploadFile) => {
if (response.code == 0) {
ElMessage.error(response.msg)
return
}
formData.file = response.data.uri
fileList.value[0].url = response.data.uri
fileList.value[0].name = '合同文件'
}
const beforeAvatarUpload_three: UploadProps['beforeUpload'] = (rawFile) => {
return true
}
//
function province_change(value: string) {
getCityList()
}
function city_change(value: string) {
getAreaList()
}
function area_change(value: string) {
getStreetList()
}
function street_change(value: string) {
formData.street = value
}
const getProvinceList = async () => {
const data = await apiProvinceList({})
datas['provinceOptions'] = data
}
const getCityList = async () => {
const data = await apiCityList({ city: formData.province })
datas['cityOptions'] = data
}
const getAreaList = async () => {
const data = await apiAreaList({ area: formData.city })
datas['areaOptions'] = data
}
const getStreetList = async () => {
const data = await apiStreetList({ street: formData.area })
datas['streetOptions'] = data
}
const handleAdjust = (value: string) => { const handleAdjust = (value: string) => {
adjustState.show = true adjustState.show = true
adjustState.value = value adjustState.value = value
@ -164,5 +659,63 @@ const handleConfirmAdjust = async (value: any) => {
adjustState.show = false adjustState.show = false
getDetails() getDetails()
} }
const create = async () => {
await formRef.value?.validate()
const data = { ...formData }
// if (route.query.id) {
// await apiCompanyEdit(data)
// } else {
// await apiCompanyAdd(data)
// }
removeTab()
router.back()
}
getDetails() getDetails()
getProvinceList()
</script> </script>
<style lang="scss">
.headimg {
margin-top: 24px;
width: 6.2vw;
height: 7.2vw;
float: left;
overflow: hidden;
}
.avatar-uploader-head .el-upload {
width: 6.2vw;
height: 7.2vw;
background-color: #fff;
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload {
width: 9.9vw;
height: 6.3vw;
background-color: #fff;
border: 1px dashed var(--el-border-color);
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
transition: var(--el-transition-duration-fast);
}
.avatar-uploader .el-upload:hover {
border-color: var(--el-color-primary);
}
.el-icon.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 178px;
height: 178px;
text-align: center;
}
</style>

View File

@ -11,22 +11,6 @@
@keyup.enter="resetPage" @keyup.enter="resetPage"
/> />
</el-form-item> </el-form-item>
<el-form-item label="注册时间">
<daterange-picker
v-model:startTime="queryParams.create_time_start"
v-model:endTime="queryParams.create_time_end"
/>
</el-form-item>
<el-form-item label="注册来源">
<el-select class="w-[280px]" v-model="queryParams.channel">
<el-option
v-for="(item, key) in ClientMap"
:key="key"
:label="item"
:value="key"
/>
</el-select>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="resetPage">查询</el-button> <el-button type="primary" @click="resetPage">查询</el-button>
<el-button @click="resetParams">重置</el-button> <el-button @click="resetParams">重置</el-button>
@ -47,11 +31,34 @@
<el-avatar :src="row.avatar" :size="50" /> <el-avatar :src="row.avatar" :size="50" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="昵称" prop="nickname" min-width="100" />
<el-table-column label="账号" prop="account" min-width="120" /> <el-table-column label="账号" prop="account" min-width="120" />
<el-table-column label="手机号码" prop="mobile" min-width="100" /> <el-table-column label="姓名" prop="nickname" min-width="100" />
<el-table-column label="注册来源" prop="channel" min-width="100" /> <el-table-column label="联系方式" prop="mobile" min-width="100" />
<el-table-column label="注册时间" prop="create_time" min-width="120" /> <el-table-column
label="隶属公司"
prop="company_name"
min-width="180"
align="center"
>
<template #default="{ row }">
{{ row.company?.company_name || '/' }}
</template>
</el-table-column>
<el-table-column label="所在乡镇" prop="street_name" min-width="120" />
<el-table-column label="授权身份" prop="role_name" min-width="120">
<template #default="{ row }">
<span v-if="row.admin_id == row.company?.admin_id" style="color: #67c23a"
>公司后台管理人员</span
>
<span v-else style="color: #fe0000"></span>
</template>
</el-table-column>
<el-table-column label="是否签约" prop="is_contract" align="center" min-width="120">
<template #default="{ row }">
<span v-if="row.is_contract == 1" style="color: #67c23a">已签约</span>
<span v-else style="color: #fe0000">未签约</span>
</template>
</el-table-column>
<el-table-column label="操作" width="120" fixed="right"> <el-table-column label="操作" width="120" fixed="right">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-perms="['user.user/detail']" type="primary" link> <el-button v-perms="['user.user/detail']" type="primary" link>
@ -66,6 +73,42 @@
详情 详情
</router-link> </router-link>
</el-button> </el-button>
<!-- <el-button
v-if="row.root != 1"
v-perms="['auth.admin/delete']"
type="danger"
link
@click="handleDelete(row.id)"
>删除</el-button
>
<el-button
v-if="row.is_contract == 1"
v-perms="['auth.admin/abolition']"
type="danger"
link
@click="handleAbolition(row.id)"
>废除合同</el-button
>
<template v-if="row.company_id != 0 && row.is_contract == 0">
<el-button
v-perms="['auth.admin/Draftingcontracts']"
type="primary"
link
@click="
;(showPop = true),
(showConctactPop = true),
(contractId = row.id)
"
>生成个人合同</el-button
>
<el-button
v-perms="['auth.admin/postsms']"
type="primary"
link
@click=";(showPop = true), (contractId = row.id)"
>重新短信</el-button
>
</template> -->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -80,13 +123,24 @@ import { usePaging } from '@/hooks/usePaging'
import { getRoutePath } from '@/router' import { getRoutePath } from '@/router'
import { getUserList } from '@/api/consumer' import { getUserList } from '@/api/consumer'
import { ClientMap } from '@/enums/appEnums' import { ClientMap } from '@/enums/appEnums'
import feedback from '@/utils/feedback'
const queryParams = reactive({ const queryParams = reactive({
keyword: '', keyword: '',
channel: '', channel: '',
create_time_start: '', create_time_start: '',
create_time_end: '' create_time_end: ''
}) })
// const handleDelete = async (id: number) => {
// await feedback.confirm('')
// await adminDelete({ id })
// getLists()
// }
// const handleAbolition = async (id: number) => {
// await feedback.confirm('')
// await abolition({ id })
// getLists()
// }
const { pager, getLists, resetPage, resetParams } = usePaging({ const { pager, getLists, resetPage, resetParams } = usePaging({
fetchFun: getUserList, fetchFun: getUserList,
params: queryParams params: queryParams