企业端bug

parent 8c37f24e
...@@ -35,6 +35,10 @@ export const jobReleaseApi = id => instance.post(`/company/job/release/${id}`); ...@@ -35,6 +35,10 @@ export const jobReleaseApi = id => instance.post(`/company/job/release/${id}`);
// 职位下线 // 职位下线
export const jobOfflineApi = id => instance.post(`/company/job/offline/${id}`); export const jobOfflineApi = id => instance.post(`/company/job/offline/${id}`);
// 职位置顶
export const jobOfftopApi = id => instance.post(`/company/job/top/${id}`);
// 职位置顶
export const jobOffuntopApi = id => instance.post(`/company/job/untop/${id}`);
// 拒绝申请 // 拒绝申请
export const rejectApplicationApi = id => instance.post(`/company/job/rejectApplication/${id}`); export const rejectApplicationApi = id => instance.post(`/company/job/rejectApplication/${id}`);
...@@ -37,6 +37,8 @@ export const feedbackAdd = params => instance.post("/feedback/add/business", par ...@@ -37,6 +37,8 @@ export const feedbackAdd = params => instance.post("/feedback/add/business", par
//我的反馈列表 //我的反馈列表
export const feedbackList = params => instance.post("/feedback/list", params); export const feedbackList = params => instance.post("/feedback/list", params);
//获取公司申诉信息
export const appealInfo = params => instance.post("/company/appeal/info", params);
//根据id获取反馈信息 //根据id获取反馈信息
export const feedbackById = params => instance.post(`/feedback/${params}`); export const feedbackById = params => instance.post(`/feedback/${params}`);
<template> <template>
<NavBar :showIcon="false" :showTitle="true" title="动态"></NavBar> <NavBar :showIcon="false" :showTitle="true" title="动态"></NavBar>
<div class="policy"> <div class="policy">
<div class="tab-name" :enable-flex="true" :scroll-x="true"> <div class="tab-name" :style="{ position: sticky, top: contentHeight }" :enable-flex="true" :scroll-x="true">
<view :class="{ item: 1, active: active == v.id }" v-for="v in typeList" :key="v.id" @click="changeType(v)">{{ <view :class="{ item: 1, active: active == v.id }" v-for="v in typeList" :key="v.id" @click="changeType(v)">{{
v.name v.name
}}</view> }}</view>
</div> </div>
<scroll-view :scroll-y="true" class="content" @scrolltolower="feedbackListFn()"> <scroll-view :scroll-y="true" class="content" @scrolltolower="feedbackListFn()">
<wd-status-tip v-if="list.length == 0" image="../.././static/image/enmpty-dt.png" tip="暂无动态" />
<article-list :list="list"></article-list> <article-list :list="list"></article-list>
</scroll-view> </scroll-view>
</div> </div>
...@@ -16,6 +17,7 @@ ...@@ -16,6 +17,7 @@
import articleList from "@/components/articleList/index.vue"; import articleList from "@/components/articleList/index.vue";
import { getArticleListApi, getArticleTypesApi } from "@/api/article.js"; import { getArticleListApi, getArticleTypesApi } from "@/api/article.js";
import { reactive, ref } from "vue"; import { reactive, ref } from "vue";
const contentHeight = ref("100rpx");
const active = ref(""); const active = ref("");
const typeList = ref([{ id: "", name: "全部" }]); const typeList = ref([{ id: "", name: "全部" }]);
getArticleTypesApi(2).then(res => { getArticleTypesApi(2).then(res => {
...@@ -23,21 +25,30 @@ getArticleTypesApi(2).then(res => { ...@@ -23,21 +25,30 @@ getArticleTypesApi(2).then(res => {
}); });
const changeType = type => { const changeType = type => {
active.value = type.id; active.value = type.id;
pageNo = 1; refresh().then(res => {
list.value.splice(0, list.length);
flag = false;
feedbackListFn(); feedbackListFn();
});
}; };
onLoad(() => {
xma.xh.getSystemInfo({
success(res) {
// console.log('设备信息', res); // 设备信息
}
});
xma.xh.getMenuButtonBoundingClientRect({
success(res) {
contentHeight.value = (res.top + res.bottom) / 2 + 25 + "px";
}
});
});
/* 文章 */ /* 文章 */
// 判断是否还有数据
let pageNo = 1;
let flag = false;
const list = ref([]); const list = ref([]);
const params = ref({ const params = ref({
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
isEnd: false, isEnd: false,
type: 1, type: 2,
categoryId: active.value categoryId: active.value
}); });
onShow(() => { onShow(() => {
...@@ -68,6 +79,8 @@ const refresh = () => { ...@@ -68,6 +79,8 @@ const refresh = () => {
list.value = []; list.value = [];
params.value.pageNo = 1; params.value.pageNo = 1;
params.value.isEnd = false; params.value.isEnd = false;
params.value.categoryId = active.value;
resolve(); resolve();
}); });
}; };
......
...@@ -36,10 +36,8 @@ const login = () => { ...@@ -36,10 +36,8 @@ const login = () => {
}); });
} }
setToken(data.data.token); setToken(data.data.token);
console.log("data", data);
getLoginUserApi().then(el => { getLoginUserApi().then(el => {
if (el.data && el.data.companyId) { if (el.data && el.data.status !== 0) {
uni.switchTab({ uni.switchTab({
url: "/pages/user/index" url: "/pages/user/index"
}); });
......
...@@ -23,7 +23,8 @@ const login = async () => { ...@@ -23,7 +23,8 @@ const login = async () => {
setToken(loginRes.data.token); setToken(loginRes.data.token);
const userInfoRes = await getLoginUserApi(); const userInfoRes = await getLoginUserApi();
// 已经判断是否注册过企业 // 已经判断是否注册过企业
if (userInfoRes.data?.companyId) {
if (userInfoRes.data.status !== 0) {
uni.switchTab({ uni.switchTab({
url: "/pages/user/index" url: "/pages/user/index"
}); });
......
...@@ -37,9 +37,15 @@ const params = ref({ ...@@ -37,9 +37,15 @@ const params = ref({
isEnd: false isEnd: false
}); });
const goToDetail = item => { const goToDetail = item => {
if (item.type == 3 || item.type == 4) {
xma.navigateTo({
url: `/pages/user/myCompany/licenseInfo?id=${item.id}`
});
} else if (item.type == 2) {
xma.navigateTo({ xma.navigateTo({
url: `/pages/user/feedbackDetails/index?id=${item.id}` url: `/pages/user/feedbackDetails/index?id=${item.id}`
}); });
}
}; };
const refresh = () => { const refresh = () => {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
}}</view> }}</view>
</div> </div>
<scroll-view :scroll-y="true" class="content" @scrolltolower="feedbackListFn"> <scroll-view :scroll-y="true" class="content" @scrolltolower="feedbackListFn">
<wd-status-tip v-if="list.length == 0" image="../.././static/image/enmpty-dt.png" tip="暂无更多" />
<article-list :list="list"></article-list> <article-list :list="list"></article-list>
</scroll-view> </scroll-view>
</div> </div>
......
<template> <template>
<NavBar :showIcon="true" :showTitle="true" title="投递管理" backgroundBox="#FFFFFF"></NavBar>
<div class="page"> <div class="page">
<div class="filter-bar flex-between"> <div class="filter-bar flex-between">
<p <p
......
...@@ -113,15 +113,19 @@ ...@@ -113,15 +113,19 @@
</view> </view>
</view> </view>
<view class="btn-list flex-between"> <view class="btn-list flex-between">
<view class="flex-center"> <view class="flex-center" @click="jobOffuntopApiFn(v)" v-if="v.top == 1">
<image src="@/static/image/icon/cancelUpload.png" mode="" /> <image src="@/static/image/icon/cancelUpload.png" mode="" />
取消置顶 取消置顶
</view> </view>
<view class="flex-center"> <view class="flex-center" @click="jobOfftopApiFn(v)" v-else>
<image class="top" src="@/static/image/icon/top.png" mode="" />
置顶
</view>
<view class="flex-center" @click="getJobList(activeTopFilter)">
<image src="@/static/image/icon/refresh.png" mode="" /> <image src="@/static/image/icon/refresh.png" mode="" />
刷新 刷新
</view> </view>
<view class="flex-center" @click="switchJobStatus(v.id, v.status)"> <view class="flex-center" @click="switchJobStatus(v)">
<image :class="{ rotate: v.status != 3 }" src="@/static/image/icon/download.png" mode="" /> <image :class="{ rotate: v.status != 3 }" src="@/static/image/icon/download.png" mode="" />
{{ v.status == 3 ? "下线" : "上线" }} {{ v.status == 3 ? "下线" : "上线" }}
</view> </view>
...@@ -158,18 +162,22 @@ import { ...@@ -158,18 +162,22 @@ import {
getListStatisticsApi, getListStatisticsApi,
jobReleaseApi, jobReleaseApi,
jobOfflineApi, jobOfflineApi,
getJobByIdApi getJobByIdApi,
jobOfftopApi,
jobOffuntopApi
} from "@/api/postion"; } from "@/api/postion";
import { getTreeListApi } from "@/api/common"; import { getTreeListApi } from "@/api/common";
import { getEumData, getEnumText } from "@/utils/utils"; import { getEumData, getEnumText } from "@/utils/utils";
import { useAsync } from "@/hooks/useAsync"; import { useAsync } from "@/hooks/useAsync";
import _ from "lodash"; import _ from "lodash";
import { useReleasePostionStore } from "./releasePostion/store"; import { useReleasePostionStore } from "./releasePostion/store";
const { setForm, setFormDataKey } = useReleasePostionStore();
/* tab */ /* tab */
const pinias = useReleasePostionStore();
const activeTab = ref("求职推荐"); const activeTab = ref("求职推荐");
const changeActiveTab = tab => { const changeActiveTab = tab => {
activeTab.value = tab; activeTab.value = tab;
getTopFilter();
getJobList(activeTopFilter.value);
}; };
/* 获取职位列表 */ /* 获取职位列表 */
...@@ -191,6 +199,20 @@ getJobListApi().then(res => { ...@@ -191,6 +199,20 @@ getJobListApi().then(res => {
getResumeRecommendList(); getResumeRecommendList();
} }
}); });
function jobOfftopApiFn(v) {
jobOfftopApi(v.id).then(res => {
if (res.code == 200) {
getJobList(activeTopFilter.value);
}
});
}
function jobOffuntopApiFn(v) {
jobOffuntopApi(v.id).then(res => {
if (res.code == 200) {
getJobList(activeTopFilter.value);
}
});
}
/* 获取推荐 */ /* 获取推荐 */
const applicationList = ref([]); const applicationList = ref([]);
const getApplicationListParams = ref({ const getApplicationListParams = ref({
...@@ -298,6 +320,8 @@ const confirmFilter = () => { ...@@ -298,6 +320,8 @@ const confirmFilter = () => {
}; };
/* 跳转到发布职位 */ /* 跳转到发布职位 */
const releasePostion = () => { const releasePostion = () => {
console.log("useReleasePostionStore", useReleasePostionStore);
uni.navigateTo({ uni.navigateTo({
url: "/pages/recommend/releasePostion/step1" url: "/pages/recommend/releasePostion/step1"
}); });
...@@ -320,8 +344,12 @@ const getTopFilter = async () => { ...@@ -320,8 +344,12 @@ const getTopFilter = async () => {
topFilter.value = data; topFilter.value = data;
}; };
const getJobList = (status = "") => { const getJobList = (status = "") => {
xma.showLoading({
title: "加载中..."
});
getListStatisticsApi({ status }).then(res => { getListStatisticsApi({ status }).then(res => {
console.log("resresres", res); console.log("resresres", res);
xma.hideLoading();
res.data.forEach(v => { res.data.forEach(v => {
const { data: workModeText } = useAsync(getEnumText("EnumWorkMode", v.workMode)); const { data: workModeText } = useAsync(getEnumText("EnumWorkMode", v.workMode));
const { data: statusText } = useAsync(getEnumText("EnumJobStatus", v.status)); const { data: statusText } = useAsync(getEnumText("EnumJobStatus", v.status));
...@@ -331,15 +359,19 @@ const getJobList = (status = "") => { ...@@ -331,15 +359,19 @@ const getJobList = (status = "") => {
jobList.value = res.data; jobList.value = res.data;
}); });
}; };
getTopFilter(); onShow(() => {
getJobList(); getTopFilter();
getJobList();
});
/* 职位上下线 */ /* 职位上下线 */
const switchJobStatus = async (id, status) => { const switchJobStatus = async v => {
let res = null; let res = null;
if (status == 3) { if (v.status == 3) {
res = await jobOfflineApi(id); res = await jobOfflineApi(v.id);
} else if (status == 4 || status == 1) { v.status = 4;
res = await jobReleaseApi(id); } else if (v.status == 4 || v.status == 1) {
res = await jobReleaseApi(v.id);
v.status = 3;
} else { } else {
uni.showToast({ uni.showToast({
title: "该状态不能操作", title: "该状态不能操作",
...@@ -403,7 +435,7 @@ const editJob = ({ id, status }) => { ...@@ -403,7 +435,7 @@ const editJob = ({ id, status }) => {
contactPerson, contactPerson,
contactPhone contactPhone
} = res.data; } = res.data;
setForm({ pinias.setForm({
workMode, workMode,
jobName, jobName,
jobType, jobType,
...@@ -431,7 +463,7 @@ const editJob = ({ id, status }) => { ...@@ -431,7 +463,7 @@ const editJob = ({ id, status }) => {
contactPerson, contactPerson,
contactPhone contactPhone
}); });
setFormDataKey("id", id); pinias.setFormDataKey("id", id);
uni.navigateTo({ uni.navigateTo({
url: `/pages/recommend/releasePostion/step1?id=${id}` url: `/pages/recommend/releasePostion/step1?id=${id}`
}); });
...@@ -752,6 +784,12 @@ const editJob = ({ id, status }) => { ...@@ -752,6 +784,12 @@ const editJob = ({ id, status }) => {
width: 28rpx; width: 28rpx;
height: 28rpx; height: 28rpx;
} }
.top {
width: 20rpx;
height: 20rpx;
margin-right: 3rpx;
}
view { view {
flex: 1; flex: 1;
font-size: 24rpx; font-size: 24rpx;
......
<template> <template>
<div class="page"> <div class="page">
<navBar> <NavBar
<template #left> :showIcon="true"
<div class="arrow" @click="back"></div> :showTitle="true"
</template> backIcon="#fff"
<template #title>我的</template> textColor="#fff"
</navBar> title="邀请面试"
backgroundBox="transparent"
></NavBar>
<view class="bg"></view> <view class="bg"></view>
<view class="card"> <view class="card">
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<view>兼职</view> --> <view>兼职</view> -->
<view <view
v-for="(item, index) in EnumWorkMode" v-for="(item, index) in EnumWorkMode"
:class="item.code == formData.workMode ? 'active' : ''" :class="item.code == pinias.formData.workMode ? 'active' : ''"
@tap="changeWorkMode(item.code)" @tap="changeWorkMode(item.code)"
:key="index" :key="index"
>{{ item.text }} >{{ item.text }}
...@@ -28,8 +28,8 @@ ...@@ -28,8 +28,8 @@
value-key="id" value-key="id"
use-default-slot use-default-slot
> >
<view :class="`inner flex-between ${formData.jobTypeText ? '' : 'placeholder'}`"> <view :class="`inner flex-between ${pinias.formData.jobTypeText ? '' : 'placeholder'}`">
{{ formData.jobTypeText || "请选择职位类型" }} {{ pinias.formData.jobTypeText || "请选择职位类型" }}
<view class="arrow"></view> <view class="arrow"></view>
</view> </view>
</wd-col-picker> </wd-col-picker>
...@@ -37,12 +37,17 @@ ...@@ -37,12 +37,17 @@
<view class="form-item"> <view class="form-item">
<view class="form-item-title">职位标题</view> <view class="form-item-title">职位标题</view>
<view class="inner flex-between"> <view class="inner flex-between">
<input v-model="formData.jobName" type="text" placeholder-class="placeholder" placeholder="请输入职业标题" /> <input
v-model="pinias.formData.jobName"
type="text"
placeholder-class="placeholder"
placeholder="请输入职业标题"
/>
</view> </view>
</view> </view>
<view class="form-item describe" style="border: 0"> <view class="form-item describe" style="border: 0">
<view class="form-item-title">职位描述</view> <view class="form-item-title">职位描述</view>
<textarea v-model="formData.jobDesc" placeholder="请输入你的职位描述" /> <textarea maxlength="500" v-model="pinias.formData.jobDesc" placeholder="请输入你的职位描述" />
</view> </view>
</view> </view>
...@@ -51,7 +56,7 @@ ...@@ -51,7 +56,7 @@
</view> --> </view> -->
<wd-tabbar <wd-tabbar
@tap="next" @tap="next"
custom-style="display: flex;justify-content: center !important;" custom-style="display: flex;justify-content: center !important;z-index:1;"
fixed fixed
placeholder placeholder
safeAreaInsetBottom safeAreaInsetBottom
...@@ -64,12 +69,20 @@ ...@@ -64,12 +69,20 @@
<script setup> <script setup>
import { getEumData } from "@/utils/utils"; import { getEumData } from "@/utils/utils";
import { ref } from "vue"; import { ref } from "vue";
import { useReleasePostionStore } from "./store";
import { dictJobTypeApi } from "@/api/common"; import { dictJobTypeApi } from "@/api/common";
import { getJobByIdApi } from "@/api/postion"; import { getJobByIdApi } from "@/api/postion";
import { validateForm } from "@/utils/utils";
import _ from "lodash"; import _ from "lodash";
const { formData, setFormDataKey, setForm } = useReleasePostionStore();
import { useReleasePostionStore } from "./store";
const pinias = useReleasePostionStore();
onLoad(option => {
const { id } = option;
if (!id) {
pinias.resetForm();
}
});
/* 兼职全职枚举 */ /* 兼职全职枚举 */
const EnumWorkMode = ref([]); const EnumWorkMode = ref([]);
const getEnumWorkMode = async () => { const getEnumWorkMode = async () => {
...@@ -78,15 +91,15 @@ const getEnumWorkMode = async () => { ...@@ -78,15 +91,15 @@ const getEnumWorkMode = async () => {
getEnumWorkMode(); getEnumWorkMode();
const changeWorkMode = mode => { const changeWorkMode = mode => {
setFormDataKey("workMode", mode); pinias.setFormDataKey("workMode", mode);
setFormDataKey("minSalary", 0); pinias.setFormDataKey("minSalary", 0);
setFormDataKey("maxSalary", 0); pinias.setFormDataKey("maxSalary", 0);
if (mode == 2) { if (mode == 2) {
// 小时 // 小时
setFormDataKey("settlementType", 1); pinias.setFormDataKey("settlementType", 1);
} else { } else {
// 月 // 月
setFormDataKey("settlementType", 4); pinias.setFormDataKey("settlementType", 4);
} }
}; };
/* 职业类型 */ /* 职业类型 */
...@@ -107,13 +120,15 @@ const columnChange = ({ selectedItem, resolve, finish }) => { ...@@ -107,13 +120,15 @@ const columnChange = ({ selectedItem, resolve, finish }) => {
}; };
const handleConfirm = ({ selectedItems, value }) => { const handleConfirm = ({ selectedItems, value }) => {
const taget = _.last(selectedItems); const taget = _.last(selectedItems);
setFormDataKey("jobTypeText", taget.name); pinias.setFormDataKey("jobTypeText", taget.name);
setFormDataKey("jobType", taget.id); pinias.setFormDataKey("jobType", taget.id);
}; };
const next = () => { const next = () => {
if (validateForm(pinias.formData, ["jobType", "jobTypeText", "jobName", "jobDesc"])) {
uni.navigateTo({ uni.navigateTo({
url: "/pages/recommend/releasePostion/step2" url: "/pages/recommend/releasePostion/step2"
}); });
}
}; };
</script> </script>
......
...@@ -8,28 +8,47 @@ ...@@ -8,28 +8,47 @@
<view class="content"> <view class="content">
<view class="form-item"> <view class="form-item">
<view class="form-item-title">职位薪资</view> <view class="form-item-title">职位薪资</view>
<wd-col-picker
v-model="value" <view
:columns="columns" v-if="pinias.formData.settlementType == 4"
:column-change="columnChange" :class="`inner flex-between ${salaryText ? '' : 'placeholder'}`"
@confirm="handleConfirm" @click="onOpen"
use-default-slot
> >
<view :class="`inner flex-between ${salaryText ? '' : 'placeholder'}`" bind:tap="onOpen"> {{ salaryText || "请选择月薪范围" }}
{{ salaryText || "请选择(全职为月薪兼职为时薪)" }}
<view class="arrow"></view> <!-- <view class="arrow"></view> -->
<checkbox class="checkbox" @click="onChecked" :checked="my">面议</checkbox>
</view>
<view v-else :class="`inner flex-between ${salaryText ? '' : 'placeholder'}`" @click="onOpen">
{{ salaryText || "请选择时薪范围" }}
<!-- <view class="arrow"></view> -->
<checkbox class="checkbox" @click="onChecked" :checked="my">面议</checkbox>
</view> </view>
</wd-col-picker> <wd-popup
v-model="show"
position="bottom"
custom-style="height:40%;border-radius: 20rpx;z-index:999;"
@close="handleClose"
>
<view class="title-box"
><view></view>
<view class="title">薪资选择</view>
<wd-icon name="close" size="30rpx"></wd-icon>
</view>
<wd-picker-view
@change="handleConfirm"
use-default-slot
:columns="columns"
v-model="value"
@close="handleClose"
></wd-picker-view>
</wd-popup>
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="form-item-title">是否提供食宿</view> <view class="form-item-title">是否提供食宿</view>
<view class="inner flex-between"> <view class="inner flex-between">
<!-- <van-radio-group model:value="{{ accommodation }}"> <wd-radio-group v-model="pinias.formData.accommodation" inline shape="dot">
<van-radio name="{{item.code}}" wx:for="{{EnumAccommodation}}" wx:key="index">{{ item.text }}</van-radio> <wd-radio v-for="(v, n) in radioOpstion" :value="v.code" :key="n">{{ v.text }}</wd-radio>
</van-radio-group> -->
<wd-radio-group v-model="formData.accommodation" inline shape="dot">
<wd-radio v-for="v in radioOpstion" :value="v.code">{{ v.text }}</wd-radio>
</wd-radio-group> </wd-radio-group>
</view> </view>
</view> </view>
...@@ -59,71 +78,106 @@ ...@@ -59,71 +78,106 @@
</template> </template>
<script setup> <script setup>
import { useReleasePostionStore } from "./store";
import { getEumData } from "@/utils/utils"; import { getEumData } from "@/utils/utils";
const { formData, setFormDataKey } = useReleasePostionStore();
import { useReleasePostionStore } from "./store";
/* tab */
const pinias = useReleasePostionStore();
/* 薪资选择 */ /* 薪资选择 */
const salaryText = ref(""); let salaryText = ref("");
const value = ref([]); const value = ref([]);
const columns = ref([]); const columns = ref([]);
console.log(formData.settlementType); let my = ref(pinias.formData.negotiableSalary == 1);
console.log(pinias.formData.settlementType, "pinias.formData.settlementType");
const show = ref(false);
let multiple = 1; let multiple = 1;
/* 兼职薪资基准 */ /* 兼职薪资基准 */
if (formData.settlementType == 1) { if (pinias.formData.settlementType == 1) {
multiple = 10; multiple = 50;
} else { } else {
multiple = 1000; multiple = 1000;
} }
const initSalaryColumns = () => { const initSalaryColumns = () => {
const temp = [ const temp = [];
{ const maxSalary = pinias.formData.settlementType === 1 ? 1000 : 50 * multiple;
value: "面议",
label: "面议", // 生成序列
next: false for (let i = 1; i * multiple <= maxSalary; i++) {
} const currentValue = i * multiple;
];
for (let i = 1; i < 50; i++) {
temp.push({ temp.push({
value: i * multiple, value: currentValue,
label: i * multiple, label: pinias.formData.settlementType === 1 ? currentValue : `${currentValue / 1000}k`,
next: true next: true
}); });
} }
columns.value.push(temp);
// 确保 columns.value 是一个数组
if (!Array.isArray(columns.value)) {
columns.value = [];
}
// 清空原来的数组,以确保只包含新的数据
columns.value.length = 0;
// 将 temp 复制两次,推入 columns.value
columns.value.push([...temp], [...temp]);
}; };
initSalaryColumns(); initSalaryColumns();
const columnChange = ({ selectedItem, resolve, finish }) => { function onChecked() {
console.log(selectedItem); my.value = !my.value;
if (selectedItem.next) { // 如果勾选了面议
const temp = []; if (my.value) {
for (let i = 1; i < 50; i++) { salaryText.value = "";
temp.push({ pinias.setFormDataKey("maxSalary", 0);
value: i * multiple + selectedItem.value, pinias.setFormDataKey("minSalary", 0);
label: i * multiple + selectedItem.value, pinias.setFormDataKey("negotiableSalary", 1);
next: false
});
resolve(temp);
}
} else { } else {
finish(); pinias.setFormDataKey("negotiableSalary", 0);
} }
}; }
onShow(() => {
// setFormDataKey("negotiableSalary", 0);
// setFormDataKey("maxSalary", 0);
// setFormDataKey("minSalary", 0);
});
const handleConfirm = ({ value, selectedItem }) => { const handleConfirm = ({ value, selectedItem }) => {
console.log("value", value);
if (value[1] < value[0]) {
xma.showToast({
title: "最高薪资不能小于最低薪资",
icon: "none"
});
return;
}
my.value = false;
if (pinias.formData.settlementType === 1) {
salaryText.value = value.join("~"); salaryText.value = value.join("~");
} else {
salaryText.value = value.map(num => `${num / multiple}k`).join("~");
}
const [min, max] = value; const [min, max] = value;
if (max) { if (max) {
setFormDataKey("maxSalary", max); pinias.setFormDataKey("maxSalary", max);
setFormDataKey("minSalary", min); pinias.setFormDataKey("minSalary", min);
setFormDataKey("negotiableSalary", 0); pinias.setFormDataKey("negotiableSalary", 0);
} else { } else {
setFormDataKey("maxSalary", 0); pinias.setFormDataKey("maxSalary", 0);
setFormDataKey("minSalary", 0); pinias.setFormDataKey("minSalary", 0);
setFormDataKey("negotiableSalary", 1); pinias.setFormDataKey("negotiableSalary", 1);
} }
}; };
function onOpen() {
if (my.value) return;
show.value = true;
}
function handleClose() {
show.value = false;
}
/* 是否提供住宿 */ /* 是否提供住宿 */
const radioOpstion = ref([]); const radioOpstion = ref([]);
const initRadioOpstion = async () => { const initRadioOpstion = async () => {
...@@ -154,14 +208,22 @@ const onChangeBenefits = e => { ...@@ -154,14 +208,22 @@ const onChangeBenefits = e => {
}; };
// 下一页 // 下一页
const next = () => { const next = () => {
setFormDataKey( pinias.setFormDataKey(
"benefits", "benefits",
benefits.value benefits.value
.filter(v => v.active) .filter(v => v.active)
.map(v => v.text) .map(v => v.text)
.join(",") .join(",")
); );
if (pinias.formData.negotiableSalary == 0) {
if (pinias.formData.maxSalary == 0 || pinias.formData.minSalary == 0) {
xma.showToast({
title: "请输入薪资",
icon: "none"
});
return;
}
}
uni.navigateTo({ uni.navigateTo({
url: "/pages/recommend/releasePostion/step3" url: "/pages/recommend/releasePostion/step3"
}); });
...@@ -169,15 +231,17 @@ const next = () => { ...@@ -169,15 +231,17 @@ const next = () => {
/* 初始化 */ /* 初始化 */
const initViewData = () => { const initViewData = () => {
console.log(formData); console.log(pinias.formData);
if (formData.id) { if (pinias.formData.id) {
// 福利 // 福利
if (formData.benefits) { if (pinias.formData.benefits) {
benefits.value.forEach(v => { benefits.value.forEach(v => {
v.active = formData.benefits.indexOf(v.text) !== -1; v.active = pinias.formData.benefits.indexOf(v.text) !== -1;
}); });
} }
salaryText.value = formData.negotiableSalary ? "面议" : `${formData.minSalary}~${formData.maxSalary}`; salaryText.value = pinias.formData.negotiableSalary
? "面议"
: `${pinias.formData.minSalary}~${pinias.formData.maxSalary}`;
} }
}; };
initViewData(); initViewData();
...@@ -197,6 +261,19 @@ initViewData(); ...@@ -197,6 +261,19 @@ initViewData();
margin-bottom: 24rpx; margin-bottom: 24rpx;
} }
} }
:deep(.uni-checkbox-input) {
border-radius: 50% !important;
}
.title-box {
display: flex;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 0 32rpx;
.title {
font-weight: bold;
}
}
.welfare { .welfare {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<view :class="`inner flex-between ${address ? '' : 'placeholder'}`" @tap="getLocaltion"> <view :class="`inner flex-between ${address ? '' : 'placeholder'}`" @tap="getLocaltion">
<view class="flex-align-center"> <view class="flex-align-center">
<image src="@/static/image/icon/position.png" /> <image src="@/static/image/icon/position.png" />
{{ address || "请选择工作地址" }} {{ address || pinias.formData.address || "请选择工作地址" }}
</view> </view>
<view class="arrow"></view> <view class="arrow"></view>
</view> </view>
...@@ -31,10 +31,13 @@ ...@@ -31,10 +31,13 @@
<script setup> <script setup>
import { ref } from "vue"; import { ref } from "vue";
import { useReleasePostionStore } from "./store"; import { useReleasePostionStore } from "./store";
/* tab */
const pinias = useReleasePostionStore();
const showTab = ref(true); const showTab = ref(true);
const address = ref(""); const address = ref("");
const { formData, setFormDataKey } = useReleasePostionStore(); import { validateForm } from "@/utils/utils";
const getLocaltion = () => { const getLocaltion = () => {
showTab.value = false; showTab.value = false;
...@@ -44,10 +47,9 @@ const getLocaltion = () => { ...@@ -44,10 +47,9 @@ const getLocaltion = () => {
if (res.errMsg == "chooseLocation:ok") { if (res.errMsg == "chooseLocation:ok") {
address.value = res.name; address.value = res.name;
} }
setFormDataKey("locationLongitude", res.longitude || 106.647169); pinias.setFormDataKey("locationLongitude", res.longitude || 106.647169);
setFormDataKey("locationLatitude", res.latitude || 26.615808); pinias.setFormDataKey("locationLatitude", res.latitude || 26.615808);
setFormDataKey("address", res.name || "华贵保险大厦"); pinias.setFormDataKey("address", res.name || "华贵保险大厦");
setTimeout(() => {}, 1000);
showTab.value = true; showTab.value = true;
/* /*
address: "长岭南路178号" address: "长岭南路178号"
...@@ -62,9 +64,11 @@ const getLocaltion = () => { ...@@ -62,9 +64,11 @@ const getLocaltion = () => {
}; };
const next = () => { const next = () => {
if (validateForm(pinias.formData, ["address"])) {
uni.navigateTo({ uni.navigateTo({
url: "/pages/recommend/releasePostion/step4" url: "/pages/recommend/releasePostion/step4"
}); });
}
}; };
</script> </script>
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
:columns="identityPostion" :columns="identityPostion"
value-key="code" value-key="code"
label-key="text" label-key="text"
v-model="formData.identityRequirement" v-model="pinias.formData.identityRequirement"
@confirm="handleConfirmIdentity" @confirm="handleConfirmIdentity"
use-default-slot use-default-slot
> >
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
:columns="educationPostion" :columns="educationPostion"
value-key="code" value-key="code"
label-key="text" label-key="text"
v-model="formData.educationRequirement" v-model="pinias.formData.educationRequirement"
@confirm="handleConfirmEducation" @confirm="handleConfirmEducation"
use-default-slot use-default-slot
> >
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
</view> </view>
<wd-tabbar <wd-tabbar
@tap="next" @tap="next"
custom-style="display: flex;justify-content: center !important;" custom-style="display: flex;justify-content: center !important;z-index:1;"
fixed fixed
placeholder placeholder
safeAreaInsetBottom safeAreaInsetBottom
...@@ -75,7 +75,8 @@ ...@@ -75,7 +75,8 @@
import { ref } from "vue"; import { ref } from "vue";
import { getEumData, getEnumText } from "@/utils/utils"; import { getEumData, getEnumText } from "@/utils/utils";
import { useReleasePostionStore } from "./store"; import { useReleasePostionStore } from "./store";
const { formData, setFormDataKey } = useReleasePostionStore(); /* tab */
const pinias = useReleasePostionStore();
const identityText = ref(""); const identityText = ref("");
const educationText = ref(""); const educationText = ref("");
const identityPostion = ref([]); const identityPostion = ref([]);
...@@ -106,7 +107,7 @@ const initSalaryColumns = () => { ...@@ -106,7 +107,7 @@ const initSalaryColumns = () => {
next: false next: false
} }
]; ];
for (let i = 1; i < 50; i++) { for (let i = 16; i < 81; i++) {
temp.push({ temp.push({
value: i, value: i,
label: i + "岁", label: i + "岁",
...@@ -139,16 +140,16 @@ const handleConfirm = ({ value, selectedItem }) => { ...@@ -139,16 +140,16 @@ const handleConfirm = ({ value, selectedItem }) => {
console.log([min, max]); console.log([min, max]);
if (max) { if (max) {
// 没有选择不限 // 没有选择不限
setFormDataKey("maxAgeRequirement", max); pinias.setFormDataKey("maxAgeRequirement", max);
setFormDataKey("minAgeRequirement", min); pinias.setFormDataKey("minAgeRequirement", min);
} else { } else {
setFormDataKey("maxAgeRequirement", 0); pinias.setFormDataKey("maxAgeRequirement", 0);
setFormDataKey("minAgeRequirement", 0); pinias.setFormDataKey("minAgeRequirement", 0);
} }
}; };
const next = () => { const next = () => {
console.log(formData); console.log(pinias.formData);
uni.navigateTo({ uni.navigateTo({
url: "/pages/recommend/releasePostion/step5" url: "/pages/recommend/releasePostion/step5"
}); });
...@@ -156,13 +157,13 @@ const next = () => { ...@@ -156,13 +157,13 @@ const next = () => {
/* 初始化页面数据 */ /* 初始化页面数据 */
const initViewData = async () => { const initViewData = async () => {
if (formData.id) { if (pinias.formData.id) {
console.log(formData); console.log(pinias.formData);
identityText.value = await getEnumText("EnumIdentityRequirement", formData.identityRequirement); identityText.value = await getEnumText("EnumIdentityRequirement", pinias.formData.identityRequirement);
educationText.value = await getEnumText("EnumEducationRequirement", formData.educationRequirement); educationText.value = await getEnumText("EnumEducationRequirement", pinias.formData.educationRequirement);
if (formData.maxAgeRequirement) { if (pinias.formData.maxAgeRequirement) {
ageText.value = `${formData.minAgeRequirement}~${formData.maxAgeRequirement}`; ageText.value = `${pinias.formData.minAgeRequirement}~${pinias.formData.maxAgeRequirement}`;
} }
} }
}; };
......
...@@ -9,19 +9,19 @@ ...@@ -9,19 +9,19 @@
<view class="form-item"> <view class="form-item">
<view class="form-item-title">招聘人数</view> <view class="form-item-title">招聘人数</view>
<view class="inner felx-between"> <view class="inner felx-between">
<input type="number" v-model="formData.recruitmentNumber" placeholder="请输入招聘人数" /> <input type="number" v-model="pinias.formData.recruitmentNumber" placeholder="请输入招聘人数" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="form-item-title">联系电话</view> <view class="form-item-title">联系电话</view>
<view class="inner felx-between"> <view class="inner felx-between">
<input type="number" v-model="formData.contactPhone" placeholder="请输入联系电话" /> <input type="number" v-model="pinias.formData.contactPhone" placeholder="请输入联系电话" />
</view> </view>
</view> </view>
<view class="form-item"> <view class="form-item">
<view class="form-item-title">联系人</view> <view class="form-item-title">联系人</view>
<view class="inner felx-between"> <view class="inner felx-between">
<input type="text" v-model="formData.contactPerson" placeholder="请输入联系人" /> <input type="text" v-model="pinias.formData.contactPerson" placeholder="请输入联系人" />
</view> </view>
</view> </view>
</view> </view>
...@@ -40,16 +40,17 @@ ...@@ -40,16 +40,17 @@
<script setup> <script setup>
import { createJobApi, updateJobApi } from "@/api/postion"; import { createJobApi, updateJobApi } from "@/api/postion";
import { useReleasePostionStore } from "./store"; import { useReleasePostionStore } from "./store";
const { formData, resetForm } = useReleasePostionStore(); /* tab */
console.log(resetForm); const pinias = useReleasePostionStore();
import { validateForm } from "@/utils/utils";
const submit = () => { const submit = () => {
console.log("submit", formData); if (pinias.formData.id) {
if (formData.id) {
// 更新 // 更新
updateJobApi(formData).then(res => { updateJobApi(pinias.formData).then(res => {
if (res.code == 200) { if (res.code == 200) {
resetForm(); pinias.resetForm();
uni.showToast({ uni.showToast({
title: "更新成功", title: "更新成功",
icon: "none", icon: "none",
...@@ -69,10 +70,11 @@ const submit = () => { ...@@ -69,10 +70,11 @@ const submit = () => {
} }
}); });
} else { } else {
if (validateForm(pinias.formData, ["contactPhone", "contactPerson"])) {
// 提交 // 提交
createJobApi(formData).then(res => { createJobApi(pinias.formData).then(res => {
if (res.code == 200) { if (res.code == 200) {
resetForm(); pinias.resetForm();
uni.showToast({ uni.showToast({
title: "发布成功", title: "发布成功",
icon: "none", icon: "none",
...@@ -92,6 +94,7 @@ const submit = () => { ...@@ -92,6 +94,7 @@ const submit = () => {
} }
}); });
} }
}
}; };
</script> </script>
......
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { reactive } from "vue"; import { reactive,ref } from "vue";
export const useReleasePostionStore = defineStore("releasePostion", { export const useReleasePostionStore = defineStore("useReleasePostionStore", ()=>{
state: () => ({ let formData = ref( {
formData: {
workMode: 1, workMode: 1,
jobName: "", jobName: "",
jobType: 1, jobType: 1,
jobTypeText: "", jobTypeText: "",
jobDesc: "", jobDesc: "",
negotiableSalary: 1, negotiableSalary: 0,
settlementType: 1, settlementType: 4,
minSalary: 0, minSalary: 0,
maxSalary: 0, maxSalary: 0,
benefits: "", benefits: "",
identityRequirement: 1, identityRequirement: 1,
educationRequirement: 1, educationRequirement: 1,
minAgeRequirement: 1, minAgeRequirement: 16,
maxAgeRequirement: 1, maxAgeRequirement: 60,
recruitmentNumber: 1, recruitmentNumber: 1,
accommodation: 1, accommodation: 1,
provinceCode: "", provinceCode: "",
...@@ -30,28 +29,27 @@ export const useReleasePostionStore = defineStore("releasePostion", { ...@@ -30,28 +29,27 @@ export const useReleasePostionStore = defineStore("releasePostion", {
locationLatitude: 0, locationLatitude: 0,
contactPerson: "", contactPerson: "",
contactPhone: "" contactPhone: ""
})
function setFormDataKey(key, data) {
formData.value[key] = data;
} }
}), function resetForm() {
actions: {
setFormDataKey(key, data) { formData.value = {
this.formData[key] = data;
},
resetForm() {
this.formData = {
workMode: 1, workMode: 1,
jobName: "", jobName: "",
jobType: 1, jobType: 1,
jobTypeText: "", jobTypeText: "",
jobDesc: "", jobDesc: "",
negotiableSalary: 1, negotiableSalary: 0,
settlementType: 1, settlementType: 1,
minSalary: 0, minSalary: 0,
maxSalary: 0, maxSalary: 0,
benefits: "", benefits: "",
identityRequirement: 1, identityRequirement: 1,
educationRequirement: 1, educationRequirement: 1,
minAgeRequirement: 1, minAgeRequirement: 16,
maxAgeRequirement: 1, maxAgeRequirement: 60,
recruitmentNumber: 1, recruitmentNumber: 1,
accommodation: 1, accommodation: 1,
provinceCode: "", provinceCode: "",
...@@ -65,10 +63,17 @@ export const useReleasePostionStore = defineStore("releasePostion", { ...@@ -65,10 +63,17 @@ export const useReleasePostionStore = defineStore("releasePostion", {
contactPerson: "", contactPerson: "",
contactPhone: "" contactPhone: ""
}; };
}, console.log('this.formthis.formDatathis.formDatathis.formDatathis.formDataData',formData.value);
setForm(data) {
this.formData = reactive(data);
console.log("this.formData", this.formData);
} }
function setForm(data) {
formData.value = data;
console.log("this.formData",formData.value );
} }
return {
formData,
setFormDataKey,
resetForm,
setForm
}
}); });
<template> <template>
<div class="page"> <div class="page">
<NavBar :showIcon="true" :showTitle="true" title="企业申诉"></NavBar>
<view class="appealing-name"> 申诉企业:{{ name }} </view> <view class="appealing-name"> 申诉企业:{{ name }} </view>
<view class="appealing-user-name"> <view class="appealing-user-name">
<view>申述人姓名</view> <view>申述人姓名</view>
...@@ -29,7 +30,7 @@ ...@@ -29,7 +30,7 @@
<view class="t1"> (注:图片大小不超过10M) </view> <view class="t1"> (注:图片大小不超过10M) </view>
</view> </view>
<view class="btn-wrap"> <view class="btn-wrap" v-if="status == 2">
<button class="bottom-btn" @tap="submit">提交</button> <button class="bottom-btn" @tap="submit">提交</button>
</view> </view>
</div> </div>
...@@ -39,7 +40,7 @@ ...@@ -39,7 +40,7 @@
import { ref, reactive } from "vue"; import { ref, reactive } from "vue";
import { uploadFiles } from "@/utils/fileUpload"; import { uploadFiles } from "@/utils/fileUpload";
import evn from "@/utils/config"; import evn from "@/utils/config";
import { companyAppealApi } from "@/api/user"; import { companyAppealApi, appealInfo } from "@/api/user";
import _ from "lodash"; import _ from "lodash";
const name = ref(""); const name = ref("");
const params = reactive({ const params = reactive({
...@@ -49,9 +50,11 @@ const params = reactive({ ...@@ -49,9 +50,11 @@ const params = reactive({
content: "", content: "",
companyId: 1 companyId: 1
}); });
let status = ref(2);
onLoad(data => { onLoad(data => {
name.value = data.name; name.value = data.name;
params.companyId = data.id; params.companyId = data.id;
appealInfoFn();
}); });
/* 选择图片 */ /* 选择图片 */
const chooseImage = type => { const chooseImage = type => {
...@@ -70,6 +73,20 @@ const chooseImage = type => { ...@@ -70,6 +73,20 @@ const chooseImage = type => {
}); });
}; };
const appealInfoFn = () => {
appealInfo().then(res => {
if (res.data) {
params.companyId = res.data.companyId;
name.value = res.data.companyName;
params.realName = res.data.realName;
params.content = res.data.content;
params.licensePath = res.data.licensePath;
params.idCardPath = res.data.idCardPath;
status.value = res.data.status;
}
});
};
const submit = () => { const submit = () => {
let flag = true; let flag = true;
_.mapValues(params, value => { _.mapValues(params, value => {
......
<template> <template>
<NavBar :showIcon="true" :showTitle="true" title="个人信息"></NavBar>
<div class="page"> <div class="page">
<div class="content"> <div class="content">
<div class="item flex-between"> <div class="item flex-between">
......
<template> <template>
<NavBar :showIcon="false" :showTitle="true" title="我的" textColor="#ffffff"></NavBar> <NavBar :showIcon="false" :showTitle="true" title="我的" textColor="#ffffff"></NavBar>
<wd-overlay :show="show">
<view class="popup-wrapper">
<view class="block" @click.stop="">
<view class="sumbit-error">
<view class="title">企业已存在</view>
<view class="info">
您在注册的<text>{{ name }}</text>已在乐业观山湖认证,请核对企业名称是否正确
</view>
<view class="btn flex-between" @tap="navigateTo('/pages/user/businessLicense/fillIn')">
<view class="text">
<view class="t1">注册新公司</view>
<view class="t2">注册新公司</view>
</view>
<view class="arrow"></view>
</view>
<view class="btn flex-between" @tap="navigateTo(`/pages/user/businessLicense/appeal?name=${name}&id=${id}`)">
<view class="text">
<view class="t1">申述资质被冒用</view>
<view class="t2">确定没有注册过乐业观山湖</view>
</view>
<view class="arrow"></view>
</view>
</view>
</view>
</view>
</wd-overlay>
<div class="user-container"> <div class="user-container">
<view class="bg"></view> <view class="bg"></view>
<!-- 用户信息 --> <!-- 用户信息 -->
...@@ -34,10 +60,13 @@ ...@@ -34,10 +60,13 @@
<script setup> <script setup>
import navBar from "@/components/navBar/index.vue"; import navBar from "@/components/navBar/index.vue";
import { getLoginUserApi, getCompanyInfoApi } from "@/api/user"; import { getLoginUserApi, getCompanyInfoApi, appealInfo } from "@/api/user";
import { getEnumText } from "@/utils/utils"; import { getEnumText } from "@/utils/utils";
import { ref, reactive } from "vue"; import { ref, reactive } from "vue";
import evn from "@/utils/config.js"; import evn from "@/utils/config.js";
const show = ref(false);
let name = ref("");
let id = ref("");
import { removeToken } from "@/utils/token"; import { removeToken } from "@/utils/token";
const navigateTo = (url, fn) => { const navigateTo = (url, fn) => {
if (fn) { if (fn) {
...@@ -69,41 +98,91 @@ const navList = reactive([ ...@@ -69,41 +98,91 @@ const navList = reactive([
removeToken(); removeToken();
}, },
text: "退出登录" text: "退出登录"
},
{
icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
url: "/pages/user/businessLicense/fillIn",
text: "企业认证"
},
{
icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
url: "/pages/login/test",
fn: () => {
removeToken();
},
text: "退出登录(去测试登录)"
} }
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/user/businessLicense/fillIn",
// text: "企业认证"
// },
// {
// icon: new URL("@/static/image/user/loginout.png", import.meta.url).href,
// url: "/pages/login/test",
// fn: () => {
// removeToken();
// },
// text: "退出登录(去测试登录)"
// }
]); ]);
/* 个人信息 */ /* 个人信息 */
const userInfo = ref({}); const userInfo = ref({});
const appealInfoFn = () => {
appealInfo().then(res => {
show.value = false;
if (res.data.status == 2) {
navList[0].url = "/pages/user/businessLicense/appeal";
navList[0].subText = "申诉不通过";
} else if (res.data.status == 0) {
navList[0].subText = "申诉中";
navList[0].url = "/pages/user/businessLicense/appeal";
}
});
};
/* 获取用户信息 */ /* 获取用户信息 */
const getUserInfo = async () => { const getUserInfo = async () => {
const userRes = await getLoginUserApi(); const userRes = await getLoginUserApi();
if (userRes.code == 200) { if (userRes.code == 200) {
userInfo.value = userRes.data || {}; userInfo.value = userRes.data || {};
navList[0].subText = userRes.data.companyName; navList[0].subText = userRes.data.companyName;
name.value = userRes.data.companyName;
id.value = userRes.data.companyId;
} }
const { status } = userRes.data;
if (status !== 1) {
uni.hideTabBar();
if (status == 2) {
// 代表添加了申述信息,需要查看申述状态,调用申诉信息接口
appealInfoFn();
} else if (status == 3) {
show.value = true;
// 代表账号所关联的企业被申述解除关联
}
}
if (status == 1 || status == 4) {
show.value = false;
const companyRes = await getCompanyInfoApi(); const companyRes = await getCompanyInfoApi();
if (companyRes.code == 200) { if (companyRes.code == 200) {
let status = companyRes.data.companyAudit.status; let type = companyRes.data.companyAudit.status;
if (status != 1) { if (type != 1) {
navList[0].subText = await getEnumText("EnumAuditStatus", status); navList[0].subText = await getEnumText("EnumAuditStatus", type);
navList[0].auditStatus = status; navList[0].auditStatus = type;
uni.hideTabBar(); uni.hideTabBar();
} else { } else {
uni.showTabBar(); uni.showTabBar();
} }
} }
}
// const companyRes = await getCompanyInfoApi();
// if (companyRes.code == 200) {
// let status = companyRes.data.companyAudit.status;
// if (status != 1) {
// navList[0].subText = await getEnumText("EnumAuditStatus", status);
// navList[0].auditStatus = status;
// uni.hideTabBar();
// } else {
// uni.showTabBar();
// }
// }
// if (companyRes.data.companyAppeal && companyRes.data.companyAppeal.status == 1) {
// } else if (companyRes.data.companyAppeal.status == 0) {
// navList[0].subText = "申诉中";
// navList[0].url = "/pages/user/businessLicense/appeal";
// uni.hideTabBar();
// } else {
// uni.showTabBar();
// navList[0].url = "/pages/user/businessLicense/appeal";
// navList[0].subText = "申诉不通过";
// }
}; };
onShow(() => { onShow(() => {
getUserInfo(); getUserInfo();
...@@ -114,6 +193,66 @@ onShow(() => { ...@@ -114,6 +193,66 @@ onShow(() => {
.user-container { .user-container {
padding-top: 1rpx; padding-top: 1rpx;
} }
.popup-wrapper {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
.sumbit-error {
position: relative;
box-sizing: border-box;
width: 600rpx;
padding: 0 32rpx 32rpx;
background-color: #ffffff;
border-radius: 10rpx;
image {
position: absolute;
top: 20rpx;
right: 20rpx;
width: 30rpx;
height: 30rpx;
}
.title {
padding: 32rpx 0;
font-size: 36rpx;
font-weight: 600;
line-height: 54rpx;
color: #1b2026;
text-align: center;
}
.info {
font-family: "PingFang SC";
font-size: 24rpx;
line-height: 48rpx;
text {
color: #1f86ff;
}
}
.btn {
padding: 24rpx;
padding-right: 36rpx;
margin-top: 32rpx;
border: 2rpx solid #dfe1e5;
border-radius: 8rpx;
.t1 {
font-size: 28rpx;
font-weight: 500;
line-height: 36rpx;
color: #1b2026;
}
.t2 {
margin-top: 8rpx;
font-size: 24rpx;
line-height: 36rpx;
color: #a3a7b3;
}
.arrow {
border-color: #77818f;
}
}
}
}
.nav-bar { .nav-bar {
.text { .text {
margin: 0 auto; margin: 0 auto;
......
...@@ -2,22 +2,17 @@ ...@@ -2,22 +2,17 @@
<NavBar :showIcon="true" :showTitle="true" title="营业执照认证" backgroundBox="#FFFFFF"></NavBar> <NavBar :showIcon="true" :showTitle="true" title="营业执照认证" backgroundBox="#FFFFFF"></NavBar>
<div class="page"> <div class="page">
<div class="audit-message"> <div class="audit-message">
<p class="title" :style="{ background: companyInfo.companyAudit.status == 2 ? '#ff5113' : '#1F86FF' }"> <p class="title" :style="{ background: status == 2 ? '#ff5113' : '#1F86FF' }">
{{ companyInfo.companyAudit.status == 2 ? "审核拒绝" : "通过审核" }} {{ status == 2 ? "审核拒绝" : status == 0 ? "待审核" : "通过审核" }}
</p> </p>
<div class="message" :style="{ background: '#FFEDE7' }" v-if="companyInfo.companyAudit.status == 2"> <div class="message" :style="{ background: '#FFEDE7' }" v-if="status == 2">
<p>拒绝原因</p> <p>拒绝原因</p>
{{ companyInfo.companyAudit.auditMessage }} {{ companyInfo.companyAudit.auditMessage }}
</div> </div>
</div> </div>
<view class="image-wrap"> <view class="image-wrap">
<div class="title" v-if="companyInfo.companyAudit.status == 2">重新提交</div> <div class="title" v-if="status == 2">重新提交</div>
<image <image @click="chooseImage" v-if="myLicensePath" :src="evn.APP_IMAGE_BASE_API + myLicensePath" mode="" />
@click="chooseImage"
v-if="companyInfo.companyAudit.licensePath"
:src="evn.APP_IMAGE_BASE_API + companyInfo.companyAudit.licensePath"
mode=""
/>
<view>注:接受拍摄复印件,黑白复印需要加盖公章,大小不超过10M</view> <view>注:接受拍摄复印件,黑白复印需要加盖公章,大小不超过10M</view>
</view> </view>
<view class="content-wrap"> <view class="content-wrap">
...@@ -25,8 +20,8 @@ ...@@ -25,8 +20,8 @@
<wd-input <wd-input
type="text" type="text"
size="small" size="small"
:disabled="companyInfo.companyAudit.status != 2" :disabled="status != 2"
v-model="companyInfo.companyAudit.companyName" v-model="companyName"
placeholder="请输入企业全称" placeholder="请输入企业全称"
:use-label-slot="true" :use-label-slot="true"
@input="handleChange($event, 'companyName')" @input="handleChange($event, 'companyName')"
...@@ -40,11 +35,11 @@ ...@@ -40,11 +35,11 @@
<wd-input <wd-input
type="text" type="text"
size="small" size="small"
:disabled="companyInfo.companyAudit.status != 2" :disabled="status != 2"
v-model="companyInfo.companyAudit.creditCode" v-model="myCode"
placeholder="请输入信用代码" placeholder="请输入信用代码"
:use-label-slot="true" :use-label-slot="true"
@input="handleChange($event, 'creditCode')" @input="handleChange($event, 'myCode')"
> >
<template #label> <template #label>
<view class="label">信用代码</view> <view class="label">信用代码</view>
...@@ -54,7 +49,7 @@ ...@@ -54,7 +49,7 @@
<view class="item"> <view class="item">
<view class="label"> 有效期 </view> <view class="label"> 有效期 </view>
<view class="content"> <view class="content">
<wd-radio-group v-model="radio" shape="dot" inline :disabled="companyInfo.companyAudit.status != 2"> <wd-radio-group v-model="radio" shape="dot" inline :disabled="status != 2">
<wd-radio :value="1">长期</wd-radio> <wd-radio :value="1">长期</wd-radio>
<wd-radio :value="2">具体时间</wd-radio> <wd-radio :value="2">具体时间</wd-radio>
</wd-radio-group> </wd-radio-group>
...@@ -63,58 +58,65 @@ ...@@ -63,58 +58,65 @@
<view class="item"> <view class="item">
<view class="label"> 日期 </view> <view class="label"> 日期 </view>
<wd-calendar <wd-calendar
v-model="companyInfo.licenseValidityPeriod" v-model="myLicenseValidityPeriod"
:disabled="radio == 1 && companyInfo.companyAudit.status != 2" :disabled="radio == 1 && status != 2"
:min-date="new Date().getTime()" :min-date="new Date().getTime()"
:max-date="new Date('2059/01/01').getTime()" :max-date="new Date('2059/01/01').getTime()"
use-default-slot use-default-slot
> >
<view :class="`content ${radio == 1 ? 'disabled' : ''}`"> <view :class="`content ${radio == 1 ? 'disabled' : ''}`">
{{ {{ (myLicenseValidityPeriod && dayjs(myLicenseValidityPeriod).format("YYYY-MM-DD")) || "请选择" }}
(companyInfo.licenseValidityPeriod &&
dayjs(companyInfo.licenseValidityPeriod).format("YYYY-MM-DD")) ||
"请选择"
}}
</view> </view>
</wd-calendar> </wd-calendar>
</view> </view>
</view> </view>
<view class="btn-wrap" v-if="companyInfo.companyAudit.status == 2"> <view class="btn-wrap" v-if="status == 2">
<button class="bottom-btn" @tap="submit">提交</button> <button class="bottom-btn" @tap="submit">提交</button>
</view> </view>
</div> </div>
</template> </template>
<script setup> <script setup>
import { useCompanyInfoStore } from "./companyInfo";
import evn from "@/utils/config"; import evn from "@/utils/config";
import { uploadFiles } from "@/utils/fileUpload"; import { uploadFiles } from "@/utils/fileUpload";
import { getCompanyInfoApi, resubmitCompanyApi } from "@/api/user";
import { ref } from "vue"; import { ref } from "vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { resubmitCompanyApi } from "@/api/user";
const { companyInfo } = useCompanyInfoStore();
const radio = ref(1); const radio = ref(1);
const myCompanyName = ref(""); const companyName = ref("");
const myCreditCode = ref(""); const myCode = ref("");
if (companyInfo.licenseValidityPeriod == 4102329600000) { const myLicensePath = ref("");
let status = ref(1);
let myLicenseValidityPeriod = ref(4102329600000);
let companyInfo = reactive({});
onReady(() => {
getCompanyInfoApiFn();
});
function getCompanyInfoApiFn() {
getCompanyInfoApi().then(res => {
companyInfo = res.data;
status.value = res.data.companyAudit.status;
myLicensePath.value = res.data.companyAudit.licensePath;
companyName.value = res.data.companyAudit.companyName;
myCode.value = res.data.companyAudit.creditCode;
myLicenseValidityPeriod.value = res.data.licenseValidityPeriod;
if (res.data.licenseValidityPeriod == 4102329600000) {
radio.value = 1; radio.value = 1;
} else { } else {
radio.value = 2; radio.value = 2;
}
});
} }
onMounted(() => {
myCompanyName.value = companyInfo.companyAudit.companyName;
myCreditCode.value = companyInfo.companyAudit.creditCode;
});
/* 选择图片 */ /* 选择图片 */
const chooseImage = () => { const chooseImage = () => {
if (companyInfo.companyAudit.status == 2) { if (status.value == 2) {
uni.chooseImage({ uni.chooseImage({
count: 1, count: 1,
success: async ({ tempFiles }) => { success: async ({ tempFiles }) => {
const res = await uploadFiles(tempFiles); const res = await uploadFiles(tempFiles);
companyInfo.companyAudit.licensePath = res[0].key; myLicensePath.value = res[0].key;
} }
}); });
} }
...@@ -122,31 +124,21 @@ const chooseImage = () => { ...@@ -122,31 +124,21 @@ const chooseImage = () => {
const handleChange = (event, type) => { const handleChange = (event, type) => {
if (type == "companyName") { if (type == "companyName") {
myCompanyName.value = event.value; companyName.value = event.value;
} else { } else {
myCreditCode.value = event.value; myCode.value = event.value;
console.log("event", myCreditCode.value);
} }
}; };
const submit = () => { const submit = () => {
console.log(companyInfo);
let { companyName: name, creditCode, licenseValidityPeriod, licensePath } = companyInfo.companyAudit; let { companyName: name, creditCode, licenseValidityPeriod, licensePath } = companyInfo.companyAudit;
creditCode = myCreditCode.value; name = companyName.value;
name = myCompanyName.value;
console.log("event", creditCode, name);
if (radio.value == 1) { if (radio.value == 1) {
licenseValidityPeriod = "2099-12-31"; licenseValidityPeriod = "2099-12-31";
} else {
licenseValidityPeriod = myLicenseValidityPeriod.value;
} }
console.log("{ name, creditCode, licenseValidityPeriod, licensePath }", {
name, resubmitCompanyApi({ name, creditCode: myCode.value, licenseValidityPeriod, licensePath: myLicensePath.value }).then(res => {
creditCode,
licenseValidityPeriod,
licensePath
});
resubmitCompanyApi({ name, creditCode, licenseValidityPeriod, licensePath }).then(res => {
if (res.code == 200) { if (res.code == 200) {
uni.showToast({ uni.showToast({
title: "提交成功", title: "提交成功",
......
<template> <template>
<NavBar :showIcon="true" :showTitle="true" title="简历详情" backgroundBox="transparent"></NavBar>
<div class="resume-page"> <div class="resume-page">
<!-- 个人信息 --> <!-- 个人信息 -->
<view class="user-info flex-between"> <view class="user-info flex-between">
......
import axios from "axios"; import axios from "axios";
import { getToken } from "@/utils/token"; import { getToken } from "@/utils/token";
const baseURL = "https://lygsh-api.wjzpgz.com/"; // const baseURL = "https://lygsh-api.wjzpgz.com/";
const baseURL = "http://192.168.11.179:8080/";
// 创建一个 axios 实例 // 创建一个 axios 实例
const instance = axios.create({ const instance = axios.create({
baseURL, // 设置基础 URL baseURL, // 设置基础 URL
......
...@@ -67,3 +67,47 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss") ...@@ -67,3 +67,47 @@ export const formatTimestamp = (timestamp, formatString = "YYYY-MM-DD hh:mm:ss")
.replace(/mm/g, minute) .replace(/mm/g, minute)
.replace(/ss/g, second); .replace(/ss/g, second);
} }
export const validateForm=(formData,requiredFields) =>{
const phoneRegex = /^1[3-9]\d{9}$/; // 正则表达式匹配中国大陆手机号码
for (const field of requiredFields) {
if(field === "contactPhone") {
if (!formData[field] || !phoneRegex.test(formData[field])) {
uni.showToast({
title: `请填写正确电话号码!`,
icon: "none",
duration: 2000
});
return false;
}
} else if (!formData[field]) {
uni.showToast({
title: `请填写${
field === "jobTypeText"
? "职位类型"
: field === "jobDesc"
? "职位描述"
: field === "jobName"
? "职位名称"
:field==='address'
?'工作地址'
:field==='identityRequirement'
?'身份要求'
:field==='educationRequirement'
?'学历要求'
:field==='maxAgeRequirement'
?'年龄要求'
:field==='contactPerson'
?'联系人'
:field==='jobType'
?'职位类型'
:""
}!`,
icon: "none",
duration: 2000
});
return false;
}
}
return true;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment