refactor: 删除工作领域相关代码
This commit is contained in:
parent
208024ed5c
commit
480008777b
@ -8,7 +8,7 @@ import ltd.qubit.survey.service.QuestionService;
|
|||||||
import ltd.qubit.survey.service.OptionService;
|
import ltd.qubit.survey.service.OptionService;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -52,9 +52,9 @@ public class QuestionController {
|
|||||||
*/
|
*/
|
||||||
@GetMapping("/question/next")
|
@GetMapping("/question/next")
|
||||||
public Question getNextQuestion(
|
public Question getNextQuestion(
|
||||||
@PathVariable Long userId,
|
@RequestParam Long userId,
|
||||||
@PathVariable Integer currentQuestionNumber,
|
@RequestParam(defaultValue = "0") Integer currentQuestionNumber,
|
||||||
@PathVariable List<String> selectedOptions) {
|
@RequestParam(required = false) List<String> selectedOptions) {
|
||||||
return questionService.getNextQuestion(userId, currentQuestionNumber, selectedOptions)
|
return questionService.getNextQuestion(userId, currentQuestionNumber, selectedOptions)
|
||||||
.orElseThrow(() -> new IllegalArgumentException("没有更多问题了"));
|
.orElseThrow(() -> new IllegalArgumentException("没有更多问题了"));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,7 +16,7 @@ public class Question {
|
|||||||
/**
|
/**
|
||||||
* 问题序号
|
* 问题序号
|
||||||
*/
|
*/
|
||||||
private Integer questionNumber;
|
private Integer number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 问题内容
|
* 问题内容
|
||||||
@ -26,7 +26,7 @@ public class Question {
|
|||||||
/**
|
/**
|
||||||
* 问题类型(单选、多选、文本)
|
* 问题类型(单选、多选、文本)
|
||||||
*/
|
*/
|
||||||
private QuestionType questionType;
|
private QuestionType type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 针对的工作领域(为null表示通用问题)
|
* 针对的工作领域(为null表示通用问题)
|
||||||
@ -41,7 +41,7 @@ public class Question {
|
|||||||
/**
|
/**
|
||||||
* 跳转逻辑(JSON格式)
|
* 跳转逻辑(JSON格式)
|
||||||
*/
|
*/
|
||||||
private String nextQuestionLogic;
|
private String next;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
|
|||||||
@ -23,11 +23,6 @@ public class User {
|
|||||||
*/
|
*/
|
||||||
private String phone;
|
private String phone;
|
||||||
|
|
||||||
/**
|
|
||||||
* 工作领域
|
|
||||||
*/
|
|
||||||
private WorkArea workArea;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 岗位性质
|
* 岗位性质
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="ltd.qubit.survey.dao.OptionDao">
|
<mapper namespace="ltd.qubit.survey.dao.OptionDao">
|
||||||
<!-- 结果映射 -->
|
<!-- 结果映射 -->
|
||||||
<resultMap id="baseOptionMap" type="ltd.qubit.survey.model.Option">
|
<resultMap id="optionMap" type="ltd.qubit.survey.model.Option">
|
||||||
<id property="id" column="id"/>
|
<id property="id" column="id"/>
|
||||||
<result property="questionId" column="question_id"/>
|
<result property="questionId" column="question_id"/>
|
||||||
<result property="optionCode" column="option_code"/>
|
<result property="optionCode" column="option_code"/>
|
||||||
@ -13,18 +13,18 @@
|
|||||||
|
|
||||||
<!-- 基础列 -->
|
<!-- 基础列 -->
|
||||||
<sql id="baseColumns">
|
<sql id="baseColumns">
|
||||||
id, question_id, option_code, content, requires_text, created_at
|
`id`, `question_id`, `option_code`, `content`, `requires_text`, `created_at`
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<!-- 插入 -->
|
<!-- 插入 -->
|
||||||
<insert id="insert" parameterType="ltd.qubit.survey.model.Option" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insert" parameterType="ltd.qubit.survey.model.Option" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO options (question_id, option_code, content, requires_text)
|
INSERT INTO `option` (`question_id`, `option_code`, `content`, `requires_text`)
|
||||||
VALUES (#{questionId}, #{optionCode}, #{content}, #{requiresText})
|
VALUES (#{questionId}, #{optionCode}, #{content}, #{requiresText})
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<!-- 批量插入 -->
|
<!-- 批量插入 -->
|
||||||
<insert id="batchInsert" parameterType="java.util.List">
|
<insert id="batchInsert" parameterType="java.util.List">
|
||||||
INSERT INTO options (question_id, option_code, content, requires_text)
|
INSERT INTO `option` (`question_id`, `option_code`, `content`, `requires_text`)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="list" item="item" separator=",">
|
<foreach collection="list" item="item" separator=",">
|
||||||
(#{item.questionId}, #{item.optionCode}, #{item.content}, #{item.requiresText})
|
(#{item.questionId}, #{item.optionCode}, #{item.content}, #{item.requiresText})
|
||||||
@ -33,51 +33,51 @@
|
|||||||
|
|
||||||
<!-- 更新 -->
|
<!-- 更新 -->
|
||||||
<update id="update" parameterType="ltd.qubit.survey.model.Option">
|
<update id="update" parameterType="ltd.qubit.survey.model.Option">
|
||||||
UPDATE options
|
UPDATE `option`
|
||||||
SET question_id = #{questionId},
|
SET `question_id` = #{questionId},
|
||||||
option_code = #{optionCode},
|
`option_code` = #{optionCode},
|
||||||
content = #{content},
|
`content` = #{content},
|
||||||
requires_text = #{requiresText}
|
`requires_text` = #{requiresText}
|
||||||
WHERE id = #{id}
|
WHERE `id` = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 删除 -->
|
<!-- 删除 -->
|
||||||
<delete id="deleteById" parameterType="long">
|
<delete id="deleteById" parameterType="long">
|
||||||
DELETE FROM options WHERE id = #{id}
|
DELETE FROM `option` WHERE `id` = #{id}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 根据问题ID删除 -->
|
<!-- 根据问题ID删除 -->
|
||||||
<delete id="deleteByQuestionId" parameterType="long">
|
<delete id="deleteByQuestionId" parameterType="long">
|
||||||
DELETE FROM options WHERE question_id = #{questionId}
|
DELETE FROM `option` WHERE `question_id` = #{questionId}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 根据ID查询 -->
|
<!-- 根据ID查询 -->
|
||||||
<select id="findById" parameterType="long" resultMap="baseOptionMap">
|
<select id="findById" parameterType="long" resultMap="optionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM options
|
FROM `option`
|
||||||
WHERE id = #{id}
|
WHERE `id` = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 查询所有 -->
|
<!-- 查询所有 -->
|
||||||
<select id="findAll" resultMap="baseOptionMap">
|
<select id="findAll" resultMap="optionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM options
|
FROM `option`
|
||||||
ORDER BY question_id, option_code
|
ORDER BY `question_id`, `option_code`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据问题ID查询 -->
|
<!-- 根据问题ID查询 -->
|
||||||
<select id="findByQuestionId" parameterType="long" resultMap="baseOptionMap">
|
<select id="findByQuestionId" parameterType="long" resultMap="optionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM options
|
FROM `option`
|
||||||
WHERE question_id = #{questionId}
|
WHERE `question_id` = #{questionId}
|
||||||
ORDER BY option_code
|
ORDER BY `option_code`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据问题ID和选项代码查询 -->
|
<!-- 根据问题ID和选项代码查询 -->
|
||||||
<select id="findByQuestionIdAndCode" resultMap="baseOptionMap">
|
<select id="findByQuestionIdAndOptionCode" resultMap="optionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM options
|
FROM `option`
|
||||||
WHERE question_id = #{questionId}
|
WHERE `question_id` = #{questionId}
|
||||||
AND option_code = #{optionCode}
|
AND `option_code` = #{optionCode}
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
@ -4,83 +4,84 @@
|
|||||||
<!-- 结果映射 -->
|
<!-- 结果映射 -->
|
||||||
<resultMap id="questionMap" type="ltd.qubit.survey.model.Question">
|
<resultMap id="questionMap" type="ltd.qubit.survey.model.Question">
|
||||||
<id property="id" column="id"/>
|
<id property="id" column="id"/>
|
||||||
<result property="questionNumber" column="question_number"/>
|
<result property="number" column="number"/>
|
||||||
<result property="content" column="content"/>
|
<result property="content" column="content"/>
|
||||||
<result property="questionType" column="question_type"/>
|
<result property="type" column="type"/>
|
||||||
<result property="workArea" column="work_area"/>
|
<result property="workArea" column="work_area"/>
|
||||||
<result property="isRequired" column="is_required"/>
|
<result property="isRequired" column="is_required"/>
|
||||||
<result property="nextQuestionLogic" column="next_question_logic"/>
|
<result property="next" column="next" typeHandler="ltd.qubit.survey.common.mybatis.JsonTypeHandler"/>
|
||||||
<result property="createdAt" column="created_at"/>
|
<result property="createdAt" column="created_at"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- 基础列 -->
|
<!-- 基础列 -->
|
||||||
<sql id="baseColumns">
|
<sql id="baseColumns">
|
||||||
id, question_number, content, question_type, work_area, is_required, next_question_logic, created_at
|
`id`, `number`, `content`, `type`, `work_area`, `is_required`, `next`, `created_at`
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<!-- 插入 -->
|
<!-- 插入 -->
|
||||||
<insert id="insert" parameterType="ltd.qubit.survey.model.Question" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insert" parameterType="ltd.qubit.survey.model.Question" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO questions (question_number, content, question_type, work_area, is_required, next_question_logic)
|
INSERT INTO `question` (`number`, `content`, `type`, `work_area`, `is_required`, `next`)
|
||||||
VALUES (#{questionNumber}, #{content}, #{questionType}, #{workArea}, #{isRequired}, #{nextQuestionLogic})
|
VALUES (#{number}, #{content}, #{type}, #{workArea}, #{isRequired},
|
||||||
|
#{next,typeHandler=ltd.qubit.survey.common.mybatis.JsonTypeHandler})
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<!-- 更新 -->
|
<!-- 更新 -->
|
||||||
<update id="update" parameterType="ltd.qubit.survey.model.Question">
|
<update id="update" parameterType="ltd.qubit.survey.model.Question">
|
||||||
UPDATE questions
|
UPDATE `question`
|
||||||
SET question_number = #{questionNumber},
|
SET `number` = #{number},
|
||||||
content = #{content},
|
`content` = #{content},
|
||||||
question_type = #{questionType},
|
`type` = #{type},
|
||||||
work_area = #{workArea},
|
`work_area` = #{workArea},
|
||||||
is_required = #{isRequired},
|
`is_required` = #{isRequired},
|
||||||
next_question_logic = #{nextQuestionLogic}
|
`next` = #{next,typeHandler=ltd.qubit.survey.common.mybatis.JsonTypeHandler}
|
||||||
WHERE id = #{id}
|
WHERE `id` = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 删除 -->
|
<!-- 删除 -->
|
||||||
<delete id="deleteById" parameterType="long">
|
<delete id="deleteById" parameterType="long">
|
||||||
DELETE FROM questions WHERE id = #{id}
|
DELETE FROM `question` WHERE `id` = #{id}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 根据ID查询 -->
|
<!-- 根据ID查询 -->
|
||||||
<select id="findById" parameterType="long" resultMap="questionMap">
|
<select id="findById" parameterType="long" resultMap="questionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM questions
|
FROM `question`
|
||||||
WHERE id = #{id}
|
WHERE `id` = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 查询所有 -->
|
<!-- 查询所有 -->
|
||||||
<select id="findAll" resultMap="questionMap">
|
<select id="findAll" resultMap="questionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM questions
|
FROM `question`
|
||||||
ORDER BY question_number
|
ORDER BY `number`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据问题序号查询 -->
|
<!-- 根据问题序号查询 -->
|
||||||
<select id="findByQuestionNumber" parameterType="int" resultMap="questionMap">
|
<select id="findByQuestionNumber" parameterType="int" resultMap="questionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM questions
|
FROM `question`
|
||||||
WHERE question_number = #{questionNumber}
|
WHERE `number` = #{number}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据工作领域查询 -->
|
<!-- 根据工作领域查询 -->
|
||||||
<select id="findByWorkArea" parameterType="string" resultMap="questionMap">
|
<select id="findByWorkArea" parameterType="string" resultMap="questionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM questions
|
FROM `question`
|
||||||
WHERE work_area = #{workArea}
|
WHERE `work_area` = #{workArea}
|
||||||
ORDER BY question_number
|
ORDER BY `number`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 查询通用问题 -->
|
<!-- 查询通用问题 -->
|
||||||
<select id="findCommonQuestions" resultMap="questionMap">
|
<select id="findCommonQuestions" resultMap="questionMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM questions
|
FROM `question`
|
||||||
WHERE work_area IS NULL
|
WHERE `work_area` IS NULL
|
||||||
ORDER BY question_number
|
ORDER BY `number`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 获取下一个问题序号 -->
|
<!-- 获取下一个问题序号 -->
|
||||||
<select id="getNextQuestionNumber" resultType="int">
|
<select id="getNextQuestionNumber" resultType="int">
|
||||||
SELECT COALESCE(MAX(question_number) + 1, 1)
|
SELECT COALESCE(MAX(`number`) + 1, 1)
|
||||||
FROM questions
|
FROM `question`
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
@ -13,18 +13,18 @@
|
|||||||
|
|
||||||
<!-- 基础列 -->
|
<!-- 基础列 -->
|
||||||
<sql id="baseColumns">
|
<sql id="baseColumns">
|
||||||
id, user_id, question_id, selected_options, text_answer, created_at
|
`id`, `user_id`, `question_id`, `selected_options`, `text_answer`, `created_at`
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<!-- 插入 -->
|
<!-- 插入 -->
|
||||||
<insert id="insert" parameterType="ltd.qubit.survey.model.SurveyResponse" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insert" parameterType="ltd.qubit.survey.model.SurveyResponse" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO survey_responses (user_id, question_id, selected_options, text_answer)
|
INSERT INTO `survey_response` (`user_id`, `question_id`, `selected_options`, `text_answer`)
|
||||||
VALUES (#{userId}, #{questionId}, #{selectedOptions,typeHandler=ltd.qubit.survey.common.mybatis.JsonTypeHandler}, #{textAnswer})
|
VALUES (#{userId}, #{questionId}, #{selectedOptions,typeHandler=ltd.qubit.survey.common.mybatis.JsonTypeHandler}, #{textAnswer})
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<!-- 批量插入 -->
|
<!-- 批量插入 -->
|
||||||
<insert id="batchInsert" parameterType="java.util.List">
|
<insert id="batchInsert" parameterType="java.util.List">
|
||||||
INSERT INTO survey_responses (user_id, question_id, selected_options, text_answer)
|
INSERT INTO `survey_response` (`user_id`, `question_id`, `selected_options`, `text_answer`)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="list" item="item" separator=",">
|
<foreach collection="list" item="item" separator=",">
|
||||||
(#{item.userId}, #{item.questionId},
|
(#{item.userId}, #{item.questionId},
|
||||||
@ -35,59 +35,59 @@
|
|||||||
|
|
||||||
<!-- 更新 -->
|
<!-- 更新 -->
|
||||||
<update id="update" parameterType="ltd.qubit.survey.model.SurveyResponse">
|
<update id="update" parameterType="ltd.qubit.survey.model.SurveyResponse">
|
||||||
UPDATE survey_responses
|
UPDATE `survey_response`
|
||||||
SET user_id = #{userId},
|
SET `user_id` = #{userId},
|
||||||
question_id = #{questionId},
|
`question_id` = #{questionId},
|
||||||
selected_options = #{selectedOptions,typeHandler=ltd.qubit.survey.common.mybatis.JsonTypeHandler},
|
`selected_options` = #{selectedOptions,typeHandler=ltd.qubit.survey.common.mybatis.JsonTypeHandler},
|
||||||
text_answer = #{textAnswer}
|
`text_answer` = #{textAnswer}
|
||||||
WHERE id = #{id}
|
WHERE `id` = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 删除 -->
|
<!-- 删除 -->
|
||||||
<delete id="deleteById" parameterType="long">
|
<delete id="deleteById" parameterType="long">
|
||||||
DELETE FROM survey_responses WHERE id = #{id}
|
DELETE FROM `survey_response` WHERE `id` = #{id}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 根据用户ID删除 -->
|
<!-- 根据用户ID删除 -->
|
||||||
<delete id="deleteByUserId" parameterType="long">
|
<delete id="deleteByUserId" parameterType="long">
|
||||||
DELETE FROM survey_responses WHERE user_id = #{userId}
|
DELETE FROM `survey_response` WHERE `user_id` = #{userId}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 根据ID查询 -->
|
<!-- 根据ID查询 -->
|
||||||
<select id="findById" parameterType="long" resultMap="responseMap">
|
<select id="findById" parameterType="long" resultMap="responseMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM survey_responses
|
FROM `survey_response`
|
||||||
WHERE id = #{id}
|
WHERE `id` = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 查询所有 -->
|
<!-- 查询所有 -->
|
||||||
<select id="findAll" resultMap="responseMap">
|
<select id="findAll" resultMap="responseMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM survey_responses
|
FROM `survey_response`
|
||||||
ORDER BY user_id, question_id
|
ORDER BY `user_id`, `question_id`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据用户ID查询 -->
|
<!-- 根据用户ID查询 -->
|
||||||
<select id="findByUserId" parameterType="long" resultMap="responseMap">
|
<select id="findByUserId" parameterType="long" resultMap="responseMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM survey_responses
|
FROM `survey_response`
|
||||||
WHERE user_id = #{userId}
|
WHERE `user_id` = #{userId}
|
||||||
ORDER BY question_id
|
ORDER BY `question_id`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据问题ID查询 -->
|
<!-- 根据问题ID查询 -->
|
||||||
<select id="findByQuestionId" parameterType="long" resultMap="responseMap">
|
<select id="findByQuestionId" parameterType="long" resultMap="responseMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM survey_responses
|
FROM `survey_response`
|
||||||
WHERE question_id = #{questionId}
|
WHERE `question_id` = #{questionId}
|
||||||
ORDER BY user_id
|
ORDER BY `user_id`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据用户ID和问题ID查询 -->
|
<!-- 根据用户ID和问题ID查询 -->
|
||||||
<select id="findByUserIdAndQuestionId" resultMap="responseMap">
|
<select id="findByUserIdAndQuestionId" resultMap="responseMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM survey_responses
|
FROM `survey_response`
|
||||||
WHERE user_id = #{userId}
|
WHERE `user_id` = #{userId}
|
||||||
AND question_id = #{questionId}
|
AND `question_id` = #{questionId}
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
@ -6,63 +6,61 @@
|
|||||||
<id property="id" column="id"/>
|
<id property="id" column="id"/>
|
||||||
<result property="name" column="name"/>
|
<result property="name" column="name"/>
|
||||||
<result property="phone" column="phone"/>
|
<result property="phone" column="phone"/>
|
||||||
<result property="workArea" column="work_area"/>
|
|
||||||
<result property="positionType" column="position_type"/>
|
<result property="positionType" column="position_type"/>
|
||||||
<result property="createdAt" column="created_at"/>
|
<result property="createdAt" column="created_at"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- 基础列 -->
|
<!-- 基础列 -->
|
||||||
<sql id="baseColumns">
|
<sql id="baseColumns">
|
||||||
id, name, phone, work_area, position_type, created_at
|
`id`, `name`, `phone`, `position_type`, `created_at`
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<!-- 插入 -->
|
<!-- 插入 -->
|
||||||
<insert id="insert" parameterType="ltd.qubit.survey.model.User" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insert" parameterType="ltd.qubit.survey.model.User" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO users (name, phone, work_area, position_type)
|
INSERT INTO `user` (`name`, `phone`, `position_type`)
|
||||||
VALUES (#{name}, #{phone}, #{workArea}, #{positionType})
|
VALUES (#{name}, #{phone}, #{positionType})
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<!-- 更新 -->
|
<!-- 更新 -->
|
||||||
<update id="update" parameterType="ltd.qubit.survey.model.User">
|
<update id="update" parameterType="ltd.qubit.survey.model.User">
|
||||||
UPDATE users
|
UPDATE `user`
|
||||||
SET name = #{name},
|
SET `name` = #{name},
|
||||||
phone = #{phone},
|
`phone` = #{phone},
|
||||||
work_area = #{workArea},
|
`position_type` = #{positionType}
|
||||||
position_type = #{positionType}
|
WHERE `id` = #{id}
|
||||||
WHERE id = #{id}
|
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<!-- 删除 -->
|
<!-- 删除 -->
|
||||||
<delete id="deleteById" parameterType="long">
|
<delete id="deleteById" parameterType="long">
|
||||||
DELETE FROM users WHERE id = #{id}
|
DELETE FROM `user` WHERE `id` = #{id}
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- 根据ID查询 -->
|
<!-- 根据ID查询 -->
|
||||||
<select id="findById" parameterType="long" resultMap="userMap">
|
<select id="findById" parameterType="long" resultMap="userMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM users
|
FROM `user`
|
||||||
WHERE id = #{id}
|
WHERE `id` = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 查询所有 -->
|
<!-- 查询所有 -->
|
||||||
<select id="findAll" resultMap="userMap">
|
<select id="findAll" resultMap="userMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM users
|
FROM `user`
|
||||||
ORDER BY id
|
ORDER BY `id`
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据手机号查询 -->
|
<!-- 根据手机号查询 -->
|
||||||
<select id="findByPhone" parameterType="string" resultMap="userMap">
|
<select id="findByPhone" parameterType="string" resultMap="userMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM users
|
FROM `user`
|
||||||
WHERE phone = #{phone}
|
WHERE `phone` = #{phone}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 根据工作领域查询 -->
|
<!-- 根据工作领域查询 -->
|
||||||
<select id="findByWorkArea" parameterType="string" resultMap="userMap">
|
<select id="findByWorkArea" parameterType="string" resultMap="userMap">
|
||||||
SELECT <include refid="baseColumns"/>
|
SELECT <include refid="baseColumns"/>
|
||||||
FROM users
|
FROM `user`
|
||||||
WHERE work_area = #{workArea}
|
WHERE `work_area` = #{workArea}
|
||||||
ORDER BY id
|
ORDER BY `id`
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
Binary file not shown.
@ -2,155 +2,213 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 第一部分:基本信息(必填)
|
## 第一部分:通用认知调研(必答)
|
||||||
1. 您所属部门:
|
|
||||||
A. 研发部
|
|
||||||
B. 项目部
|
|
||||||
C. 保险部
|
|
||||||
D. 财务部
|
|
||||||
E. 客服部
|
|
||||||
F. 运营部
|
|
||||||
G. 综合管理部
|
|
||||||
|
|
||||||
2. 岗位性质:
|
|
||||||
A. 管理岗
|
|
||||||
B. 技术岗
|
|
||||||
C. 业务岗
|
|
||||||
D. 职能支持岗
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 第二部分:通用认知调研(必答)
|
|
||||||
1. 您对大模型(如ChatGPT、通义千问、DeepSeek)的了解程度:
|
1. 您对大模型(如ChatGPT、通义千问、DeepSeek)的了解程度:
|
||||||
A. 从未接触过
|
A. 从未接触过
|
||||||
B. 仅简单使用过通用功能(如问答)
|
B. 仅在日常简单使用过通用功能(如问答)
|
||||||
C. 在工作中尝试过基础应用
|
C. 在工作中尝试过基础应用
|
||||||
D. 深度研究过技术原理
|
D. 深度研究过技术原理
|
||||||
|
|
||||||
2. 您认为以下哪些业务场景最需要效率提升?(多选)
|
2. 您觉得大模型可以做到下面哪些事?(多选)
|
||||||
A. 文档撰写/报告生成
|
A. 精准知识问答
|
||||||
B. 数据清洗与分析
|
B. 文档撰写/报告生成/代码编写/图片视频生成等
|
||||||
C. 客户沟通与服务
|
C. 数据清洗与分析
|
||||||
D. 风险识别与预警
|
D. 客户沟通与服务
|
||||||
E. 流程自动化
|
E. 风险识别与预警
|
||||||
F. 其他:____________
|
F. 流程自动化
|
||||||
|
G. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
3. 您最关注大模型应用的哪些风险?(多选)
|
3. 您最关注大模型应用的哪些风险?(多选)
|
||||||
A. 数据隐私泄露
|
A. 数据隐私泄露
|
||||||
B. 生成内容不准确
|
B. 生成内容不准确
|
||||||
C. 合规审查风险
|
C. 合规审查风险
|
||||||
D. 技术使用门槛高
|
D. 技术使用门槛高
|
||||||
E. 其他:____________ (需填写内容)
|
E. 如有其他答案,请详细说明:____________ (需填写内容)
|
||||||
|
|
||||||
|
4. 您的主要工作内容是:
|
||||||
|
A. 研发(产品、开发、算法、测试、运维等)
|
||||||
|
B. 项目管理(项目立项、进度跟踪、风险管理等)
|
||||||
|
C. 保险(产品、核保、理赔、精算等)
|
||||||
|
D. 财务(会计、税务、审计等)
|
||||||
|
E. 客服(咨询、投诉、回访等)
|
||||||
|
F. 运营(新媒体运营、广告宣传、活动策划、数据分析等)
|
||||||
|
G. 市场拓展(渠道拓展、商务沟通、产品推广等)
|
||||||
|
H. 人力资源(招聘、培训、绩效、薪酬等)
|
||||||
|
I. 综合事务(行政、法务等)
|
||||||
|
J. 公司高管(战略规划、组织架构、制度建设等)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 第三部分:部门专属问题
|
## 第二部分:领域专属问题
|
||||||
**(系统将根据第一部分选择的部门自动跳转)**
|
**(系统将根据第4题选择的工作领域自动跳转)**
|
||||||
|
|
||||||
### 研发部
|
### 研发
|
||||||
4. 您在开发过程中最耗时的重复性工作:
|
5. 您在开发过程中最耗时的重复性工作:(多选)
|
||||||
A. 保险条款文档编写
|
A. 文档编写(如需求文档、技术文档等)
|
||||||
B. 医疗知识图谱维护
|
B. 产品原型、界面设计(如使用图片生成模型自动生成等)
|
||||||
C. API接口调试
|
C. 代码编写
|
||||||
D. 其他:____________
|
D. 调试与测试
|
||||||
|
E. 系统监控与维护
|
||||||
|
F. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
5. 您希望大模型如何与现有系统集成:
|
6. 您希望大模型如何与现有系统集成:(多选)
|
||||||
A. 自动生成代码片段(如DeepSeek-Coder)
|
A. 回答技术问题
|
||||||
B. 智能测试用例生成(如通义千问测试场景模拟)
|
B. 自动生成代码片段(如 Github Copilot等)
|
||||||
C. 需求文档结构化(如ChatGPT生成PRD框架)
|
C. 智能测试用例生成
|
||||||
D. 其他:____________
|
D. 生成需求文档、技术文档
|
||||||
|
E. 完整项目生成(如Cursor等)
|
||||||
|
F. 代码重构与优化
|
||||||
|
G. 辅助设计算法(如DeepSeek等)
|
||||||
|
H. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
### 项目部
|
### 项目管理
|
||||||
6. 惠民保产品设计中最需要数据支持的环节:
|
|
||||||
A. 参保人群画像分析
|
|
||||||
B. 竞品方案快速解析(如通义千问政策解读)
|
|
||||||
C. 定价模型优化
|
|
||||||
D. 其他:____________
|
|
||||||
|
|
||||||
7. 您希望如何用大模型提升方案输出效率:
|
7. 项目管理中最常遇到的挑战是:
|
||||||
A. 自动生成PPT框架(ChatGPT生成大纲)
|
A. 项目进度跟踪与更新
|
||||||
B. 从政策文件中提取关键条款(DeepSeek语义解析)
|
B. 风险评估与管控
|
||||||
C. 风险测算报告自动化
|
C. 项目报告生成
|
||||||
D. 其他:____________
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
### 保险部
|
8. 您希望如何利用大模型提升项目管理效率:
|
||||||
8. 理赔处理中的主要效率瓶颈:
|
A. 自动生成立项报告、进度报告、总结报告等
|
||||||
A. 材料完整性核验
|
B. 风险预测与预警
|
||||||
B. 医疗票据信息提取(如OCR+通义千问核对)
|
C. 项目资料自动化整理
|
||||||
C. 案件风险分级
|
D. 知识库管理
|
||||||
D. 其他:____________
|
E. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
9. 您认为大模型可优化的理赔环节:
|
### 保险
|
||||||
A. 自动生成理赔告知书(ChatGPT模板生成)
|
|
||||||
B. 异常案件预警提示(DeepSeek数据分析)
|
|
||||||
C. 保险规则智能问答
|
|
||||||
D. 其他:____________
|
|
||||||
|
|
||||||
### 财务部
|
9.理赔处理中的主要瓶颈是:
|
||||||
10. 日常工作中重复性最高的任务:
|
A. 理赔文档处理
|
||||||
A. 发票信息录入核对
|
B. 医疗票据审核与核对
|
||||||
B. 报销单据合规审查
|
C. 客户资料信息录入与处理
|
||||||
C. 财务报表数据汇总
|
D. 理赔规则理解与应用
|
||||||
D. 其他:____________
|
E. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
11. 您希望大模型协助完成的财务工作:
|
10. 大模型可以优化哪些保险工作环节:
|
||||||
A. 自动提取票据关键字段(通义千问OCR识别)
|
A. 新员工入职培训
|
||||||
B. 生成财务分析摘要(ChatGPT文本总结)
|
B. 保险产品设计的优化
|
||||||
C. 异常收支模式检测(DeepSeek风险预测)
|
B. 自动生成理赔报告与告知书
|
||||||
D. 其他:____________
|
C. 自动化资料审核(如OCR识别票据数据、自动识别既往症等)
|
||||||
|
D. 异常案件智能预警
|
||||||
|
E. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
### 客服部
|
### 财务
|
||||||
12. 客户咨询中最常遇到的重复性问题:
|
|
||||||
A. 理赔进度查询
|
11. 日常工作中最重复的任务是:
|
||||||
B. 参保资格咨询
|
A. 财务数据整理与报表生成
|
||||||
|
B. 发票和报销单审核
|
||||||
|
C. 财务审计与合规检查
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
12.大模型能如何协助提升财务工作效率:
|
||||||
|
A. 各种报表格式的自动转换
|
||||||
|
B. 自动生成财务报表与分析摘要
|
||||||
|
C. 自动化审计和合规检查
|
||||||
|
D. 财务数据智能分析与预测
|
||||||
|
E. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
### 客服
|
||||||
|
|
||||||
|
13. 客户咨询中最常遇到的重复性问题:
|
||||||
|
A. 参保资格咨询
|
||||||
|
B. 理赔进度查询
|
||||||
C. 材料补交通知
|
C. 材料补交通知
|
||||||
D. 其他:____________
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
13. 您希望大模型如何辅助客服工作:
|
14. 您希望大模型如何辅助客服工作:
|
||||||
A. 自动生成个性化回复话术(ChatGPT对话生成)
|
A. 自动生成客户回复模板
|
||||||
B. 客户情绪实时识别(通义千问情感分析)
|
B. 客户咨询自动分类与转接
|
||||||
C. 咨询问题自动分类派单(DeepSeek意图分类)
|
C. 智能分析客户情绪与需求
|
||||||
D. 其他:____________
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
### 运营部
|
### 运营
|
||||||
14. 运营数据分析中的主要痛点:
|
|
||||||
A. 多平台数据整合
|
|
||||||
B. 参保率预测模型优化(DeepSeek时序预测)
|
|
||||||
C. 宣传文案创意生成(通义千问文案生成)
|
|
||||||
D. 其他:____________
|
|
||||||
|
|
||||||
15. 您希望大模型赋能的运营场景:
|
15. 在运营工作中,最需要自动化支持的任务是:
|
||||||
A. 自动生成社交媒体图文(ChatGPT+通义万相)
|
A. 热点讯息的获取和跟踪
|
||||||
B. 用户评论情感分析(DeepSeek语义分析)
|
B. 数据分析与报告生成
|
||||||
C. 活动效果模拟预测
|
C. 社交媒体内容创作
|
||||||
D. 其他:____________
|
D. 活动效果评估与预测
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
### 综合管理部
|
16.大模型可以如何帮助提升运营效率:
|
||||||
16. 日常工作中最耗时的行政事务:
|
A. 自动抓取热点讯息
|
||||||
A. 合同条款审查
|
B. 自动生成社交媒体内容
|
||||||
|
C. 用户评论分析与舆情监测
|
||||||
|
D. 活动数据自动分析与报告生成
|
||||||
|
E. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
### 市场拓展
|
||||||
|
|
||||||
|
17. 在市场拓展和商务沟通中,您最常遇到的挑战是:
|
||||||
|
A. 市场分析和竞争对手跟踪
|
||||||
|
B. 渠道拓展计划的自动化和优化
|
||||||
|
C. 商务沟通中的信息处理与反馈跟踪
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
18.您希望大模型如何帮助提升市场拓展效率:
|
||||||
|
A. 自动生成市场分析报告与趋势预测
|
||||||
|
B. 根据目标客户数据生成个性化营销策略
|
||||||
|
C. 自动化生成商务沟通邮件和提案文档
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
### 人力资源
|
||||||
|
|
||||||
|
19. 人事部门最耗时的日常任务是:
|
||||||
|
A. 招聘简历筛选与面试安排
|
||||||
|
B. 员工培训与学习进度管理
|
||||||
|
C. 绩效评估与报告生成
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
20. 您希望大模型如何协助提升人事工作效率:
|
||||||
|
A. 自动筛选招聘简历并推荐候选人
|
||||||
|
B. 自动化培训内容推送与学习路径规划
|
||||||
|
C. 绩效评估与员工反馈的自动化分析
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
### 综合管理
|
||||||
|
|
||||||
|
21. 在行政工作中,最耗时的任务是:
|
||||||
|
A. 合同审查与管理
|
||||||
B. 会议纪要整理
|
B. 会议纪要整理
|
||||||
C. 制度文档更新
|
C. 文档管理与更新
|
||||||
D. 其他:____________
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
17. 您希望大模型协助完成的行政工作:
|
22. 您希望大模型如何协助提升行政工作效率:
|
||||||
A. 自动生成招投标文件模板(ChatGPT框架生成)
|
A. 自动生成合同和协议模板
|
||||||
B. 合同风险点智能排查(通义千问法律审查)
|
B. 自动化会议纪要整理与分发
|
||||||
C. 流程说明书自动更新(DeepSeek版本迭代)
|
C. 自动化文档归档与管理
|
||||||
D. 其他:____________
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
### 公司高管
|
||||||
|
|
||||||
|
23. 您认为大模型在哪些战略层面的决策中可以发挥作用?
|
||||||
|
A. 市场趋势预测与分析
|
||||||
|
B. 组织结构优化与调整
|
||||||
|
C. 业务流程优化与重组
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
|
24. 在公司管理工作中,您最希望大模型协助哪些任务?
|
||||||
|
A. 数据分析与报告自动生成
|
||||||
|
B. 战略规划与方案优化
|
||||||
|
C. 业务协同与跨部门信息流通
|
||||||
|
D. 如有其他答案,请详细说明:____________
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 第四部分:开放建议(选填)
|
## 第四部分:开放建议(选填)
|
||||||
18. 您对大模型培训的具体期待:
|
25. 您对大模型培训的具体期待:
|
||||||
____________________________
|
____________________________
|
||||||
|
|
||||||
19. 您认为公司引入AI需提前防范的风险:
|
26. 您认为公司引入AI需提前防范的风险:
|
||||||
____________________________
|
____________________________
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 问卷说明
|
### 问卷说明
|
||||||
20. **逻辑跳转**:系统将根据所选部门显示专属问题,总题量约10-12题。
|
|
||||||
21. **工具示例**:
|
- **逻辑跳转**:系统将根据第1题的答案显示专属问题,总题量约10-12题。
|
||||||
|
- **工具示例**:
|
||||||
- 通用大模型:ChatGPT(OpenAI)、通义千问(阿里云)、DeepSeek(深度求索)
|
- 通用大模型:ChatGPT(OpenAI)、通义千问(阿里云)、DeepSeek(深度求索)
|
||||||
22. **提交方式**:匿名填写,预计耗时5-8分钟。
|
- **提交方式**:匿名填写,预计耗时5-8分钟。
|
||||||
@ -1,11 +1,7 @@
|
|||||||
/* eslint-env node */
|
/* eslint-env node */
|
||||||
module.exports = {
|
module.exports = {
|
||||||
root: true,
|
root: true,
|
||||||
extends: [
|
extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/eslint-config-prettier'],
|
||||||
'plugin:vue/vue3-essential',
|
|
||||||
'eslint:recommended',
|
|
||||||
'@vue/eslint-config-prettier',
|
|
||||||
],
|
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
ecmaVersion: 'latest',
|
ecmaVersion: 'latest',
|
||||||
},
|
},
|
||||||
|
|||||||
@ -42,15 +42,17 @@ export const useSurveyStore = defineStore('survey', () => {
|
|||||||
// 获取下一个问题
|
// 获取下一个问题
|
||||||
async function fetchNextQuestion(userId, selectedOptions) {
|
async function fetchNextQuestion(userId, selectedOptions) {
|
||||||
try {
|
try {
|
||||||
const response = await getNextQuestion(userId, currentQuestionNumber.value, selectedOptions);
|
// 如果是初始化(currentQuestionNumber为0),则从第3题开始
|
||||||
if (response.data) {
|
const questionNumber = currentQuestionNumber.value === 0 ? 3 : currentQuestionNumber.value;
|
||||||
currentQuestion.value = response.data;
|
const response = await getNextQuestion(userId, questionNumber, selectedOptions);
|
||||||
currentQuestionNumber.value++;
|
if (response) {
|
||||||
await fetchQuestionOptions(response.data.id);
|
currentQuestion.value = response;
|
||||||
|
currentQuestionNumber.value = response.questionNumber;
|
||||||
|
await fetchQuestionOptions(response.id);
|
||||||
} else {
|
} else {
|
||||||
isCompleted.value = true;
|
isCompleted.value = true;
|
||||||
}
|
}
|
||||||
return response.data;
|
return response;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast('获取下一个问题失败:' + error.message);
|
showToast('获取下一个问题失败:' + error.message);
|
||||||
throw error;
|
throw error;
|
||||||
|
|||||||
@ -10,12 +10,37 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
// 注册用户
|
// 注册用户
|
||||||
async function registerUser(data) {
|
async function registerUser(data) {
|
||||||
try {
|
try {
|
||||||
|
console.log('发送注册请求,数据:', data);
|
||||||
const response = await register(data);
|
const response = await register(data);
|
||||||
userId.value = response.data.id;
|
console.log('注册请求响应:', response);
|
||||||
|
|
||||||
|
// 检查响应数据结构
|
||||||
|
if (!response) {
|
||||||
|
throw new Error('注册失败:服务器无响应');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 后端直接返回 User 对象,response 就是 User 对象
|
||||||
|
const userData = response;
|
||||||
|
console.log('用户数据:', userData);
|
||||||
|
|
||||||
|
if (!userData || !userData.id) {
|
||||||
|
throw new Error('注册失败:无效的用户数据');
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存用户信息
|
||||||
|
userId.value = String(userData.id);
|
||||||
|
userInfo.value = userData;
|
||||||
localStorage.setItem('userId', userId.value);
|
localStorage.setItem('userId', userId.value);
|
||||||
return response;
|
|
||||||
|
console.log('用户信息已保存,userId:', userId.value);
|
||||||
|
return userData;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast('注册失败:' + error.message);
|
console.error('注册请求失败:', error);
|
||||||
|
if (error.response) {
|
||||||
|
console.error('错误响应:', error.response);
|
||||||
|
}
|
||||||
|
const message = error.response?.data?.message || error.message || '注册失败,请稍后重试';
|
||||||
|
showToast(message);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -23,10 +48,18 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
// 检查手机号是否已注册
|
// 检查手机号是否已注册
|
||||||
async function checkPhoneNumber(phone) {
|
async function checkPhoneNumber(phone) {
|
||||||
try {
|
try {
|
||||||
|
console.log('检查手机号:', phone);
|
||||||
const response = await checkPhone(phone);
|
const response = await checkPhone(phone);
|
||||||
return response.data;
|
console.log('检查手机号响应:', response);
|
||||||
|
// 如果响应是包装过的,尝试获取实际数据
|
||||||
|
return response.data ?? response;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast('检查手机号失败:' + error.message);
|
console.error('检查手机号失败:', error);
|
||||||
|
if (error.response) {
|
||||||
|
console.error('错误响应:', error.response);
|
||||||
|
}
|
||||||
|
const message = error.response?.data?.message || error.message || '检查手机号失败,请稍后重试';
|
||||||
|
showToast(message);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -34,11 +67,20 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
// 获取用户信息
|
// 获取用户信息
|
||||||
async function fetchUserInfo(id) {
|
async function fetchUserInfo(id) {
|
||||||
try {
|
try {
|
||||||
|
console.log('获取用户信息:', id);
|
||||||
const response = await getUserInfo(id);
|
const response = await getUserInfo(id);
|
||||||
userInfo.value = response.data;
|
console.log('获取用户信息响应:', response);
|
||||||
return response.data;
|
// 如果响应是包装过的,尝试获取实际数据
|
||||||
|
const userData = response.data || response;
|
||||||
|
userInfo.value = userData;
|
||||||
|
return userData;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast('获取用户信息失败:' + error.message);
|
console.error('获取用户信息失败:', error);
|
||||||
|
if (error.response) {
|
||||||
|
console.error('错误响应:', error.response);
|
||||||
|
}
|
||||||
|
const message = error.response?.data?.message || error.message || '获取用户信息失败,请稍后重试';
|
||||||
|
showToast(message);
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -48,6 +90,7 @@ export const useUserStore = defineStore('user', () => {
|
|||||||
userId.value = '';
|
userId.value = '';
|
||||||
userInfo.value = null;
|
userInfo.value = null;
|
||||||
localStorage.removeItem('userId');
|
localStorage.removeItem('userId');
|
||||||
|
console.log('用户已登出');
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -4,15 +4,24 @@ import { showToast } from 'vant';
|
|||||||
const request = axios.create({
|
const request = axios.create({
|
||||||
baseURL: '/api',
|
baseURL: '/api',
|
||||||
timeout: 10000,
|
timeout: 10000,
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 请求拦截器
|
// 请求拦截器
|
||||||
request.interceptors.request.use(
|
request.interceptors.request.use(
|
||||||
(config) => {
|
(config) => {
|
||||||
// 可以在这里添加 token 等认证信息
|
console.log('发送请求:', {
|
||||||
|
url: config.url,
|
||||||
|
method: config.method,
|
||||||
|
data: config.data,
|
||||||
|
headers: config.headers
|
||||||
|
});
|
||||||
return config;
|
return config;
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
|
console.error('请求错误:', error);
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -20,9 +29,25 @@ request.interceptors.request.use(
|
|||||||
// 响应拦截器
|
// 响应拦截器
|
||||||
request.interceptors.response.use(
|
request.interceptors.response.use(
|
||||||
(response) => {
|
(response) => {
|
||||||
|
console.log('收到响应:', {
|
||||||
|
status: response.status,
|
||||||
|
statusText: response.statusText,
|
||||||
|
data: response.data,
|
||||||
|
headers: response.headers
|
||||||
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
},
|
},
|
||||||
(error) => {
|
(error) => {
|
||||||
|
console.error('响应错误:', {
|
||||||
|
message: error.message,
|
||||||
|
config: error.config,
|
||||||
|
response: error.response ? {
|
||||||
|
status: error.response.status,
|
||||||
|
statusText: error.response.statusText,
|
||||||
|
data: error.response.data,
|
||||||
|
headers: error.response.headers
|
||||||
|
} : null
|
||||||
|
});
|
||||||
const message = error.response?.data?.message || '请求失败,请稍后重试';
|
const message = error.response?.data?.message || '请求失败,请稍后重试';
|
||||||
showToast(message);
|
showToast(message);
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
|
|||||||
@ -24,26 +24,6 @@
|
|||||||
:rules="[{ required: true, message: '请填写姓名' }]"
|
:rules="[{ required: true, message: '请填写姓名' }]"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<van-field
|
|
||||||
v-model="displayWorkArea"
|
|
||||||
name="workArea"
|
|
||||||
label="工作内容"
|
|
||||||
readonly
|
|
||||||
clickable
|
|
||||||
placeholder="请选择工作内容"
|
|
||||||
:rules="[{ required: true, message: '请选择工作内容' }]"
|
|
||||||
@click="showWorkAreaPicker = true"
|
|
||||||
/>
|
|
||||||
<van-popup v-model:show="showWorkAreaPicker" position="bottom">
|
|
||||||
<van-picker
|
|
||||||
:columns="workAreaOptions"
|
|
||||||
@confirm="onWorkAreaConfirm"
|
|
||||||
@cancel="showWorkAreaPicker = false"
|
|
||||||
show-toolbar
|
|
||||||
title="选择工作内容"
|
|
||||||
/>
|
|
||||||
</van-popup>
|
|
||||||
|
|
||||||
<van-field
|
<van-field
|
||||||
v-model="displayPositionType"
|
v-model="displayPositionType"
|
||||||
name="positionType"
|
name="positionType"
|
||||||
@ -86,25 +66,12 @@ const userStore = useUserStore();
|
|||||||
const formData = reactive({
|
const formData = reactive({
|
||||||
phone: '',
|
phone: '',
|
||||||
name: '',
|
name: '',
|
||||||
workArea: '',
|
|
||||||
positionType: '',
|
positionType: '',
|
||||||
});
|
});
|
||||||
|
|
||||||
const showWorkAreaPicker = ref(false);
|
|
||||||
const showPositionTypePicker = ref(false);
|
const showPositionTypePicker = ref(false);
|
||||||
const displayWorkArea = ref('');
|
|
||||||
const displayPositionType = ref('');
|
const displayPositionType = ref('');
|
||||||
|
|
||||||
const workAreaOptions = [
|
|
||||||
{ text: '研发', value: 'RD' },
|
|
||||||
{ text: '项目', value: 'PROJECT' },
|
|
||||||
{ text: '保险', value: 'INSURANCE' },
|
|
||||||
{ text: '财务', value: 'FINANCE' },
|
|
||||||
{ text: '运营', value: 'OPERATION' },
|
|
||||||
{ text: '客服', value: 'CUSTOMER_SERVICE' },
|
|
||||||
{ text: '综合管理', value: 'ADMIN' }
|
|
||||||
];
|
|
||||||
|
|
||||||
const positionTypeOptions = [
|
const positionTypeOptions = [
|
||||||
{ text: '管理岗', value: 'MANAGEMENT' },
|
{ text: '管理岗', value: 'MANAGEMENT' },
|
||||||
{ text: '技术岗', value: 'TECHNICAL' },
|
{ text: '技术岗', value: 'TECHNICAL' },
|
||||||
@ -127,16 +94,6 @@ async function onPhoneBlur() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 工作内容选择确认
|
|
||||||
function onWorkAreaConfirm({ selectedOptions }) {
|
|
||||||
console.log(selectedOptions);
|
|
||||||
formData.workArea = selectedOptions[0].value;
|
|
||||||
displayWorkArea.value = selectedOptions[0].text;
|
|
||||||
showWorkAreaPicker.value = false;
|
|
||||||
console.log(formData.workArea);
|
|
||||||
console.log(displayWorkArea.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 岗位性质选择确认
|
// 岗位性质选择确认
|
||||||
function onPositionTypeConfirm({ selectedOptions }) {
|
function onPositionTypeConfirm({ selectedOptions }) {
|
||||||
formData.positionType = selectedOptions[0].value;
|
formData.positionType = selectedOptions[0].value;
|
||||||
@ -147,7 +104,10 @@ function onPositionTypeConfirm({ selectedOptions }) {
|
|||||||
// 提交表单
|
// 提交表单
|
||||||
async function onSubmit() {
|
async function onSubmit() {
|
||||||
try {
|
try {
|
||||||
await userStore.registerUser(formData);
|
console.log('开始注册,表单数据:', formData);
|
||||||
|
const response = await userStore.registerUser(formData);
|
||||||
|
console.log('注册成功,响应数据:', response);
|
||||||
|
|
||||||
// 使用 showNotify 显示成功提示,不会干扰用户操作
|
// 使用 showNotify 显示成功提示,不会干扰用户操作
|
||||||
showNotify({
|
showNotify({
|
||||||
type: 'success',
|
type: 'success',
|
||||||
@ -155,12 +115,21 @@ async function onSubmit() {
|
|||||||
duration: 2000,
|
duration: 2000,
|
||||||
position: 'top'
|
position: 'top'
|
||||||
});
|
});
|
||||||
|
|
||||||
// 等待提示显示后再跳转
|
// 等待提示显示后再跳转
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
router.replace('/survey');
|
console.log('准备跳转到问卷页面');
|
||||||
|
router.push({
|
||||||
|
name: 'survey',
|
||||||
|
replace: true
|
||||||
|
}).catch(err => {
|
||||||
|
console.error('路由跳转失败:', err);
|
||||||
|
showToast('页面跳转失败,请刷新重试');
|
||||||
|
});
|
||||||
}, 500);
|
}, 500);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('注册失败:', error);
|
console.error('注册失败:', error);
|
||||||
|
showToast(error.message || '注册失败,请重试');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user