diff --git a/web/components.d.ts b/web/components.d.ts
index 8824b169..1163e3dd 100644
--- a/web/components.d.ts
+++ b/web/components.d.ts
@@ -11,7 +11,6 @@ declare module 'vue' {
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
- ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog']
@@ -25,13 +24,10 @@ declare module 'vue' {
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
- ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
- ElRow: typeof import('element-plus/es')['ElRow']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSelectV2: typeof import('element-plus/es')['ElSelectV2']
- ElSlider: typeof import('element-plus/es')['ElSlider']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
diff --git a/web/src/management/pages/edit/components/ModuleNavbar.vue b/web/src/management/pages/edit/components/ModuleNavbar.vue
index 8b9de47b..4754af42 100644
--- a/web/src/management/pages/edit/components/ModuleNavbar.vue
+++ b/web/src/management/pages/edit/components/ModuleNavbar.vue
@@ -14,22 +14,21 @@
-
-
+
\ No newline at end of file
diff --git a/web/src/render/pages/IndexPage.vue b/web/src/render/pages/IndexPage.vue
index 7f02b5cd..669d852c 100644
--- a/web/src/render/pages/IndexPage.vue
+++ b/web/src/render/pages/IndexPage.vue
@@ -79,6 +79,18 @@ const normalizationRequestBody = () => {
clientTime: Date.now()
}
+ //浏览器缓存数据
+ localStorage.removeItem(surveyPath + "_questionData")
+ localStorage.removeItem("isSubmit")
+
+ //数据加密
+ var formData = Object.assign({}, store.state.formValues)
+ for(const key in formData){
+ formData[key] = encodeURIComponent(formData[key])
+ }
+ localStorage.setItem(surveyPath + "_questionData", JSON.stringify(formData))
+ localStorage.setItem('isSubmit', JSON.stringify(true))
+
if (encryptInfo?.encryptType) {
result.encryptType = encryptInfo?.encryptType
result.data = encrypt[result.encryptType as 'rsa']({
@@ -100,6 +112,7 @@ const submitSurver = async () => {
const params = normalizationRequestBody()
console.log(params)
const res: any = await submitForm(params)
+
if (res.code === 200) {
store.commit('setRouter', 'successPage')
} else {
diff --git a/web/src/render/store/actions.js b/web/src/render/store/actions.js
index 3438ebea..34958c1e 100644
--- a/web/src/render/store/actions.js
+++ b/web/src/render/store/actions.js
@@ -6,6 +6,9 @@ moment.locale('zh-cn')
import adapter from '../adapter'
import { queryVote, getEncryptInfo } from '@/render/api/survey'
import { RuleMatch } from '@/common/logicEngine/RulesMatch'
+import state from './state'
+import useCommandComponent from '../hooks/useCommandComponent'
+import BackAnswerDialog from '../components/BackAnswerDialog.vue'
/**
* CODE_MAP不从management引入,在dev阶段,会导致B端 router被加载,进而导致C端路由被添加 baseUrl: /management
*/
@@ -15,12 +18,13 @@ const CODE_MAP = {
NO_AUTH: 403
}
const VOTE_INFO_KEY = 'voteinfo'
+const confirm = useCommandComponent(BackAnswerDialog)
export default {
// 初始化
- init({ commit, dispatch }, { bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf }) {
+ init({ commit, dispatch },{ bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf}) {
commit('setEnterTime')
- const { begTime, endTime, answerBegTime, answerEndTime } = baseConf
+ const { begTime, endTime, answerBegTime, answerEndTime, breakAnswer, backAnswer} = baseConf
const { msgContent } = submitConf
const now = Date.now()
if (now < new Date(begTime).getTime()) {
@@ -53,33 +57,73 @@ export default {
return
}
}
- commit('setRouter', 'indexPage')
- // 根据初始的schema生成questionData, questionSeq, rules, formValues, 这四个字段
- const { questionData, questionSeq, rules, formValues } = adapter.generateData({
- bannerConf,
- baseConf,
- bottomConf,
- dataConf,
- skinConf,
- submitConf
- })
+ //回填,断点续填
+ const localData = JSON.parse(localStorage.getItem(state.surveyPath + "_questionData"))
- // 将数据设置到state上
- commit('assignState', {
- questionData,
- questionSeq,
- rules,
- bannerConf,
- baseConf,
- bottomConf,
- dataConf,
- skinConf,
- submitConf,
- formValues
- })
- // 获取已投票数据
- dispatch('initVoteData')
+ //数据解密
+ for(const key in localData){
+ localData[key] = decodeURIComponent(localData[key])
+ }
+
+ const isSubmit = JSON.parse(localStorage.getItem('isSubmit'))
+ if(localData) {
+ if(isSubmit){
+ if(!backAnswer) {
+ clearFormData({ commit, dispatch }, { bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf })
+ } else {
+ confirm({
+ title: "您之前已提交过问卷,是否要回填?",
+ onConfirm: async () => {
+ try {
+ loadFormData({ commit, dispatch }, {bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf }, localData)
+ } catch (error) {
+ console.log(error)
+ } finally {
+ confirm.close()
+ }
+ },
+ onCancel: async() => {
+ try {
+ clearFormData({ commit, dispatch }, { bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf })
+ } catch (error) {
+ console.log(error)
+ } finally {
+ confirm.close()
+ }
+ }
+ })
+ }
+ } else{
+ if(!breakAnswer) {
+ clearFormData({ commit, dispatch }, { bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf })
+ } else {
+ confirm({
+ title: "您之前已填写部分内容, 是否要继续填写?",
+ onConfirm: async () => {
+ try {
+ loadFormData({ commit, dispatch }, {bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf }, localData)
+ } catch (error) {
+ console.log(error)
+ } finally {
+ confirm.close()
+ }
+ },
+ onCancel: async() => {
+ try {
+ clearFormData({ commit, dispatch }, { bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf })
+ } catch (error) {
+ console.log(error)
+ } finally {
+ confirm.close()
+ }
+ }
+ })
+ }
+ }
+ } else {
+ clearFormData({ commit, dispatch }, { bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf })
+ }
},
// 用户输入或者选择后,更新表单数据
changeData({ commit }, data) {
@@ -175,3 +219,71 @@ export default {
commit('setRuleEgine', ruleEngine)
}
}
+
+ // 加载上次填写过的数据到问卷页
+ function loadFormData({ commit, dispatch }, {bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf }, formData) {
+ commit('setRouter', 'indexPage')
+
+ // 根据初始的schema生成questionData, questionSeq, rules, formValues, 这四个字段
+ const { questionData, questionSeq, rules, formValues } = adapter.generateData({
+ bannerConf,
+ baseConf,
+ bottomConf,
+ dataConf,
+ skinConf,
+ submitConf
+ })
+ console.log("formdata", formData)
+
+ for(const key in formData){
+ formValues[key] = formData[key]
+ console.log("formValues",formValues)
+ }
+
+ // 将数据设置到state上
+ commit('assignState', {
+ questionData,
+ questionSeq,
+ rules,
+ bannerConf,
+ baseConf,
+ bottomConf,
+ dataConf,
+ skinConf,
+ submitConf,
+ formValues
+ })
+ // 获取已投票数据
+ dispatch('initVoteData')
+ }
+
+ // 加载空白页面
+ function clearFormData({ commit, dispatch }, { bannerConf, baseConf, bottomConf, dataConf, skinConf, submitConf }) {
+ commit('setRouter', 'indexPage')
+
+ // 根据初始的schema生成questionData, questionSeq, rules, formValues, 这四个字段
+ const { questionData, questionSeq, rules, formValues } = adapter.generateData({
+ bannerConf,
+ baseConf,
+ bottomConf,
+ dataConf,
+ skinConf,
+ submitConf
+ })
+
+ // 将数据设置到state上
+ commit('assignState', {
+ questionData,
+ questionSeq,
+ rules,
+ bannerConf,
+ baseConf,
+ bottomConf,
+ dataConf,
+ skinConf,
+ submitConf,
+ formValues
+ })
+ // 获取已投票数据
+ dispatch('initVoteData')
+ }
diff --git a/web/src/render/store/mutations.js b/web/src/render/store/mutations.js
index 33bc69f0..7ba6ab41 100644
--- a/web/src/render/store/mutations.js
+++ b/web/src/render/store/mutations.js
@@ -20,8 +20,19 @@ export default {
},
changeFormData(state, data) {
let { key, value } = data
- // console.log('formValues', key, value)
set(state, `formValues.${key}`, value)
+
+ //数据加密
+ var formData = Object.assign({}, state.formValues);
+ for(const key in formData){
+ formData[key] = encodeURIComponent(formData[key])
+ }
+
+ //浏览器存储
+ localStorage.removeItem(state.surveyPath + "_questionData")
+ localStorage.setItem(state.surveyPath + "_questionData", JSON.stringify(formData))
+ localStorage.setItem('isSubmit', JSON.stringify(false))
+
},
changeSelectMoreData(state, data) {
const { key, value, field } = data