feat:首页样式联调

This commit is contained in:
du.meimei
2025-03-14 18:25:39 +08:00
parent 5f25815b8e
commit c4acd8a5c4
32 changed files with 902 additions and 526 deletions

View File

@@ -1,6 +1,7 @@
# .env.development # .env.development
VITE_APP_BASEURL=https://yls-api-uat.dctest.digitalyili.com VITE_APP_BASEURL=https://yls-api-uat.dctest.digitalyili.com
VITE_APP_BASEDOMAIM=https://ylst-h5-uat.dctest.digitalyili.com VITE_APP_BASEDOMAIM=https://ylst-h5-uat.dctest.digitalyili.com
# VITE_APP_BASEURL=http://192.168.8.165:15011
VITE_APP_ENV=development VITE_APP_ENV=development
VITE_APP_CURRENTMODE=dev VITE_APP_CURRENTMODE=dev
VITE_APP_BASEOSS=https://diaoyan-files.automark.cc VITE_APP_BASEOSS=https://diaoyan-files.automark.cc

4
auto-imports.d.ts vendored
View File

@@ -5,6 +5,4 @@
// Generated by unplugin-auto-import // Generated by unplugin-auto-import
// biome-ignore lint: disable // biome-ignore lint: disable
export {} export {}
declare global { declare global {}
}

10
components.d.ts vendored
View File

@@ -2,12 +2,14 @@
// @ts-nocheck // @ts-nocheck
// Generated by unplugin-vue-components // Generated by unplugin-vue-components
// Read more: https://github.com/vuejs/core/pull/3399 // Read more: https://github.com/vuejs/core/pull/3399
export {} export {};
/* prettier-ignore */ /* prettier-ignore */
declare module 'vue' { declare module 'vue' {
export interface GlobalComponents { export interface GlobalComponents {
Contenteditable: typeof import('./src/components/contenteditable.vue')['default'] Contenteditable: typeof import('./src/components/contenteditable.vue')['default']
ElOption: typeof import('element-plus/es')['ElOption']
ElSelect: typeof import('element-plus/es')['ElSelect']
RichText: typeof import('./src/components/RichText.vue')['default'] RichText: typeof import('./src/components/RichText.vue')['default']
RouterLink: typeof import('vue-router')['RouterLink'] RouterLink: typeof import('vue-router')['RouterLink']
RouterView: typeof import('vue-router')['RouterView'] RouterView: typeof import('vue-router')['RouterView']
@@ -19,12 +21,8 @@ declare module 'vue' {
VanCheckboxGroup: typeof import('vant/es')['CheckboxGroup'] VanCheckboxGroup: typeof import('vant/es')['CheckboxGroup']
VanCol: typeof import('vant/es')['Col'] VanCol: typeof import('vant/es')['Col']
VanDivider: typeof import('vant/es')['Divider'] VanDivider: typeof import('vant/es')['Divider']
VanFeild: typeof import('vant/es')['Feild']
VanField: typeof import('vant/es')['Field'] VanField: typeof import('vant/es')['Field']
VanGrid: typeof import('vant/es')['Grid']
VanGridItem: typeof import('vant/es')['GridItem']
VanIcon: typeof import('vant/es')['Icon'] VanIcon: typeof import('vant/es')['Icon']
VanNavBar: typeof import('vant/es')['NavBar']
VanPicker: typeof import('vant/es')['Picker'] VanPicker: typeof import('vant/es')['Picker']
VanPopup: typeof import('vant/es')['Popup'] VanPopup: typeof import('vant/es')['Popup']
VanRadio: typeof import('vant/es')['Radio'] VanRadio: typeof import('vant/es')['Radio']
@@ -33,8 +31,10 @@ declare module 'vue' {
VanSearch: typeof import('vant/es')['Search'] VanSearch: typeof import('vant/es')['Search']
VanStepper: typeof import('vant/es')['Stepper'] VanStepper: typeof import('vant/es')['Stepper']
VanSwitch: typeof import('vant/es')['Switch'] VanSwitch: typeof import('vant/es')['Switch']
VanTab: typeof import('vant/es')['Tab']
VanTabbar: typeof import('vant/es')['Tabbar'] VanTabbar: typeof import('vant/es')['Tabbar']
VanTabbarItem: typeof import('vant/es')['TabbarItem'] VanTabbarItem: typeof import('vant/es')['TabbarItem']
VanTabs: typeof import('vant/es')['Tabs']
YLCascader: typeof import('./src/components/YLCascader.vue')['default'] YLCascader: typeof import('./src/components/YLCascader.vue')['default']
YLPicker: typeof import('./src/components/YLPicker.vue')['default'] YLPicker: typeof import('./src/components/YLPicker.vue')['default']
YLSelect: typeof import('./src/components/YLSelect.vue')['default'] YLSelect: typeof import('./src/components/YLSelect.vue')['default']

303
package-lock.json generated
View File

@@ -18,6 +18,7 @@
"sortablejs": "^1.15.6", "sortablejs": "^1.15.6",
"uuid": "^11.1.0", "uuid": "^11.1.0",
"vant": "^4.9.17", "vant": "^4.9.17",
"vconsole": "^3.15.1",
"vite-plugin-vue": "^0.0.1", "vite-plugin-vue": "^0.0.1",
"vue": "^3.4.29", "vue": "^3.4.29",
"vue-router": "^4.3.3", "vue-router": "^4.3.3",
@@ -43,6 +44,9 @@
"unplugin-vue-components": "^0.27.5", "unplugin-vue-components": "^0.27.5",
"vite": "^5.3.1", "vite": "^5.3.1",
"vue-tsc": "^2.0.21" "vue-tsc": "^2.0.21"
},
"optionalDependencies": {
"@rollup/rollup-linux-x64-musl": "*"
} }
}, },
"node_modules/@ampproject/remapping": { "node_modules/@ampproject/remapping": {
@@ -492,6 +496,17 @@
"@babel/core": "^7.0.0-0" "@babel/core": "^7.0.0-0"
} }
}, },
"node_modules/@babel/runtime": {
"version": "7.26.10",
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.10.tgz",
"integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template": { "node_modules/@babel/template": {
"version": "7.26.9", "version": "7.26.9",
"dev": true, "dev": true,
@@ -1598,6 +1613,239 @@
} }
} }
}, },
"node_modules/@rollup/rollup-android-arm-eabi": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz",
"integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-android-arm64": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz",
"integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz",
"integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-darwin-x64": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz",
"integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
]
},
"node_modules/@rollup/rollup-freebsd-arm64": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz",
"integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-freebsd-x64": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz",
"integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz",
"integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz",
"integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz",
"integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz",
"integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz",
"integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==",
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz",
"integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz",
"integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz",
"integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz",
"integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.35.0",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.35.0.tgz",
"integrity": "sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==",
"cpu": [
"x64"
],
"optional": true,
"os": [
"linux"
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz",
"integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz",
"integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": { "node_modules/@rollup/rollup-win32-x64-msvc": {
"version": "4.34.8", "version": "4.34.8",
"cpu": [ "cpu": [
@@ -5146,6 +5394,27 @@
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
"node_modules/copy-text-to-clipboard": {
"version": "3.2.0",
"resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz",
"integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/core-js": {
"version": "3.41.0",
"resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.41.0.tgz",
"integrity": "sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==",
"hasInstallScript": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/core-js"
}
},
"node_modules/cosmiconfig": { "node_modules/cosmiconfig": {
"version": "9.0.0", "version": "9.0.0",
"resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz", "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
@@ -8047,6 +8316,11 @@
"integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==",
"dev": true "dev": true
}, },
"node_modules/mutation-observer": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
"integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
},
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.8", "version": "3.3.8",
"funding": [ "funding": [
@@ -8852,6 +9126,11 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/regenerator-runtime": {
"version": "0.14.1",
"resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/regexp.prototype.flags": { "node_modules/regexp.prototype.flags": {
"version": "1.5.4", "version": "1.5.4",
"resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz",
@@ -8995,6 +9274,19 @@
"fsevents": "~2.3.2" "fsevents": "~2.3.2"
} }
}, },
"node_modules/rollup/node_modules/@rollup/rollup-linux-x64-musl": {
"version": "4.34.8",
"resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz",
"integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
]
},
"node_modules/run-parallel": { "node_modules/run-parallel": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -10488,6 +10780,17 @@
"vue": "^3.0.0" "vue": "^3.0.0"
} }
}, },
"node_modules/vconsole": {
"version": "3.15.1",
"resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz",
"integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==",
"dependencies": {
"@babel/runtime": "^7.17.2",
"copy-text-to-clipboard": "^3.0.1",
"core-js": "^3.11.0",
"mutation-observer": "^1.0.3"
}
},
"node_modules/vite": { "node_modules/vite": {
"version": "5.4.14", "version": "5.4.14",
"resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.14.tgz", "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.14.tgz",

View File

@@ -2,7 +2,7 @@ import request from '@/utils/request.js';
export function getQuestionList(params) { export function getQuestionList(params) {
return request({ return request({
url: '/console/template/list_shortcut', url: '/console/template/h5_shortcut',
method: 'get', method: 'get',
params params
}); });
@@ -10,16 +10,13 @@ export function getQuestionList(params) {
export function consoleSurveys(params) { export function consoleSurveys(params) {
return request({ return request({
url: '/console/surveys', url: '/console/surveys',
method: 'post', method: 'get',
data: { params
...params,
source: '1'
}
}); });
} }
export function getListScene(params) { export function getListScene(params) {
return request({ return request({
url: 'console/list_scene', url: 'console/h5_scene',
method: 'get', method: 'get',
params params
}); });

View File

@@ -31,11 +31,12 @@
} }
} }
} }
.van-toast { .van-toast {
background-color: rgba(50, 50, 51, 0.9) !important;
color: white !important;
padding: 10px 16px !important; padding: 10px 16px !important;
border-radius: 5px !important; border-radius: 5px !important;
background-color: rgba(50, 50, 51, 0.9) !important;
color: white !important;
font-size: 14px !important; font-size: 14px !important;
&--success { &--success {

View File

@@ -170,8 +170,8 @@ const getMaxDateLimit = computed(() => {
props.format props.format
); );
const tempStr = '0000-12-31 23:59:59'; const tempStr = '0000-12-31 23:59:59';
const result const result =
= props.maxDate.length !== 0 && thisMax.length > props.maxDate.length props.maxDate.length !== 0 && thisMax.length > props.maxDate.length
? thisMax.slice(0, props.maxDate.length) + tempStr.slice(props.maxDate.length) ? thisMax.slice(0, props.maxDate.length) + tempStr.slice(props.maxDate.length)
: thisMax; : thisMax;
return result.slice(0, props.format.length); return result.slice(0, props.format.length);
@@ -194,8 +194,8 @@ function onChange({ selectedValues, columnIndex }) {
renderMinuteColumns, renderMinuteColumns,
renderSecondColumns renderSecondColumns
]; ];
updateColumns[columnIndex] updateColumns[columnIndex] &&
&& updateColumns[columnIndex](changeValue, getMinDateLimit.value, getMaxDateLimit.value, false); updateColumns[columnIndex](changeValue, getMinDateLimit.value, getMaxDateLimit.value, false);
} }
// 渲染全部列 // 渲染全部列

View File

@@ -9,7 +9,7 @@ export default {
socketUrl: import.meta.env.VITE_APP_SOCKETURL, socketUrl: import.meta.env.VITE_APP_SOCKETURL,
jsonpUrl: import.meta.env.VITE_APP_JSONPURL, jsonpUrl: import.meta.env.VITE_APP_JSONPURL,
jqrUrl: import.meta.env.VITE_APP_YQRURL, jqrUrl: import.meta.env.VITE_APP_YQRURL,
currentMode: import.meta.env.VITE_APP_CURRENTMODE, currentMode: import.meta.env.VITE_APP_CURRENTMODE
// appKey: import.meta.env.VITE_APP_APPKEY, // appKey: import.meta.env.VITE_APP_APPKEY,
// appId: import.meta.env.VITE_APP_APPID // appId: import.meta.env.VITE_APP_APPID
}; };

View File

@@ -4,11 +4,11 @@
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: src:
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix')
format('embedded-opentype'), format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont')
format('svg'); format('svg');
src: src:
url('//at.alicdn.com/t/c/font_4841764_vat2jbvw3q.woff2?t=1741575060989') format('woff2'), url('//at.alicdn.com/t/c/font_4841764_vat2jbvw3q.woff2?t=1741575060989') format('woff2'),
url('//at.alicdn.com/t/c/font_4841764_vat2jbvw3q.woff?t=1741575060989') format('woff'), url('//at.alicdn.com/t/c/font_4841764_vat2jbvw3q.woff?t=1741575060989') format('woff'),

View File

@@ -4,11 +4,11 @@
src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834'); src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
src: src:
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix')
format('embedded-opentype'), format('embedded-opentype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'), url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont')
format('svg'); format('svg');
} }
.logo { .logo {

View File

@@ -8,6 +8,8 @@ import 'vant/lib/index.css';
import router from './router'; import router from './router';
import utils from '@/assets/js/common'; import utils from '@/assets/js/common';
// 2. 引入组件样式 // 2. 引入组件样式
import 'vant/lib/index.css';
import '@/style/utils.scss';
import appBridge from '@/assets/js/appBridge'; import appBridge from '@/assets/js/appBridge';
import VConsole from 'vconsole'; import VConsole from 'vconsole';
let vconsole; let vconsole;

View File

@@ -1 +1,2 @@
export const surveyQuestion = 'https://yls-api-uat.dctest.digitalyili.com/api/console/surveys/RWNK9BYp/questions'; export const surveyQuestion =
'https://yls-api-uat.dctest.digitalyili.com/api/console/surveys/RWNK9BYp/questions';

View File

@@ -38,10 +38,10 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
(response) => { (response) => {
if ( if (
response.status === 200 response.status === 200 ||
|| response.status === 201 response.status === 201 ||
|| response.status === 202 response.status === 202 ||
|| response.status === 204 response.status === 204
) { ) {
if (response.config.method === 'put') { if (response.config.method === 'put') {
// message.success('保存中...'); // message.success('保存中...');

View File

@@ -79,4 +79,4 @@ interface QuestionsInfo {
logics?: Logic[]; logics?: Logic[];
questions?: any[]; questions?: any[];
cycle_pages?: null | any; cycle_pages?: null | any;
} }

View File

@@ -1,13 +1,15 @@
.flex { .flex {
display: flex; display: flex;
align-items: center;
justify-content: space-between;
} }
.flex-column { .flex-column {
flex-direction: column; flex-direction: column;
} }
.flex-warp {
flex-wrap: wrap;
}
.flex-start, .flex-start,
.flex.flex-start { .flex.flex-start {
display: flex; display: flex;

View File

@@ -4,6 +4,7 @@
*/ */
@import './box'; @import './box';
@import 'font';
.ant-select-item-option-selected { .ant-select-item-option-selected {
font-weight: normal !important; font-weight: normal !important;

View File

@@ -7,4 +7,4 @@ declare global {
} }
// 必须添加这一行,将文件变成一个模块 // 必须添加这一行,将文件变成一个模块
export {}; export {};

View File

@@ -44,10 +44,10 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
(response) => { (response) => {
if ( if (
response.status === 200 response.status === 200 ||
|| response.status === 201 response.status === 201 ||
|| response.status === 202 response.status === 202 ||
|| response.status === 204 response.status === 204
) { ) {
if (response.config.method === 'put') { if (response.config.method === 'put') {
// message.success('保存中...'); // message.success('保存中...');

View File

@@ -105,4 +105,4 @@ ul {
background-color: #70b936; background-color: #70b936;
color: #fff; color: #fff;
} }
</style> </style>

View File

@@ -7,7 +7,7 @@ import { onMounted, ref } from 'vue';
// import { getUserInfo } from '@/api/common/index.js'; // import { getUserInfo } from '@/api/common/index.js';
// import { showFailToast } from 'vant'; // import { showFailToast } from 'vant';
const contentShow = ref(false); const contentShow = ref(false);
onMounted(async() => { onMounted(async () => {
contentShow.value = true; contentShow.value = true;
// if (utils.getSessionStorage('xToken')){ // if (utils.getSessionStorage('xToken')){
// const appToken = utils.getParameter('digitalYiliToken'); // const appToken = utils.getParameter('digitalYiliToken');
@@ -46,13 +46,13 @@ onMounted(async() => {
padding: 0 10px 60px; padding: 0 10px 60px;
background: linear-gradient(0deg, #f5f5f5 0%, #f5f5f5 84%, #a5d380 100%); background: linear-gradient(0deg, #f5f5f5 0%, #f5f5f5 84%, #a5d380 100%);
&> :first-child { & > :first-child {
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
border-radius: 6px; border-radius: 6px;
background-color: white; background-color: white;
&>div { & > div {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 50px; width: 50px;

View File

@@ -69,8 +69,8 @@ onMounted(() => {
</script> </script>
<template> <template>
<van-cell style="position: relative; z-index: 1"> <van-cell class="create_survey">
<div style="text-align: left">新建问卷</div> <div style="color: #000; text-align: left">新建问卷</div>
<van-row> <van-row>
<van-col <van-col
v-for="survey in surveys" v-for="survey in surveys"
@@ -87,6 +87,11 @@ onMounted(() => {
</template> </template>
<style lang="scss" scoped> <style lang="scss" scoped>
.create_survey {
padding: 15px;
color: #000;
}
.survey { .survey {
display: flex; display: flex;
flex-direction: column; flex-direction: column;

View File

@@ -1,93 +1,134 @@
<script setup lang="ts">
import { lastSurveys } from './hooks/useLastSurveyHooks';
</script>
<template> <template>
<!-- 问卷 --> <!-- 问卷 -->
<div class="last-survey"> <div class="last-survey">
<div> <div class="survey_header">
<small>最新问卷</small> <div class="flex space-between">
<span @click="$router.push('/survey')">全部问卷></span> <div class="flex align-center">
</div> <p class="fw-bold">最新问卷</p>
<!-- 问卷列表容器 --> <p class="survey_header_tag">NEW</p>
<div class="last-survey_items">
<!-- 问卷列表项 -->
<div v-for="survey in lastSurveys" :key="survey">
<div class="last-survey_items_status">
<img
src="https://files.axshare.com/gsc/DR6075/63/4d/77/634d77293a4d41d1b3d145974a8fb6a7/images/首页_1/u249.svg?pageId=5cc10b9f-56eb-48dc-943a-bfe7afb18a64"
alt=" "
width="10px"
height="10px"
/>
<small> {{ survey.status }} - 100</small>
</div>
<div class="last-survey_items_info">
<small> 报名签到</small>
<small>| {{ survey.platform }} | 创建时间: {{ survey.createTime }}</small>
</div>
<div class="last-survey_items_content">
<p>
<small>{{ survey.title }}</small>
</p>
<p>
<small>{{ survey.describe }}</small>
</p>
</div> </div>
<p>全部问卷 ></p>
</div> </div>
</div> </div>
<div class="survey_con">
<div class="flex">
<div>
<div class="survey_con_title flex align-center">
<p class="mr-10 fw-bold">{{ survey.project_name }}</p>
<p class="survey_con_num">{{ survey.answer_num }}</p>
</div>
<div class="survey_con_label flex">
<div class="flex">
<img src="" alt="" />
{{ survey.scene_name }}
</div>
<div class="flex">
<img src="" alt="" />
{{ survey.source === 1 ? '移动端' : 'PC端' }}
</div>
<div class="flex">
<img src="" alt="" />
{{ survey.created_at }}
</div>
</div>
</div>
<img src="" alt="" />
</div>
<div class="survey_remark">{{ survey.remarks }}</div>
</div>
</div> </div>
</template> </template>
<script setup>
import { ref, onMounted } from 'vue';
import { consoleSurveys } from '@/api/home/index.js';
const survey = ref({
project_name: ''
});
const fetchSurveys = async () => {
const params = {
page: 1,
per_page: 10,
group_id: 0
};
const res = await consoleSurveys(params);
if (res.data.code === 0) {
survey.value = res.data.data[0];
} else {
// Toast()
}
};
onMounted(() => {
fetchSurveys();
});
</script>
<style scoped lang="scss"> <style scoped lang="scss">
.last-survey { .last-survey {
& > :first-child { margin-top: 6px;
display: flex; padding: 10px 3px 3px;
align-items: end; border-radius: 10px;
justify-content: space-between; background-color: #27d6ac;
margin: 10px 0; color: #fff;
& > span { .survey_header {
color: grey; padding: 0 10px;
font-size: 15px;
.survey_header_tag {
width: 32px;
height: 15px;
margin-left: 3px;
border-radius: 4px;
background-color: #fff;
color: #27d6ac;
font-size: 10px; font-size: 10px;
line-height: 15px;
text-align: center;
} }
} }
.last-survey_items { .survey_con {
display: flex; margin-top: 10px;
flex-flow: column nowrap; border-radius: 10px;
justify-content: space-around; background: #fff;
color: #000;
& > div { .survey_con_title {
display: flex; //border: 1px solid red;
flex-direction: column; padding: 10px;
overflow: hidden; font-size: 15px;
width: 100%;
/* width: calc(129px / 1.3); */ .survey_con_num {
width: 30px;
/* height: calc(135px / 1.3); */ height: 15px;
margin: 5px 0; margin-left: 3px;
padding: 5px 0 5px 5px; border: 1px solid #d0d0d0;
border-radius: 6px; border-radius: 5px;
background-color: white; color: #d0d0d0;
.last-survey_items_status {
& > small {
color: red;
font-size: 10px;
}
}
.last-survey_items_info {
color: #999;
font-size: 10px; font-size: 10px;
line-height: 15px;
text-align: center;
} }
}
.last-survey_items_content { .survey_con_label {
font-size: 12px; margin-left: 10px;
} color: #666;
font-size: 12px;
}
.survey_remark {
margin: 10px 0 0 10px;
padding-bottom: 10px;
color: #828282;
font-weight: 400;
font-style: normal;
font-size: 12px;
line-height: 16px;
text-align: left;
} }
} }
} }

View File

@@ -1,57 +1,47 @@
<template> <template>
<!-- 模板 --> <!-- 模板 -->
<div class="market"> <div class="market">
<div> <div class="market_title fw-bold">模板市场</div>
<small>模板市场</small> <van-tabs v-model:active="active" @change="getMarketInfo">
<span @click="$router.push('/market')">全部模板></span> <van-tab v-for="item in marketList" :key="item.title" :title="item.title"> </van-tab>
</div> </van-tabs>
<market-item :info="marketInfo"></market-item>
<div class="market_table"> </div>
<div v-for="item in tables" :key="item.title" @click="getMarketInfo(item)"> <div class="more">
{{ item.title }} <p>-更多模板期待您的探索-</p>
</div>
</div>
<van-cell class="market_items">
<market-item :info="marketInfo"></market-item>
<!-- <component :is="TestComponent" />-->
</van-cell>
<p class="more">-更多模板期待您的探索-</p>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup>
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
import MarketItem from './components/MarketItem.vue'; import MarketItem from './components/MarketItem.vue';
import { getListScene, getSurveyTemplates } from '@/api/home'; import { getListScene, getSurveyTemplates } from '@/api/home';
interface SceneItem { const marketList = ref([]);
parentCode: number; const active = ref(null);
title: string;
component: any;
code: number;
}
const tables = ref<SceneItem[]>([]);
const marketInfo = ref([]); const marketInfo = ref([]);
const getTableList = async() => { const getTableList = async () => {
const res = await getListScene(); const res = await getListScene();
if (res.data.code === 0) { if (res.data.code === 0) {
res.data.data.forEach((item: SceneItem) => { res.data.data.forEach((item) => {
if (item.parentCode && item.parentCode === 1) { if (item.parentCode && item.parentCode === 1) {
tables.value.push(item); marketList.value.push(item);
} }
}); });
getMarketInfo(tables.value[0]); getMarketInfo(marketList.value[0]);
} }
}; };
const getMarketInfo = async(item: SceneItem) => { const getMarketInfo = async (item) => {
console.log(item);
const code = marketList.value.filter((market, index) => item === index)[0].code;
console.log(code);
const params = { const params = {
page: 1, page: 1,
per_page: 10, per_page: 10,
group_id: 0, group_id: 0,
is_public: 1, is_public: 1,
scene_code_info: item.code, scene_code_info: code,
sort: 'quote_nums, desc' sort: 'quote_nums, desc'
}; };
const res = await getSurveyTemplates(params); const res = await getSurveyTemplates(params);
@@ -66,12 +56,34 @@ onMounted(() => {
</script> </script>
<style scoped> <style scoped>
::v-deep .van-tabs__line {
background-color: #70b937;
}
::v-deep .van-tab--active {
color: #000;
font-size: 13px;
}
::v-deep .van-row {
justify-content: space-between;
}
.market { .market {
margin-top: 10px;
padding: 15px 15px 0;
border-radius: 10px;
background: #fff;
.market_title {
color: #000;
font-size: 15px;
}
& > :first-child { & > :first-child {
display: flex; display: flex;
align-items: end; align-items: end;
justify-content: space-between; justify-content: space-between;
margin: 10px 0;
span { span {
color: grey; color: grey;
@@ -93,29 +105,13 @@ onMounted(() => {
text-wrap: nowrap; text-wrap: nowrap;
} }
} }
}
.market_items { .more {
display: flex; margin: 20px auto;
flex-flow: row wrap; color: #000;
justify-content: space-around; font-weight: 400;
font-size: 13px;
& > div { text-align: center;
display: flex;
overflow: hidden;
width: calc(196px / 1.2);
/* height: calc(193px / 1.2); */
margin-bottom: 10px;
border-radius: 10px;
background-color: white;
}
}
.more {
margin: 10px 0;
color: #666;
font-size: 14px;
text-align: center;
}
} }
</style> </style>

View File

@@ -1,20 +1,81 @@
<template> <template>
<van-row :gutter="12"> <div class="">
<van-col v-for="(item, index) in info" :key="index" :span="12" class="market-item"> <div>
<div class="content"> <van-row gutter="20">
<div class="title"> <van-col v-for="(item, index) in info" :key="index" span="11" class="market-item">
<span>{{ item.title }}</span> <div class="content">
<img <div class="title fw-bold fs-14">
src="https://files.axshare.com/gsc/DR6075/63/4d/77/634d77293a4d41d1b3d145974a8fb6a7/images/首页_1/u42.svg" <div class="flex align-center">
/> <svg
</div> t="1741943948491"
<div class="desc"> class="icon"
<span>引用{{ item.quote_nums }}</span> | viewBox="0 0 1024 1024"
<span>创建人: {{ item.creator }}</span> version="1.1"
</div> xmlns="http://www.w3.org/2000/svg"
</div> p-id="2494"
</van-col> width="14"
</van-row> height="14"
>
<path
d="M1024 354c0-1.8-0.2-3.6-0.5-5.4V158c0-51.8-42.2-94-94-94H798V30c0-16.5-13.5-30-30-30s-30 13.5-30 30v34H286V30c0-16.5-13.5-30-30-30s-30 13.5-30 30v34H94.5c-51.8 0-94 42.2-94 94v190.6c-0.3 1.8-0.5 3.6-0.5 5.4 0 1.8 0.2 3.6 0.5 5.4V930c0 51.8 42.2 94 94 94h835c51.8 0 94-42.2 94-94V359.4c0.3-1.8 0.5-3.6 0.5-5.4zM94.5 124H226v38c0 16.5 13.5 30 30 30s30-13.5 30-30v-38h452v38c0 16.5 13.5 30 30 30s30-13.5 30-30v-38h131.5c18.7 0 34 15.3 34 34v166h-903V158c0-18.7 15.3-34 34-34z m835 840h-835c-18.7 0-34-15.3-34-34V384h903v546c0 18.7-15.3 34-34 34z"
fill="#03B03C"
p-id="2495"
/>
<path
d="M697.3 511.6L444.1 764.8 326.7 647.4c-11.7-11.7-30.8-11.7-42.4 0-11.7 11.7-11.7 30.8 0 42.4l138.6 138.6c7.6 7.6 18.3 10.2 28.1 8 0.2 0 0.4-0.1 0.6-0.1 5.1-1.3 9.8-3.9 13.8-7.8L739.7 554c11.7-11.7 11.7-30.8 0-42.4-11.7-11.7-30.8-11.7-42.4 0z"
fill="#03B03C"
p-id="2496"
/>
</svg>
<p class="title_con">{{ item.title }}</p>
</div>
<svg
t="1741944281591"
class="icon"
viewBox="0 0 1024 1024"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
p-id="3990"
width="16"
height="16"
>
<path
d="M607.897867 768.043004c-17.717453 0-31.994625-14.277171-31.994625-31.994625L575.903242 383.935495c0-17.717453 14.277171-31.994625 31.994625-31.994625s31.994625 14.277171 31.994625 31.994625l0 351.94087C639.892491 753.593818 625.61532 768.043004 607.897867 768.043004z"
fill="#d81e06"
p-id="3991"
/>
<path
d="M415.930119 768.043004c-17.717453 0-31.994625-14.277171-31.994625-31.994625L383.935495 383.935495c0-17.717453 14.277171-31.994625 31.994625-31.994625 17.717453 0 31.994625 14.277171 31.994625 31.994625l0 351.94087C447.924744 753.593818 433.647573 768.043004 415.930119 768.043004z"
fill="#d81e06"
p-id="3992"
/>
<path
d="M928.016126 223.962372l-159.973123 0L768.043004 159.973123c0-52.980346-42.659499-95.983874-95.295817-95.983874L351.94087 63.989249c-52.980346 0-95.983874 43.003528-95.983874 95.983874l0 63.989249-159.973123 0c-17.717453 0-31.994625 14.277171-31.994625 31.994625s14.277171 31.994625 31.994625 31.994625l832.032253 0c17.717453 0 31.994625-14.277171 31.994625-31.994625S945.73358 223.962372 928.016126 223.962372zM319.946246 159.973123c0-17.545439 14.449185-31.994625 31.994625-31.994625l320.806316 0c17.545439 0 31.306568 14.105157 31.306568 31.994625l0 63.989249L319.946246 223.962372 319.946246 159.973123 319.946246 159.973123z"
fill="#d81e06"
p-id="3993"
/>
<path
d="M736.048379 960.010751 288.123635 960.010751c-52.980346 0-95.983874-43.003528-95.983874-95.983874L192.139761 383.591466c0-17.717453 14.277171-31.994625 31.994625-31.994625s31.994625 14.277171 31.994625 31.994625l0 480.435411c0 17.717453 14.449185 31.994625 31.994625 31.994625l448.096758 0c17.717453 0 31.994625-14.277171 31.994625-31.994625L768.215018 384.795565c0-17.717453 14.277171-31.994625 31.994625-31.994625s31.994625 14.277171 31.994625 31.994625l0 479.231312C832.032253 916.835209 789.028725 960.010751 736.048379 960.010751z"
fill="#d81e06"
p-id="3994"
/>
</svg>
</div>
<div class="desc flex space-between">
<div>
<p>创建人</p>
<p class="fw-bold">{{ item.created_user }}</p>
</div>
<div>
<p>引用次数</p>
<p class="fw-bold">{{ item.quote_nums }}</p>
</div>
</div>
</div>
</van-col>
</van-row>
</div>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
const { info } = defineProps({ const { info } = defineProps({
@@ -28,19 +89,35 @@ const { info } = defineProps({
<style lang="scss" scoped> <style lang="scss" scoped>
.market-item { .market-item {
//margin-right: 4%;
box-sizing: border-box;
margin-bottom: 12px; margin-bottom: 12px;
padding: 10px;
border-radius: 8px;
background: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
// 偶数项的 margin-right 设置为 0
&:nth-child(even) {
margin-right: 0;
}
.content { .content {
padding: 12px;
border-radius: 8px;
background: #fff;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
.title { .title {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 8px; margin-bottom: 8px;
color: #000;
.title_con {
display: block;
overflow: hidden;
max-width: 100px;
margin-left: 4px;
text-overflow: ellipsis;
white-space: nowrap;
}
img { img {
width: 20px; width: 20px;
@@ -51,6 +128,10 @@ const { info } = defineProps({
.desc { .desc {
color: #666; color: #666;
font-size: 12px; font-size: 12px;
div p:last-child {
color: #000;
}
} }
} }
} }

View File

@@ -19,77 +19,42 @@
</van-field> </van-field>
</van-cell-group> </van-cell-group>
</van-cell-group> </van-cell-group>
<div <div v-if="styleInfo.logo_status && styleInfo.logo_url" class="example-logo" :style="[
v-if="styleInfo.logo_status && styleInfo.logo_url" {
class="example-logo" 'justify-content':
:style="[ styleInfo.logo_site === 1
{ ? 'flex-start'
'justify-content': : styleInfo.logo_site === 2
styleInfo.logo_site === 1 ? 'center'
? 'flex-start' : 'flex-end'
: styleInfo.logo_site === 2 },
? 'center' { 'padding-left': styleInfo.logo_site === 1 ? '20px' : '' },
: 'flex-end' { 'padding-right': styleInfo.logo_site === 3 ? '20px' : '' },
}, { position: styleInfo.head_img_status ? 'absolute' : '' },
{ 'padding-left': styleInfo.logo_site === 1 ? '20px' : '' }, !styleInfo.head_img_status && styleInfo.background_status
{ 'padding-right': styleInfo.logo_site === 3 ? '20px' : '' }, ? `background-color: ${styleInfo.background_color};background-image: url(${styleInfo.background_url})`
{ position: styleInfo.head_img_status ? 'absolute' : '' }, : ''
!styleInfo.head_img_status && styleInfo.background_status ]">
? `background-color: ${styleInfo.background_color};background-image: url(${styleInfo.background_url})`
: ''
]"
>
<img class="logo" :src="styleInfo.logo_url" alt="logo" /> <img class="logo" :src="styleInfo.logo_url" alt="logo" />
</div> </div>
<!-- 问题 --> <!-- 问题 -->
<div <div class="questions" :style="`min-height: ${styleInfo.head_img_status ? 'calc(100% - 240px)' : '100%'};${styleInfo.background_status
class="questions" ? `background-color: ${styleInfo.background_color};background-image: url(${styleInfo.background_url})`
:style="`min-height: ${styleInfo.head_img_status ? 'calc(100% - 240px)' : '100%'};${ : ''
styleInfo.background_status }`">
? `background-color: ${styleInfo.background_color};background-image: url(${styleInfo.background_url})`
: ''
}`"
>
<!-- 提前终止和正常完成 --> <!-- 提前终止和正常完成 -->
<q-last <q-last v-if="page === pages.length + 1" :code="questionsData.action?.code" :action="questionsData.action"
v-if="page === pages.length + 1" :survey="questionsData.survey" :isAnswer="isAnswer" :isTemplate="isTemplate" />
:code="questionsData.action?.code"
:action="questionsData.action"
:survey="questionsData.survey"
:isAnswer="isAnswer"
:isTemplate="isTemplate"
/>
<!-- 问卷名和描述 --> <!-- 问卷名和描述 -->
<q-first <q-first v-else-if="page === 0" isMobile :title="questionsData?.survey?.title"
v-else-if="page === 0" :desc="questionsData?.survey?.introduction" :questions="questionsData?.questions" :isAnswer="isAnswer"
isMobile :showTitle="styleInfo.is_title" :showDesc="styleInfo.is_introduce" :label="questionsData?.survey?.title" />
:title="questionsData?.survey?.title"
:desc="questionsData?.survey?.introduction"
:questions="questionsData?.questions"
:isAnswer="isAnswer"
:showTitle="styleInfo.is_title"
:showDesc="styleInfo.is_introduce"
:label="questionsData?.survey?.title"
/>
<!-- -mobile --> <!-- -mobile -->
<question <question v-for="question in questions" v-else :id="'questionIndex' + question.question_index"
v-for="question in questions" :key="question.question_index" class="question" :tip="question.tip" :stem="question.stem"
v-else :title="question.title" :error="question.error" :warning="question.warning" :questions="questionsData.questions"
:id="'questionIndex' + question.question_index" :questionType="question.question_type" :questionIndex="question.question_index"
:key="question.question_index" :showTitle="styleInfo.is_question_number && true" isMobile :isAnswer="isAnswer">
class="question"
:tip="question.tip"
:stem="question.stem"
:title="question.title"
:error="question.error"
:warning="question.warning"
:questions="questionsData.questions"
:questionType="question.question_type"
:questionIndex="question.question_index"
:showTitle="styleInfo.is_question_number && true"
isMobile
:isAnswer="isAnswer"
>
<!-- <q-radio--> <!-- <q-radio-->
<!-- v-if="question.question_type === 1"--> <!-- v-if="question.question_type === 1"-->
<!-- :list="question.list"--> <!-- :list="question.list"-->
@@ -105,21 +70,11 @@
<!-- :question="question"--> <!-- :question="question"-->
<!-- />--> <!-- />-->
<!-- 单选题 --> <!-- 单选题 -->
<preview-choice <preview-choice v-if="question.question_type === 1" v-model:answer="question.answer"
v-if="question.question_type === 1" v-model:answerIndex="question.answerIndex" :list="question.list" :config="question.config"
v-model:answer="question.answer" :hideOptions="question.hideOptions" :stem="question.stem" :answerSn="questionsData.answer.sn"
v-model:answerIndex="question.answerIndex" :answerSurveySn="questionsData.answer.survey_sn" :question="question" @previous="previous" @next="next"
:list="question.list" @change-answer="onRelation($event, question)" />
:config="question.config"
:hideOptions="question.hideOptions"
:stem="question.stem"
:answerSn="questionsData.answer.sn"
:answerSurveySn="questionsData.answer.survey_sn"
:question="question"
@previous="previous"
@next="next"
@change-answer="onRelation($event, question)"
/>
<!-- &lt;!&ndash; 多选题 &ndash;&gt;--> <!-- &lt;!&ndash; 多选题 &ndash;&gt;-->
<!-- <q-checkbox--> <!-- <q-checkbox-->
<!-- v-else-if="question.question_type === 2"--> <!-- v-else-if="question.question_type === 2"-->
@@ -147,18 +102,9 @@
<!-- isMobile--> <!-- isMobile-->
<!-- />--> <!-- />-->
<!-- 填空题 --> <!-- 填空题 -->
<preview-completion <preview-completion v-else-if="question.question_type === 4" :config="question.config" :answer="question.answer"
v-else-if="question.question_type === 4" :stem="question.stem" :answerSn="questionsData.answer.sn" :answerSurveySn="questionsData.answer.survey_sn"
:config="question.config" :question="question" @previous="previous" @next="next" @change-answer="onRelation($event, question)" />
:answer="question.answer"
:stem="question.stem"
:answerSn="questionsData.answer.sn"
:answerSurveySn="questionsData.answer.survey_sn"
:question="question"
@previous="previous"
@next="next"
@change-answer="onRelation($event, question)"
/>
<!-- &lt;!&ndash; 打分题 &ndash;&gt;--> <!-- &lt;!&ndash; 打分题 &ndash;&gt;-->
<!-- <q-rate--> <!-- <q-rate-->
<!-- v-else-if="question.question_type === 5"--> <!-- v-else-if="question.question_type === 5"-->
@@ -191,41 +137,18 @@
<!-- isMobile--> <!-- isMobile-->
<!-- />--> <!-- />-->
<!-- 矩阵填空题 --> <!-- 矩阵填空题 -->
<preview-matrix-text <preview-matrix-text v-else-if="question.question_type === 8" v-model:answer="question.answer"
v-else-if="question.question_type === 8" :list="question.list" :config="question.config" :stem="question.stem" :question="question"
v-model:answer="question.answer" @previous="previous" @next="next" @change-answer="onRelation($event, question)" />
:list="question.list"
:config="question.config"
:stem="question.stem"
:question="question"
@previous="previous"
@next="next"
@change-answer="onRelation($event, question)"
/>
<!-- 矩阵单选题 --> <!-- 矩阵单选题 -->
<preview-matrix-radio <preview-matrix-radio v-else-if="question.question_type === 9" v-model:answer="question.answer"
v-else-if="question.question_type === 9" :list="question.list" :config="question.config" :stem="question.stem" :answerSn="questionsData.answer.sn"
v-model:answer="question.answer" :answerSurveySn="questionsData.answer.survey_sn" :question="question"
:list="question.list" @change-answer="onRelation($event, question)" @previous="previous" @next="next" />
:config="question.config"
:stem="question.stem"
:answerSn="questionsData.answer.sn"
:answerSurveySn="questionsData.answer.survey_sn"
:question="question"
@change-answer="onRelation($event, question)"
@previous="previous"
@next="next"
/>
<!-- 矩阵多选题 --> <!-- 矩阵多选题 -->
<preview-matrix-checkbox <preview-matrix-checkbox v-else-if="question.question_type === 10" v-model:answer="question.answer"
v-else-if="question.question_type === 10" :list="question.list" :config="question.config" :question="question" isMobile
v-model:answer="question.answer" @change-answer="onRelation($event, question)" />
:list="question.list"
:config="question.config"
:question="question"
isMobile
@change-answer="onRelation($event, question)"
/>
<!-- &lt;!&ndash; 矩阵打分题 &ndash;&gt;--> <!-- &lt;!&ndash; 矩阵打分题 &ndash;&gt;-->
<!-- <matrix-rate--> <!-- <matrix-rate-->
<!-- v-else-if="question.question_type === 11"--> <!-- v-else-if="question.question_type === 11"-->
@@ -293,14 +216,8 @@
<!-- isMobile--> <!-- isMobile-->
<!-- />--> <!-- />-->
<!-- 文件上传题 --> <!-- 文件上传题 -->
<preview-file-upload <preview-file-upload v-else-if="question.question_type === 18" v-model:answer="question.answer"
v-else-if="question.question_type === 18" :config="question.config" :question="question" isMobile @change-answer="onRelation($event, question)" />
v-model:answer="question.answer"
:config="question.config"
:question="question"
isMobile
@change-answer="onRelation($event, question)"
/>
<!-- &lt;!&ndash; 地理位置题 &ndash;&gt;--> <!-- &lt;!&ndash; 地理位置题 &ndash;&gt;-->
<!-- <q-map--> <!-- <q-map-->
<!-- v-else-if="question.question_type === 19"--> <!-- v-else-if="question.question_type === 19"-->
@@ -459,61 +376,26 @@
<!-- :question="question"--> <!-- :question="question"-->
<!-- />--> <!-- />-->
<!-- &lt;!&ndash; 高级题型-NPS &ndash;&gt;--> <!-- &lt;!&ndash; 高级题型-NPS &ndash;&gt;-->
<preview-n-p-s <preview-n-p-s v-else-if="question.question_type === 106" v-model:answer="question.answer" :isPreview="true"
v-else-if="question.question_type === 106" :title="question.title" :stem="question.stem" :list="question.list" :config="question.config"
v-model:answer="question.answer" :isAnswer="isAnswer" :questionIndex="question.question_index" :label="question.title" :loading="loading"
:isPreview="true" :isTemplate="isTemplate" :showTitle="styleInfo.is_question_number" :question="question" @previous="previous"
:title="question.title" @next="next" @change-answer="onRelation($event, question)" />
:stem="question.stem"
:list="question.list"
:config="question.config"
:isAnswer="isAnswer"
:questionIndex="question.question_index"
:label="question.title"
:loading="loading"
:isTemplate="isTemplate"
:showTitle="styleInfo.is_question_number"
:question="question"
@previous="previous"
@next="next"
@change-answer="onRelation($event, question)"
/>
</question> </question>
<!-- 分页 --> <!-- 分页 -->
<div v-show="showPage" class="footer-page"> <div v-show="showPage" class="footer-page">
<pfe-pagination <pfe-pagination class="pagination" :page="page" :pages="pages.length + 1" :min="styleInfo.is_home ? 0 : 1"
class="pagination" :loading="loading" :showPrevious="styleInfo.is_up_button" :showStart="styleInfo.is_start_button"
:page="page" :startText="styleInfo.start_button_text" :showSubmit="styleInfo.is_submit_button" :submitText="localPageTimer.is_show && localPageTimer.short_time
:pages="pages.length + 1"
:min="styleInfo.is_home ? 0 : 1"
:loading="loading"
:showPrevious="styleInfo.is_up_button"
:showStart="styleInfo.is_start_button"
:startText="styleInfo.start_button_text"
:showSubmit="styleInfo.is_submit_button"
:submitText="
localPageTimer.is_show && localPageTimer.short_time
? `${localPageTimer.short_time}S` ? `${localPageTimer.short_time}S`
: styleInfo.submit_button_text : styleInfo.submit_button_text
" " :buttonTextColor="styleInfo.button_text_color" :buttonColor="styleInfo.button_color" :nextText="localPageTimer.is_show && localPageTimer.short_time
:buttonTextColor="styleInfo.button_text_color"
:buttonColor="styleInfo.button_color"
:nextText="
localPageTimer.is_show && localPageTimer.short_time
? `${localPageTimer.short_time}S` ? `${localPageTimer.short_time}S`
: '' : ''
" " :nextDisabled="localPageTimer.short_time" isMobile @previous="previous" @next="next" />
:nextDisabled="localPageTimer.short_time"
isMobile
@previous="previous"
@next="next"
/>
</div> </div>
<LangTranslate <LangTranslate v-if="isAnswer && styleInfo.is_yip" translate-key="PoweredByDigitalTechnologyCenterYIP"
v-if="isAnswer && styleInfo.is_yip" class="footer" />
translate-key="PoweredByDigitalTechnologyCenterYIP"
class="footer"
/>
</div> </div>
</div> </div>
</template> </template>
@@ -579,7 +461,7 @@ const props = defineProps({
getQuestions(); getQuestions();
// 更新数据 // 更新数据
async function getQuestions() { async function getQuestions () {
let { data } = await AnswerApi.getQuetions({ let { data } = await AnswerApi.getQuetions({
id: route.query.sn, id: route.query.sn,
data: { data: {
@@ -602,14 +484,14 @@ async function getQuestions() {
} }
// 获取 DOM 的内容 // 获取 DOM 的内容
function getDomString(htmlString) { function getDomString (htmlString) {
if (typeof htmlString !== 'string') return; if (typeof htmlString !== 'string') return;
const match = htmlString.match(/<.*>(.*?)<\/.*>/); const match = htmlString.match(/<.*>(.*?)<\/.*>/);
if (match) return match[1]; if (match) return match[1];
} }
// 上一页 // 上一页
async function previous() { async function previous () {
if (prevLoading.value || loading.value) { if (prevLoading.value || loading.value) {
return; return;
} }
@@ -632,7 +514,7 @@ async function previous() {
} }
// 下一页 // 下一页
async function next(callbackBeforePage) { async function next (callbackBeforePage) {
if (prevLoading.value || loading.value) { if (prevLoading.value || loading.value) {
return; return;
} }
@@ -651,7 +533,7 @@ async function next(callbackBeforePage) {
// 开始答题 // 开始答题
// 答题 // 答题
async function answer(callback, callbackBeforePage) { async function answer (callback, callbackBeforePage) {
// console.log(`start input answer`); // console.log(`start input answer`);
// console.log( // console.log(
// `(questions.value.length || !questionsData.value.questions.length)`, // `(questions.value.length || !questionsData.value.questions.length)`,
@@ -692,9 +574,9 @@ async function answer(callback, callbackBeforePage) {
question.error = translatedText.value.ThisIsARequiredQuestion; question.error = translatedText.value.ThisIsARequiredQuestion;
} }
} else if ( } else if (
answer answer &&
&& questionType === 1 questionType === 1 &&
&& Object.keys(answer).findIndex((value) => !answer[value]) !== -1 Object.keys(answer).findIndex((value) => !answer[value]) !== -1
) { ) {
// 单选题 // 单选题
isError = true; isError = true;
@@ -869,47 +751,47 @@ async function answer(callback, callbackBeforePage) {
const { value } = answer; const { value } = answer;
const newValue = value.replace(/\n|\r|\r\n/g, ''); const newValue = value.replace(/\n|\r|\r\n/g, '');
switch (config.text_type) { switch (config.text_type) {
case 3: // 字母 case 3: // 字母
isError isError
= config.include_mark === 1 = config.include_mark === 1
? !/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test( ? !/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test(
newValue newValue
) || !newValue.length ) || !newValue.length
: !/^[a-zA-Z]+$/.test(newValue) || !newValue.length; : !/^[a-zA-Z]+$/.test(newValue) || !newValue.length;
question.error = isError ? translatedText.value.PleaseEnterEnglishLetters : ''; question.error = isError ? translatedText.value.PleaseEnterEnglishLetters : '';
break; break;
case 4: // 中文 case 4: // 中文
isError isError
= config.include_mark === 1 = config.include_mark === 1
? !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|[·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]])+$/.test( ? !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|[·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]])+$/.test(
newValue newValue
) || !newValue.length ) || !newValue.length
: !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/.test( : !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/.test(
newValue newValue
) || !newValue.length; ) || !newValue.length;
question.error = isError ? translatedText.value.PleaseEnterChineseWords : ''; question.error = isError ? translatedText.value.PleaseEnterChineseWords : '';
break; break;
// 邮箱 // 邮箱
case 5: case 5:
isError isError
= !/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test( = !/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
value value
); );
question.error = isError ? translatedText.value.PleaseEnterACorrectEmail : ''; question.error = isError ? translatedText.value.PleaseEnterACorrectEmail : '';
break; break;
case 6: // 手机号 case 6: // 手机号
isError = !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value); isError = !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value);
question.error = isError ? translatedText.value.PleaseEnterACorrectPhone : ''; question.error = isError ? translatedText.value.PleaseEnterACorrectPhone : '';
break; break;
case 7: // 身份证号 case 7: // 身份证号
isError isError
= !/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test( = !/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test(
value value
); );
question.error = isError ? translatedText.value.PleaseEnterACorrectID : ''; question.error = isError ? translatedText.value.PleaseEnterACorrectID : '';
break; break;
default: default:
break; break;
} }
if (!isError && value.length < config.min && ![1, 2].includes(config.text_type)) { if (!isError && value.length < config.min && ![1, 2].includes(config.text_type)) {
isError = true; isError = true;
@@ -921,63 +803,114 @@ async function answer(callback, callbackBeforePage) {
Object.keys(answer).forEach((key) => { Object.keys(answer).forEach((key) => {
const value = answer[key]; const value = answer[key];
switch (config.text_type) { switch (config.text_type) {
case 3: // 字母 case 3: // 字母
if ( isError =
!/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test( config.include_mark === 1
value ? !/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test(
) newValue
) { ) || !newValue.length
question.error = translatedText.value.PleaseEnterEnglishLetters; : !/^[a-zA-Z]+$/.test(newValue) || !newValue.length;
} question.error = isError ? translatedText.value.PleaseEnterEnglishLetters : '';
break; break;
case 4: // 中文 case 4: // 中文
if ( isError =
!/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|[·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]])+$/.test( config.include_mark === 1
value ? !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|[·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]])+$/.test(
) newValue
) { ) || !newValue.length
question.error = translatedText.value.PleaseEnterChineseWords; : !/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])+$/.test(
} newValue
break; ) || !newValue.length;
case 5: // 邮箱 question.error = isError ? translatedText.value.PleaseEnterChineseWords : '';
if ( break;
!/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test( case 5: // 邮箱
value isError =
) !/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
) { value
question.error = translatedText.value.PleaseEnterACorrectEmail; );
} question.error = isError ? translatedText.value.PleaseEnterACorrectEmail : '';
break; break;
case 6: // 手机号 case 6: // 手机号
if (!/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value)) { isError = !/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value);
question.error = translatedText.value.PleaseEnterACorrectPhone; question.error = isError ? translatedText.value.PleaseEnterACorrectPhone : '';
} break;
break; case 7: // 身份证号
case 7: // 身份证号 isError =
if ( !/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test(
!/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test( value
value );
) question.error = isError ? translatedText.value.PleaseEnterACorrectID : '';
) { break;
question.error = translatedText.value.PleaseEnterACorrectID; default:
} break;
break;
default:
break;
} }
if (!question.error && value.length < config.min && ![1, 2].includes(config.text_type)) { if (!isError && value.length < config.min && ![1, 2].includes(config.text_type)) {
isError = true;
question.error = translatedText.value.PleaseEnterMoreThanOneCharacters(config.min); question.error = translatedText.value.PleaseEnterMoreThanOneCharacters(config.min);
} }
}); } else if (answer && questionType === 8) {
if (question.error) isError = true; // 矩阵填空题
} else if (questionType === 27 && question.error) { question.error = '';
// 多项填空题 Object.keys(answer).forEach((key) => {
isError = true; const value = answer[key];
} else { switch (config.text_type) {
question.error = ''; case 3: // 字母
} if (
return isError; !/^[a-zA-Z·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]]+$/.test(
}); value
)
) {
question.error = translatedText.value.PleaseEnterEnglishLetters;
}
break;
case 4: // 中文
if (
!/^(?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|[·~@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、`~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]])+$/.test(
value
)
) {
question.error = translatedText.value.PleaseEnterChineseWords;
}
break;
case 5: // 邮箱
if (
!/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(
value
)
) {
question.error = translatedText.value.PleaseEnterACorrectEmail;
}
break;
case 6: // 手机号
if (!/^(?:(?:\+|00)86)?1[3-9]\d{9}$/.test(value)) {
question.error = translatedText.value.PleaseEnterACorrectPhone;
}
break;
case 7: // 身份证号
if (
!/^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/.test(
value
)
) {
question.error = translatedText.value.PleaseEnterACorrectID;
}
break;
default:
break;
}
if (!question.error && value.length < config.min && ![1, 2].includes(config.text_type)) {
question.error = translatedText.value.PleaseEnterMoreThanOneCharacters(config.min);
}
});
if (question.error) isError = true;
} else if (questionType === 27 && question.error) {
// 多项填空题
isError = true;
} else {
question.error = '';
}
return isError;
});
if (!errors.length) { if (!errors.length) {
// 质量控制 // 质量控制
const question = questions.value.find((question) => { const question = questions.value.find((question) => {
@@ -1214,7 +1147,7 @@ async function answer(callback, callbackBeforePage) {
} }
// 选项隐藏 // 选项隐藏
function hideOptions(hide) { function hideOptions (hide) {
const questionIndex = hide?.question_index; const questionIndex = hide?.question_index;
if (questionIndex) { if (questionIndex) {
const qustion = questionsData.value.questions.find( const qustion = questionsData.value.questions.find(
@@ -1225,7 +1158,7 @@ function hideOptions(hide) {
} }
// 更新答案 // 更新答案
function updateAnswer(auto) { function updateAnswer (auto) {
if (auto) { if (auto) {
auto.forEach((autoItem) => { auto.forEach((autoItem) => {
const question = questionsData.value.questions.find( const question = questionsData.value.questions.find(
@@ -1249,7 +1182,7 @@ function updateAnswer(auto) {
} }
// 如果有结束跳转,则判断是否需要立即跳转 // 如果有结束跳转,则判断是否需要立即跳转
function jumpImmediately() { function jumpImmediately () {
// 2000 // 2000
const code = questionsData.value.action?.code; const code = questionsData.value.action?.code;
// 检测是否是最后一页 // 检测是否是最后一页
@@ -1303,7 +1236,7 @@ function jumpImmediately() {
} }
// // 关联引用 // // 关联引用
function onRelation( function onRelation (
{ options, value, list }, { options, value, list },
{ question_type: questionType, question_index: questionIndex, related, answer } { question_type: questionType, question_index: questionIndex, related, answer }
) { ) {

View File

@@ -7,7 +7,8 @@
</template> </template>
<script> <script>
import { defineComponent, ref, computed } from 'vue'; import { useRoute, useRouter } from 'vue-router'; import { defineComponent, ref, computed } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import { storeToRefs } from 'pinia'; import { storeToRefs } from 'pinia';
// import { useStore } from 'vuex'; // import { useStore } from 'vuex';
// import {} from "@/stores/counter.js" // import {} from "@/stores/counter.js"

View File

@@ -2,7 +2,10 @@
<div class="base"> <div class="base">
<div ref="target" class="container-viewer-1-"></div> <div ref="target" class="container-viewer-1-"></div>
<div ref="elCart" style="position: absolute; right: 80px; bottom: 80px"></div> <div ref="elCart" style="position: absolute; right: 80px; bottom: 80px"></div>
<div v-if="spinning" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-color: #fff"> <div
v-if="spinning"
style="position: absolute; top: 0; right: 0; bottom: 0; left: 0; background-color: #fff"
>
<a-spin style="position: absolute; top: 50%; left: 50%" /> <a-spin style="position: absolute; top: 50%; left: 50%" />
</div> </div>
<div v-if="freezeRotY" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0"></div> <div v-if="freezeRotY" style="position: absolute; top: 0; right: 0; bottom: 0; left: 0"></div>
@@ -163,7 +166,7 @@ export default {
// const isHall = this.shopData.type === 'hall'; // const isHall = this.shopData.type === 'hall';
// this.useJoyStick = this.shopData.type == "hall"; // this.useJoyStick = this.shopData.type == "hall";
// useJoyStick: isHall && this.shopData?.hall.useRoaming // #20230802 // useJoyStick: isHall && this.shopData?.hall.useRoaming // #20230802
/* useJoyStick: isHall; *//* && isHallCanWalk(this.shopData.hall); */ // #20230811 /* useJoyStick: isHall; */ /* && isHallCanWalk(this.shopData.hall); */ // #20230811
const sd = JSON.parse(JSON.stringify(this.shopData || {})); const sd = JSON.parse(JSON.stringify(this.shopData || {}));
sd.shelves.forEach((shelve) => { sd.shelves.forEach((shelve) => {

View File

@@ -370,13 +370,15 @@ export default defineComponent({
// } // }
// 打分组件样式 start // 打分组件样式 start
:deep(.num-item), // 旧的组件的样式 :deep(.num-item),
// 旧的组件的样式
:deep(.rate-wrapper .number-item .content) { :deep(.rate-wrapper .number-item .content) {
border-color: v-bind(answercolor) !important; border-color: v-bind(answercolor) !important;
color: v-bind(answercolor) !important; color: v-bind(answercolor) !important;
} }
:deep(.num-item-active), // 旧的组件的样式 :deep(.num-item-active),
// 旧的组件的样式
:deep(.rate-wrapper .number-item.active .content) { :deep(.rate-wrapper .number-item.active .content) {
border-color: v-bind(answercolor) !important; border-color: v-bind(answercolor) !important;
background-color: v-bind(answercolor) !important; background-color: v-bind(answercolor) !important;
@@ -392,7 +394,8 @@ export default defineComponent({
border-color: v-bind(answercolor) !important; border-color: v-bind(answercolor) !important;
} }
:deep(.ant-slider-track), // 旧的组件的样式 :deep(.ant-slider-track),
// 旧的组件的样式
:deep(.slider-bar::before) { :deep(.slider-bar::before) {
background-color: v-bind(answercolor) !important; background-color: v-bind(answercolor) !important;
} }

View File

@@ -5,9 +5,11 @@
<!-- <van-cell-group v-if="status === 1" inset style="padding-top: 15px"> --> <!-- <van-cell-group v-if="status === 1" inset style="padding-top: 15px"> -->
<van-cell-group inset style="padding-top: 15px"> <van-cell-group inset style="padding-top: 15px">
<div> <div>
<img width="100%" <img
width="100%"
src="https://files.axshare.com/gsc/DR6075/44/1a/03/441a03a8b1004755a7a392b311acf97f/images/%E6%8A%95%E6%94%BE/u14.jpg?pageId=2f9ba10c-92b8-4c9b-b40b-04e65a0b4333" src="https://files.axshare.com/gsc/DR6075/44/1a/03/441a03a8b1004755a7a392b311acf97f/images/%E6%8A%95%E6%94%BE/u14.jpg?pageId=2f9ba10c-92b8-4c9b-b40b-04e65a0b4333"
alt="" /> alt=""
/>
</div> </div>
<div class="qrcode"> <div class="qrcode">
<img :src="publishInfo.img_url" alt="" width="100px" height="100px" /> <img :src="publishInfo.img_url" alt="" width="100px" height="100px" />
@@ -109,7 +111,7 @@ type OperateItem = (typeof operateList)[0];
// } // }
// } // }
function getCode () { function getCode() {
publishInfo.value.img_url publishInfo.value.img_url
= 'https://test-cxp-pubcos.yili.com/uat-yls//survey-api/publish/202503130938138261340.png'; = 'https://test-cxp-pubcos.yili.com/uat-yls//survey-api/publish/202503130938138261340.png';
publishInfo.value.url = `${configUrl.proxyDomain}/publish?sn=${sn && sn !== undefined ? sn : ''}`; publishInfo.value.url = `${configUrl.proxyDomain}/publish?sn=${sn && sn !== undefined ? sn : ''}`;
@@ -163,7 +165,7 @@ const handleBack = () => {
onBeforeUnmount(() => { onBeforeUnmount(() => {
(window as any).onAndroidBack = null; (window as any).onAndroidBack = null;
}); });
onMounted(async () => { onMounted(async() => {
// 为window添加返回处理方法 // 为window添加返回处理方法
(window as any).onAndroidBack = () => { (window as any).onAndroidBack = () => {
// 设置禁止原生返回如果有appBridge对象 // 设置禁止原生返回如果有appBridge对象
@@ -172,34 +174,34 @@ onMounted(async () => {
} }
return handleBack(); return handleBack();
}; };
// 如果有appBridge设置返回按钮动作 // 如果有appBridge设置返回按钮动作
if ((window as any).appBridge && (window as any).appBridge.setBackButtonAction) { if ((window as any).appBridge && (window as any).appBridge.setBackButtonAction) {
(window as any).appBridge.setBackButtonAction(() => { (window as any).appBridge.setBackButtonAction(() => {
return handleBack(); return handleBack();
}); });
} }
// fetchInfo(); // fetchInfo();
getCode(); getCode();
}); });
const operateBtn = (item: OperateItem) => { const operateBtn = (item: OperateItem) => {
switch (item.type) { switch (item.type) {
case 'shareLink': case 'shareLink':
shareLink(); shareLink();
break; break;
case 'copyLink': case 'copyLink':
copyLink(); copyLink();
break; break;
case 'qrCode': case 'qrCode':
downLoadImg(); downLoadImg();
break; break;
default: default:
break; break;
} }
}; };
// 复制链接 // 复制链接
function copyLink () { function copyLink() {
const input = document.createElement('input'); const input = document.createElement('input');
input.value = publishInfo.value.url; input.value = publishInfo.value.url;
document.body.appendChild(input); document.body.appendChild(input);
@@ -209,7 +211,7 @@ function copyLink () {
showToast('复制成功'); showToast('复制成功');
} }
// 分享链接 // 分享链接
function shareLink () { function shareLink() {
const params = { const params = {
type: 'shareToWx', type: 'shareToWx',
title: publishInfo.value.download_url.title, title: publishInfo.value.download_url.title,
@@ -218,13 +220,12 @@ function shareLink () {
webpageUrl: publishInfo.value.url, webpageUrl: publishInfo.value.url,
scene: 0 // 朋友圈1 微信好友0 scene: 0 // 朋友圈1 微信好友0
}; };
console.log('shareUrl', publishInfo.value.url) console.log('shareUrl', publishInfo.value.url);
appBridge.shareToWeChat(params, () => { appBridge.shareToWeChat(params, () => {});
});
} }
// 下载二维码 // 下载二维码
function downLoadImg () { function downLoadImg() {
const { title, url } = publishInfo.value.download_url; const { title, url } = publishInfo.value.download_url;
if (utils.getSessionStorage('xToken')) { if (utils.getSessionStorage('xToken')) {
appBridge.save2Album(url, () => { appBridge.save2Album(url, () => {

View File

@@ -6,13 +6,14 @@
</template> </template>
<script setup> <script setup>
const successImg = 'https://files.axshare.com/gsc/DR6075/c7/5a/53/c75a534148d349f1bb8e185629f784ac/images/%E9%A2%84%E8%A7%88/u123.png?pageId=18fb9d8a-b9b7-465f-9bd7-625b1b78f72e'; const successImg
= 'https://files.axshare.com/gsc/DR6075/c7/5a/53/c75a534148d349f1bb8e185629f784ac/images/%E9%A2%84%E8%A7%88/u123.png?pageId=18fb9d8a-b9b7-465f-9bd7-625b1b78f72e';
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.survey-submit{ .survey-submit {
display: flex; display: flex;
flex-flow: column nowrap; flex-flow: column nowrap;
align-items: center; align-items: center;
} }
</style> </style>

View File

@@ -53,8 +53,8 @@ export default defineConfig(({ mode }) => {
plugins: [ plugins: [
vue(), vue(),
vueJsx(), vueJsx(),
AutoImport({ resolvers: [VantResolver(),ElementPlusResolver()] }), AutoImport({ resolvers: [VantResolver(), ElementPlusResolver()] }),
Components({ resolvers: [VantResolver(),ElementPlusResolver()] }) Components({ resolvers: [VantResolver(), ElementPlusResolver()] })
], ],
resolve: { resolve: {
alias: { alias: {

File diff suppressed because one or more lines are too long