Bladeren bron

每日运势

Xiao_123 2 dagen geleden
bovenliggende
commit
cda8c6dc4c

+ 15 - 0
api/drawLots.js

@@ -0,0 +1,15 @@
+import request from "@/utils/request"
+
+// 获取日历
+export const getDrawLots = (params) => {
+	return request({
+		url: '/api/parse/get-calendar-info',
+		method: 'GET',
+		params,
+		baseURL: 'http://192.168.3.80',
+		custom: {
+			showLoading: false,
+			auth: false
+		}
+	})
+}

+ 8 - 4
components/uni-calendar/components/uni-calendar/uni-calendar-item.vue

@@ -1,5 +1,6 @@
 <template>
 	<!-- 'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) , -->
+	 <!-- 'background-color':((calendar.fullDate === weeks.fullDate && weeks.isDay) || (calendar.fullDate === weeks.fullDate && !weeks.isDay)) ? '#2979ff' : weeks.extraInfo && weeks.extraInfo.color ? weeks.extraInfo.color : '' -->
 	<view class="uni-calendar-item__weeks-box" :class="{
 		'uni-calendar-item--disable':weeks.disable,
 		'uni-calendar-item--before-checked':weeks.beforeMultiple,
@@ -11,7 +12,7 @@
 		<view 
 			class="uni-calendar-item__weeks-box-item" 
 			:style="{
-				'background-color':((calendar.fullDate === weeks.fullDate && weeks.isDay) || (calendar.fullDate === weeks.fullDate && !weeks.isDay)) ? '#2979ff' : weeks.extraInfo && weeks.extraInfo.color ? weeks.extraInfo.color : '', 
+				'background-color': (weeks.extraInfo && weeks.extraInfo.color) ? weeks.extraInfo.color : ((calendar.fullDate === weeks.fullDate && weeks.isDay) || (calendar.fullDate === weeks.fullDate && !weeks.isDay)) ? '#2979ff' : '',
 				'margin-bottom': weeks.extraInfo && weeks.extraInfo.url ? '0px' : '40rpx'
 			}"
 		>
@@ -20,7 +21,7 @@
 			<text class="uni-calendar-item__weeks-box-text" :class="{
 				'uni-calendar-item--isDay-text': weeks.isDay,
 				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
+				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay && !weeks.extraInfo?.color,
 				'uni-calendar-item--before-checked':weeks.beforeMultiple,
 				'uni-calendar-item--multiple': weeks.multiple,
 				'uni-calendar-item--after-checked':weeks.afterMultiple,
@@ -39,7 +40,7 @@
 			<text v-if="lunar" class="uni-calendar-item__weeks-lunar-text" :class="{
 				'uni-calendar-item--isDay-text':weeks.isDay,
 				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
+				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay && !weeks.extraInfo?.color,
 				'uni-calendar-item--before-checked':weeks.beforeMultiple,
 				'uni-calendar-item--multiple': weeks.multiple,
 				'uni-calendar-item--after-checked':weeks.afterMultiple,
@@ -59,7 +60,7 @@
 		</view>
 		
 		<view v-if="weeks.extraInfo && weeks.extraInfo.url" style="text-align: center; margin-top: 10px;">
-			<image :src="weeks.extraInfo.url" style="width: 20px; height: 20px;" />
+			<image :src="weeks.extraInfo.url" style="width: 20px; height: 20px;" @click="handleClickImg(weeks)" />
 		</view>
 	</view>
 
@@ -104,6 +105,9 @@
 		methods: {
 			choiceDate(weeks) {
 				this.$emit('change', weeks)
+			},
+			handleClickImg(weeks) {
+				this.$emit('change', weeks)
 			}
 		}
 	}

+ 95 - 0
hooks/useDictionaries.js

@@ -0,0 +1,95 @@
+import {
+  getDictData,
+  getIndustryListData,
+  getSkillList,
+  getIndustryTreeData,
+  getAreaListData,
+  getAreaMapData,
+  getPositionTreeData,
+  getAreaTreeData,
+  getPositionData
+} from '@/api/common'
+import { getSecondNodes } from '@/utils/dealData'
+
+// const setDict = (type, val, cacheTime = 7200) => {
+const setDict = (type, val) => {
+  if (!val) {
+    return
+  }
+  if (type === 'areaTreeData') {
+    const obj = val.data.find(e => e.name === '中国')
+    val.data = obj?.children ? obj.children.map(e =>{
+      // 市辖区直接显示区
+      const municipality = e.children && e.children.length && e.children[0].name === '市辖区'
+      if (municipality && e.children[0].children?.length) e.children = e.children[0].children
+      return e
+    }) : []
+  }
+  if (type === 'areaTreeDataExtend') { // 前排加上不限
+    const obj = val.data.find(e => e.name === '中国')
+    if (obj?.children?.length) {
+      // const province = 
+      obj.children.forEach(e=> {
+        // 市辖区直接显示区
+        const municipality = e.children && e.children.length && e.children[0].name === '市辖区'
+        if (municipality && e.children[0].children?.length) e.children = e.children[0].children
+        // 不限
+        extendFun(e)
+      })
+      val.data = obj.children
+    } else val.data = []
+
+    function extendFun (e) {
+      const idType = Number.isInteger(e.id) ? 'int' : 'str'
+      if(e.children?.length) {
+        e.children.unshift({ name: '不限', id: e.id+'unlimited', idType })
+        e.children.forEach(i => extendFun(i))
+      }
+    }
+  }
+  // 一小时过期
+  const currentTime = new Date()
+  currentTime.setTime(currentTime.getTime() + 3600 * 1000)
+  
+  uni.setStorageSync(type, JSON.stringify({
+    data: val,
+    // expire: Date.now() + cacheTime * 1000
+    expire: currentTime.getTime()
+  }))
+}
+
+export const getDict = (type, params, apiType = 'dict') => {
+    if (!type) {
+      return []
+    }
+    return new Promise((resolve) => {
+      const item = uni.getStorageSync(type)
+      const catchData = item ? JSON.parse(item) : null
+      if (catchData && catchData.expire && (Date.now() <= catchData.expire) && catchData.data && catchData.data?.data?.length) {
+        return resolve({ data: catchData.data })
+      }
+      // 传参按照规范参数传
+      const query = params ? params : { type }
+      const apiFn = {
+        dict: getDictData,
+        positionTreeData: getPositionTreeData, // 职位tree
+        areaTreeData: getAreaTreeData, // 区域tree
+        areaTreeDataExtend: getAreaTreeData, // 区域tree(二级以后含不限)
+        industryTreeData: getIndustryTreeData, // 行业tree
+        industryList: getIndustryListData,
+        skillList: getSkillList,
+        areaList: getAreaListData,
+        areaMap: getAreaMapData,
+        positionSecondData: getPositionTreeData,
+        positionData: getPositionData
+      }
+      apiFn[apiType](query).then(data => {
+        // setDict(type, data, Date.now())
+        if (type === 'positionSecondData') {
+          data.data = getSecondNodes(data.data)
+        }
+        setDict(type, data)
+        resolve({ data })
+      })
+    })
+}

+ 8 - 2
pages.json

@@ -3,13 +3,19 @@
 		{
 			"path": "pages/drawLots/index",
 			"style": {
-				"navigationBarTitleText": "签"
+				"navigationBarTitleText": "每日运势"
+			}
+		},
+		{
+			"path": "pages/drawLots/form",
+			"style": {
+				"navigationBarTitleText": "信息采集"
 			}
 		}
 	],
 	"globalStyle": {
 		"navigationBarTextStyle": "black",
-		"navigationBarTitleText": "我是大女主",
+		"navigationBarTitleText": "辞图科技",
 		"navigationBarBackgroundColor": "#ffffff",
 		"backgroundColor": "#ffffff"
 	}

+ 58 - 0
pages/drawLots/form.vue

@@ -0,0 +1,58 @@
+<template>
+  <view class="ss-p-x-30 ss-p-y-30">
+		<!-- <picker mode="date" :value="formData.birthday" start="" end="" @change="bindDateChange">
+			<view class="uni-input">{{ formData.birthday }}</view>
+		</picker> -->
+		<view class="color-primary text-center font-size-18 ss-m-b-100">
+			请选择您的出生日期
+		</view>
+    <uni-forms ref="formRef" :modelValue="formData" :rules="rules" validateTrigger="bind" label-width="76px" label-align="right">
+      <uni-forms-item required label="出生日期" name="birthday">
+        <uni-datetime-picker v-model="formData.birthday" type="date" />
+			</uni-forms-item>
+			<view class="f-horizon-center">
+				<button type="primary" size="default" class="send-button"  @click="handleSubmit">提 交</button>
+			</view>
+		</uni-forms>
+  </view>
+</template>
+
+<script setup>
+import { ref, unref } from 'vue'
+
+const formRef = ref(null)
+const formData = ref({
+	birthday: ''
+})
+const rules = {
+	birthday: {
+		rules: [{required: true, errorMessage: '请选择您的出生日期' }]
+	}
+}
+
+const bindDateChange = (e) => {
+  console.log(e.detail.value, 'change')
+	formData.value.birthday = e.detail.value
+}
+
+const handleSubmit = async () => {
+	const valid = await unref(formRef).validate()
+  if (!valid) return
+
+	console.log('submit', formData.value.birthday)
+
+	uni.setStorageSync('birthday', formData.value.birthday)
+
+	uni.reLaunch({
+		url: `/pages/drawLots/index`
+	})
+}
+</script>
+
+<style lang="scss" scoped>
+:deep {
+	.uni-picker {
+		height: 60px !important;
+	}
+}
+</style>

+ 212 - 35
pages/drawLots/index.vue

@@ -11,19 +11,74 @@
 
 		<uni-popup ref="popupRef" type="dialog">
 			<view class="popupContent">
-				<view class="">上上签</view>
-				<view class="ss-m-y-10">今日运势:上</view>
-				<view class="d-flex align-center justify-center">
+				<!-- <image class="img" src="https://menduner.citupro.com:3443/dev/f7b4ce5cdd4a96286640a88c868c47694fd98b536a79218d1e755498db547725.png"></image>
+				<view class="title">{{ calendarInfo.yangli }}</view>
+				<view class="d-flex align-center justify-center" style="margin-top: 55px;">
 					幸运色:
 					<view class="luckyColor" :style="{ 'background-color': currentColor }"></view>
 				</view>
 
-				<view class="color-666 font-size-13 ss-m-t-30" style="text-align: left;">
-					<view>宜:炼丹悟道 结善缘 精心修养</view>
-					<view>忌:远行 投资 冲动决策</view>
-					<view>今日贵人相助,修行精进</view>
+				<view class="font-size-12 ss-m-t-30" style="text-align: left; color: #888;">
+					<view>阴历:{{ calendarInfo.yinli }}</view>
+					<view class="ss-m-y-10">宜:{{ calendarInfo.yi }}</view>
+					<view>忌:{{ calendarInfo.ji }}</view>
+				</view> -->
+
+				<view class="content-box">
+					<view class="text-center ss-p-y-30">
+						<view class="yangli">{{ calendarInfo.yangli }}</view>
+						<view class="yinli">{{ calendarInfo.yinli }}</view>
+						<view class="d-flex align-center justify-center">
+							<span style="color: #7f7f7f;">幸运色</span>
+							<view class="luckyColor ss-m-l-20" :style="{ 'background-color': `${currentColor || '#2979ff'}` }"></view>
+						</view>
+					</view>
+					<view class="center-box ss-p-y-30 ss-p-x-30">
+						<view class="d-flex">
+							<view class="yi d-flex align-center justify-center">宜</view>
+							<view class="font-size-15" style="flex: 1; color: #c6b393;">{{ calendarInfo.yi }}</view>
+						</view>
+						<view class="d-flex ss-m-t-30">
+							<view class="ji d-flex align-center justify-center">忌</view>
+							<view class="font-size-15" style="flex: 1; color: #7f7f7f;">{{ calendarInfo.ji }}</view>
+						</view>
+					</view>
+					<view class="bottom-box">
+						<view class="bottom-box-item d-flex flex-column align-center justify-center">
+							<view class="padding">
+								<view class="label">五行</view>
+								<view class="value">{{ calendarInfo.wuxing }}</view>
+							</view>
+							<view style="border-top: 1px solid #c2a08c; height: 1px; width: 100%;"></view>
+							<view class="padding">
+								<view class="label">吉神</view>
+								<view class="value">{{ calendarInfo.jishen }}</view>
+							</view>
+						</view>
+						<view class="bottom-box-item d-flex align-center justify-center">
+							<view class="padding">
+								<view class="label">彭祖</view>
+								<view class="value">{{ calendarInfo.baiji }}</view>
+							</view>
+						</view>
+						<view class="bottom-box-item d-flex flex-column align-center justify-center">
+							<view class="padding">
+								<view class="label">冲煞</view>
+								<view class="value">{{ calendarInfo.chongsha }}</view>
+							</view>
+							<view style="border-top: 1px solid #c2a08c; height: 1px; width: 100%;"></view>
+							<view class="padding">
+								<view class="label">凶神</view>
+								<view class="value">{{ calendarInfo.xiongshen }}</view>
+							</view>
+						</view>
+					</view>
 				</view>
 			</view>
+
+			<view class="text-center ss-m-t-50">
+				<uni-icons type="close" size="40" color="#fff" @click="handleClose"></uni-icons>
+			</view>
 		</uni-popup>
   </view>
 </template>
@@ -32,6 +87,7 @@
 import { onLoad } from '@dcloudio/uni-app'
 import { ref } from 'vue'
 import Calendar from '@/components/uni-calendar/components/uni-calendar/uni-calendar.vue'
+import { getDrawLots } from '@/api/drawLots.js'
 
 	/**
 	 * 获取任意时间
@@ -60,54 +116,175 @@ import Calendar from '@/components/uni-calendar/components/uni-calendar/uni-cale
 	}
 
 	const selected = ref([])
+	const setSelectedDates = () => {
+		selected.value = [ 
+			{
+				date: getDate(new Date(),-20).fullDate,
+				color: '#d3e3fd',
+				url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
+			},
+			{
+				date: getDate(new Date(),-16).fullDate,
+				color: '#f8bbd0',
+				url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
+			},
+			{
+				date: getDate(new Date(),-12).fullDate,
+				color: '#3bb19b',
+				url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
+			},
+			{
+				date: getDate(new Date(),-7).fullDate,
+				color: '#facd89',
+				url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
+			},
+			{
+				date: getDate(new Date(),-3).fullDate,
+				color: '#d7ccc8',
+				url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
+			},
+			{
+				date: getDate(new Date(),-2).fullDate,
+				color: '#c5cae9',
+				url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
+			}
+		]
+	}
 
 	onLoad(() => {
+		// const birthday = uni.getStorageSync('birthday')
+		// if (!birthday) {
+		// 	uni.reLaunch({
+		// 		url: '/pages/drawLots/form'
+		// 	})
+		// 	return
+		// }
+
+		// 设置选中项
 		setTimeout(() => {
-			selected.value = [
-				{
-					date: getDate(new Date(),-3).fullDate,
-					color: '#2196F3',
-					url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
-				},
-				{
-					date: getDate(new Date(),-2).fullDate,
-					color: '#ff5252',
-					url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
-				},
-				{
-					date: getDate(new Date(),-1).fullDate,
-					color: '#26A69A',
-					url: 'https://menduner.citupro.com:3443/dev/2dbc20a5db2122e399b491638889ba9f8aea4e1c7a44463ee0df40b25f85b8cc.png'
-				}
-			]
+			setSelectedDates()
 		}, 2000)
 	})
 
 
 	const popupRef = ref()
 	const currentColor = ref(null)
-	const handleChange = (e) => {
-		// console.log('change 返回:', e)
-		if (e.isBackToday) return
-		if (e.extraInfo) {
+
+	const calendarInfo = ref({})
+	const handleChange = async (e) => {
+		if (e.isBackToday) return // 点击左上角“今日”按钮不弹窗
+
+		try {
+			const { result } = await getDrawLots({ date: e.fulldate })
+			// console.log(result, '成功信息')
+			calendarInfo.value = result || {}
+
 			popupRef.value.open()
-			currentColor.value = e.extraInfo?.color || '#2979ff'
+			currentColor.value = result?.color || e.extraInfo?.color
+		} catch (error) {
+			console.log(error, '错误信息')
 		}
 	}
+
+	const handleClose = () => {
+		popupRef.value.close()
+		currentColor.value = null
+		calendarInfo.value = {}
+	}
 </script>
 
 <style lang="scss" scoped>
+$commonColor: #c2a08c;
+$size: 25px;
+
 .popupContent {
+	position: relative;
 	background-color: #fff;
-	border-radius: 6px;
-	width: 400rpx;
-	height: 400rpx;
-	text-align: center;
+	// border-radius: 12px;
+	width: 70vw;
+	// height: 400rpx;
+	// text-align: center;
 	padding: 30rpx;
+	.content-box {
+		height: 100%;
+		border: 1px solid $commonColor;
+		border-radius: 6px; 
+		// padding: 20rpx;
+	}
+	.yangli {
+		font-weight: bold;
+		color: $commonColor;
+		font-size: 30px;
+	}
+	.yinli {
+		color: #7f7f7f;
+		margin: 10px 0;
+	}
+	.center-box {
+		border-top: 1px solid $commonColor;
+		border-bottom: 1px solid $commonColor;
+		.yi {
+			width: $size;
+			height: $size;
+			background-color: #c39c87;
+			border-radius: 50%;
+			color: #fff;
+			margin-right: 10px;
+			font-size: 14px;
+		}
+		.ji {
+			width: $size;
+			height: $size;
+			background-color: #bfbfbf;
+			border-radius: 50%;
+			color: #fff;
+			margin-right: 10px;
+			font-size: 14px;
+		}
+	}
+	.bottom-box {
+		display: flex;
+		&-item {
+			width: 33.3%;
+			text-align: center;
+			border-right: 1px solid $commonColor;
+			&:nth-child(3n) {
+				border-right: none;
+			}
+			.label {
+				font-size: 17px;
+			}
+			.value {
+				color: #7f7f7f;
+				font-size: 14px;
+				margin-top: 10px;
+			}
+			.padding {
+				padding: 10px;
+			}
+		}
+	}
 	.luckyColor {
-		width: 60rpx;
-		height: 60rpx;
+		width: 50rpx;
+		height: 50rpx;
 		border-radius: 50%;
 	}
+
+	.img {
+		position: absolute;
+		top: -56px;
+		left: 50%;
+		transform: translateX(-50%);
+		width: 150px;
+		height: 150px;
+	}
+	.title {
+		position: absolute;
+		top: 7px;
+		left: 50%;
+		color: #F49610;
+		font-weight: bold;
+		transform: translateX(-50%);
+	}
 }
 </style>

+ 1 - 1
utils/config.js

@@ -5,7 +5,7 @@ const config = {
     previewUrl: 'https://kkfileview.menduner.com/' // 预览路径
   },
   httpsTest: { // 测试环境
-    baseUrl: 'https://menduner.citupro.com:2443'
+    baseUrl: 'https://menduner.citupro.com:2443' // https://menduner.citupro.com:2443
   },
   httpTest: { // 测试环境
     baseUrl: 'http://menduner.citupro.com:7878'

+ 49 - 0
utils/dealData.js

@@ -0,0 +1,49 @@
+// 获取所有的叶子节点
+export const getLeafNodes = (tree) => {
+  const leafNodes = []
+  function traverse(node) {
+    if (!node.children || node.children.length === 0) {
+      leafNodes.push(node)
+    } else {
+      for (let child of node.children) {
+        traverse(child)
+      }
+    }
+  }
+  // 开始遍历
+  if (!tree?.length) return []
+  for (let rootNode of tree) {
+    traverse(rootNode)
+  }
+  return leafNodes
+}
+
+// 获取所有二级节点
+export const getSecondNodes = (tree) => {
+  let nodes = []
+  for (const rootNode of tree) {
+    if (rootNode.children?.length) nodes = [...nodes, ...rootNode.children]
+  }
+  return nodes
+}
+
+// 找到数组中第一对重复的元素并返回元素及元素在原数组的下标
+export const findFirstDuplicateWithIndices = (arr) => {
+  const elementIndices = new Map();
+  for (let i = 0; i < arr.length; i++) {
+    const element = arr[i];
+    if (elementIndices.has(element)) {
+      // 如果元素已经在 elementIndices 中,返回元素和它的两个下标
+      return {
+        element: element,
+        firstIndex: elementIndices.get(element),
+        secondIndex: i
+      };
+    } else {
+      // 如果元素不在 elementIndices 中,存储它的下标
+      elementIndices.set(element, i);
+    }
+  }
+  // 如果没有找到重复元素,返回 null 或其他表示未找到的值
+  return null;
+}

+ 62 - 0
utils/getText.js

@@ -0,0 +1,62 @@
+import { getDict } from '@/hooks/useDictionaries'
+
+export const getText = (value, arr, itemText = 'label', itemValue = 'value') => { // 一维数组
+  // console.log('getText', value, arr)
+  if (!arr?.length || !(value && value !== 0)) return
+  const item = arr.find(formItem => formItem[itemValue] === value)
+  if (!item) return
+  return item[itemText]
+}
+
+export const getBaseInfoDictOfName = async (index = 0, baseInfo, value, addKeyName) => { // 一维数组
+  const test = [
+    { dictType: 'menduner_area_type', itemText: 'name', itemValue: 'id', saveType: 'areaList' },
+    { dictType: 'menduner_education_type', itemText: 'label', itemValue: 'value' },
+    { dictType: 'menduner_exp_type', itemText: 'label', itemValue: 'value' },
+    { dictType: 'menduner_sex', itemText: 'label', itemValue: 'value' },
+    { dictType: 'menduner_job_type', itemText: 'label', itemValue: 'value' },
+    { dictType: 'menduner_job_seek_status', itemText: 'label', itemValue: 'value' },
+    { dictType: 'menduner_marital_status', itemText: 'label', itemValue: 'value' },
+  ]
+  const e = test[index]
+
+  if (!value && value !== 0 && !e) baseInfo[addKeyName] = '暂无'
+  const params = e.saveType === 'areaList' ? {} : null
+  const { data } = await getDict(e.dictType, params, (e.saveType || 'dict'))
+  if (data.code !== 0) {
+    return
+  }
+  const item = data.data.find(formItem => Number(formItem[e.itemValue]) === Number(value))
+  baseInfo[addKeyName] = item ? item[e.itemText] : '暂无'
+}
+
+// export const getBaseInfoDictOfName1 = async (baseInfo, value, addKey, itemText = 'name', itemValue = 'id') => { // 一维数组
+//   if (!value && value !== 0) baseInfo[addKey] = '暂无'
+//   const { data } = await getDict('menduner_area_type', {}, 'areaList')
+//   const item = data.find(formItem => Number(formItem[itemValue]) === Number(value))
+//   baseInfo[addKey] = item ? item[itemText] : '暂无'
+// }
+
+export const dealCanBeInputtedValueAndLabel = (formItem, data) => {
+  if (!formItem.key || !formItem.itemTextName) return
+  //
+  formItem.value = data[formItem.key] || data[formItem.itemTextName]
+  formItem[formItem.itemTextName] = data[formItem.itemTextName]
+  if (data[formItem.key] && data[formItem.itemTextName]) {
+    formItem.search(data[formItem.itemTextName]) // 存在id的情况下->回显下拉框列表
+  }
+  // if (data[formItem.key] && data[formItem.itemTextName]) {
+  //   formItem.items = [{ [formItem.itemText]: data[formItem.itemTextName], [formItem.itemValue]: data[formItem.key] }] // 存在id的情况下->回显下拉框
+  // }
+}
+export const dealCanBeInputtedSave = (formItem, params) => {
+  if (formItem.value === formItem[formItem.itemTextName]) {
+    params[formItem.key] = null; params[formItem.itemTextName] = formItem[formItem.itemTextName]
+  }
+  else { params[formItem.key] = formItem.value; params[formItem.itemTextName] = formItem[formItem.itemTextName] }
+}
+
+// 格式化企业名称、职位名称
+export const formatName = (name) => {
+  return name ? name.replace(/&amp;/g, '&') : ''
+}

+ 12 - 168
utils/request.js

@@ -8,27 +8,9 @@ import { refreshToken } from '@/api/common';
 import { userStore } from '@/store/user'
 import { baseUrl, tenantId } from './config'
 import { showAuthModal } from '@/hooks/useModal'
-import { rewardEventTrackClick } from '@/api/integral'
-import { getSuffixAfterPrefix } from '@/utils/prefixUrl'
-import { encryptionFun } from '@/utils/openEncryption'
-import { useSystem } from '@/store/system'
-import { sendError } from '@/api/system'
 
 import qs from 'qs'
 
-// 规则配置跟踪列表
-const RETURNED_API = '/admin-api/menduner/reward/event-track/click'
-let requestCompletionTrigger = []
-let clickTrigger = []
-const getEventList = () => {
-	const eventRules = uni.getStorageSync('eventList')?.length ? JSON.parse(uni.getStorageSync('eventList')) : []
-	requestCompletionTrigger = eventRules ? eventRules.filter(_e => _e.triggerType === '0') : []
-	clickTrigger = eventRules ? eventRules.filter(_e => _e.triggerType === '1') : []
-}
-getEventList()
-
-const errorData = []
-
 const options = {
 	// 显示操作成功消息 默认不显示
 	showSuccess: false,
@@ -134,55 +116,6 @@ http.interceptors.request.use(
         config.url = config.url + '?' + paramsStr
       }
     }
-		
-		// 开启参数加密
-		if (config.custom?.openEncryption) {
-      const { getTimeDifference, setTimeDifference, systemInfo } = useSystem()
-			const raw = config.url.split('?')[1]
-      const body = {
-        ...typeof config.data === 'string' ? JSON.parse(config.data) : config.data,
-        ...typeof config.params === 'string' ? JSON.parse(config.params) : config.params
-      }
-      if (!systemInfo?.timeDifference) {
-        const _difference = await getTimeDifference()
-        setTimeDifference(_difference)
-      }
-
-      const header = encryptionFun({
-        raw,
-        body,
-        appId: 'web_client',
-        AppSecret: 'fa0fc0b5098b974b',
-        timestamp: new Date().getTime() + (Number(systemInfo?.timeDifference) || 0),
-      })
-      const content = {
-        data: config.data,
-        params: config.params,
-        body,
-        raw,
-        config
-      }
-			// 记录请求备用-签名错误后重试
-
-      errorData.push({
-        time: header.timestamp,
-        url: config.url,
-        content
-      })
-			Object.assign(config.header, header)
-		}
-
-		if (uni.getStorageSync('token')) {
-      // 截取request url
-      const url = getSuffixAfterPrefix(config.url)
-			if (url) getEventList()
-      if (!url || !clickTrigger.length) return config
-      const _obj = clickTrigger.find(e => e.url === url)
-      if (_obj) {
-        getIntegral(_obj.url)
-      }
-    }
-
 		return config;
 	},
 	(error) => {
@@ -200,66 +133,26 @@ http.interceptors.response.use(
 			const useUserStore = userStore()
 			useUserStore.setToken(response.data.data.accessToken, response.data.data.refreshToken);
 		}
-		if (response.config.url.includes(RETURNED_API)) {
-			if (!response.data.data || !response.data.data.length) return
-
-			// 目前先默认展示返回的第一个,后续需改为展示多个内容
-			const item = response.data.data && response.data.data.length ? response.data.data[0] : {}
-			if (item.match) {
-				uni.showModal({
-					title: '系统提示',
-					content: `恭喜您 【${item.title}】获得${item.point}积分`,
-					showCancel: false,
-					confirmText: '关闭',
-					confirmColor: '#00B760'
-				})
-			}
-      return
-    }
-
-		const config = response.config
 
     // 自定处理【loading 加载中】:如果需要显示 loading,则关闭 loading
 		response.config.custom.showLoading && closeLoading();
 
     // 自定义处理【error 错误提示】:如果需要显示错误提示,则显示错误提示
-		if (response.data.code !== 0) {
+		// if (response.data.code !== 0) {
       // 特殊:如果 401 错误码,则跳转到登录页 or 刷新令牌
-      if (response.data.code === 401) {
-        return handleRefreshToken(response.config);
-      }
+      // if (response.data.code === 401) {
+      //   return handleRefreshToken(response.config);
+      // }
 
-			// 签名错误
-			if (response.data.code === 440) {
-				// 更新服务器与用户时间差的值
-      	const { setTimeDifference } = useSystem()
-				if (Number(response?.data?.msg)) setTimeDifference(response.data.msg - new Date().getTime())
-				// 请求重试
-				signErrRetry(response.config)
-				// 保存错误信息
-				const _index = errorData.findIndex(e => e.url === config.url && e.time === +config.header.timestamp)
-				if (_index > -1) {
-					const _d = errorData.splice(_index, 1)
-					const _item = _d[0]
-					sendError({ content: JSON.stringify(_item.content), mark: _item.time + '' })
-				}
-				response.config.custom.showError = false // 不弹错误弹窗
-			}
+			// uni.showToast({
+			// 			title: response.data.msg || '服务器开小差啦,请稍后再试~',
+			// 			icon: 'none',
+			// 			duration: 2000,
+			// 			mask: true,
+			// 		});
 
-      // 错误提示
-			if (response.config.custom.showError) {
-				if (response.data?.msg === '重复请求,请稍后重试') console.error('前台打印: 重复请求,请稍后重试')
-				else {
-					uni.showToast({
-						title: response.data.msg || '服务器开小差啦,请稍后再试~',
-						icon: 'none',
-						duration: 2000,
-						mask: true,
-					});
-				}
-      }
-			return Promise.reject(response.data);
-		}
+		// 	return Promise.reject(response.data);
+		// }
 
 		// 自定义处理【showSuccess 成功提示】:如果需要显示成功提示,则显示成功提示
 		if (response.config.custom.showSuccess && response.config.custom.successMsg !== '' && response.data.code === 0) {
@@ -270,17 +163,6 @@ http.interceptors.response.use(
 			});
 		}
 
-		// 请求成功后触发获取积分
-    if (uni.getStorageSync('token')) {
-      const url = getSuffixAfterPrefix(response.config.url)
-			if (url) getEventList()
-      if (!url || !requestCompletionTrigger.length) return response.data
-      const _obj = requestCompletionTrigger.find(e => e.url === url)
-      if (_obj) {
-        getIntegral(_obj.url)
-      }
-    }
-
     // 返回结果:包括 code + data + msg
 		return Promise.resolve(response.data);
 	},
@@ -430,44 +312,6 @@ const handleAuthorized = () => {
   })
 }
 
-/**
- * 处理440签名错误
-*/
-const maxRetries = 2 // 设置签名错误重试请求次数,超出次数弹出错误
-const retryDelay = 1000 // 请求延迟
-const signErrRetry = (config) => {
-	if (config) {
-		if (!config?.custom?.retryCount) {
-			config.custom.retryCount = 0
-		}
-	
-		// 超过重试次数
-		if (config.custom.retryCount >= maxRetries) {
-			uni.showToast({
-				title: '网络请求错误!',
-				icon: 'none',
-				mask: false,
-			});
-			return Promise.reject({ statusCode: 440 })
-		}
-		// 重试
-		config.custom.retryCount++
-		setTimeout(() => {
-			return request(config)
-		}, retryDelay)
-	}
-}
-
-// 触发获取积分
-const getIntegral = (url) => {
-  rewardEventTrackClick(url).then(() => {})
-}
-
-/** 获得必填人才信息情况 */
-export const showNecessaryInfoPopup = () => {
-  return uni.getStorageSync('necessaryInfoReady') === 'student';
-}
-
 /** 获得访问令牌 */
 export const getAccessToken = () => {
   return uni.getStorageSync('token');