<template>
	<view data-remark='发布职位' class="g-rh-job-detail p-root-home-jobForm g_kuaishou g_bg_page" v-if="showPage">
		<!-- <view class="" @click="getNumberByRegular(aitext)"  > 123123 </view> -->
		<!-- <xe-event-source ref="EventSourceRef" :url="eventSourceUrl" :options="eventSourceOptions" @callback="handleCallback"></xe-event-source> -->
		<gao-ChatSSEClient ref="sseTest" @onOpen="openCore" @onError="errorCore" @onMessage="messageCore" @onFinish="finishCore" />
		<!-- #ifdef APP-PLUS -->
		<!-- #endif -->
		<!-- #ifdef  MP-WEIXIN -->
		<u-line-progress class="g_position_abso" v-if="ailoading" style="position: fixed; width: 100vw; top: -13px; left: 0px; z-index: 99999" active-color="#3578f6" :percent="defaultPercent" :round="false" height="8" :show-percent="false" inactiveColor="#f5f5f5"> </u-line-progress>
		<!-- #endif -->
		<!-- #ifdef   APP-PLUS -->
		<u-line-progress class="g_position_abso" v-if="ailoading" style="position: fixed; width: 100vw; top: 0px; left: 0px; z-index: 99999" active-color="#3578f6" :percent="defaultPercent" :round="false" height="8" :show-percent="false" inactiveColor="#f5f5f5"> </u-line-progress>
		<!-- #endif -->
		<!-- v-if="ailoading" -->
    <!-- ref="formInfo" -->
		<form class="g_fs_16">
			<!-- :scroll-into-view="scrollTo" -->
			<scroll-view ref="scrollViewRef" id="scrollView" class="" :scroll-top="scrollTop" :show-scrollbar="false" :scroll-y="true" :scroll-with-animation="true" style="height: calc(100vh - 90px); padding: 0 0; box-sizing: border-box; position: relative" :style="{ bottom: isIosWxapp ? pbc : '0' }" :scroll-into-view-offset="-200">
				<view class="g_ml_10 g_mr_10 g_mt_10">
					<!-- <view> -->
					<!-- <view class="g_flex_row_start g_mb_8 g_pl_10"> 通告内容 </view> -->
					<view class="g_bg_f g_pl_12 g_pt_4 g_pb_12 g_pr_12" :class="AIUnfold ? 'AISticky' : ' g_radius_8'">
						<view class="g_flex_row_between">
							<view class="g_flex_1">
								<textarea class=" " data-type="desp" v-model="aitext" placeholder="粘贴现有通告 或输入文本，AI智能填表" placeholder-style="color:#999" :maxlength="-1" :style="{ width: '100%', height: AIUnfold ? '262px' : '104px' }"></textarea>
							</view>
						</view>
						<div class="g_flex_row_between g_pt_4">
							<view class="g_flex_row_start">
								<!-- <view class="g_w_24 g_h_24 g_radius_50 g_bg_f5 g_flex_row_center flex_center" @click="AIUnfold = !AIUnfold">
									<i class="iconfont" :class="AIUnfold ? 'g_fs_10 icon-a-quanpingzhankai1x1' : 'g_fs_12  icon-a-quanpingshouqi1x1'"></i>
								</view> -->
								<!-- <view class="g_w_24 g_h_24 g_radius_50 g_bg_f5 g_flex_row_center flex_center" :class="AISticky ? 'g_c_f g_bg_main' : 'g_c_0 g_bg_f5'" @click="AISticky = !AISticky">
										<i class="iconfont icon-pushpin g_fs_12"></i>
									</view> -->
							</view>
							<view class="g_flex_row_end">
								<view class="g_mr_8 g_w_72 g_fw_600" @click.stop="getClipboard">
									<rh-button size="small_auto" type="default" height="24" :fontSize="12" :btnText="(aitext ? '清空' : '粘贴') + '内容'"></rh-button>
								</view>
								<view @click.stop="getCoze" class="g_w_72 g_fw_600">
									<rh-button size="small_auto" gradual="linear-gradient(-130deg, #5c6cf7, #9963f9)" icon="icon-aitubiao" type="gradual" height="24" :fontSize="12" btnText="AI填表"></rh-button>
								</view>
							</view>
						</div>
					</view>
					<!-- </view> -->

					<view class="g_bg_f g_mt_10 g_radius_8 g_pl_16 g_pr_16">
						<view class="g_flex_row_between heightSet flex_center">
							<view class="g_fw_600 g_fs_16">基本信息</view>
						</view>
						<view class="g_flex_row_start flex_center heightSet g_border_e_t g_position_rela" id="jobName">
							<view class="loadBox">
								<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.jobName"></rh-dot>
							</view>
							<u-input v-model="formInfo.jobName" :customStyle="{}" class=" " style="width: 97%" :placeholder="loadingControl.jobName ? '' : '职位名称'" placeholder-style="color:#999;" />
						</view>
						<view class="showdoc g_border_e_t heightSet g_position_rela" id="jobMark">
							<view class="loadBox">
								<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.jobMark"></rh-dot>
							</view>
							<view class="menu-obj" @click="showMarkCheck">
								<view class="g_flex_row_between flex_center">
									<view :scroll-x="true" enable-flex style="max-width: calc(100% - 40px); overflow-x: auto" v-if="jobMark.length > 0" class="g_flex_row_start flex_center flex_nw g_flex_1 g_clear_scroll g_h_26">
										<view class="menu-btn menu-active" v-for="item in jobMark">
											<view class="btn g_radius_4 g_pl_8 g_pr_8 g_fs_12">{{ item.name }}</view>
										</view>
									</view>
									<view class="menu-btn g_text_s">
										<view class="g_c_9" v-if="jobMark.length == 0 && !loadingControl.jobMark">职位标签</view>
									</view>
									<view class="iconfont icon-gengduo11 g_c_9 g_fs_12"> </view>
								</view>
							</view>
						</view>
						<view class="g_flex_row_between flex_center g_border_e_t heightSet g_position_rela" id="ageSex">
							<view class="loadBox" style="right: 20px">
								<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.ageSex"></rh-dot>
							</view>
							<view class="showdoc g_flex_row_between flex_center vertical_line_after" style="min-width: 80px" @click="showPop('age')">
								<view class="g_c_3">
									<template v-for="(item, index) in ageSex.list" :key="index">
										<view v-if="ageSex.ageSexActive == item.id">
											<view class="">{{ item.text }}</view>
										</view>
									</template>
								</view>
								<view class="iconfont icon-gengduo11 g_c_9 g_fs_12"> </view>
							</view>
							<!-- v-if='ageSex.ageSexActive != 1' -->
							<view class="g_flex_row_between flex_center g_pl_10 g_radius_8 g_flex_1" v-if="ageSex.ageSexActive != 1" @click="ageShow = true">
								<!-- 	<view class="g_mr_16">
						        {{ageSex.list[ageSex.ageSexActive].text}}
					      </view> -->
								<!-- <u-input  v-model="ageHandler" class="  g_flex_1" placeholder="如：20-30" placeholder-style="color:#999" /> -->
								<!-- <view :class="">选择年龄</view> -->

								<picker mode="multiSelector" class="g_flex_1" @columnchange="handlerAge($event, 'man')" @cancel="cancelAge" @change="getAgeValue($event, 'all')" :value="ageValue" :range="ageList">
									<view class="g_flex_row_between">
										<view class="g_flex_1 g_text_r" :class="ageHandler ? 'g_c_3' : 'g_c_9'">{{ ageHandler || (loadingControl.ageSex ? "" : "请选择") }}</view>
										<view class="g_flex_none g_ml_4">岁</view>
									</view>
								</picker>
								<!-- <view class=""> 岁 </view> -->
							</view>
							<view class="g_flex_row_around flex_center g_flex_1" v-else>
								<view class="g_flex_row_around flex_center g_pl_10 g_flex_1 g_radius_8">
									<view class=""> 男 </view>
									<!-- <u-input  v-model="manAgeHandler" class="  g_pl_16 g_flex_1" placeholder="如：20-30" placeholder-style="color:#999" /> -->
									<picker mode="multiSelector" class="g_flex_1" @columnchange="handlerAge($event, 'man')" @cancel="cancelAge" @change="getAgeValue($event, 'man')" :value="ageValue" :range="ageList">
										<view class="g_ml_6 g_text_r" :class="manAgeHandler ? 'g_c_3' : 'g_c_9'">{{ manAgeHandler || "请选择" }}</view>
									</picker>
									<view class="g_ml_4"> 岁 </view>
								</view>
								<view class=""> ； </view>
								<view class="g_flex_row_around flex_center g_flex_1 g_radius_8">
									<view class=""> 女 </view>
									<!-- <u-input  v-model="womanAgeHandler" class="  g_pl_16 g_flex_1" placeholder="如：20-30" placeholder-style="color:#999" /> -->
									<picker mode="multiSelector" class="g_flex_1" @columnchange="handlerAge($event, 'woman')" @cancel="cancelAge" @change="getAgeValue($event, 'woman')" :value="ageWomanValue" :range="ageList">
										<view class="g_ml_6 g_text_r" :class="womanAgeHandler ? 'g_c_3' : 'g_c_9'">{{ womanAgeHandler || "请选择" }}</view>
									</picker>
									<view class="g_ml_4"> 岁 </view>
								</view>
							</view>
						</view>
						<view class="g_flex_row_between flex_center g_border_e_t heightSet g_position_rela" id="salary">
							<view class="loadBox" style="right: 56px">
								<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.salary"></rh-dot>
							</view>
							<view class="showdoc g_flex_row_between flex_center vertical_line_after" style="min-width: 80px" @click="showPop('salary')">
								<view class="g_c_3" style="line-height: 1">
									<template v-for="(item, index) in staffPrice.list" :key="item.id">
										<view v-if="formInfo.salaryClassify == item.id" class="">
											<view class="">{{ item.text }}</view>
										</view>
									</template>
								</view>
								<view class="iconfont icon-gengduo11 g_c_9 g_fs_12"> </view>
							</view>
							<view class="g_flex_row_around flex_center g_pl_10 g_radius_8 g_flex_1" v-if="formInfo.salaryClassify != 4 && formInfo.salaryClassify != 6 && formInfo.salaryClassify != 7">
								<u-input v-model="formInfo.salaryClassifyValue" type="digit" class="g_flex_1" :customStyle="{ textAlign: 'right' }" :placeholder="loadingControl.salary ? '' : currentPrice.placeholder" placeholder-style="color:#999" />
								<view class="g_ml_4">
									{{ currentPrice.suffix || "" }}
								</view>
							</view>
							<view class="g_flex_row_end flex_center g_pl_10 g_radius_8 g_flex_1" v-else>
								<view class="g_mr_16" v-if="formInfo.salaryClassify == 4 || formInfo.salaryClassify == 6">
									{{ currentPrice.pre }}
								</view>
								<u-input v-model="monthValue" v-if="formInfo.salaryClassify == 7" class="g_flex_1" :customStyle="{ textAlign: 'right' }" :placeholder="loadingControl.salary ? '' : currentPrice.placeholder" placeholder-style="color:#999" />
								<view class="g_ml_4">
									{{ currentPrice.suffix || "" }}
								</view>
							</view>
						</view>
						<view class="g_flex_row_start flex_center g_border_e_t g_position_rela" id="salaryDetail" style="min-height: 48px">
							<view class="loadBox">
								<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.salaryDetail"></rh-dot>
							</view>
							<!-- {{isIosWxapp}} -->
							<!-- :adjust-position="isIosWxapp ? false : true" -->
							<u-input v-model="formInfo.salaryDetail" maxlength="1000" type="textarea" height="44" class="g_flex_1" :placeholder="loadingControl.salaryDetail ? '' : '请填写薪资说明'" placeholder-style="color:#999" :clearable="false" @focus="onInputFocus" :customStyle="{ marginLeft: isios ? '-5px' : 0 }" id="input1" />
						</view>
						<view class="" v-if="false && formInfo.salaryClassify != 7">
							<view class="g_flex_row_start g_mb_8 g_pl_10">
								综合月薪
								<!-- <view class="xing g_c_fa2b"> * </view> -->
							</view>
							<view class="g_flex_row_around flex_center heightSet g_pl_10 g_pr_10 g_radius_8">
								<u-input v-model="monthValue" class="g_flex_1" placeholder="如5000-7000" placeholder-style="color:#999" />
								<view class=""> 元/月 </view>
							</view>
						</view>
						<!-- <view class="" v-if="false">
							<view class="g_flex_row_start g_mb_8 g_pl_10"> 驻场信息 </view>
							<view class="g_flex_row_start flex_center heightSet g_pl_10 g_pr_10 g_flex_1 g_radius_8" @click="handleOpenModal">
								<view class="g_flex_row_start" v-if="selectedOnsite.length > 0">
									<view class="onsiteSub" v-for="(item, index) in selectedOnsite" @click.stop="delSelectedOnsite(index, item)" :key="item.id">
										<view class="g_flex_row_start flex_center">
											{{ item.userName }}
											<i class="iconfont icon-guanbi g_fsi_6 g_ml_10"></i>
										</view>
									</view>
								</view>
								<view class="g_c_9 g_fs_15" v-else> 请选择驻场信息 </view>
							</view>
						</view> -->
					</view>
					<view class="g_bg_f g_mt_10 g_radius_8 g_pl_16 g_pr_16">
						<view class="">
							<view class="g_flex_row_start flex_center heightSet">
								<u-input v-model="formInfo.storeName" class=" " style="width: 97%" placeholder="请填写招聘企业" placeholder-style="color:#999" />
							</view>
						</view>
						<view class="g_border_e_t" id="storeAddr">
							<view class="g_flex_row_around flex_center heightSet g_position_rela">
								<view class="loadBox" style="left: 0px">
									<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.storeAddr"></rh-dot>
								</view>
								<u-input v-model="formInfo.storeAddr" :clearable="false" class="g_flex_1" :placeholder="loadingControl.storeAddr ? '' : '企业地址'" placeholder-style="color:#999" />
								<view class="g_text_c" :style="{color: themeColor}" @click="chooseAddress">
									<view class="iconfont icon-dizhi1 g_fs_16 g_mb_2" style="line-height: 1"></view>
									<view class="g_fs_10" style="line-height: 1"> 位置 </view>
								</view>
							</view>
						</view>
					</view>

					<view class="g_mt_10">
						<view class="g_bg_f g_pl_16 g_pr_16 g_pb_12 g_radius_8" id="jobDesp" style="min-height: 240px">
							<view class="g_flex_row_between heightSet flex_center">
								<view class="g_fw_600 g_fs_16">职位描述</view>
								<view class="g_c_sub g_fs_14" @click="showEmpty = !showEmpty">{{ showEmpty ? "隐藏空字段" : "显示空字段" }}</view>
							</view>

							<!-- <textarea class=" " bindinput="bothwayBind" data-type="desp" v-model="formInfo.jobInfo" placeholder="请描述薪资、岗位、吃住等" placeholder-style="color:#999" :maxlength="-1" auto-height style="min-height: 137px; width: 100%"></textarea> -->
							<view class="g_border_e_t g_pt_12 g_fs_16" style="min-height: 120px">
								<!-- <textarea class="g_flex_1" :value="formInfo.jobDesp" height="44" placeholder="职位的详细描述" placeholder-style="color:#999" :auto-height="true" :style="{ marginLeft: isios ? '-5px' : 0 }"> </textarea> -->

								<template v-for="(item, index) in templateArr" :key="index">
									<view class="" v-if="item.type != 'unset' && item.show">
										<view class="g_flex_row_start flex_center g_fw_600 g_fs_16 g_mt_12 g_mb_8">
											<view class="" v-if="item.num == 1">一、</view>
											<view class="" v-if="item.num == 2">二、</view>
											<view class="" v-if="item.num == 3">三、</view>
											<view class="" v-if="item.num == 4">四、</view>
											<view class="" v-if="item.num == 5">五、</view>
											<view class="" v-if="item.num == 6">六、</view>
											<view class="">
												{{ item.type }}
											</view>
										</view>
										<template v-for="(inner, index) in item.children" :key="index">
											<view class="g_flex_row_start" style="line-height: 32px; padding-left: 15px" v-if="inner.show">
												<view class="g_flex_row_start flex_start g_w_all">
													<!-- <view class="g_mr_4"> </view> -->
													<view class="g_flex_row_start g_fw_600">
														{{ `${inner.num}. ${inner.key}:&nbsp` }}
													</view>
													<view
														class="g_fw_400 g_flex_1"
														style=""
														:style="{ color: inner.value ? '#333' : 'transparent' }"
														@click="
															() => {
																inner.edit = true;
															}
														"
														v-if="!inner.edit"
													>
														{{ inner.value || " 123" }}
													</view>
													<u-input v-model="inner.value" v-if="inner.edit" class="g_flex_1 g_ml_8" @blur="inner.edit = false" maxlength="1000" :focus="true" type="textarea" :placeholder="inner.key" placeholder-style="color:#999;line-height: 32px" :clearable="false" :customStyle="{ marginLeft: isios ? '-5px' : 0, lineHeight: '32px', paddingTop: 0 }" />
												</view>
												<!-- @blur="inner.edit = false" -->
											</view>
										</template>
									</view>
								</template>
								<view class="g_position_rela">
									<view class="loadBox">
										<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.jobDesp"></rh-dot>
									</view>
									<u-input v-model="formInfo.jobDesp" maxlength="1000" type="textarea" height="44" class="g_flex_1" :placeholder="loadingControl.jobDesp ? '' : '职位的详细描述'" placeholder-style="color:#999" :clearable="false" :customStyle="{ marginLeft: isios ? '-5px' : 0 }" />
								</view>
							</view>
							<view class="g_flex_row_start g_mt_12">
								<view class="g_mr_12 g_mb_12" v-for="(item, index) in imgList" :key="index" style="position: relative">
									<i class="iconfont icon-guanbi img-close" @click="delImg(item.url)"></i>
									<image :src="item.url" mode="" class="g_w_56 g_h_56 g_radius_6" @click="showImgs(item.url)" v-if="item.type == 'image'"></image>
									<view class="g_w_56 g_h_56 g_radius_4 videoContainer" style="overflow: hidden" @click="showVideo(item)" v-else>
										<video class="theVideo" :show-fullscreen-btn="false" :show-play-btn="false" :show-center-play-btn="false" :enable-play-gesture="true" :id="item.id" :src="item.url" @fullscreenchange="fullScreen"></video>
									</view>
								</view>
								<!-- <view class="g_w_56 g_h_56 g_bg_f5 g_text_c g_flex_column_center g_radius_6" @click="chooseMedia">
							<i class="iconfont icon-tianjia g_mb_8 g_c_6"></i>
							<view class="g_fs_10 g_c_6"> 添加图片 </view>
						</view> -->
							</view>
						</view>
					</view>
					<view class="g_bg_f g_pl_16 g_pr_16 g_radius_8 g_mt_10">
						<view class="g_flex_row_start flex_center g_fw_600 g_fs_16 heightSet">佣金</view>
						<view class="g_flex_row_between flex_center g_border_e_t g_position_rela" id="returnFee">
							<view class="loadBox" style="right: 56px">
								<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.returnFee"></rh-dot>
							</view>
							<view class="showdoc g_flex_row_between flex_center vertical_line_after heightSet" style="min-width: 80px" @click="showPop('serviceFee')">
								<view class="g_c_3" style="line-height: 1">
									<template v-for="(item, index) in serviceFee.list" :key="item.id">
										<view v-if="formInfo.returnFeeType == item.id" class="">
											<view class="">{{ item.text }}</view>
										</view>
									</template>
								</view>
								<view class="iconfont icon-gengduo11 g_c_9 g_fs_12"> </view>
							</view>
							<view class="g_flex_row_around flex_center g_bg_f heightSet g_pl_10 g_radius_8 g_flex_1" v-if="formInfo.returnFeeType != 7">
								<!-- 	<view class="g_mr_16">
                  {{serviceFee.list[formInfo.returnFeeType].pre}}
                </view> -->
								<u-input v-model="formInfo.returnFee" type="digit" class="g_flex_1" :customStyle="{ textAlign: 'right' }" :placeholder="loadingControl.returnFee ? '' : '仅数字'" placeholder-style="color:#999" />
								<view class="g_ml_4">
									{{ serviceFee.list[formInfo.returnFeeType] && serviceFee.list[formInfo.returnFeeType]["suffix"] }}
								</view>
							</view>
							<view class="g_flex_row_end flex_center g_bg_f heightSet g_pl_10 g_radius_8 g_flex_1" v-else>
								<view class="g_mr_16">
									{{ serviceFee.list[formInfo.returnFeeType].pre }}
								</view>
							</view>
						</view>
						<view class="g_border_e_t">
							<view class="g_flex_row_around flex_center g_position_rela" style="min-height: 48px">
								<view class="loadBox" style="left: 0">
									<rh-dot text="empty" size="22" minHeight="0" v-if="loadingControl.returnFeeDesp"></rh-dot>
								</view>
								<u-input v-model="formInfo.returnFeeDesp" maxlength="1000" type="textarea" height="44" class="g_flex_1" :placeholder="loadingControl.returnFeeDesp ? '' : '请填写佣金说明'" placeholder-style="color:#999" @keyboardheightchange="bindkeyboardheightchange" :adjustPosition="!isios" :clearable="false" :customStyle="{ marginLeft: isios ? '-5px' : 0 }" />
							</view>
						</view>
					</view>
					<!-- <view :style="{'height':bottomHeight}"></view> -->
				</view>
				<!-- <g-panel-fixed>
					<slot> -->

				<!-- </slot>
				</g-panel-fixed> -->
			</scroll-view>
		</form>
		<view class="g_bg_f g_pt_12 g_pl_10 g_pr_10 g_border_e_t g_pb_24 g_flex_row_center flex_center" style="position: fixed; bottom: 0px; left: 0; z-index: 100; width: 100vw">
			<!-- <view class="" @click="isOnsiteShow = true">123</view> -->
			<view class="g_mr_12 g_flex_column_center flex_center" hover-class="none" hover-stop-propagation="false" @click="resetInfo('reset')">
				<view class="iconfont icon-clear g_fs_16 g_mb_4" hover-class="none" hover-stop-propagation="false"> </view>
				<view class="g_c_6 g_fs_12">清空内容</view>
			</view>
			<view class="g_mr_12 g_flex_column_center flex_center" hover-class="none" hover-stop-propagation="false" @click="jobConfigShow = true">
				<view class="iconfont icon-shezhi g_fs_16 g_mb_4" hover-class="none" hover-stop-propagation="false"> </view>
				<view class="g_c_6 g_fs_12">职位配置</view>
			</view>
			<view class="g_mr_12 g_w_100">
				<rh-button :type="formInfo.jobName ? 'default' : 'infro'" size="default_auto" btnText="预览" @clickBtn="showPreview"></rh-button>
			</view>
			<view class="g_flex_1" hover-class="none" hover-stop-propagation="false">
				<rh-button type="primary" size="default_auto" :btnText="jobId ? '确定' : '发布职位'" @clickBtn="onSubmit"></rh-button>
			</view>
		</view>
		<u-popup v-model="isOnsiteShow" mode="bottom" :zIndex="10780" border-radius="16" height="1000" :mask-close-able="true">
			<view class="g_fs_18 g_c_3 g_flex_row_center g_pt_16"> 选择驻场 </view>
			<scroll-view scroll-y="true" style="height: 770rpx">
				<view class="g_pl_12 g_pr_12">
					<view class="g_flex_row_between g_pt_16 g_pb_16 g_border_d_b" v-for="(item, index) in residentList" :key="index" @click="handleChooseResident(item, index)">
						<view class="g_fs_17 g_c_3">{{ item.userName }}</view>
						<view class="g_flex_column_center">
							<i
								class="iconfont icon-a-duigoubeifen2"
								style="font-size: 18px"
								:style="{
									color: item.isSelected ? '#3578f6' : '#fff',
								}"
							></i>
						</view>
					</view>
				</view>
			</scroll-view>
			<view class="g_flex_row_center g_mt_16 g_pb_16">
				<rh-button type="primary" btnText="确定" @clickBtn="submitRes"></rh-button>
			</view>
		</u-popup>
		<u-popup v-model="isOnsiteShow" mode="bottom" :zIndex="10780" border-radius="16" height="1000" :mask-close-able="true">
			<view class="g_fs_18 g_c_3 g_flex_row_center g_pt_16"> 选择驻场 </view>
			<scroll-view scroll-y="true" style="height: 770rpx">
				<view class="g_pl_12 g_pr_12">
					<view class="g_flex_row_between g_pt_16 g_pb_16 g_border_d_b" v-for="(item, index) in residentList" :key="index" @click="handleChooseResident(item, index)">
						<view class="g_fs_17 g_c_3">{{ item.userName }}</view>
						<view class="g_flex_column_center">
							<i
								class="iconfont icon-a-duigoubeifen2"
								style="font-size: 18px"
								:style="{
									color: item.isSelected ? '#3578f6' : '#fff',
								}"
							></i>
						</view>
					</view>
				</view>
			</scroll-view>
			<view class="g_flex_row_center g_mt_16 g_pb_16">
				<rh-button type="primary" btnText="确定" @clickBtn="submitRes"></rh-button>
			</view>
		</u-popup>
		<u-popup v-model="isRangeShow" mode="bottom" :zIndex="10780" border-radius="16" height="1000" :mask-close-able="true">
			<view class="g_flex_column_between g_h_all">
				<view class="">
					<view class="g_fs_18 g_c_3 g_flex_row_center g_pt_16"> 选择可见范围 </view>
					<view class="g_pl_20 g_mt_20">
						<radio-group class="dib" @change="getRangeType">
							<view class="g_fs_14">
								<view class="g_mb_8 g_flex_row_start"> <radio :checked="rangeConfig.type == 0" :value="0" class="dib" color="#3578f6" style="transform: scale(0.7)"></radio><span class="g_flex_1" @click="[authInfo.realNameAuth !== 2 ? '' : getRangeType({ detail: { value: 0 } })]">仅自己可见（发布到商家后台，仅内部成员可见）</span></view>
								<view class="g_flex_row_start"> <radio :checked="rangeConfig.type == 1" :disabled="authInfo.realNameAuth !== 2" :value="1" class="dib" color="#3578f6" style="transform: scale(0.7)"></radio><span class="g_flex_1" @click="[authInfo.realNameAuth !== 2 ? '' : getRangeType({ detail: { value: 1 } })]">部分可见</span></view>
							</view>
						</radio-group>
						<view class="g_pl_20" v-if="rangeConfig.type == 1">
							<u-checkbox-group @change="getRangeVal" shape="shape">
								<view class="g_mt_12">
									<u-checkbox v-model="rangeConfig.val1" name="1" :disabled="authInfo.realNameAuth !== 2" active-color="#3578f6"> 老乡（发布到招工小程序）</u-checkbox>
								</view>
								<view class="g_mt_12">
									<u-checkbox v-model="rangeConfig.val2" name="2" :disabled="authInfo.realNameAuth !== 2" active-color="#3578f6"> 代理（发布到报名助手）</u-checkbox>
								</view>
								<view class="g_mt_12">
									<u-checkbox v-model="rangeConfig.val3" name="3" :disabled="authInfo.certificationAuth !== 2" active-color="#3578f6"> 平台（发布到人海云平台）</u-checkbox>
								</view>
							</u-checkbox-group>
						</view>
					</view>
				</view>
				<view class="g_flex_row_center g_mt_16 g_pb_16">
					<rh-button type="primary" btnText="确定" @clickBtn="submitRange"></rh-button>
				</view>
			</view>
		</u-popup>

		<!-- 薪资 性别 佣金类型选择 -->
		<u-popup v-model="popShow" mode="bottom" border-radius="16" :mask-close-able="true">
			<view class="g_pb_64">
				<view class="popText g_fw_600 g_bg_f g_fs_18 g_c_3 g_flex_row_center g_pt_16"> {{ popText }} </view>
				<view class="g_p_16">
					<view class="g_flex_cloumn_center" v-if="popText == '选择薪资类型'">
						<view v-for="(item, index) in staffPrice.list" :key="item.id" class="g_mt_12" :class="formInfo.salaryClassify == item.id ? '' : ''" :style="formInfo.salaryClassify == item.id ? {color: themeColor} : {}" @click="changeSex(item, 'staffPrice')">
							<view class="g_p_12 g_bg_f5 g_radius_8 g_text_c">{{ item.text }}</view>
						</view>
					</view>
					<view class="g_flex_cloumn_center" v-if="popText == '选择性别要求'">
						<view v-for="(item, index) in ageSex.list" :key="index" class="g_mt_12" :class="ageSex.ageSexActive == item.id ? '' : ''" :style="ageSex.ageSexActive == item.id ? {color: themeColor} : {}" @click="changeSex(item, 'ageSex')">
							<view class="g_p_12 g_bg_f5 g_radius_8 g_text_c">{{ item.text }}</view>
						</view>
					</view>
					<view class="g_flex_cloumn_center" v-if="popText == '选择佣金类型'">
						<view v-for="(item, index) in serviceFee.list" :key="item.id" class="g_mt_12" :class="formInfo.returnFeeType == item.id ? '' : ''" :style="formInfo.returnFeeType == item.id ? {color: themeColor} : {}" @click="changeSex(item, 'serviceFee')">
							<view class="g_p_12 g_bg_f5 g_radius_8 g_text_c">{{ item.text }}</view>
						</view>
					</view>
				</view>
			</view>
		</u-popup>
		<!-- 职位标签选择弹窗 -->
		<u-popup v-model="markCheck" mode="bottom" border-radius="16" :mask-close-able="true">
			<view class="g_pl_20 g_pr_20" style="height: 80vh">
				<view class="sub" id="xzfl">
					<view class="title">薪资待遇</view>
					<view class="content">
						<view @click.stop="setActive($event, item.id, index, 'tagArray1')" :class="item.active != 0 ? 'active' : ''" hover-class="none" :hover-stop-propagation="false" v-for="(item, index) in typeMark.tagArray1" :key="index"> {{ item.name }}</view>
					</view>
				</view>

				<view class="sub" id="ssbz">
					<view class="title">吃饭住宿</view>
					<view class="content">
						<view @click.stop="setActive($event, item.id, index, 'tagArray3')" :class="item.active != 0 ? 'active' : ''" hover-class="none" :hover-stop-propagation="false" v-for="(item, index) in typeMark.tagArray3" :key="index"> {{ item.name }}</view>
					</view>
				</view>

				<view class="sub" id="bzxx">
					<view class="title">工作休息</view>
					<view class="content">
						<view @click.stop="setActive($event, item.id, index, 'tagArray0')" :class="item.active != 0 ? 'active' : ''" hover-class="none" :hover-stop-propagation="false" v-for="(item, index) in typeMark.tagArray0" :key="index"> {{ item.name }}</view>
					</view>
				</view>

				<view class="sub" id="msts">
					<view class="title">面试特色</view>
					<view class="content">
						<view @click.stop="setActive($event, item.id, index, 'tagArray4')" :class="item.active != 0 ? 'active' : ''" hover-class="none" :hover-stop-propagation="false" v-for="(item, index) in typeMark.tagArray4" :key="index"> {{ item.name }}</view>
					</view>
				</view>

				<view class="sub g_pb_64" id="qtts">
					<view class="title">其它特色</view>
					<view class="content">
						<view @click.stop="setActive($event, item.id, index, 'tagArray2')" :class="item.active == item.id ? 'active' : ''" hover-class="none" :hover-stop-propagation="false" v-for="(item, index) in typeMark.tagArray2" :key="index"> {{ item.name }}</view>
					</view>
				</view>
				<view class="g_pt_16 g_pb_24 btnBox g_border_e_t">
					<rh-button type="primary" btnText="确定" @clickBtn="setMark"></rh-button>
				</view>
			</view>
		</u-popup>
		<!-- 职位配置弹窗 -->
		<u-popup v-model="jobConfigShow" mode="bottom" border-radius="16" :mask-close-able="true">
			<view class="g_pl_20 g_pr_20" style="min-height: 40vh">
				<view class="g_fs_18 g_c_3 g_flex_row_center g_pt_16"> 职位配置 </view>

				<view class="">
					<view class="g_flex_row_between flex_center g_border_e_b g_p_16">
						<view class="">发布后默认开招</view>
						<view class="">
							<u-switch v-model="jobConfig.recruitment" class="" size="44" activeColor="#07C160"></u-switch>
						</view>
					</view>
					<!-- <view class="g_flex_row_between flex_center g_border_e_b g_p_16">
						<view class="">发布到平台</view>
						<view class="g_flex_1 g_text_r" @click="checkAuth">
							<u-switch v-model="jobConfig.daotian" :disabled="authInfo.certificationAuth !== 2" class="" size="44" activeColor="#07C160"></u-switch>
						</view>
					</view> -->
					<view class="g_flex_row_between flex_center g_border_e_b g_p_16">
						<view class="">置顶(招工小程序)</view>
						<view class="g_flex_1 g_text_r">
							<u-switch v-model="jobConfig.top" :disabled="true" class="" size="44" activeColor="#07C160"></u-switch>
						</view>
					</view>
					<!-- <view class="g_flex_row_between flex_ceSnter g_border_e_b g_p_16" @click="isServiceShow = true">
						<view class="">客服</view>
						<view class="g_flex_row_end flex_center g_flex_1">
							{{ selectedService.length > 0 ? selectedService[0].aliasName : "" }}
							<i class="iconfont icon-gengduo11 g_c_9"></i>
						</view>
					</view>
					<view class="g_flex_row_between flex_center g_p_16" @click="isOnsiteShow = true">
						<view class="">驻场</view>
						<view class="g_flex_row_end flex_center g_flex_1">
							{{ selectedOnsite && selectedOnsite.length > 0 ? selectedOnsite[0].aliasName : "" }}
							<i class="iconfont icon-gengduo11 g_c_9"></i>
						</view>
					</view> -->
					<view class="g_flex_row_between flex_center g_p_16" @click="isRangeShow = true">
						<view class="">可见范围</view>
						<view class="g_flex_row_end flex_center g_flex_1">
							{{ rangeConfig.text }}
							<i class="iconfont icon-gengduo11 g_c_9"></i>
						</view>
					</view>
				</view>
				<view class="g_pt_16 g_pb_24 btnBox g_border_e_t">
					<rh-button type="primary" btnText="确定" @clickBtn="jobConfigShow = false"></rh-button>
				</view>
			</view>
		</u-popup>
		<!-- 职位预览弹窗 -->
		<u-popup v-model="previewShop" class="" mode="bottom" border-radius="16" :closeable="true" :mask-close-able="true">
			<scroll-view :scroll-y="true" enable-flex class="g_flex_column_start flex_nw g_bg_f_5" style="height: 95vh; box-sizing: border-box">
				<view class="g_pl_16 g_pr_16 g_pb_32">
					<view class="g_h_42 g_bg_ed g_position_sticky"> </view>
					<view class="g_bg_f g_radius_8 g_pl_16 g_pr_16 g_flex_row_between flex_center g_fs_16" style="flex: none" @click="showFee">
						<view class="g_flex_row_start" style="flex: none">
							<view class="g_fw_600 g_mr_4 g_h_67 g_flex_column_center">代理佣金</view>
						</view>
						<view class="g_flex_row_end flex_center g_h_67" style="flex: 1">
							<span class>{{ formInfo.returnFee ? formInfo.returnFee + serviceFee.list[formInfo.returnFeeType]["suffix"] : "请填写佣金" }}</span>
							<view class="iconfont icon-gengduo11 g_fs_14 g_c_6 g_ml_4"></view>
						</view>
					</view>
					<view class="g_flex_1 g_bg_f g_radius_8 g_pt_10 g_pl_16 g_pr_16 g_mt_10">
						<view class="m-info">
							<view class="g_mb_10 g_flex_row_between flex_center">
								<view class="g_flex_1 g_c_3 g_fs_20 g_fw_bold">{{ formInfo.jobName || "职位名称" }}</view>
								<view class="g_fs_14 g_c_9">
									{{ formInfo.updateTime }}
								</view>
							</view>
							<view class="g_c_9">
								<view class="g_flex_row_start flex_center g_mb_8 g_fs_14">
									<view class="g_lh_1_2">{{ formInfo.storeAddr ? G.setJobInfoPositionv3(formInfo.storeAddr) + "丨" : "企业位置" + "丨" }} </view>
									<view class="" v-if="ageSex.ageSexActive != 1">
										{{ ageSex.list[ageSex.ageSexActive].text + "丨" }}
									</view>
									<view class="">
										{{ (ageSex.ageSexActive != 1 ? ageHandler : "男" + manAgeHandler + "; " + "女" + womanAgeHandler) || "年龄要求" }}
									</view>
								</view>
							</view>
						</view>
						<view class="g_flex_row_start g_fs_14">
							<!-- :style="{ color: labelColor[index % labelColor.length], 'background-color': bgColor[index % bgColor.length] }" -->
							<view v-for="(item, index) in jobMark" :style="{ color: `${labelColor[index % labelColor.length].textColor}`, 'background-color': `${labelColor[index % labelColor.length].bgColor}` }" class="g_mr_8 g_mb_8 g_pl_4 g_pr_4"> {{ item.name }}</view>
							<view class="g_c_9 g_pl_4 g_pr_4 g_radius_4" v-if="jobMark.length == 0" style="background: rgba(204, 204, 204, 0.2); border: 1rpx solid transparent; color: #666666; white-space: nowrap">职位标签</view>
						</view>
						<view class="g_flex_row_between flex_center g_mt_8 g_mb_12">
							<view class="g_flex_row_start flex_center">
								<view class="g_fs_16 g_fw_600 g_c_f40 g_lh_1_2 g_flex_column_center" v-html="formInfo.salaryClassifyValue ? G.getSalaryClassifyValueHtml(formInfo.salaryClassify, formInfo.salaryClassifyValue * 100) : '职位薪资'"> </view>
								<view class="g_fs_14 g_c_9">
									{{ monthValue ? "丨" + monthValue : "丨" + "综合月薪" }}
								</view>
							</view>
						</view>
						<view class="g_fs_14 g_border_e_t g_pb_20 g_flex_column_start">
							<template v-for="(item, index) in templateArr" :key="index">
								<view class="" v-if="item.type != 'unset'">
									<view class="g_flex_row_start flex_center g_fw_600 g_mt_12 g_mb_8 g_fs_16" v-if="item.show && item.preview">
										<view class="" v-if="item.typePreNum == 1">一、</view>
										<view class="" v-if="item.typePreNum == 2">二、</view>
										<view class="" v-if="item.typePreNum == 3">三、</view>
										<view class="" v-if="item.typePreNum == 4">四、</view>
										<view class="" v-if="item.typePreNum == 5">五、</view>
										<view class="" v-if="item.typePreNum == 6">六、</view>
										<view class="">
											{{ item.type }}
										</view>
									</view>
									<template v-for="(inner, index) in item.children" :key="index">
										<view class="g_flex_row_start" style="line-height: 22px; padding-left: 16px" v-if="inner.show && inner.value">
											<view class="g_flex_row_start flex_start g_fw_600">
												<view class="g_mr_4" hover-class="none" hover-stop-propagation="false">
													{{ `${inner.subPreNum}. ` }}
												</view>
												<view class="g_flex_1">
													{{ `${inner.key}: ` }}
													<text class="g_fw_400 g_ml_4" selectable="false" space="false" decode="false">
														{{ inner.value }}
													</text>
												</view>
											</view>
											<!-- @blur="inner.edit = false" -->
										</view>
									</template>
								</view>
							</template>
							<view class="g_c_9 g_pt_12 g_flex_1" v-if="templateArr.length <= 0"> 职位的详细描述 </view>
						</view>
					</view>
				</view>
			</scroll-view>
		</u-popup>
		<!-- 发布职位确认框 -->
		<u-modal v-model="submitConfirm" negativeTop="52" confirmText="发布职位" :showTitle="false" :confirmStyle="{ color: '#576b95', 'font-weight': 600 }" :cancelStyle="{ color: '#000', 'font-weight': 600 }" :showConfirmButton="false">
			<div class="g_fs_17 g_c_6 g_text_c">
				<div class="g_pt_42 g_pb_36">
					<div>请确认是否发布职位</div>
					<div class="g_fs_14 g_flex_row_center flex_center g_pt_12" @click="checkAuth">
						<radio :checked="jobConfig.daotian" :disabled="authInfo.certificationAuth !== 2" class="dib biggerSize" color="#3578f6" style="zoom: 0.6" />
						同步至全平台
					</div>
				</div>
				<div class="g_flex_row_center flex_center g_fw_600 g_border_e_t">
					<div class="g_flex_1 g_h_50 g_text_c g_c_0 g_border_e_r" hover-class="thover" @click="submitConfirm = false" style="line-height: 50px">取消</div>
					<div class="g_flex_1 g_h_50 g_text_c g_c_sub" hover-class="thover" @click="finallySubmit" style="line-height: 50px">发布职位</div>
				</div>
			</div>
		</u-modal>
	</view>
</template>

<script setup>
import { h, ref, onMounted, onBeforeMount, watch, getCurrentInstance, computed, nextTick,defineProps } from "vue";
import { onLoad, onShow, onHide } from "@dcloudio/uni-app";
const G = getCurrentInstance().appContext.app.config.globalProperties.G;
const api = getCurrentInstance().appContext.app.config.globalProperties.api;
const themeColor = ref(getApp().globalData.themeColor);
let sseTest = ref(null); // sse请求的实例
import { locationList } from "../../libs/utils/locationList.js";
import color from "../../libs/utils/color";
// 创建响应式数据
const labelColor = ref([
	{
		textColor: "#c41d7f",
		bgColor: "#fff0f6",
	},
	{
		textColor: "#096dd9",
		bgColor: "#e6f7ff",
	},
	{
		textColor: "#531dab",
		bgColor: "#f9f0ff",
	},
	{
		textColor: "#d46b08",
		bgColor: "#fff7e6",
	},
	{
		textColor: "#389e0d",
		bgColor: "#f6ffed",
	},
	{
		textColor: "#08979c",
		bgColor: "#e6fffb",
	},
	{
		textColor: "#cf1322",
		bgColor: "#fff1f0",
	},
]);

const jobConfig = ref({
	daotian: false,
});
const jobConfigShow = ref(false);
const AIUnfold = ref(false);
const AISticky = ref(false);
const sseModule = ref(null);
const systemInfo = ref("");
const scrollTo = ref(""); // 页面滚动
const isios = ref(false); // ios判断
const allHeight = ref(48);
const aitext = ref(""); // 输入的工单内容
const popShow = ref(false);
const popText = ref("");
const middleJson = ref({
	标题: { content: "", end: false },
	性别年龄: { content: "", end: false },
	标签: { content: "", end: false },
	薪资: { content: "", end: false },
	End: { content: "", end: false },
});
const aiConfig = ref({
	token: "",
	id: "",
});
const templateArrCopy = ref([
	// 职位描述模板
	{
		type: "工作内容",
		show: false,
		childrenType: ["工作内容", "工作方式", "班次工时", "休息", "工衣", "车间", "安检门", "带手机", "流水线"],
		children: [],
	},
	{
		type: "工作要求",
		show: false,
		childrenType: ["性别年龄", "文化学历", "身份证", "资质证件", "纹身烟疤", "案底黑户", "少数民族", "区域要求", "身体状况", "体检要求", "返厂政策"],
		children: [],
	},
	{
		type: "薪资待遇",
		show: false,
		childrenType: ["岗位薪资", "综合月薪", "薪资明细", "发薪日", "银行卡", "预支工资", "岗前培训", "试用期", "员工福利"],
		children: [],
	},
	{
		type: "吃饭住宿",
		show: false,
		childrenType: ["吃饭", "住宿", "保险"],
		children: [],
	},
	{
		type: "押金",
		show: false,
		childrenType: ["餐卡押金", "宿舍押金", "工装押金", "厂牌押金", "工具押金"],
		children: [],
	},
	{
		type: "面试",
		show: false,
		childrenType: ["面试地址", "面试评价", "面试时间", "面试注意事项", "项目驻场"],
		children: [],
	},
	{
		type: "unset",
		show: false,
		childrenType: ["佣金", "佣金详情", "企业位置", "职位标签", "职位标题", "职位分类"],
		children: [],
	},
]);
const templateArr = ref([]);
const jsonStr = ref({});
const ailoading = ref(false);
const defaultPercent = ref(0);
const timer = ref(null); // inter定时器
const timer1 = ref(null); // inter定时器
let formInfo = ref({
	jobName: "",
	returnFeeType: 0,
	salaryClassify: 0,
});
const jobMark = ref([]);
const ageShow = ref(false);
const ageValue = ref([0, 44]);
const ageWomanValue = ref([0, 44]);
const imgList = ref([]); // 上传图片的列表
const serviceFee = ref({
	// 服务费类型
	list: [
		{
			id: 0,
			text: "按小时",
			pre: "按时",
			suffix: "元/小时",
		},
		{
			id: 1,
			text: "按天数",
			pre: "按天",
			suffix: "元/天",
		},
		{
			id: 2,
			text: "按月数",
			pre: "按月",
			suffix: "元/月",
		},
		{
			id: 3,
			text: "按次数",
			pre: "按次",
			suffix: "元/次",
		},
		{
			id: 4,
			text: "按件数",
			pre: "按件",
			suffix: "元/件",
		},
		{
			id: 5,
			text: "工人收入",
			pre: "工人收入",
			suffix: "%",
		},
		{
			id: 6,
			text: "共计",
			pre: "共计",
			suffix: "元",
		},

		{
			id: 7,
			text: "待定",
			pre: "待定",
			suffix: "待定",
		},
	],
});
let staffPrice = ref({
	// 薪资类型
	list: [
		{
			id: 0,
			text: "时薪",
			placeholder: "仅数字",
			pre: "时薪",
			suffix: "元/小时",
		},
		{
			id: 1,
			text: "日薪",
			placeholder: "仅数字",
			pre: "日薪",
			suffix: "元/天",
		},
		{
			id: 7,
			text: "月薪",
			placeholder: "如5000-7000",
			pre: "月薪",
			suffix: "元/月",
		},
		// {
		// 	id: 2,
		// 	text: "补贴",
		// 	placeholder: "仅数字",
		// 	pre: "补贴",
		// 	suffix: "元",
		// },
		// {
		// 	id: 3,
		// 	text: "返费",
		// 	placeholder: "仅数字",
		// 	pre: "返费",
		// 	suffix: "元",
		// },
		// {
		// 	id: 4,
		// 	text: "计件",
		// 	placeholder: "",
		// 	pre: "计件",
		// 	suffix: "",
		// },
		// {
		// 	id: 5,
		// 	text: "保底",
		// 	placeholder: "仅数字",
		// 	pre: "保底",
		// 	suffix: "元",
		// },
		// {
		// 	id: 6,
		// 	text: "面议",
		// 	placeholder: "",
		// 	pre: "面议",
		// 	suffix: "",
		// },
	],
});
const currentPrice = ref({
	id: 0,
	text: "时薪",
	placeholder: "仅数字",
	pre: "时薪",
	suffix: "元/小时",
});
const ageSex = ref({
	// 性别年龄类型
	list: [
		{
			id: 0,
			text: "男女不限",
		},
		{
			id: 1,
			text: "男女不同",
		},
		{
			id: 2,
			text: "仅限男生",
		},
		{
			id: 3,
			text: "仅限女生",
		},
	],
	ageSexActive: 0,
});
const ageHandler = ref("");
const manAgeHandler = ref("");
const womanAgeHandler = ref("");
const monthValue = ref("");
const jobId = ref("");
const residentList = ref([]);
const isServiceShow = ref(false);
const isOnsiteShow = ref(false);
const isRangeShow = ref(false); // 可见范围弹窗
const selectedOnsite = ref([]); // 选中的驻场列表
const selectedService = ref([]); // 选中的客服列表
const submitConfirm = ref(false); // 发布职位确认框

// 显示职位描述的空字段
const showEmpty = ref(false);
watch(showEmpty, (val) => {
	console.log(val);
	// 显示空字段
	formatJSON();
});
const allSpecial = ref([]); // 全部职位标签
const typeMark = ref({
	tagArray0: [],
	tagArray1: [],
	tagArray2: [],
	tagArray3: [],
	tagArray4: [],
}); // 分类的职位标签
const markCheck = ref(false); // 职位标签弹窗显示
const ageList = computed(() => {
	let val = [[], []];
	for (let i = 0; i <= 60; i++) {
		if (i >= 16) {
			val[0].push(i);
			val[1].push(i);
		}
	}
	return val;
});
/**
 * 获取页面元素的初始位置,便于滚动
 */
const domTopInfo = ref({
	jobName: 0,
	jobMark: 0,
	ageSex: 0,
	salary: 0,
	salaryDetail: 0,
	storeAddr: 0,
	jobDesp: 0,
	returnFee: 0,
});
const loadingControl = ref({
	jobName: false,
	jobMark: false,
	ageSex: false,
	salary: false,
	salaryDetail: false,
	storeAddr: false,
	jobDesp: false,
	returnFee: false,
	returnFeeDesp: false,
});

const scrollViewRef = ref(null); // 添加 ref
// 获取 scroll-view 的 scrollTop
const getScrollViewScrollTop = () => {
	uni
		.createSelectorQuery()
		.select("#scrollView")
		.fields({ scrollTop: true }, (res) => {
			if (res) {
				console.log("scroll-view 已经滑动的高度:", res.scrollTop);
				// 你可以在这里处理获取到的高度
			} else {
				console.log("元素未找到");
			}
		})
		.exec();
};

const agencyInfo = uni.getStorageSync("agencyInfo");
const authInfo = ref({});
const getAuthInfo = () => {
	return new Promise((reso) => {
		G.Get(api.get_supplier_info, { agencyId: agencyInfo ? agencyInfo.id : "" }, (res) => {
			console.log("resresresresresres", res);
			authInfo.value = res;
			reso();
			// authInfo.value.certificationAuth = 1;
			// authInfo.value.realNameAuth = 1;
		});
	});
};
const getResident = () => {
	return new Promise((reso) => {
		G.Post(
			api.order_residentList,
			{
				agencyId: uni.getStorageSync("apply-agencyId"),
				keys: "",
				pageNum: 1,
				pageSize: 1000,
			},
			(res) => {
				console.log("驻场列表：", res);
				if (res.recordCount == 0) {
					residentList.value = [];
				} else {
					res.recordList.forEach((item) => {
						item.isSelected = false;
					});
					residentList.value = res.recordList;
				}
				reso();
			}
		);
	});
};
const isIosWxapp = ref(false);
isIosWxapp.value = uni.getSystemInfoSync().platform == "ios" && uni.getSystemInfoSync().uniPlatform == "mp-weixin";

const keyboardHeight = ref(0);
const pbc = ref("0");
const bottomHeight = ref("100px");
const bindkeyboardheightchange = (e) => {
	// 只对 ios 处理

	console.log(isIosWxapp.value);
	const height = e.detail.height;
	// const idName = e.target.id;
	// console.log("键盘高度变化:", height, idName);
	// console.log(e);

	// if (!isIosWxapp.value) {
	// 	return;
	// }

	if (height === 0) {
		pbc.value = "0";
		// bottomHeight.value = '100px'
		// scrollToInput(0, 0);
		// return;
	} else {
		pbc.value = height - 70 + "px";
		// bottomHeight.value = '0px'
	}

	// try {
	// 	uni
	// 		.createSelectorQuery()
	// 		.select(`#${idName}`)
	// 		.boundingClientRect((res) => {
	// 			console.log(res);
	// 			// 可使用窗口高度
	// 			// const windowHeight = uni.getSystemSetting().windowHeight;
	// 			const windowHeight = uni.getSystemInfoSync().windowHeight;
	// 			// 键盘的高度
	// 			// 除去键盘的剩余高度
	// 			let restHeight = windowHeight - height;
	// 			// 元素左下角坐标
	// 			let bottom = res.bottom;

	// 			console.log("可使用窗口高度" + windowHeight);
	// 			console.log("除去键盘的剩余高度" + restHeight);

	// 			console.log("元素左下角坐标" + bottom);

	// 			// 只有当元素被软键盘覆盖的时候才上推页面
	// 			if (bottom <= restHeight) return;
	// 			// 现阶段需要滚动的大小
	// 			let scrollTopNew = bottom - restHeight;
	// 			console.log("键盘高度 滑动距离");
	// 			console.log(height, scrollTopNew);

	// 			scrollToInput(height, scrollTopNew);
	// 		})
	// 		.exec();
	// } catch (error) {
	// 	console.error("处理键盘高度变化出错:", error);
	// }
};

// 获取页面滚动条位置
const getScrollOffset = () => {
	return new Promise((resolve) => {
		try {
			uni
				.createSelectorQuery()
				.selectViewport()
				.scrollOffset((res) => {
					console.log("滚动条位置" + res.scrollTop);

					resolve(res.scrollTop);
				})
				.exec();
		} catch (error) {
			resolve(0);
		}
	});
};

// 监听页面软键盘弹起手动推动页面
const scrollToInput = async (newKeyboardHeight, scrollTopNew) => {
	keyboardHeight.value = newKeyboardHeight;
	if (scrollTopNew) {
		try {
			const lastScrollTop = await getScrollOffset();
			console.log("监听页面软键盘弹起手动推动页面");
			console.log(lastScrollTop);
			console.log("滑动距离");
			console.log(scrollTopNew);
			console.log(lastScrollTop ? lastScrollTop + scrollTopNew : scrollTopNew);

			// setTimeout(()=>{
			// 	scrollTop.value = lastScrollTop ? lastScrollTop + scrollTopNew : scrollTopNew
			// },200)

			// uni.pageScrollTo({
			//     scrollTop: 1000000,
			//     duration: 10
			// });
		} catch (error) {
			console.error("页面滚动出错:", error);
		}
	}
};
onBeforeMount(() => {
	getResident();
	getMemberList();
});
const options = ref()
onMounted(() => {
	console.log("formInfo", formInfo.value);
	options.value = props.dataoptions
	console.log(options.value);
	resetInfo();
	if (options.value.id) {
		uni.setNavigationBarTitle({
			title: "编辑职位",
		});
		jobId.value = options.value.id;
		uni.showLoading({
			title: "加载中...",
		});
		getClass().then(() => {
			// getResident().then(() => {
			getJobDetail();
			getAuthInfo();
	
			// });
		});
	} else {
		uni.setNavigationBarTitle({
			title: "发布职位",
		});
		getClass().then(() => {
			getAuthInfo().then(() => {
				// authInfo.value.certificationAuth = 1;
				// authInfo.value.realNameAuth = 1;
				if (authInfo.value.certificationAuth == 2) {
					rangeConfig.value.subVal = [3];
					setRangeText();
				}
			});
		});
	}
	getAiToken();
	uni.$on('themeChanged', (color) => {
		themeColor.value = color;
	});

	// 给佣金和薪资重新赋默认值
	formInfo.value.returnFeeType = 0;
	formInfo.value.salaryClassify = 0;
	setTimeout(() => {
		for (const k in domTopInfo.value) {
			getTop(k);
		}
		console.log("domTopInfo.value", domTopInfo.value);
	}, 1000);
	// setTimeout(() => {
	showPage.value = true;
	// }, 1000);
	systemInfo.value = uni.getSystemInfoSync();
	console.log("systemInfo", systemInfo.value);
	if (systemInfo.value.system.indexOf("iOS") > -1) {
		isios.value = true;
	} else {
		isios.value = false;
	}

	// scrollTop.value = 10000;
	// uni.pageScrollTo({
	//     scrollTop: 99999, // 一个足够大的数值，确保滚动到底部
	//     duration: 100 // 滚动动画持续时间，单位为毫秒
	// });

	// getClass();
});
watch(
	() => ageSex.ageSexActive,
	(val) => {
		if (val != 1) {
			sexHandler(ageHandler.value);
		} else {
			formInfo.value.minAgeWoman = "";
			formInfo.value.maxAgeWoman = "";
			formInfo.value.minAgeMan = "";
			formInfo.value.maxAgeMan = "";
			sexHandler(manAgeHandler.value, womanAgeHandler.value, "all");
		}
	}
);
watch(
	() => formInfo.value.salaryClassify,
	(val) => {
		console.log("formInfo.salaryClassify", val);
		// formInfo.salaryClassifyValue = ''
		priceHandler(formInfo.value.salaryClassifyValue);
	}
);
watch(
	() => monthValue,
	(val) => {
		if (val != "") {
			priceHandler(val);
		}
	}
);
watch(ageHandler, (val) => {
	console.log("ageHandler", val);
	sexHandler(val);
});
watch(manAgeHandler, (val) => {
	sexHandler(val, "", "man");
});
watch(womanAgeHandler, (val) => {
	sexHandler(val, "", "woman");
});
onHide(() => {
	clearInterval(timer.value);
	clearTimeout(timer1.value);
});
const showPage = ref(false);
const props = defineProps({
  dataoptions: {
    default:()=>{
    	return {}
    }
  },
});

// onShow(() => {
// 	console.log("onShow");

// });
const openCore = (respons) => {
	console.log("open sse：", respons);
};
const errorCore = (err) => {
	console.log("error sse：", err);
};
const messageCore = (msg) => {
	console.log("message sse：", msg);
	if (msg.event == "Done") {
		if (!formInfo.value.jobName) {
			clearInterval(timer.value);
			ailoading.value = false;
		}
	} else {
		let job = JSON.parse(msg.data);
		checkDataInfo(job);
	}
};
const finishCore = () => {};
const memberList = ref([]);
const getMemberList = () => {
	G.Get(api.order_peopleList, { pageSize: 500, pageNum: 1 }, (res) => {
		console.log("报名人列表：", res);
		memberList.value = res.recordList;
	});
};
// 需要往职位描述里添加的标签信息 通过空格拼接
const setMark = () => {
	jobMark.value = [];
	for (const k in typeMark.value) {
		typeMark.value[k].forEach((item) => {
			console.log("item", item);
			if (item.active != 0) {
				jobMark.value.push(item);
			}
		});
	}
	markCheck.value = false;
};
const getClass = () => {
	return new Promise((reso) => {
		G.Get(
			"/labels/getListByTypeAndIndustryForGyl",
			{ type: 90, industry: 2, hasJob: 1 },
			(res) => {
				console.log("getListByTypeAndIndustry", res);
				allSpecial.value = res;
				allSpecial.value.forEach((item) => {
					item.active = 0;
					if (item.typeClassify == "0") {
						typeMark.value["tagArray0"].push(item);
					} else if (item.typeClassify == "1") {
						typeMark.value["tagArray1"].push(item);
					} else if (item.typeClassify == "2") {
						typeMark.value["tagArray2"].push(item);
					} else if (item.typeClassify == "3") {
						typeMark.value["tagArray3"].push(item);
					} else if (item.typeClassify == "4") {
						typeMark.value["tagArray4"].push(item);
					}
				});
				reso();
			},
			(res) => {
				console.log(res);
				reso();
			}
		);
	});
};
const showMarkCheck = () => {
	markCheck.value = true;
};
const setActive = (e, id, index, str) => {
	console.log("id", id);
	if (typeMark.value[str][index].active == id) {
		//已选中状态 取消选中
		typeMark.value[str][index].active = 0;
		// jobRequestLabelIds.value = jobRequestLabelIds.value.filter((id1) => id1 != id);
	} else {
		typeMark.value[str][index].active = id;
		// jobRequestLabelIds.value.push(id);
	}
};
/**
 * 阻止滚动穿透
 */
const scroll = () => {
	return false;
};
const getAiToken = () => {
	G.Get("/yishoudan/common/structure/getConfig", {}, (res) => {
		console.log("res", res);
		aiConfig.value = {
			token: res.token,
			id: res.workflowId,
		};
	});
};
let scrollTop = ref(0);
const getTop = (id) => {
	uni
		.createSelectorQuery()
		.select("#" + id)
		.boundingClientRect((data) => {
			console.log("data", data);
			if(data){
				domTopInfo.value[id] = data.top;
			}
			
			// scrollTop.value = data.top - 200;
		})
		.exec();
};
const setTop = (id) => {
	if (id) {
		scrollTop.value = domTopInfo.value[id] - 200;
	} else {
		scrollTop.value = 10000;
	}
};
const getClipboard = () => {
	if (aitext.value) {
		aitext.value = "";
	} else {
		uni.getClipboardData({
			success(res) {
				console.log(res);
				aitext.value = res.data;
			},
			fail() {
				uni.showToast({
					title: "读取剪切板失败",
					icon: "none",
				});
			},
		});
	}
};
const getCoze = () => {
	let that = this;
	if (!aitext.value) {
		uni.showToast({
			title: "请粘贴内容",
			icon: "none",
		});
		return false;
	}
	// 重置内容
	resetInfo("ai").then((res) => {
		console.log("res", res);
		if (res) {
			middleJson.value = {
				标题: { content: "", end: false },
				性别年龄: { content: "", end: false },
				标签: { content: "", end: false },
				薪资: { content: "", end: false },
				End: { content: "", end: false },
			};
			ailoading.value = true;
			defaultPercent.value = 3;

			timer.value = setInterval(() => {
				defaultPercent.value = defaultPercent.value < 15 ? (defaultPercent.value = 15) : defaultPercent.value + 1;
				console.log("12313123123123123");
				setJobData();
				if (defaultPercent.value >= 99) {
					clearInterval(timer.value);
				}
			}, 500);
			timer1.value = setTimeout(() => {
				console.log("5687678678678678678");
				ailoading.value = false;
				clearInterval(timer.value);
				setLoading();
			}, 30000);
			// #ifdef MP-WEIXIN
			appCoze();
			// miniAppCoze();
			// #endif
			// #ifdef APP-PLUS
			appCoze();
			// #endif
		}
	});
};
const appCoze = () => {
	sseTest.value.startChat({
		/**
		 * 将它换成你的地址
		 * 注意：
		 * 如果使用 sse-server.js 要在手机端使用的话，请确保你的手机和电脑处在一个局域网下并且是正常的ip地址
		 */
		url: "https://api.coze.cn/v1/workflow/stream_run",
		// 请求头
		headers: {
			Authorization: "Bearer " + aiConfig.value.token,
			"Content-Type": "application/json;charset=UTF-8",
		},
		// 默认为 post
		method: "post",
		body: {
			parameters: {
				notice_text: aitext.value,
			},
			// workflow_id: aiConfig.value.id,
			workflow_id: "7492238568816656410",
		},
	});
};
const miniAppCoze = () => {
	let stream = uni.request({
		url: "https://api.coze.cn/v1/workflow/stream_run",
		method: "POST",
		responseType: "arraybuffer",
		header: {
			Authorization: "Bearer " + aiConfig.value.token,
			"Content-Type": "application/json;charset=UTF-8",
			// "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
		},
		enableChunked: true,
		data: {
			parameters: {
				notice_text: aitext.value,
			},
			// workflow_id: aiConfig.value.id,
			workflow_id: "7492238568816656410",
		},
		//
		// || aiConfig.value.id
		success: function (res) {
			console.log("res", res);
		},
	});
	stream.onChunkReceived((response) => {
		// 收到流式数据，根据返回值进行相对应数据解码
		let val = buf2str(response.data);
		console.log("response.data", val);
		const regex = /{(?:[^{}]|{(?:[^{}]*?)})*?}/g;
		if (val.indexOf("content") > -1) {
			let valList = val.match(regex);
			console.log("valList", valList);
			valList.forEach((item) => {
				let job = JSON.parse(item);
				// for (const k in job) {
				// 	if (typeof job[k] == "string" && k == "node_title") {
				// 		job[k] = toHalfWidth(job[k].trim());
				// 	}
				// }
				checkDataInfo(job);
			});
		}
	});
};
/**
 * 返回的数据类型判断
 */
const checkDataInfo = (_val) => {
	console.log("_val", _val);
	if ((_val.content == "无" || _val.content == "") && _val.node_title == "标题") {
		ailoading.value = false;
		setTimeout(() => {
			clearInterval(timer.value);
			setLoading();
			uni.showToast({
				title: "识别失败",
				icon: "none",
			});
		}, 500);
		return;
	}
	if (!_val.hasOwnProperty("debug_url")) {
		console.log("_val1", _val);
		middleJson.value[_val.node_title].content += _val.content;
		if (_val.node_is_finish) {
			middleJson.value[_val.node_title].end = true;
		}
	}
	if (_val.node_type == "End") {
		console.log("checkDataInfo1", dataError.value);
		if (!dataError.value.ageSex) {
			console.log("checkDataInfo2", dataError.value);
			middleJson.value["性别年龄"].end = true;
			middleJson.value["薪资"].end = true;
		}
	}

	console.log("	middleJson", middleJson.value);
};
const setLoading = (type) => {
	for (const k in loadingControl.value) {
		loadingControl.value[k] = false;
	}
	if (type) loadingControl.value[type] = true;
};
/**
 * 根据返回的数据按顺序处理
 */
const setJobData = (_val) => {
	try {
		if (!formInfo.value.jobName) {
			setLoading("jobName");
		}
		if (!formInfo.value.jobName && middleJson.value["标题"].end == true) {
			middleJson.value["标题"].end = false;
			setVal(middleJson.value["标题"].content.split("**********")[0], "jobName");
			setTop("jobName");
			setLoading("jobMark");
			// scrollTo.value = "jobName";
			defaultPercent.value += 7;
		}
		if (formInfo.value.jobName && jobMark.value.length <= 0 && middleJson.value["标签"].end == true) {
			middleJson.value["标签"].end = false;
			setTimeout(() => {
				setJobMark(middleJson.value["标签"].content);
				setTop("jobMark");
				setLoading("ageSex");
				// scrollTo.value = "jobMark";
				defaultPercent.value += 7;
			}, 500);
		}
		// console.log('middleJson.value["性别年龄"].end', middleJson.value["性别年龄"].end);
		if (formInfo.value.jobName && (jobMark.value.length > 0 || dataError.value.jobMark) && !womanAgeHandler.value && !manAgeHandler.value && !ageHandler.value && middleJson.value["性别年龄"].end == true) {
			middleJson.value["性别年龄"].end = false;
			setTimeout(() => {
				if (middleJson.value["性别年龄"].content) {
					setAge(middleJson.value["性别年龄"].content.split("**********")[0]);
					setTimeout(() => {
						if (ageSex.value.ageSexActive == 0 || ageSex.value.ageSexActive == 2 || ageSex.value.ageSexActive == 3) {
							checkAge(ageHandler.value);
						} else {
							checkAge(womanAgeHandler.value) ? checkAge(manAgeHandler.value) : "";
						}
					}, 100);
				} else {
					checkAge("error");
				}

				setTop("ageSex");
				setLoading("salary");
				// scrollTo.value = "ageSex";
				defaultPercent.value += 7;
			}, 500);
		}
		console.log('middleJson.value["薪资"].end', middleJson.value["薪资"].end);
		if (formInfo.value.jobName && (jobMark.value.length > 0 || dataError.value.jobMark) && (womanAgeHandler.value || manAgeHandler.value || ageHandler.value || dataError.value.ageSex) && !formInfo.value.salaryClassifyValue && middleJson.value["薪资"].end == true) {
			middleJson.value["薪资"].end = false;
			console.log('middleJson.value["薪资"]', middleJson.value["薪资"].content.split("**********"));
			setTimeout(() => {
				setSalary(middleJson.value["薪资"].content.split("**********")[0]);
				setMonth(middleJson.value["薪资"].content.split("**********")[1]);
				setTop("salary");
				setLoading("salaryDetail");
				// scrollTo.value = "salary";
				defaultPercent.value += 7;
				setTimeout(() => {
					setVal(middleJson.value["薪资"].content.split("**********")[2], "salaryDetail");
					// scrollTo.value = "salaryDetail";
					setTop("salaryDetail");
					setLoading("storeAddr");
					defaultPercent.value += 7;
					setTimeout(() => {
						setVal(middleJson.value["标题"].content.split("**********")[1], "storeAddr");
						if (!formInfo.value.storeAddr) {
							dataError.value.storeAddr = true;
						} else {
							// 根据地址获取经纬度
							let coordObj = getCoordByaddress(formInfo.value.storeAddr);
							formInfo.value.storeLat = coordObj.latitude;
							formInfo.value.storeLng = coordObj.longitude;
						}

						setTop("storeAddr");
						setLoading("jobDesp");
						defaultPercent.value += 7;
						// scrollTo.value = "storeAddr";
					}, 500);
				}, 500);
			}, 500);
		}
		if (formInfo.value.jobName && (jobMark.value.length > 0 || dataError.value.jobMark) && (womanAgeHandler.value || manAgeHandler.value || ageHandler.value || dataError.value.ageSex) && (formInfo.value.salaryClassifyValue || monthValue.value || dataError.value.salary) && (formInfo.value.storeAddr || dataError.value.storeAddr) && middleJson.value["End"].end == true) {
			middleJson.value["End"].end = false;
			console.log('middleJson.value["End"]', middleJson.value["End"]);
			setJobInfo(middleJson.value["End"].content);
			setTop("jobDesp");
			setLoading("returnFee");
		}
	} catch (error) {
		console.log("error", error);
	}
};
const buf2str = (buffer) => {
	let encodedString = String.fromCodePoint.apply(null, new Uint8Array(buffer));
	let decodedString = decodeURIComponent(escape(encodedString)); //没有这一步中文会乱码
	return decodedString;
};
const getChange = () => {
	// console.log("jsonStr", jsonStr);
};
/* 综合月薪 正则规则
 * 价格中间的特殊字符
 */
const specStrReg = ($str) => {
	let list = ["~", "!", "@", "#", "%", "^", "&", "*", "(", ")", "！", "（", "）", "+", "`", "-", "=", "·", "q", "w", "e", "r", "t", "y", "u", "i", "o", "p", "[", "]", "{", "}", "|", "|", "a", "s", "d", "f", "g", "h", "j", "k", "l", ";", ":", "'", '"', "：", "“", "”", "z", "x", "c", "v", "b", "n", "m", ",", ".", "/", "<", ">", "?", "《", "》", "？", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", "B", "N", "M", " ", "——", " -", "- ", " - "],
		obj = {
			min: 0,
			max: 0,
		};
	if ($str) {
		list.forEach((item, index) => {
			if ($str.indexOf(item) > -1 && $str.split(item)[1]) {
				let newlist = [$str.split(item)[0], $str.split(item)[1]];
				newlist.sort(function (a, b) {
					return a - b;
				});
				obj = {
					min: newlist[0],
					max: newlist[1],
				};
			}
		});
	}
	return obj;
};
const sexHandler = (val, val1, type) => {
	// 性别年龄特殊处理
	console.log(val);
	console.log(val1);
	console.log(type);
	let ageObj = specStrReg(val);
	let ageObj1 = null;
	if (type == "all") {
		ageObj1 = specStrReg(val1);
	}
	if (ageSex.value.ageSexActive == 0) {
		formInfo.value.minAgeWoman = ageObj.min;
		formInfo.value.maxAgeWoman = ageObj.max;
		formInfo.value.minAgeMan = ageObj.min;
		formInfo.value.maxAgeMan = ageObj.max;
	} else if (ageSex.value.ageSexActive == 1) {
		if (type == "man") {
			formInfo.value.minAgeMan = ageObj.min;
			formInfo.value.maxAgeMan = ageObj.max;
		} else if (type == "woman") {
			formInfo.value.minAgeWoman = ageObj.min;
			formInfo.value.maxAgeWoman = ageObj.max;
		} else if (type == "all") {
			formInfo.value.minAgeMan = ageObj.min;
			formInfo.value.maxAgeMan = ageObj.max;
			formInfo.value.minAgeWoman = ageObj1.min;
			formInfo.value.maxAgeWoman = ageObj1.max;
		}
		console.log(formInfo.value);
	} else if (ageSex.value.ageSexActive == 2) {
		formInfo.value.minAgeWoman = 0;
		formInfo.value.maxAgeWoman = 0;
		formInfo.value.minAgeMan = ageObj.min;
		formInfo.value.maxAgeMan = ageObj.max;
	} else if (ageSex.value.ageSexActive == 3) {
		formInfo.value.minAgeMan = 0;
		formInfo.value.maxAgeMan = 0;
		formInfo.value.minAgeWoman = ageObj.min;
		formInfo.value.maxAgeWoman = ageObj.max;
	}

	console.log(formInfo.value);
};
// 格式错误标识
let dataError = ref({
	jobName: false,
	jobMark: false,
	ageSex: false,
	salary: false,
	salaryDetail: false,
	storeAddr: false,
	jobDesp: false,
	returnFee: false,
	returnFeeDesp: false,
});
/**
 * 校验年龄信息
 */
const checkAge = (val) => {
	console.log("val checkAgecheckAge", val);

	let ageObj = specStrReg(val);
	const regex = /\D/;
	if (val == "error" || val == "") {
		resetAge();
		ageValue.value = [16, 60];
		dataError.value.ageSex = true;
		return false;
	} else if (regex.test(ageObj.min.trim()) || regex.test(ageObj.max.trim())) {
		resetAge();
		ageValue.value = [16, 60];
		dataError.value.ageSex = true;
		return false;
	} else {
		dataError.value.ageSex = false;
		return true;
	}
};
/**
 * 年龄选择的回调
 */
const getAgeValue = (e, type) => {
	let val;
	val = ageList.value[0][e.detail.value[0]] + "-" + ageList.value[1][e.detail.value[1]];
	console.log("e", e);
	console.log("val", val);
	console.log("type", type);
	if (type == "all") {
		manAgeHandler.value = "";
		womanAgeHandler.value = "";
		ageHandler.value = val;
	} else if (type == "man") {
		ageHandler.value = "";
		manAgeHandler.value = val;
	} else if (type == "woman") {
		ageHandler.value = "";
		womanAgeHandler.value = val;
	}
};
/**
 * 选择列变化回调(最大最小年龄联动)
 */
const handlerAge = (e, type) => {
	console.log(e, type);
	// e: { column: 1,index: 41}
	if (type == "woman") {
		ageWomanValue.value[e.detail.column] = e.detail.value;
		if (e.detail.column == 0) {
			if (e.detail.value > ageWomanValue.value[1]) {
				ageWomanValue.value[1] = e.detail.value;
			}
		} else {
			if (e.detail.value < ageWomanValue.value[0]) {
				ageWomanValue.value[0] = e.detail.value;
			}
		}
	} else {
		ageValue.value[e.detail.column] = e.detail.value;
		if (e.detail.column == 0) {
			if (e.detail.value > ageValue.value[1]) {
				ageValue.value[1] = e.detail.value;
			}
		} else {
			if (e.detail.value < ageValue.value[0]) {
				ageValue.value[0] = e.detail.value;
			}
		}
	}
};
// 年龄选择取消事件
const cancelAge = (e) => {
	console.log("cancel", e);
};
const priceHandler = (val) => {
	// 薪资的特殊处理
	console.log("val", val);
	formInfo.value.minMonthlyPay = "";
	formInfo.value.maxMonthlyPay = "";
	if (formInfo.value.salaryClassify == 7) {
		let ageObj = specStrReg(val);
		console.log("ageObj", ageObj);
		formInfo.value.minMonthlyPay = ageObj.min * 100;
		formInfo.value.maxMonthlyPay = ageObj.max * 100;
		formInfo.value.salaryClassifyValue = "";
	} else if (formInfo.value.salaryClassify == 4) {
		formInfo.value.salaryClassifyValue = "";
		// monthValue.value = "";
	} else if (formInfo.value.salaryClassify == 6) {
		formInfo.value.salaryClassifyValue = "";
		// monthValue.value = "";
	}

	console.log(formInfo.value);
};
const toHalfWidth = (str) => {
	return str.replace(/[\uff01-\uff5e]/g, function (match) {
		var charCode = match.charCodeAt(0) - 0xfee0; // 65248 in hex is 0xfee0
		console.log("String.fromCharCode(charCode)", String.fromCharCode(charCode));
		return String.fromCharCode(charCode);
	});
};
/**
 * 格式化显示JSON数据
 */
const formatJSON = (jsonStr) => {
	let objMiddle = {};
	if (jsonStr) {
		objMiddle = JSON.parse(jsonStr);
	}
	// 判断职位描述的对象是否已经赋值, 没有的话进行初始化
	let hasVal = false;
	templateArr.value.forEach((item) => {
		if (item.children.length) {
			hasVal = true;
		}
	});
	if (!hasVal) {
		templateArr.value = JSON.parse(JSON.stringify(templateArrCopy.value));
	}
	console.log("showEmpty.value", showEmpty.value);
	console.log("	templateArr.value", templateArr.value);
	// 大类编辑时的数字
	let typeNum = 1;
	// 大类预览时的数字
	let typePreNum = 1;
	templateArr.value.forEach((item) => {
		// 内容编辑时的数字
		let subNum = 1;
		// 内容预览时的数字
		let subPreNum = 1;
		item.childrenType.forEach((innerItem, ind) => {
			console.log("objMiddle[innerItem] ", objMiddle[innerItem]);
			if (item.children[ind]) {
				// 有值的, 隐藏的时候不隐藏, 显示的时候显示
				item.children[ind] = {
					key: innerItem,
					value: item.children[ind].value || objMiddle[innerItem] || "",
					num: subNum,
					subPreNum,
					show: item.children[ind].value || objMiddle[innerItem] || showEmpty.value ? true : false,
					edit: false,
				};
				item.children[ind].num = subNum;
			} else {
				// 子元素的增添
				item.children.push({
					key: innerItem,
					value: objMiddle[innerItem] || "",
					num: subNum,
					subPreNum,
					show: objMiddle[innerItem] || showEmpty.value ? true : false,
					edit: false,
				});
			}
			if (item.children[ind].show == true) {
				subNum += 1;
				if (item.children[ind].value) {
					subPreNum += 1;
				}
				console.log("num", subNum);
			}
		});
		item.num = typeNum;
		item.typePreNum = typePreNum;
		console.log("item.children", item.children);
		// 父元素的显隐(如果只有最后一个子元素显示的话, 因为其num依旧为1, 因此需要判断其show是否为true)
		if (item.children[item.children.length - 1].show == true || item.children[item.children.length - 1].num != 1) {
			item.show = true;
			typeNum += 1;
			if (showEmpty.value && item.children.every((obj) => obj.value === "")) {
				// 大类预览时, 如果所有子元素都为空切为显示所有空字段, 则不显示
				item.preview = false;
			} else {
				// 否则大类预览数加一且显示
				typePreNum += 1;
				item.preview = true;
			}
		} else {
			item.show = false;
		}
	});
};
const setJobInfo = (res) => {
	let that = this;
	let jsonStr = JSON.parse(res);
	// for (const k in jsonStr) {
	// 	if (k == "性别年龄" && jsonStr[k] != "" && typeof jsonStr[k] == "string") {
	// 		jsonStr[k] = toHalfWidth(jsonStr[k]);
	// 	}
	// }
	// ailoading = false;
	console.log("解析ai数据：", res);
	formatJSON(res);
	// jsonStr = arr;
	// defaultPercent = 100;
	// setVal(jsonStr["职位标题"], "jobName");
	// setVal(jsonStr["企业位置"], "storeAddr");
	// setVal(jsonStr["薪资明细"], "salaryDetail");
	// jobMark = jsonStr["职位标签"].split(",");
	// if (jsonStr["职位标签"]) {
	// 	setJobMark(jsonStr["职位标签"]);
	// }

	// if (jsonStr["岗位薪资"]) {
	// 	setSalary(jsonStr["岗位薪资"]);
	// }

	setTimeout(() => {
		setReturnFee(jsonStr["佣金"]);
		setLoading("returnFeeDesp");
		setTop();
		setTimeout(() => {
			setVal(jsonStr["佣金详情"], "returnFeeDesp");
			setLoading();
			defaultPercent.value = 100;
			ailoading.value = false;
			clearInterval(timer.value);
			uni.showToast({
				title: "识别完成",
				icon: "none",
			});
		}, 800);
	}, 500);

	// if (jsonStr["性别年龄"]) {
	// 	setAge(jsonStr["性别年龄"]);
	// }
	// if (jsonStr["综合月薪"]) {
	// 	setMonth(jsonStr["综合月薪"]);
	// }
};
const setFlow = (targetValue, value, index = 0) => {
	let that = this;
	console.log("targetValue, value", targetValue, "\n", value);
	return new Promise((res, rej) => {
		function flowStyle() {
			console.log(new Date().getTime());
			if (!formInfo.value[targetValue]) {
				formInfo.value[targetValue] = "";
			}
			if (index < value.length) {
				// 追加文字
				// console.log("value[index++]", value[index++]);
				formInfo.value[targetValue] += value[index++];
				setTimeout(flowStyle, 300);
			} else {
				res();
			}
		}
		flowStyle();
	});
};
/**
 * 不需要处理的信息直接赋值
 */
const setVal = (_val, _type) => {
	console.log("setVal", _val, _type);
	formInfo.value[_type] = _val;
};
/**
 * 正则提取所有的数字
 */
const getNumberByRegular = (_val) => {
	let regex = /\d+(\.\d+)?/g;
	console.log("_val.match(regex).sort()", _val.match(regex));
	let list = [];
	if (_val.match(regex)) {
		list = _val
			.match(regex)
			.map((item) => {
				return Number(item);
			})
			.sort((a, b) => {
				return a - b;
			});
	}
	console.log("list", list);
	return list;
};
/**
 * 正则提取所有的汉字
 */
const getHanziByRegular = (_val) => {
	const regex = /[\u4e00-\u9fff]+/g;
	console.log("123123123");
	console.log("_val.match(regex).sort()", _val.match(regex));
	let list = [];
	list = _val.match(regex);
	return list;
};
/**
 * 处理综合月薪
 */
const setMonth = (_val) => {
	let monthList = getNumberByRegular(_val);
	console.log("monthList", monthList);
	if (monthList.length == 0) {
		resetMonth();
		dataError.value.salary = true;
		return;
	} else {
		monthValue.value = monthList[0] + "-" + monthList[1];
		priceHandler(monthValue.value);
	}
	// matches;
};
/**
 * 处理薪资
 */
const setSalary = (_type) => {
	console.log("_type123", _type);
	if (_type) {
		let _id = 0;
		if (_type.indexOf("元/时") > -1 || _type.indexOf("元/小时") > -1) {
			_id = 0;
			currentPrice.value.placeholder = "纯数字";
			currentPrice.value.suffix = "元/小时";
		} else if (_type.indexOf("元/天") > -1 || _type.indexOf("元/日") > -1) {
			_id = 1;
			currentPrice.value.placeholder = "纯数字";
			currentPrice.value.suffix = "元/天";
		}
		// else if (_type.indexOf("补贴") > -1) {
		// 	_id = 2;
		// 	currentPrice.value.placeholder = "补贴";
		// 	currentPrice.value.suffix = "元";
		// 	formInfo.value.salaryClassifyValue = _type.split("补贴")[0];
		// } else if (_type.indexOf("返费") > -1) {
		// 	_id = 3;
		// 	currentPrice.value.placeholder = "返费";
		// 	currentPrice.value.suffix = "元";
		// 	formInfo.value.salaryClassifyValue = _type.split("返费")[0];
		// } else if (_type.indexOf("保底") > -1) {
		// 	_id = 5;
		// 	currentPrice.value.placeholder = "保底";
		// 	currentPrice.value.suffix = "元";
		// 	formInfo.value.salaryClassifyValue = _type.split("保底")[0];
		// } else if (_type.indexOf("计件") > -1) {
		// 	_id = 4;
		// 	currentPrice.value.placeholder = "计件";
		// 	currentPrice.value.suffix = "";
		// } else if (_type.indexOf("面议") > -1) {
		// 	_id = 6;
		// 	currentPrice.value.placeholder = "面议";
		// 	currentPrice.value.suffix = "";
		// }
		else if (_type.indexOf("月薪") > -1 || _type.indexOf("元/月") > -1) {
			_id = 7;
			currentPrice.value.pre = "月薪";
			currentPrice.value.placeholder = "如5000-7000";
			currentPrice.value.suffix = "元/月";
		}
		let monthList = getNumberByRegular(_type);
		console.log("_id", _id);
		formInfo.value.salaryClassify = _id;
		console.log("monthList123123", monthList);
		if (_id != 7) {
			if (monthList.length == 0) {
				resetSalary();
			} else {
				formInfo.value.salaryClassifyValue = monthList[0];
			}
		}
	}
};
/**
 * 处理职位标签
 */
const setJobMark = (val) => {
	console.log("setJobMarksetJobMarksetJobMark", val);
	allSpecial.value.forEach((item) => {
		getHanziByRegular(val).forEach((innerItem) => {
			if (innerItem == item.name) {
				item.active = item.id;
				jobMark.value.push(item);
			}
		});
	});
	if (jobMark.value.length == 0) {
		dataError.value.jobMark = true;
	}
};
/**
 * 处理佣金
 */
const setReturnFee = (_type) => {
	let _id;

	if (_type.indexOf("时") > -1 || _type.indexOf("小时") > -1) {
		_id = 0;
	} else if (_type.indexOf("天") > -1 || _type.indexOf("日") > -1) {
		_id = 1;
	} else if (_type.indexOf("月") > -1) {
		_id = 2;
	} else if (_type.indexOf("次") > -1) {
		_id = 3;
	} else if (_type.indexOf("件") > -1) {
		_id = 4;
	} else if (_type.indexOf("工人收入") > -1) {
		_id = 5;
	} else if (_type.indexOf("共计") > -1) {
		_id = 6;
	} else if (_type.indexOf("待定") > -1) {
		_id = 7;
		formInfo.value.returnFee = "";
	}
	let monthList = getNumberByRegular(_type);
	formInfo.value.returnFeeType = _id;
	if (_id != 7) {
		if (monthList.length == 0) {
			resetReturnFee();
		} else {
			formInfo.value.returnFee = monthList[0];
		}
	}
};
/**
 * 处理返回数据中的性别年龄字段
 */
const setAge = (_item) => {
	let ageTypeList = _item.split(/[;|；]/) || [_item];
	// ageValue.value = [res.minAgeWoman];
	// ageWomanValue.value;
	console.log("ageTypeList", ageTypeList);
	if (getNumberByRegular(ageTypeList[0]).length == 0) {
		resetAge();
		ageValue.value = [16, 60];
		dataError.value.ageSex = true;
		return;
	}
	//如果有三个那么基本可以确定是男女不限
	if (ageTypeList.length == 3) {
		ageSex.value.ageSexActive = 0;
		//男女不限的情况下, 如果年龄区间是相同的, 则可以判断是否是男女不同
		let manAgeRange, womanAgeRange;
		if (ageTypeList[0].indexOf("男") > -1) {
			// manAgeRange = ageTypeList[0].split("男")[1];
			// womanAgeRange = ageTypeList[1].split("女")[1];
			manAgeRange = configAge(getNumberByRegular(ageTypeList[0]));
			womanAgeRange = configAge(getNumberByRegular(ageTypeList[1]));
		} else {
			manAgeRange = configAge(getNumberByRegular(ageTypeList[1]));
			womanAgeRange = configAge(getNumberByRegular(ageTypeList[0]));
			// manAgeRange = ageTypeList[1].split("男")[1];
			// womanAgeRange = ageTypeList[0].split("女")[1];
		}
		console.log("manAgeRange == womanAgeRange", manAgeRange);
		console.log("manAgeRange == womanAgeRange", womanAgeRange);
		// 判断男女年龄区间是否相同
		if (manAgeRange == womanAgeRange) {
			// 相同的情况
			ageHandler.value = manAgeRange;
			ageValue.value = [manAgeRange.split("-")[0].trim(), manAgeRange.split("-")[1].trim()];
			console.log("ageValue.value", ageValue.value);
			sexHandler(ageHandler.value);
		} else {
			// 不同的情况
			ageSex.value.ageSexActive = 1;
			womanAgeHandler.value = womanAgeRange;
			manAgeHandler.value = manAgeRange;
			ageValue.value = [manAgeRange.split("-")[0].trim(), manAgeRange.split("-")[1].trim()];
			ageWomanValue.value = [womanAgeRange.split("-")[0].trim(), womanAgeRange.split("-")[1].trim()];
			console.log("ageValue.value", ageValue.value);
			console.log("ageWomanValue.value", ageWomanValue.value);
			sexHandler(manAgeHandler.value, womanAgeHandler.value, "all");
		}
		// 判断只有两个的情况, 通过第二个是否是年龄区间来判断第二个是否是备注(不稳定)
	} else if (ageTypeList.length == 2) {
		// 判断第二个不是备注的情况
		if ((ageTypeList[0].indexOf("男") > -1 && ageTypeList[1].indexOf("女") > -1 && ageTypeList[1].indexOf("-") > -1 && ageTypeList[1].trim().length < 10) || (ageTypeList[0].indexOf("女") > -1 && ageTypeList[1].indexOf("男") > -1 && ageTypeList[1].indexOf("-") > -1 && ageTypeList[1].trim().length < 10)) {
			ageSex.value.ageSexActive = 0;
			let manAgeRange, womanAgeRange;
			if (ageTypeList[0].indexOf("男") > -1) {
				manAgeRange = configAge(getNumberByRegular(ageTypeList[0]));
				womanAgeRange = configAge(getNumberByRegular(ageTypeList[1]));
			} else {
				manAgeRange = configAge(getNumberByRegular(ageTypeList[1]));
				womanAgeRange = configAge(getNumberByRegular(ageTypeList[0]));
			}
			console.log("manAgeRange == womanAgeRange", manAgeRange);
			console.log("manAgeRange == womanAgeRange", womanAgeRange);
			// 判断男女年龄区间是否相同
			if (manAgeRange == womanAgeRange) {
				// 相同的情况
				ageHandler.value = manAgeRange;
				ageValue.value = [manAgeRange.split("-")[0].trim(), manAgeRange.split("-")[1].trim()];
				sexHandler(ageHandler.value);
			} else {
				// 不同的情况
				ageSex.value.ageSexActive = 1;
				womanAgeHandler.value = womanAgeRange;
				manAgeHandler.value = manAgeRange;
				ageValue.value = [manAgeRange.split("-")[0].trim(), manAgeRange.split("-")[1].trim()];
				ageWomanValue.value = [womanAgeRange.split("-")[0].trim(), womanAgeRange.split("-")[1].trim()];
				console.log("ageValue.value", ageValue.value);
				console.log("ageWomanValue.value", ageWomanValue.value);
				sexHandler(manAgeHandler.value, womanAgeHandler.value, "all");
			}

			// 如果第二个是备注, 则该职位就是只收男或只收女
		} else {
			// 只收男性
			if (ageTypeList[0].indexOf("男") > -1) {
				console.log("ageTypeList[0].split男", ageTypeList[0].split("男"));
				ageSex.value.ageSexActive = 2;
				ageHandler.value = ageTypeList[0].split("男")[1];
				ageValue.value = [ageTypeList[0].split("男")[1].split("-")[0].trim(), ageTypeList[0].split("男")[1].split("-")[1].trim()];

				//只收女性
			} else if (ageTypeList[0].indexOf("女") > -1) {
				console.log("ageTypeList[0].split女", ageTypeList[0].split("女"));
				ageSex.value.ageSexActive = 3;
				ageHandler.value = ageTypeList[0].split("女")[1];
				ageValue.value = [ageTypeList[0].split("女")[1].split("-")[0].trim(), ageTypeList[0].split("女")[1].split("-")[1].trim()];
			}
			sexHandler(ageHandler.value);
		}
		// 只有一个那么可以判断是只收男或女
	} else {
		if (ageTypeList[0].indexOf("男") > -1) {
			ageSex.value.ageSexActive = 2;
			ageHandler.value = ageTypeList[0].split("男")[1];
			ageValue.value = [ageTypeList[0].split("男")[1].split("-")[0].trim(), ageTypeList[0].split("男")[1].split("-")[1].trim()];
		} else if (ageTypeList[0].indexOf("女") > -1) {
			ageSex.value.ageSexActive = 3;
			ageHandler.value = ageTypeList[0].split("女")[1];
			// womanAgeHandler.value = ageTypeList[0].split("女")[1];
			ageValue.value = [ageTypeList[0].split("女")[1].split("-")[0].trim(), ageTypeList[0].split("女")[1].split("-")[1].trim()];
		}
		sexHandler(ageHandler.value);
	}
	// 不知名原因需要同意减16才能正常显示
	ageValue.value = [ageValue.value[0] * 1 - 16, ageValue.value[1] * 1 - 16];
	ageWomanValue.value = [ageWomanValue.value[0] * 1 - 16, ageWomanValue.value[1] * 1 - 16];
	// console.log("ageValue1", ageValue);
	// console.log("ageWomanValue1", ageWomanValue);
};
const configAge = (_list) => {
	console.log("_list", _list);
	return _list.length > 1 ? _list[0] + "-" + _list[1] : _list[0] + "-" + _list[0];
};
/**
 * 显示选择弹窗
 */
const showPop = (_type) => {
	popShow.value = true;
	console.log("_type", _type);
	switch (_type) {
		case "salary":
			popText.value = "选择薪资类型";
			break;
		case "age":
			popText.value = "选择性别要求";
			break;
		case "serviceFee":
			popText.value = "选择佣金类型";
			break;
		case "jobDesp":
			popText.value = "编辑职位描述";
			break;
	}
};
const previewShop = ref(false);
/**
 * 职位预览
 */
const showPreview = () => {
	formatJSON();
	previewShop.value = true;
};
let middleInfo = ref({});
// 新增职位的提交
const onSubmit = (e) => {
	console.log(e);

	let newImg = [];
	imgList.value.forEach((item) => {
		newImg.push(item.url);
	});
	let onloadInfo = {
		jobName: formInfo.value.jobName,
		salaryDetail: formInfo.value.salaryDetail,
		returnFeeDesp: formInfo.value.returnFeeDesp,
		storeAddr: formInfo.value.storeAddr,
		storeLat: formInfo.value.storeLat,
		storeLng: formInfo.value.storeLng,
		storeName: formInfo.value.storeName,
		jobDesp: formInfo.value.jobDesp,
		minAgeWoman: formInfo.value.minAgeWoman,
		maxAgeWoman: formInfo.value.maxAgeWoman,
		minAge: formInfo.value.minAge,
		maxAge: formInfo.value.maxAge,
		minAgeMan: formInfo.value.minAgeMan,
		maxAgeMan: formInfo.value.maxAgeMan,
		minAge: formInfo.value.minAge,
		salaryClassify: formInfo.value.salaryClassify,
		returnFeeType: formInfo.value.returnFeeType,
		otherInfo: formInfo.value.jobDesp,
		// daotian: jobConfig.value.daotian ? 1 : 0,
		recruitment: jobConfig.value.recruitment ? 1 : 2,

		// jobInfoYuQue: formInfo.value.jobInfo,
		// imgs: newImg.join(","),
	};
	console.log(formInfo.value);
	if (!formInfo.value.jobName) {
		uni.showToast({
			title: "请输入职位名称",
			icon: "none",
		});
		return;
	}
	if (formInfo.value.returnFeeType != 7 && !formInfo.value.returnFee) {
		uni.showToast({
			title: "请输入佣金信息",
			icon: "none",
		});
		return;
	} else {
		onloadInfo.returnFee = Number(formInfo.value.returnFee).toFixed(2) * 100;
	}
	let priceWatch = false;
	if (monthValue.value) {
		let ageObj = specStrReg(monthValue.value);
		formInfo.value.minMonthlyPay = ageObj.min * 100;
		formInfo.value.maxMonthlyPay = ageObj.max * 100;
	}
	if (onloadInfo.salaryClassify != 4 && onloadInfo.salaryClassify != 6) {
		if (formInfo.value.salaryClassifyValue === "" && !formInfo.value.minMonthlyPay) {
			uni.showToast({
				title: "请输入薪资信息",
				icon: "none",
			});
			priceWatch = true;
		} else {
			priceWatch = false;
			onloadInfo.minMonthlyPay = formInfo.value.minMonthlyPay || "";
			onloadInfo.maxMonthlyPay = formInfo.value.maxMonthlyPay || "";
			onloadInfo.salaryClassifyValue = Number(formInfo.value.salaryClassifyValue).toFixed(2) * 100;
		}
	}
	if (priceWatch) {
		return;
	}

	if (!formInfo.value.minAgeMan && !formInfo.value.maxAgeMan && !formInfo.value.minAgeWoman && !formInfo.value.maxAgeWoman) {
		uni.showToast({
			title: "请输入年龄信息",
			icon: "none",
		});
		return;
	}
	if (onloadInfo.salaryClassifyValue >= 10000000) {
		uni.showToast({
			title: "请输入少于10万的薪资",
			icon: "none",
		});
		return;
	}
	if (onloadInfo.returnFee >= 10000000) {
		uni.showToast({
			title: "请输入少于10万的佣金",
			icon: "none",
		});
		return;
	}
	let newArr = [formInfo.value.minAgeMan, formInfo.value.maxAgeMan, formInfo.value.minAgeWoman, formInfo.value.maxAgeWoman];
	newArr.sort();
	console.log("newArr", newArr);
	onloadInfo.minAge = newArr[0] == 0 ? newArr[2] : newArr[0];
	onloadInfo.maxAge = newArr[3];
	let onsite = [];
	selectedOnsite.value.forEach((item) => {
		onsite.push(item.id);
	});
	console.log("selectedService.value", selectedService.value);
	onloadInfo.customServiceUserIds = selectedService.value.length > 0 ? selectedService.value[0].id : "";
	onloadInfo.onSiteUserIds = onsite.join(",");
	if (rangeConfig.value.subVal.length > 0) {
		onloadInfo.visibleRange = rangeConfig.value.subVal.sort().join("");
	} else {
		onloadInfo.visibleRange = 0;
	}
	let obj = {};
	let subMark = jobMark.value
		.filter((item) => item.active)
		.map((item) => item.name)
		.join(" ");
	// 职位描述的JSON字段空值判断
	let despEmpty = true;
	templateArr.value.forEach((item) => {
		item.children.forEach((innerItem) => {
			if (innerItem.value) {
				despEmpty = false;
			}
			obj[innerItem.key] = innerItem.value;
			switch (innerItem.key) {
				case "职位标签":
					obj[innerItem.key] = subMark;
					break;
				case "职位标题":
					obj[innerItem.key] = onloadInfo.jobName;
					break;
			}
		});
	});
	if (JSON.stringify(obj) != "{}" && !despEmpty) {
		onloadInfo.cozeStructureRes = JSON.stringify(obj);
	}
	onloadInfo.lastNotice = aitext.value;
	onloadInfo.jobSpecialLabelId = jobMark.value
		.filter((item) => item.active)
		.map((item) => item.id)
		.join(",");

	console.log("onloadInfo", onloadInfo);
	// return
	onloadInfo.recordId = jobId.value;
	submitConfirm.value = true;
	middleInfo.value = onloadInfo;
	return;
	G.handleConfirm({
		content: "请确认是否发布职位",
		confirmText: "发布职位",
		success: (res) => {
			if (res.confirm) {
				// if (jobId.value) {
				G.Post(jobId.value ? "/yishoudan/custom/job/updateRecordByCoze" : "/yishoudan/custom/job/addRecordByCoze", onloadInfo, (res) => {
					uni.showToast({
						title: "发布成功",
						icon: "success",
					});
					setTimeout(() => {
						uni.navigateBack({
							delta: -1,
						});
					}, 1000);
				});
				// } else {
				// 	G.Post("/yishoudan/custom/job/addRecordByCoze", onloadInfo, (res) => {
				// 		uni.showToast({
				// 			title: "发布成功",
				// 			icon: "success",
				// 		});
				// 		setTimeout(() => {
				// 			uni.navigateBack({
				// 				delta: -1,
				// 			});
				// 		}, 1000);
				// 	});
				// }
			}
		},
	});
};
const subLoading = ref(false);
// 自定义确认框点击确定后的回调
const finallySubmit = () => {
	if (subLoading.value) {
		return;
	}
	subLoading.value = true;
	G.Post(jobId.value ? "/yishoudan/custom/job/updateRecordByCoze" : "/yishoudan/custom/job/addRecordByCoze", { ...middleInfo.value, daotian: jobConfig.value.daotian ? 1 : 0 }, (res) => {
		subLoading.value = false;
		uni.showToast({
			title: "发布成功",
			icon: "success",
		});
		setTimeout(() => {
			uni.navigateBack({
				delta: -1,
			});
		}, 1000);
	});
};
const changeSex = (e, type) => {
	// 年龄, 服务费, 薪资, 类型变化
	console.log(e);
	if (type == "ageSex") {
		ageSex.value.ageSexActive = e.id;
	} else if (type == "serviceFee") {
		formInfo.value.returnFeeType = e.id;
	} else if (type == "staffPrice") {
		console.log("eeechangeSex", e);
		formInfo.value.salaryClassify = e.id;
		currentPrice.value = staffPrice.value.list[staffPrice.value.list.findIndex((item) => item.id == e.id)];
	}
	popShow.value = false;
	// ageSex.ageSexActive = item.id
};
// 地址选择的回调
const chooseAddress = () => {
	console.log("chooseAddress");

	new Promise((resolve) => {
		if (formInfo.value.storeAddr) {
			if (formInfo.value.storeLat || formInfo.value.storeLng) {
				console.log("formInfo.value", formInfo.value);
				resolve({
					latitude: formInfo.value.storeLat,
					longitude: formInfo.value.storeLng,
				});
			} else {
				console.log("noLat");
				let coordObj = getCoordByaddress(formInfo.value.storeAddr);
				resolve(coordObj);
			}
		} else {
			resolve({});
		}
	}).then((info) => {
		console.log("info", info);
		let obj = {};
		if (info.latitude) {
			obj = {
				latitude: info.latitude.toFixed(2),
				longitude: info.longitude.toFixed(2),
			};
		}
		// #ifdef MP-WEIXIN
		uni.chooseLocation({
			...obj,
			success(e) {
				console.log(e);
				var reg = /.+?(省|市|自治区|自治州|县|区)/g; // 省市区的正则
				let arr = [];
				if (e.address) {
					arr = e.address.match(reg);
				}
				console.log("arr123123", arr);
				formInfo.value.storeDistrict = arr.length > 0 ? [arr[0], arr[1]].join(",") : "";
				formInfo.value.storeAddr = arr.length > 0 ? arr[0] + e.name : e.name;
				formInfo.value.storeLat = e.latitude;
				formInfo.value.storeLng = e.longitude;
			},
			fail(e) {
				console.log("err", e);
			},
		});
		// #endif
	});

	return;
};
// 编辑职位获取信息
const getJobDetail = () => {
	let that = this;
	G.Get("/yishoudan/custom/job/detailV2/" + jobId.value, "", (res) => {
		console.log("resresresres", res);
		res = { ...res, ...res.record };

		if (res.salaryClassify == 7 && res.minMonthlyPay != "") {
			monthValue.value = res.minMonthlyPay / 100 + "-" + res.maxMonthlyPay / 100;
		} else if (res.salaryClassify == 4) {
			res.salaryClassifyValue = 0;
		} else if (res.salaryClassify == 6) {
			res.salaryClassifyValue = 0;
		} else {
			res.salaryClassifyValue = res.salaryClassifyValue / 100;
		}

		currentPrice.value = staffPrice.value.list[staffPrice.value.list.findIndex((item) => item.id == res.salaryClassify)];
		console.log("currentPrice.value", currentPrice.value);
		// imgList.value = img;
		console.log("imgList.value", imgList.value);
		if (res.returnFeeType != 7) {
			res.returnFee = res.returnFee / 100;
		}
		console.log("ageList.value", ageList.value);
		console.log(ageList.value[0].indexOf(res.minAgeWoman));
		if (Boolean(res.minAgeWoman) === true && Boolean(res.minAgeMan) === false) {
			// 女 4
			ageSex.value.ageSexActive = 3;
			ageHandler.value = res.minAgeWoman + "-" + res.maxAgeWoman;
			ageValue.value[0] = ageList.value[0].indexOf(res.minAgeWoman);
			ageValue.value[1] = ageList.value[0].indexOf(res.maxAgeWoman);
		} else if (Boolean(res.minAgeWoman) === false && Boolean(res.minAgeMan) === true) {
			// 男 3
			ageSex.value.ageSexActive = 2;
			ageHandler.value = res.minAgeMan + "-" + res.maxAgeMan;
			ageValue.value[0] = ageList.value[0].indexOf(res.minAgeMan);
			ageValue.value[1] = ageList.value[0].indexOf(res.maxAgeMan);
		} else {
			if (res.minAgeMan == res.minAgeWoman && res.maxAgeMan == res.maxAgeWoman) {
				// 男女不限 1
				ageSex.value.ageSexActive = 0;
				ageHandler.value = res.minAgeMan + "-" + res.maxAgeMan;
				ageValue.value[0] = ageList.value[0].indexOf(res.minAgeMan);
				ageValue.value[1] = ageList.value[0].indexOf(res.maxAgeMan);
			} else {
				// 男女不同 2
				ageSex.value.ageSexActive = 1;
				womanAgeHandler.value = res.minAgeWoman + "-" + res.maxAgeWoman;
				manAgeHandler.value = res.minAgeMan + "-" + res.maxAgeMan;
				ageValue.value[0] = ageList.value[0].indexOf(res.minAgeMan);
				ageValue.value[1] = ageList.value[0].indexOf(res.maxAgeMan);
				// 女性年龄选择列表单独处理
				ageWomanValue.value[0] = ageList.value[0].indexOf(res.minAgeWoman);
				ageWomanValue.value[1] = ageList.value[0].indexOf(res.maxAgeWoman);
			}
		}
		if (res.visibleRange) {
			rangeConfig.value.subVal = res.visibleRange.toString().split("");
			setRangeText();
		}
		console.log("rangeConfig.value.val", rangeConfig.value.val);
		console.log("res.onSiteUsers", res.onSiteUsers);
		selectedOnsite.value = res.onSiteUsers;
		selectedService.value = res.customServiceUsers;
		console.log("selectedOnsite.value", selectedOnsite.value);
		// 格式化显示职位描述的多个字段
		// if (res.cozeStructureRes) {
		formatJSON(res.cozeStructureRes);
		// }
		// 处理职位标签
		if (res.jobSpecialLabelNames) {
			setJobMark(res.jobSpecialLabelNames);
		}
		aitext.value = res.lastNotice;

		// memberList.value.forEach((item) => {
		// 	selectedService.value.forEach((item1) => {
		// 		if (item.id == item1.userId) {
		// 			item.isSelected = true;
		// 			item1.id = item1.userId;
		// 		}
		// 	});
		// });
		// residentList.value.forEach((item) => {
		// 	selectedOnsite.value.forEach((item1) => {
		// 		if (item.id == item1.id) {
		// 			item.isSelected = true;
		// 		}
		// 	});
		// });
		jobConfig.value = {
			daotian: res.daotian === 0 ? false : true,
			recruitment: res.recruitment == 2 ? false : true,
		};

		formInfo.value = {...res};
		// setTimeout(() => {
		// 	showPage.value = true;
		// }, 2000);
		console.log("formInfo.value", formInfo.value);
		uni.hideLoading();
	});
};
// 驻场上拉框的选择
const handleChooseResident = ($item, $index) => {
	let that = this;
	residentList.value.forEach((item, index) => {
		if (index == $index) {
			if (item.isSelected) {
				item.isSelected = false;
			} else {
				item.isSelected = true;
			}
		} else {
			item.isSelected = false;
		}
	});
};
// 客服上拉框的选择
const handleChooseService = ($item, $index) => {
	memberList.value.forEach((item, index) => {
		if (index == $index) {
			if (item.isSelected) {
				item.isSelected = false;
			} else {
				item.isSelected = true;
			}
		} else {
			item.isSelected = false;
		}
	});
};
// 打开驻场上拉框
const handleOpenModal = () => {
	// 处理回显
	// let ids = orderDetail.onSiteUsers.length == 0 ? '' : orderDetail.onSiteUsers.map(item => {
	// 	return item.userId;
	// }).join(',');
	// residentList.filter(item => {
	// 	return ids.indexOf(item.userId) > -1
	// }).forEach((item,index) => {
	// 	item.isSelected = true;
	// })
	isOnsiteShow.value = true;
};
const delSelectedOnsite = (ind, i) => {
	selectedOnsite.value.splice(ind, 1);
	residentList.value.forEach((item) => {
		if (item.id == i.id) {
			item.isSelected = false;
		}
	});
};
// 上传媒体文件
const chooseMedia = () => {
	let that = this;
	G.uploadMedia((res) => {
		console.log(res);
		if (res.status == "上传成功") {
			let newArr = [];
			res.imgList.forEach((item, index) => {
				let obj = {};

				if (item.indexOf(".mp4") > -1) {
					obj.type = "video";
				} else {
					obj.type = "image";
				}
				obj.url = item;
				obj.id = imgList.value.length == 0 ? index : imgList.value[imgList.value.length - 1].id + 1 + index;
				newArr.push(obj);
			});
			if (imgList.value.length != 0) {
				imgList.value = imgList.value.concat(newArr);
			} else {
				imgList.value = newArr;
			}
			uni.showToast({
				title: "上传成功",
				icon: "success",
			});
		}
		uni.hideLoading();
	});
};
const delImg = (e) => {
	imgList.value.splice(
		imgList.value.findIndex((item) => e == item),
		1
	);
};
// 显示
const showImgs = (e) => {
	console.log(e);
	let curr = [];
	imgList.value.forEach((item) => {
		curr.push(item.url);
	});
	console.log(curr);

	uni.previewImage({
		current: e, // 当前显示图片的 http 链接
		urls: curr, // 需要预览的图片 http 链接列表
	});
};
// 显示视频
const showVideo = (e) => {
	videoContext.value = uni.createVideoContext(`${e.id}`, this);
	videoContext.value.requestFullScreen();
	videoContext.value.hideStatusBar();
	videoContext.value.play();
};
const fullScreen = (e) => {
	console.log(e);
	if (!e.detail.fullScreen) {
		videoContext.value.stop();
	}
};
/**
 * 驻场弹出框按钮确认
 */
const submitRes = () => {
	let selectedOnsiteInfo = [];
	selectedOnsiteInfo = residentList.value.filter((item) => {
		return item.isSelected;
	});
	if (selectedOnsiteInfo.length > 3) {
		uni.showToast({
			title: "最多选择3个驻场人员",
			icon: "none",
		});
		return false;
	}
	console.log(selectedOnsiteInfo);
	isOnsiteShow.value = false;
	selectedOnsite.value = selectedOnsiteInfo;
};

/**
 * 客服弹出框按钮确认
 */
const submitService = () => {
	let selectedServiceInfo = [];
	selectedServiceInfo = memberList.value.filter((item) => {
		return item.isSelected;
	});
	console.log(selectedServiceInfo);
	isServiceShow.value = false;
	selectedService.value = selectedServiceInfo;
};
const resetInfo = (type = "init") => {
	if (type == "init") {
		templateArr.value = JSON.parse(JSON.stringify(templateArrCopy.value));
	} else {
		let hasVal = false;
		for (const k in formInfo.value) {
			if (formInfo.value[k]) {
				hasVal = true;
			}
		}
		templateArr.value.forEach((item) => {
			item.children.forEach((innerItem, ind) => {
				if (innerItem.value) {
					hasVal = true;
				}
			});
		});
		return new Promise((reso) => {
			if (hasVal) {
				G.handleConfirm({
					content: type == "ai" ? "AI填表会覆盖所填内容，确定要清空内容并重新填写吗？" : "确定要清空内容吗?",
					success: function (res) {
						console.log("res", res);
						if (res.confirm) {
							formInfo.value.jobName = "";
							formInfo.value.salaryDetail = "";
							formInfo.value.returnFeeDesp = "";
							formInfo.value.storeAddr = "";
							formInfo.value.storeLat = "";
							formInfo.value.storeLng = "";
							formInfo.value.storeName = "";
							formInfo.value.jobDesp = "";
							jobMark.value = [];
							showEmpty.value = false;
							resetAge();
							resetSalary();
							resetMonth();
							resetReturnFee();
							// 重置职位描述的内容
							templateArr.value = JSON.parse(JSON.stringify(templateArrCopy.value));
							reso(true);
						} else {
							reso(false);
						}
					},
				});
			} else {
				if (type == "ai") {
					reso(true);
				} else {
					uni.showToast({
						title: "您还没有填写内容",
						icon: "none",
					});
				}
			}
		});
	}
};
/**
 * 重置月薪字段
 */
const resetMonth = () => {
	monthValue.value = "";
};
/**
 * 重置薪资字段
 */
const resetSalary = () => {
	formInfo.value.salaryClassify = 0;
	formInfo.value.salaryClassifyValue = "";
};
/**
 * 重置佣金相关的字段
 */
const resetReturnFee = () => {
	formInfo.value.returnFee = "";
	formInfo.value.returnFeeType = 0;
};
/**
 * 重置性别年龄相关的字段
 */
const resetAge = () => {
	ageSex.value.ageSexActive = 0;
	formInfo.value.minAgeWoman = "";
	formInfo.value.maxAgeWoman = "";
	formInfo.value.minAgeMan = "";
	formInfo.value.maxAgeMan = "";
	ageHandler.value = "";
	manAgeHandler.value = "";
	womanAgeHandler.value = "";
	dataError.value.ageSex = false;
};
const showFee = () => {
	let that = this;
	let title = "佣金: " + (formInfo.value.returnFee || "请填写");
	let content = formInfo.value.returnFeeDesp || "请填写佣金详情";
	uni.showModal({
		title,
		content,
		contentColor: "#ccc",
		confirmColor: "#576b95",
		confirmText: "确定",
		showCancel: false,
		success(res) {},
	});
};
const getCoordByaddress = (address) => {
	// 默认显示北京
	let coordObj = { latitude: 39.9042, longitude: 116.4074 };
	for (const k in locationList) {
		if (address.indexOf(k) != -1) {
			coordObj = locationList[k].center;
			for (const k_in in locationList[k]) {
				if (address.indexOf(k_in) != -1) {
					coordObj = locationList[k][k_in];
				}
			}
		} else {
			for (const k_in in locationList[k]) {
				if (address.indexOf(k_in) != -1) {
					coordObj = locationList[k][k_in];
				}
			}
		}
	}
	return coordObj;
};
const checkAuth = () => {
	if (authInfo.value.certificationAuth !== 2) {
		G.handleConfirm({
			content: "行业资质未认证，暂无法发布到平台。",
			confirmText: "去认证",
			success: function (res) {
				if (res.confirm) {
					uni.navigateTo({
						url: authInfo.value.realNameAuth !== 2 ? "/root/other/companyAuthentic?stepIndex=0" : "/root/other/companyAuthentic?stepIndex=1", // 跳转到行业资质认证页面
					});
				}
			},
		});
	} else {
		jobConfig.value.daotian = !jobConfig.value.daotian;
	}
};
const rangeConfig = ref({
	type: 0,
	val: [],
	subVal: [],
	val1: false,
	val2: false,
	val3: false,
	text: "仅自己可见",
});
watch(isRangeShow, (res) => {
	console.log("resrsers", res);
	if (res) {
		setRangeText();
		console.log("rangeConfig.value.val", rangeConfig.value.val);
	}
});
const getRangeType = (e) => {
	console.log(e);
	rangeConfig.value.type = e.detail.value;
	if (e.detail.value == 0) {
		rangeConfig.value.val = [];
		rangeConfig.value.val1 = false;
		rangeConfig.value.val2 = false;
		rangeConfig.value.val3 = false;
	}
};
const getRangeVal = (e) => {
	console.log(e);
	rangeConfig.value.val = e;
};
const submitRange = () => {
	let rangeText = [];
	console.log("rangeConfig.value", rangeConfig.value);
	if (rangeConfig.value.type == 0) {
		rangeConfig.value.text = "仅自己可见";
	} else {
		if (!rangeConfig.value.val1 && !rangeConfig.value.val2 && !rangeConfig.value.val3) {
			uni.showToast({
				icon: "none",
				title: "请至少选择一项",
			});
			return false;
		}
		if (rangeConfig.value.val1) rangeText.push("老乡");
		if (rangeConfig.value.val2) rangeText.push("代理");
		if (rangeConfig.value.val3) rangeText.push("平台");
		rangeConfig.value.text = rangeText.join("、") + "可见";
	}
	rangeConfig.value.subVal = JSON.parse(JSON.stringify(rangeConfig.value.val));
	isRangeShow.value = false;
	console.log("rangeConfig.value", rangeConfig.value);
};
// 回显设置
const setRangeText = () => {
	let rangeText = [];
	rangeConfig.value.val = JSON.parse(JSON.stringify(rangeConfig.value.subVal));
	rangeConfig.value.val1 = false;
	rangeConfig.value.val2 = false;
	rangeConfig.value.val3 = false;
	if (rangeConfig.value.val.length == 0) {
		rangeConfig.value.type = "0";
	} else {
		rangeConfig.value.type = "1";
		rangeConfig.value.val.forEach((item) => {
			if (item == "1") {
				rangeConfig.value.val1 = true;
			} else if (item == "2") {
				rangeConfig.value.val2 = true;
			} else if (item == "3") {
				rangeConfig.value.val3 = true;
			}
		});
		if (rangeConfig.value.val1) rangeText.push("老乡");
		if (rangeConfig.value.val2) rangeText.push("代理");
		if (rangeConfig.value.val3) rangeText.push("平台");
		rangeConfig.value.text = rangeText.join("、") + "可见";
	}
};
</script>
<style lang="scss">
@import "../../libs/utils/filtercss.css";
// page {
// 	background-color: #f5f5f5;
// 	// padding: 10px 10px;
// 	box-sizing: border-box;
// }
.p-root-home-jobForm {
	font-size: 16px;
	position: relative;
	min-height: 100%;
	.heightSet {
		height: 48px;
		line-height: 48px;
	}
	.m-emask {
		position: fixed;
		left: 0;
		top: 0;
		width: 100vw;
		height: 100vh;
		background-color: rgba(0, 0, 0, 0.5);
		z-index: 999;
	}
	.showdoc {
		// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04), 0 0 6px rgba(0, 0, 0, 0.02);

		.menu-obj {
			// min-width: 422px;

			.menu-btn {
				margin-right: 8px;

				.btn {
					background: rgba(204, 204, 204, 0.2);
					border: 1rpx solid transparent;
					color: #666666;
					white-space: nowrap;
				}
			}

			.menu-active {
				.btn {
					background: #3578f622;
					border: 1rpx solid #3578f6;
					color: #3578f6;
					box-sizing: border-box;
					height: 24px;
					line-height: 22px;
				}
			}
		}
	}

	.bottom-btn {
		position: fixed;
		width: 100%;
		bottom: 0;
		left: 0;
		background-color: #fff;
		padding-top: 12px;
		padding-bottom: constant(safe-area-inset-bottom); /*兼容 IOS<11.2*/
		padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*/
		// padding: 16px 0;
		min-height: 72px;
		border-top: 1rpx solid #eee;
	}

	.onsiteSub {
		padding-left: 8px;
		padding-right: 8px;
		margin-right: 8px;
		height: 24px;
		background: #3578f622;
		border: 1px solid #3578f6;
		border-radius: 4px;
		color: #3578f6;
	}

	.input-close {
		// position: absolute;
		// width: 18px;
		// height: 18px;
		// right: 7px;
		// top: 2px;
		// z-index: 99;
		// background-color: #ccc;
		// color: #fff;
		// font-size: 8px;
		// text-align: center;
		// line-height: 18px;
		// border-radius: 50%;
	}
	.img-close {
		position: absolute;
		width: 18px;
		height: 18px;
		right: -6px;
		top: -6px;
		z-index: 99;
		background-color: #ccc;
		color: #fff;
		font-size: 8px;
		text-align: center;
		line-height: 18px;
		border-radius: 50%;
	}
	.btnBox {
		position: sticky;
		bottom: 0;
		padding-top: 12px;
		display: flex;
		height: unset;
		justify-content: center;
		background-color: #fff;
	}
	.popText {
		position: sticky;
		top: 0;
	}
	.vertical_line_after {
		position: relative;
		&::after {
			content: "";
			position: absolute;
			right: -4px;
			top: 50%;
			transform: translateY(-50%);
			width: 1rpx;
			height: 48px;
			background-color: #eee;
		}
	}
	.vertical_line_before {
		position: relative;
		&::before {
			content: "";
			position: absolute;
			left: -10px;
			top: 50%;
			transform: translateY(-50%);
			width: 1rpx;
			height: 20px;
			background-color: #eee;
		}
	}
	.loadBox {
		position: absolute;
		top: 50%;
		transform: translateY(-53%);
	}
	.u-input__input {
		font-size: 16px !important;
	}
	.AISticky {
		position: sticky;
		top: 0px;
		z-index: 100;
		transform: translateX(-10px);
		width: 100vw;
		height: 300px;
		border-bottom: 1px solid #eee;
	}
}
</style>
