Merge branch 'feature-1210-matirx' into feature-creative-center-v2
This commit is contained in:
13
src/App.vue
13
src/App.vue
@@ -79,17 +79,22 @@ div {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.scrollbar {
|
||||
.scrollbar,.ant-table-body,.vxe-table--body-wrapper {
|
||||
&::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
height: 8px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background-color: #e2e5e6;
|
||||
background-color: #D8D8D8;
|
||||
border-radius: 10px;
|
||||
}
|
||||
}
|
||||
.ant-table-hide-scrollbar {
|
||||
padding-right: 6px !important;
|
||||
overflow-y: hidden !important;
|
||||
}
|
||||
@media screen and (min-width: 600px) {
|
||||
html,
|
||||
body {
|
||||
|
||||
@@ -475,7 +475,7 @@ onMounted(() => {
|
||||
// width: 88px;
|
||||
height: 32px;
|
||||
line-height: 18px;
|
||||
border-radius: 6px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
.share-button {
|
||||
margin-left: 10px;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 保存问卷模版
|
||||
// 保存问卷模板
|
||||
export function saveTemplate(sn, data) {
|
||||
return request({
|
||||
url: `/console/surveys/${sn}/templates`,
|
||||
@@ -59,7 +59,7 @@ export function moveSurvey(data) {
|
||||
});
|
||||
}
|
||||
|
||||
/* 移动模版分组 */
|
||||
/* 移动模板分组 */
|
||||
export function moveTemplate(sn, id) {
|
||||
return request({
|
||||
method: "PATCH",
|
||||
@@ -80,7 +80,7 @@ export function getTemplateList(params) {
|
||||
});
|
||||
}
|
||||
|
||||
/* 模版重命名 */
|
||||
/* 模板重命名 */
|
||||
export function renameTemplate(sn, data) {
|
||||
return request({
|
||||
method: 'patch',
|
||||
@@ -89,7 +89,7 @@ export function renameTemplate(sn, data) {
|
||||
})
|
||||
}
|
||||
|
||||
/* 删除模版 */
|
||||
/* 删除模板 */
|
||||
|
||||
export function delTemplate(sn) {
|
||||
return request({
|
||||
|
||||
@@ -243,6 +243,7 @@ function menusStatusToFalsefather(menus) {
|
||||
&-main {
|
||||
width: 220px;
|
||||
height: 48px;
|
||||
padding-bottom: 4px;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
@@ -28,7 +28,7 @@ function getPagination() {
|
||||
defaultPageSize: 10,
|
||||
pageSize: 10,
|
||||
pageSizeOptions: ["10", "20", "30"],
|
||||
showQuickJumper: true,
|
||||
// showQuickJumper: true,
|
||||
showSizeChanger: true,
|
||||
showTotal: (total) => `共 ${total} 条`,
|
||||
total: 0,
|
||||
@@ -86,8 +86,11 @@ export default {
|
||||
<style scoped lang="less">
|
||||
.pagination {
|
||||
display: inline-flex;
|
||||
justify-content: flex-end;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
border-radius: 0 0 2px 2px;
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -54,6 +54,36 @@
|
||||
<div class="content unicode" style="display: block;">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">下拉</div>
|
||||
<div class="code-name">&#xe80c;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">电脑</div>
|
||||
<div class="code-name">&#xe80d;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">手机</div>
|
||||
<div class="code-name">&#xe80e;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">展开1</div>
|
||||
<div class="code-name">&#xe80b;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">收起</div>
|
||||
<div class="code-name">&#xe80a;</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont"></span>
|
||||
<div class="name">文件 (1)</div>
|
||||
@@ -2922,9 +2952,9 @@
|
||||
<pre><code class="language-css"
|
||||
>@font-face {
|
||||
font-family: 'iconfont';
|
||||
src: url('iconfont.woff2?t=1669789588035') format('woff2'),
|
||||
url('iconfont.woff?t=1669789588035') format('woff'),
|
||||
url('iconfont.ttf?t=1669789588035') format('truetype');
|
||||
src: url('iconfont.woff2?t=1670306788389') format('woff2'),
|
||||
url('iconfont.woff?t=1670306788389') format('woff'),
|
||||
url('iconfont.ttf?t=1670306788389') format('truetype');
|
||||
}
|
||||
</code></pre>
|
||||
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
|
||||
@@ -2950,6 +2980,51 @@
|
||||
<div class="content font-class">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-xiala1"></span>
|
||||
<div class="name">
|
||||
下拉
|
||||
</div>
|
||||
<div class="code-name">.icon-xiala1
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-diannao1"></span>
|
||||
<div class="name">
|
||||
电脑
|
||||
</div>
|
||||
<div class="code-name">.icon-diannao1
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-shouji1"></span>
|
||||
<div class="name">
|
||||
手机
|
||||
</div>
|
||||
<div class="code-name">.icon-shouji1
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-zhankai11"></span>
|
||||
<div class="name">
|
||||
展开1
|
||||
</div>
|
||||
<div class="code-name">.icon-zhankai11
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-shouqi3"></span>
|
||||
<div class="name">
|
||||
收起
|
||||
</div>
|
||||
<div class="code-name">.icon-shouqi3
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<span class="icon iconfont icon-a-wenjian1"></span>
|
||||
<div class="name">
|
||||
@@ -7252,6 +7327,46 @@
|
||||
<div class="content symbol">
|
||||
<ul class="icon_lists dib-box">
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-xiala1"></use>
|
||||
</svg>
|
||||
<div class="name">下拉</div>
|
||||
<div class="code-name">#icon-xiala1</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-diannao1"></use>
|
||||
</svg>
|
||||
<div class="name">电脑</div>
|
||||
<div class="code-name">#icon-diannao1</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-shouji1"></use>
|
||||
</svg>
|
||||
<div class="name">手机</div>
|
||||
<div class="code-name">#icon-shouji1</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-zhankai11"></use>
|
||||
</svg>
|
||||
<div class="name">展开1</div>
|
||||
<div class="code-name">#icon-zhankai11</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-shouqi3"></use>
|
||||
</svg>
|
||||
<div class="name">收起</div>
|
||||
<div class="code-name">#icon-shouqi3</div>
|
||||
</li>
|
||||
|
||||
<li class="dib">
|
||||
<svg class="icon svg-icon" aria-hidden="true">
|
||||
<use xlink:href="#icon-a-wenjian1"></use>
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
@font-face {
|
||||
font-family: "iconfont"; /* Project id 3121635 */
|
||||
src: url('iconfont.woff2?t=1669789588035') format('woff2'),
|
||||
url('iconfont.woff?t=1669789588035') format('woff'),
|
||||
url('iconfont.ttf?t=1669789588035') format('truetype');
|
||||
src: url('iconfont.woff2?t=1670306788389') format('woff2'),
|
||||
url('iconfont.woff?t=1670306788389') format('woff'),
|
||||
url('iconfont.ttf?t=1670306788389') format('truetype');
|
||||
}
|
||||
|
||||
.iconfont {
|
||||
@@ -13,6 +13,26 @@
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
.icon-xiala1:before {
|
||||
content: "\e80c";
|
||||
}
|
||||
|
||||
.icon-diannao1:before {
|
||||
content: "\e80d";
|
||||
}
|
||||
|
||||
.icon-shouji1:before {
|
||||
content: "\e80e";
|
||||
}
|
||||
|
||||
.icon-zhankai11:before {
|
||||
content: "\e80b";
|
||||
}
|
||||
|
||||
.icon-shouqi3:before {
|
||||
content: "\e80a";
|
||||
}
|
||||
|
||||
.icon-a-wenjian1:before {
|
||||
content: "\e60e";
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -5,6 +5,41 @@
|
||||
"css_prefix_text": "icon-",
|
||||
"description": "调研猩球前台icon",
|
||||
"glyphs": [
|
||||
{
|
||||
"icon_id": "33251082",
|
||||
"name": "下拉",
|
||||
"font_class": "xiala1",
|
||||
"unicode": "e80c",
|
||||
"unicode_decimal": 59404
|
||||
},
|
||||
{
|
||||
"icon_id": "33251122",
|
||||
"name": "电脑",
|
||||
"font_class": "diannao1",
|
||||
"unicode": "e80d",
|
||||
"unicode_decimal": 59405
|
||||
},
|
||||
{
|
||||
"icon_id": "33251123",
|
||||
"name": "手机",
|
||||
"font_class": "shouji1",
|
||||
"unicode": "e80e",
|
||||
"unicode_decimal": 59406
|
||||
},
|
||||
{
|
||||
"icon_id": "33174927",
|
||||
"name": "展开1",
|
||||
"font_class": "zhankai11",
|
||||
"unicode": "e80b",
|
||||
"unicode_decimal": 59403
|
||||
},
|
||||
{
|
||||
"icon_id": "33170963",
|
||||
"name": "收起",
|
||||
"font_class": "shouqi3",
|
||||
"unicode": "e80a",
|
||||
"unicode_decimal": 59402
|
||||
},
|
||||
{
|
||||
"icon_id": "33133939",
|
||||
"name": "文件 (1)",
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -45,6 +45,9 @@
|
||||
background: #FFFFFF;
|
||||
box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2);
|
||||
border-radius: 6px;
|
||||
.ant-btn {
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.ant-modal-header {
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
{ 'padding-left': styleInfo.logo_site === 1 ? '20px' : '' },
|
||||
{ 'padding-right': styleInfo.logo_site === 3 ? '20px' : '' },
|
||||
{ position: styleInfo.head_img_status ? 'absolute' : '' },
|
||||
styleInfo.background_status
|
||||
? `background-color: ${styleInfo.background_color};background-image: url(${styleInfo.background_url})`
|
||||
: ''
|
||||
]"
|
||||
>
|
||||
<img class="logo" :src="styleInfo.logo_url" alt="logo" />
|
||||
@@ -435,6 +438,7 @@ export default defineComponent({ ...questions });
|
||||
.container {
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
position: relative;
|
||||
|
||||
.progress-bar {
|
||||
top: 0;
|
||||
@@ -455,7 +459,7 @@ export default defineComponent({ ...questions });
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
top: 0;
|
||||
margin-top: 24px;
|
||||
padding-top: 24px;
|
||||
.logo {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
|
||||
@@ -235,6 +235,35 @@ export default defineComponent({
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if(this.config.is_disable_lines_same) {
|
||||
|
||||
var arr = this.row.slice(0, this.rowIndex + 1);
|
||||
|
||||
var res = arr.reduce((ctx, cur) => {
|
||||
if(!cur.value) {
|
||||
ctx.len = 0;
|
||||
return ctx;
|
||||
}
|
||||
if(ctx.lastVal == cur.value) {
|
||||
ctx.len++;
|
||||
}
|
||||
else{
|
||||
ctx.len = 0;
|
||||
}
|
||||
if(ctx.len >= this.config.disable_lines_same) {
|
||||
ctx.ok = false;
|
||||
}
|
||||
ctx.lastVal = cur.value
|
||||
return ctx;
|
||||
}, { lastVal: "", len: 0, ok: true });
|
||||
|
||||
if(!res.ok) {
|
||||
message.error(`您在每一题的态度与观点均对我们有非常重要的意义,请您务必仔细阅读题目后回答,连续一致的答案可能会导致整个问卷的作废,请您重新作答。`);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(this.rowIndex + 1 >= this.row.length){
|
||||
|
||||
@@ -280,8 +280,11 @@ export default defineComponent({
|
||||
width: 126px;
|
||||
height: 126px;
|
||||
border-radius: 10px;
|
||||
object-fit: cover;
|
||||
margin-bottom: 18px;
|
||||
|
||||
:deep(img) {
|
||||
object-fit: cover;
|
||||
}
|
||||
}
|
||||
|
||||
div {
|
||||
@@ -360,26 +363,27 @@ export default defineComponent({
|
||||
width: 160px;
|
||||
|
||||
.img-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: space-around;
|
||||
height: 170px;
|
||||
overflow: auto;
|
||||
|
||||
.img-box {
|
||||
.img {
|
||||
width: 63px;
|
||||
height: 63px;
|
||||
width: 140px;
|
||||
height: 140px;
|
||||
border-radius: 5px;
|
||||
margin-right: 10px;
|
||||
|
||||
:deep(img) {
|
||||
object-fit: cover;
|
||||
}
|
||||
}
|
||||
|
||||
div {
|
||||
width: 63px;
|
||||
width: 140px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
text-align: center;
|
||||
margin-top: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<div class="dataImportStep">
|
||||
<div class="dataImportLeft">1</div>
|
||||
<div class="dataImportRight">
|
||||
<div class="dataImportTop">第一步:下载模版文件</div>
|
||||
<div class="dataImportTop">第一步:下载模板文件</div>
|
||||
<div class="dataImportBtm">
|
||||
<a-button type="dashed" @click="downFile">
|
||||
<template #icon><DownloadOutlined /></template>
|
||||
@@ -345,12 +345,23 @@ watch(
|
||||
if (nval) {
|
||||
console.log('exportInfo', exportInfo)
|
||||
await getSurveysHead()
|
||||
selectAll()
|
||||
// selectAll()
|
||||
selectInitialize()
|
||||
} else {
|
||||
await store.dispatch('dataFilter/exportInfo', { flag: false, sn: null })
|
||||
}
|
||||
}
|
||||
)
|
||||
const selectInitialize = () => {
|
||||
const contains_columns = formState.contains_columns
|
||||
contains_columns.length = 0
|
||||
console.log('answer_columns', answer_columns)
|
||||
answer_columns.value.map((el) => {
|
||||
if(el.value=='sn'||el.value=='publish_type'||el.value=='status'||el.value=='created_at'||el.value=='completed_at'||el.value=='use_time') {
|
||||
contains_columns.push(el.value)
|
||||
}
|
||||
})
|
||||
}
|
||||
const selectAll = () => {
|
||||
const contains_columns = formState.contains_columns
|
||||
contains_columns.length = 0
|
||||
@@ -369,7 +380,7 @@ const getSurveysAnswersDown = async () => {
|
||||
subData.contains_base = subData.contains_base === true ? 1 : 0
|
||||
subData.include_open = subData.include_open === true ? 1 : 0
|
||||
//subData.is_import = subData.is_import===true?1:0
|
||||
|
||||
subData.contains_columns.push('id')
|
||||
subData.sn = sn
|
||||
if (formState.isFilter == '1') {
|
||||
subData = { ...isFilterInfo.value, ...subData }
|
||||
@@ -582,7 +593,7 @@ const getSurveysHead = async () => {
|
||||
dataCount.value = 0
|
||||
versions.value = []
|
||||
const res = await store.dispatch('dataFilter/getSurveysHead', { sn })
|
||||
console.log(res)
|
||||
console.log('res.answer_columns---------------',res)
|
||||
// 版本
|
||||
versions.value = res.filters.versions
|
||||
// 发布方式
|
||||
@@ -592,7 +603,7 @@ const getSurveysHead = async () => {
|
||||
// 筛选条件
|
||||
questions.value = res?.filters?.answer_questions
|
||||
// 作答信息
|
||||
answer_columns.value = res.answer_columns[0].children
|
||||
answer_columns.value = [...res.answer_columns[0].children,...res.answer_columns[1].children]
|
||||
} catch (error) {
|
||||
console.error(error)
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
valueFormat="HH:mm:ss"
|
||||
/> -->
|
||||
<a-range-picker
|
||||
class="timePick"
|
||||
class="timePick custom-date-picker"
|
||||
v-model:value="searchData.answerVal"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
:show-time="{
|
||||
@@ -107,7 +107,7 @@
|
||||
valueFormat="HH:mm:ss"
|
||||
/> -->
|
||||
<a-range-picker
|
||||
class="timePick"
|
||||
class="timePick custom-date-picker"
|
||||
v-model:value="searchData.subTimeVal"
|
||||
format="YYYY-MM-DD HH:mm:ss"
|
||||
:show-time="{
|
||||
@@ -165,7 +165,7 @@
|
||||
<div class="filterBox">
|
||||
<div class="filterBoxL filerIp">IP地址</div>
|
||||
<div class="filterBoxR flexBox">
|
||||
<a-input v-model:value="searchData.ip" class="lineSelect maxSelect" placeholder="请输入" :maxlength="15" @input="numInput" />
|
||||
<a-input v-model:value="searchData.ip" class="lineSelect maxSelect custom-input" placeholder="请输入" :maxlength="15" @input="numInput" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="filterBox">
|
||||
@@ -1117,6 +1117,7 @@ defineExpose({
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
display: flex;
|
||||
// justify-content: space-between;
|
||||
margin-bottom: 0px;
|
||||
.titleL {
|
||||
}
|
||||
.titleM {
|
||||
|
||||
@@ -3,8 +3,8 @@ import { computed } from 'vue'
|
||||
export default function usePagination(per_page, total,page) {
|
||||
const pagination = computed(() => {
|
||||
return {
|
||||
showQuickJumper: true,
|
||||
showTotal: () => `共${total.value}条`,
|
||||
// showQuickJumper: true,
|
||||
showTotal: () => `共 ${total.value} 条`,
|
||||
showSizeChanger: true,
|
||||
current:page.value,
|
||||
pageSize: per_page.value,
|
||||
|
||||
@@ -1,29 +1,41 @@
|
||||
<template>
|
||||
<div class="dra-result" :style="{height:isNoFull?'509px':'630px'}" v-if="tableData.length!==0">
|
||||
<div class="dra-box" :style="{height:isNoFull?'417px':'538px'}">
|
||||
<div class="dra-box scrollbar" :style="{height:isNoFull?'417px':'538px'}">
|
||||
<template v-for="(item,index) in tableData" :key="index">
|
||||
<div class="dra-title" v-html="item.title"></div>
|
||||
<vxe-table border :data="item.data" max-height="300" size="middle">
|
||||
<!-- 总计表头 -->
|
||||
<vxe-column min-width="85" fixed="left" key="total" type="html" show-overflow="ellipsis" title="" field="option_title">
|
||||
<template #default="{ row }">
|
||||
<a-popover :overlayStyle="{'max-width':'20%'}">
|
||||
<a-tooltip placement="topLeft" :overlayStyle="{'max-width':'20%'}">
|
||||
<template #title>
|
||||
<div class="pop-span"><span v-html="row.option_title"></span></div>
|
||||
</template>
|
||||
<div class="pop-div" style="width:67px;"><span v-html="row.option_title"></span></div>
|
||||
</a-tooltip>
|
||||
<!-- <a-popover :overlayStyle="{'max-width':'20%'}">
|
||||
<template #content>
|
||||
<div class="pop-span"><span v-html="row.option_title"></span></div>
|
||||
</template>
|
||||
<div class="pop-div" style="width:67px;"><span v-html="row.option_title"></span></div>
|
||||
</a-popover>
|
||||
</a-popover> -->
|
||||
</template>
|
||||
</vxe-column>
|
||||
<!-- 其他表头 -->
|
||||
<vxe-colgroup min-width="170" align="center" v-for="(columnsDateItem,columnsDate_index) in item.header" :title="columnsDateItem.title" :key="columnsDate_index">
|
||||
<vxe-colgroup min-width="170" align="left" v-for="(columnsDateItem,columnsDate_index) in item.header" :title="columnsDateItem.title" :key="columnsDate_index">
|
||||
<template #header>
|
||||
<a-popover :overlayStyle="{'max-width':'20%'}">
|
||||
<a-tooltip placement="topLeft" :overlayStyle="{'max-width':'20%'}">
|
||||
<template #title>
|
||||
<div class="pop-span"><span v-html="columnsDateItem.title"></span></div>
|
||||
</template>
|
||||
<div class="pop-div"><span v-html="columnsDateItem.title"></span></div>
|
||||
</a-tooltip>
|
||||
<!-- <a-popover :overlayStyle="{'max-width':'20%'}">
|
||||
<template #content>
|
||||
<div class="pop-span"><span v-html="columnsDateItem.title"></span></div>
|
||||
</template>
|
||||
<div class="pop-div"><span v-html="columnsDateItem.title"></span></div>
|
||||
</a-popover>
|
||||
</a-popover> -->
|
||||
</template>
|
||||
<vxe-column min-width="80" v-for="(children,children_index) in columnsDateItem.child" :key="'children'+children_index" :title="children.title" :field="children.key"></vxe-column>
|
||||
</vxe-colgroup>
|
||||
|
||||
@@ -46,23 +46,23 @@
|
||||
<!-- 总计表头 -->
|
||||
<vxe-column min-width="85" fixed="left" key="total" type="html" show-overflow="ellipsis" title="" field="option_title">
|
||||
<template #default="{ row }">
|
||||
<a-popover :overlayStyle="{'max-width':'20%'}">
|
||||
<template #content>
|
||||
<a-tooltip placement="topLeft" :overlayStyle="{'max-width':'20%'}">
|
||||
<template #title>
|
||||
<div class="pop-span"><span v-html="row.option_title"></span></div>
|
||||
</template>
|
||||
<div class="pop-div" style="width:67px;"><span v-html="row.option_title"></span></div>
|
||||
</a-popover>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
</vxe-column>
|
||||
<!-- 其他表头 -->
|
||||
<vxe-colgroup min-width="170" align="center" v-for="(columnsDateItem,columnsDate_index) in item.header" :title="columnsDateItem.title" :key="columnsDate_index">
|
||||
<vxe-colgroup min-width="170" align="left" v-for="(columnsDateItem,columnsDate_index) in item.header" :title="columnsDateItem.title" :key="columnsDate_index">
|
||||
<template #header>
|
||||
<a-popover :overlayStyle="{'max-width':'20%'}">
|
||||
<template #content>
|
||||
<a-tooltip placement="topLeft" :overlayStyle="{'max-width':'20%'}">
|
||||
<template #title>
|
||||
<div class="pop-span"><span v-html="columnsDateItem.title"></span></div>
|
||||
</template>
|
||||
<div class="pop-div"><span v-html="columnsDateItem.title"></span></div>
|
||||
</a-popover>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
<vxe-column min-width="80" v-for="(children,children_index) in columnsDateItem.child" :key="'children'+children_index" :title="children.title" :field="children.key"></vxe-column>
|
||||
</vxe-colgroup>
|
||||
@@ -83,22 +83,22 @@
|
||||
>
|
||||
<a-table-column fixed="left" key="total" title="" data-index="columnChil0" >
|
||||
<template #default="{ record }">
|
||||
<a-popover :overlayStyle="{'max-width':'25%'}">
|
||||
<template #content>
|
||||
<a-tooltip placement="topLeft" :overlayStyle="{'max-width':'25%'}">
|
||||
<template #title>
|
||||
<div class="pop-span"><span v-html="record.columnChil0"></span></div>
|
||||
</template>
|
||||
<div class="pop-div" style="width:67px"><span v-html="record.columnChil0"></span></div>
|
||||
</a-popover>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
</a-table-column>
|
||||
<a-table-column-group v-for="(columnsDateItem,columnsDate_index) in item.columnsData" :key="columnsDate_index">
|
||||
<template #title>
|
||||
<a-popover :overlayStyle="{'max-width':'25%'}">
|
||||
<template #content>
|
||||
<a-tooltip placement="topLeft" :overlayStyle="{'max-width':'25%'}">
|
||||
<template #title>
|
||||
<div class="pop-span"><span v-html="columnsDateItem.title"></span></div>
|
||||
</template>
|
||||
<div class="pop-div"><span v-html="columnsDateItem.title"></span></div>
|
||||
</a-popover>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
<a-table-column v-for="(children,children_index) in columnsDateItem.children" :key="'children'+children_index" :data-index="children.dataIndex">
|
||||
<template #title><span>{{children.title}}</span></template>
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
:nowPlanVal="nowPlanVal"/>
|
||||
</div>
|
||||
<!-- 交叉分析 -->
|
||||
<div class="anal-container" :class="isNodata?'':'anal-result'" v-if="!isTable" style="margin-top:20px;">
|
||||
<div class="anal-container" :class="isNodata?'':'anal-result'" v-if="!isTable" :style="{marginTop:isNoFull?'20px':''}">
|
||||
<template v-if="!isNodata">
|
||||
<div class="dra-left">
|
||||
<div class="customer">
|
||||
@@ -35,13 +35,13 @@
|
||||
<div class="dra-que" :style="{height:isNoFull?'509px':'630px'}">
|
||||
<div class="dra-title">问题</div>
|
||||
<div class="dra-input custom-input">
|
||||
<a-input placeholder="请输入搜索的问题" v-model:value="draInput">
|
||||
<a-input class="custom-input" placeholder="请输入搜索的问题" v-model:value="draInput">
|
||||
<template #prefix>
|
||||
<i class="icon iconfont"></i>
|
||||
</template>
|
||||
</a-input>
|
||||
</div>
|
||||
<div class="dra-dra" :style="{maxHeight:isNoFull?'370px':'486px'}">
|
||||
<div class="dra-dra scrollbar" :style="{maxHeight:isNoFull?'370px':'486px'}">
|
||||
<draggable :group="{name: 'itxst',pull:'clone',put: false,}" :sort='false' item-key="id"
|
||||
animation="300" :scroll="true" @end="dragEndHandle"
|
||||
v-model="draDataList" :move="onMove">
|
||||
@@ -104,7 +104,7 @@
|
||||
<div class="dra-title">
|
||||
列<a-button class="dra-btn radius-btn" @click="dragColList=[]">重置</a-button>
|
||||
</div>
|
||||
<div class="dra-dra">
|
||||
<div class="dra-dra scrollbar">
|
||||
<div v-if="!dragColList.length" class="desc" :style="{height:isNoFull?'240px':'363px'}">(选项拖入此处)</div>
|
||||
<draggable group="itxst" item-key="id" animation="300" :scroll="true"
|
||||
@end="dragEndHandle" v-model="dragColList"
|
||||
@@ -172,7 +172,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="anal-container" style="margin-top:20px;" v-else>
|
||||
<div class="anal-container" :style="{marginTop:isNoFull?0:'20px'}" v-else>
|
||||
<div class="customer" style="width:100%">
|
||||
<sub-title>分析列表</sub-title>
|
||||
<div class="customer-btn" style="float:fight">
|
||||
@@ -665,7 +665,7 @@ const searchPlan = (e,isType)=>{
|
||||
.anal-container {
|
||||
padding: 24px 32px;
|
||||
background: #fff;
|
||||
box-shadow: 0px 0px 6px 0px rgba(0,0,0,0.1);
|
||||
// box-shadow: 0px 0px 6px 0px rgba(0,0,0,0.1);
|
||||
.dra-left {
|
||||
width: 47%;
|
||||
margin-right: 30px;
|
||||
@@ -873,5 +873,15 @@ const searchPlan = (e,isType)=>{
|
||||
display: inline;
|
||||
}
|
||||
}
|
||||
&::-webkit-scrollbar {
|
||||
width: 4px;
|
||||
height: 4px;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background-color: #D8D8D8;
|
||||
border-radius: 10px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
property="name"
|
||||
@menuCheck="checkHandle"></left-menu-bar>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="right scrollbar">
|
||||
<router-view :key="new Date().getTime()"></router-view>
|
||||
</div>
|
||||
</div>
|
||||
@@ -123,7 +123,7 @@ export default defineComponent({
|
||||
// children: [],
|
||||
// path: '/survey/analyse/pbtoAnalog'
|
||||
// },
|
||||
|
||||
|
||||
]);
|
||||
let { proxy } = getCurrentInstance();
|
||||
const checkHandle = (e) => {
|
||||
@@ -148,6 +148,7 @@ export default defineComponent({
|
||||
padding:24px;
|
||||
.left {
|
||||
// margin-left: 24px;
|
||||
margin-bottom: -4px;
|
||||
&::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
background-color: #ddd;
|
||||
@@ -165,7 +166,7 @@ export default defineComponent({
|
||||
height: calc(100vh - 146px);
|
||||
box-shadow: 0px 0px 6px 0px rgba(0,0,0,0.1);
|
||||
border-radius: 6px 6px 6px 6px;
|
||||
position: relative; z-index: 99;
|
||||
position: relative; z-index: 99;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -10,25 +10,28 @@
|
||||
正在分析 {{imgCount}} 条数据
|
||||
</div>
|
||||
<div class="nanoTitleBoxR">
|
||||
<div class="nanoTitleBoxRFont">创建分析</div>
|
||||
<div>
|
||||
<a-select
|
||||
ref="select"
|
||||
v-model:value="selectVal"
|
||||
style="width: 200px"
|
||||
placeholder="请选择KANO题号"
|
||||
@focus="focus"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-select-option :value="item.question_index" v-for="(item,index) in selectOption" :key="index">{{item.title}}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="operBox" @click="selectClick">
|
||||
<a-button type="primary">
|
||||
<template #icon><BarChartOutlined /></template>
|
||||
分析
|
||||
</a-button>
|
||||
</div>
|
||||
<Space>
|
||||
<div class="nanoTitleBoxRFont">创建分析</div>
|
||||
<div>
|
||||
<a-select
|
||||
ref="select"
|
||||
class="custom-select"
|
||||
v-model:value="selectVal"
|
||||
style="width: 200px"
|
||||
placeholder="请选择KANO题号"
|
||||
@focus="focus"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-select-option :value="item.question_index" v-for="(item,index) in selectOption" :key="index">{{item.title}}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="operBox" @click="selectClick">
|
||||
<a-button type="primary">
|
||||
<template #icon><BarChartOutlined /></template>
|
||||
分析
|
||||
</a-button>
|
||||
</div>
|
||||
</Space>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tableBox" v-if="dataSource.length>0">
|
||||
@@ -87,7 +90,7 @@ import { useRouter, useRoute } from "vue-router";
|
||||
// 引入store
|
||||
import { useStore } from "vuex";
|
||||
// 提示框
|
||||
import { message } from 'ant-design-vue';
|
||||
import { message, Space } from 'ant-design-vue';
|
||||
import SubTitle from "@/views/DataAnalyse/components/SubTitle.vue";
|
||||
const router = useRouter();
|
||||
const store = useStore()
|
||||
@@ -339,6 +342,9 @@ onUnmounted(()=>{
|
||||
.nanoTitleBoxR{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.custom-select :deep(.ant-select-arrow) {
|
||||
top: 48%;
|
||||
}
|
||||
.nanoTitleBoxRFont{
|
||||
margin-right: 10px;
|
||||
color: #434343;
|
||||
|
||||
@@ -88,15 +88,15 @@ const option = {
|
||||
formatter: '{value}% '
|
||||
},
|
||||
},
|
||||
dataZoom: [
|
||||
{
|
||||
type: 'slider',
|
||||
zoomLock:true,
|
||||
start: 0,
|
||||
end: 100,
|
||||
brushSelect:false,
|
||||
}
|
||||
],
|
||||
// dataZoom: [
|
||||
// {
|
||||
// type: 'slider',
|
||||
// zoomLock:true,
|
||||
// start: 0,
|
||||
// end: 100,
|
||||
// brushSelect:false,
|
||||
// }
|
||||
// ],
|
||||
// 系列列表,一个系列即可理解为一个图表,通过 type 决定所展示的图表类型。
|
||||
series: [{
|
||||
name: '太便宜', // 单个图表系列的 name, 和 legend 中的 data 对应
|
||||
|
||||
@@ -3,15 +3,15 @@
|
||||
<div class="analysisResult">
|
||||
<div class="tit">
|
||||
<span>分析结果</span>
|
||||
<a-popover class="poppver" placement="topLeft" arrow-point-at-center>
|
||||
<template #content>
|
||||
<a-tooltip class="poppver" placement="topLeft" arrow-point-at-center :overlayStyle="{'max-width':'630px'}">
|
||||
<template #title>
|
||||
<p>PMC(可采纳最低价格): “太便宜”和“贵”的交点,低于此临界点就会太便宜</p>
|
||||
<p>PME(可采纳的最高价格): “便宜”和“太贵”的交点,高于此临界点就会太贵</p>
|
||||
<p>OPP(最优价格): “太便宜”和“太贵“的交点,最优价格</p>
|
||||
<p>IPP(既不贵也不便宜的价格): “便宜”和“贵”的交点,不太贵和不太便宜基本一样,模棱两可的价格</p>
|
||||
</template>
|
||||
<i class="icon iconfont"></i>
|
||||
</a-popover>
|
||||
</a-tooltip>
|
||||
</div>
|
||||
<div class="arrow">四条折线分别代表四种态度对应的价格认可占比;</div>
|
||||
<div class="arrow">
|
||||
@@ -191,7 +191,12 @@ const getListData = async(type)=>{
|
||||
option.xAxis[0].max = xdate[xdate.length-1]
|
||||
option.xAxis[1].min = Number(xdate[0])
|
||||
option.xAxis[1].max = Number(xdate[xdate.length-1])
|
||||
|
||||
option.dataZoom = option.series[0].data.length>13?[{
|
||||
type: 'slider',
|
||||
start: 0,
|
||||
end: 100,
|
||||
}
|
||||
]: []
|
||||
// option.xAxis.data = xdate
|
||||
// console.log(formateLine(chartData.line1,chartData.xdate))
|
||||
// option.series[0].data = formateLine(chartData.line1,chartData.xdate)
|
||||
|
||||
@@ -19,8 +19,9 @@
|
||||
<div>
|
||||
<a-select
|
||||
ref="select"
|
||||
class="custom-select"
|
||||
v-model:value="questionIndex"
|
||||
style="width: 200px"
|
||||
style="width: 200px;"
|
||||
placeholder="请选择MXD题号"
|
||||
>
|
||||
<a-select-option
|
||||
@@ -35,6 +36,7 @@
|
||||
<div>
|
||||
<a-select
|
||||
ref="select"
|
||||
class="custom-select"
|
||||
v-model:value="analysis_type"
|
||||
style="width: 200px"
|
||||
placeholder="请选择分析方式"
|
||||
@@ -333,7 +335,7 @@ const pagination = computed(() => {
|
||||
current: analysisResults.value?.meta.current_page ?? 1,
|
||||
pageSize: analysisResults.value?.meta.per_page ?? 5,
|
||||
showSizeChanger: true,
|
||||
showQuickJumper: true,
|
||||
// showQuickJumper: true,
|
||||
pageSizeOptions: ["5", "10", "20", "30", "40"],
|
||||
showTotal: (total) => `共 ${total} 条数据`,
|
||||
};
|
||||
@@ -504,6 +506,9 @@ onMounted(() => {
|
||||
.nanoTitleBoxR {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.custom-select :deep(.ant-select-arrow) {
|
||||
top: 48%;
|
||||
}
|
||||
.nanoTitleBoxRFont {
|
||||
margin-right: 10px;
|
||||
color: #434343;
|
||||
|
||||
@@ -10,25 +10,28 @@
|
||||
正在分析 {{analysisNum}} 条数据
|
||||
</div>
|
||||
<div class="nanoTitleBoxR">
|
||||
<div class="nanoTitleBoxRFont">创建分析</div>
|
||||
<div>
|
||||
<a-select
|
||||
ref="select"
|
||||
v-model:value="selectVal"
|
||||
style="width: 200px"
|
||||
placeholder="请选择PSM题号"
|
||||
@focus="focus"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-select-option :value="item.question_index" v-for="(item,index) in selectOption" :key="index">{{item.title}}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="operBox" @click="selectClick">
|
||||
<a-button type="primary">
|
||||
<template #icon><BarChartOutlined /></template>
|
||||
分析
|
||||
</a-button>
|
||||
</div>
|
||||
<Space>
|
||||
<div class="nanoTitleBoxRFont">创建分析</div>
|
||||
<div>
|
||||
<a-select
|
||||
ref="select"
|
||||
class="custom-select"
|
||||
v-model:value="selectVal"
|
||||
style="width: 200px"
|
||||
placeholder="请选择PSM题号"
|
||||
@focus="focus"
|
||||
@change="handleChange"
|
||||
>
|
||||
<a-select-option :value="item.question_index" v-for="(item,index) in selectOption" :key="index">{{item.title}}</a-select-option>
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="operBox" @click="selectClick">
|
||||
<a-button type="primary">
|
||||
<template #icon><BarChartOutlined /></template>
|
||||
分析
|
||||
</a-button>
|
||||
</div>
|
||||
</Space>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tableBox" v-if="dataSource.length>0">
|
||||
@@ -80,7 +83,7 @@ import { useRouter, useRoute } from "vue-router";
|
||||
// 引入store
|
||||
import { useStore } from "vuex";
|
||||
// 提示框
|
||||
import { message } from 'ant-design-vue';
|
||||
import { message, Space } from 'ant-design-vue';
|
||||
// 引入canvas页面
|
||||
import psmDetail from './components/psmDetail.vue';
|
||||
import SubTitle from "@/views/DataAnalyse/components/SubTitle.vue";
|
||||
@@ -274,7 +277,7 @@ const onClose = ()=>{
|
||||
visible.value=false
|
||||
}
|
||||
</script>
|
||||
<style lang="scss">
|
||||
<style lang="scss" scoped>
|
||||
.nanoBox {
|
||||
background: #fff;
|
||||
width: 100%;
|
||||
@@ -344,6 +347,9 @@ const onClose = ()=>{
|
||||
.nanoTitleBoxR{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
.custom-select :deep(.ant-select-arrow) {
|
||||
top: 48%;
|
||||
}
|
||||
.nanoTitleBoxRFont{
|
||||
margin-right: 10px;
|
||||
color: #434343;
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
<a-dropdown :trigger="['click']">
|
||||
<a class="ant-dropdown-link" @click.prevent>
|
||||
更多
|
||||
<DownOutlined />
|
||||
<!-- <DownOutlined /> -->
|
||||
<i class="icon iconfont"></i>
|
||||
</a>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
@@ -119,7 +120,7 @@ import DataTable from '@views/DataAnalyse/components/DataTable'
|
||||
import newDataTable from '@views/DataAnalyse/components/newDataTable'
|
||||
import { downloadFile } from '@views/DataAnalyse/composables/downloadFile'
|
||||
import search from '@/views/DataAnalyse/components/diagram/search'
|
||||
import { DownOutlined } from '@ant-design/icons-vue'
|
||||
// import { DownOutlined } from '@ant-design/icons-vue'
|
||||
import newSearch from '@/views/DataAnalyse/components/diagram/newSearch'
|
||||
import newBtnList from '@/views/DataAnalyse/components/diagram/newBtnList'
|
||||
import newModal from '@/views/DataAnalyse/components/diagram/newModal'
|
||||
@@ -306,7 +307,7 @@ const getSurveysHead = async () => {
|
||||
today_answer_count.value = res.today_answer_count
|
||||
// 配置
|
||||
answer_columns.value = res.answer_columns
|
||||
console.log('answer_columns', answer_columns.value)
|
||||
console.log('answer_columns13123156447898978798798789798789', answer_columns.value)
|
||||
columns.value = res.columns
|
||||
// 筛选条件
|
||||
questions.value = res?.filters?.answer_questions
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<a-button class="custom-button" type="link" @click="checkInfo(record)">查看</a-button>
|
||||
<a-dropdown>
|
||||
<a class="ant-dropdown-link" style="display: inline-block" @click.prevent>
|
||||
更多 <DownOutlined />
|
||||
更多 <i class="icon iconfont"></i>
|
||||
</a>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
@@ -61,7 +61,6 @@
|
||||
<template v-slot:footer>
|
||||
<a-pagination
|
||||
class="pagination"
|
||||
:showQuickJumper="true"
|
||||
:showTotal="(total) => `共 ${total} 条`"
|
||||
show-size-changer
|
||||
v-model:current="pagination.current"
|
||||
@@ -87,7 +86,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import { defineComponent, ref, onMounted, computed, toRefs, reactive, watch } from "vue";
|
||||
import { DownOutlined } from "@ant-design/icons-vue";
|
||||
// import { DownOutlined } from "@ant-design/icons-vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import { message, Modal } from "ant-design-vue";
|
||||
import { getRecycles, editRecycles, deleteRecycles } from "@/api/recycleBin";
|
||||
@@ -136,7 +135,7 @@ const actions = [
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
DownOutlined,
|
||||
// DownOutlined,
|
||||
QsDetail,
|
||||
},
|
||||
props: {},
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
<div>
|
||||
<a-form-item style="width: 100%">
|
||||
<div style="display: flex">
|
||||
<a-range-picker
|
||||
<a-range-picker
|
||||
class="custom-date-picker"
|
||||
:placeholder="['请选择开始日期', '请选择结束日期']" style="width: 250px;" :format="dateFormatList" @change="onChangetime" v-model:value="time" allow-clear />
|
||||
<a-button style="margin: 0 16px;border-radius: 4px;" type="primary" @click="onSubmit">查询</a-button>
|
||||
@@ -107,7 +107,7 @@
|
||||
</template> -->
|
||||
</a-table>
|
||||
</div>
|
||||
<a-pagination class="pagination" show-size-changer v-model:current="pagination.page" v-model:pageSize="pagination.per_page" v-model:defaultPageSize="pagination.per_page" :total="pagination.total" @change="onPaginationChange" @showSizeChange="onShowSizeChange" />
|
||||
<a-pagination class="pagination" show-size-changer v-model:current="pagination.page" v-model:pageSize="pagination.per_page" v-model:defaultPageSize="pagination.per_page" :total="pagination.total" :show-total="total => `共 ${total} 条`" @change="onPaginationChange" @showSizeChange="onShowSizeChange" />
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
@@ -530,14 +530,15 @@ const countColor = (value) => {
|
||||
}
|
||||
.pagination {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
bottom: 26px;
|
||||
justify-content: flex-end;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
margin-top: 0;
|
||||
padding: 13px 16px;
|
||||
color: rgba(0, 0, 0, 0.85);
|
||||
background: #fafafa;
|
||||
border-top: 1px solid #f0f0f0;
|
||||
border-radius: 0 0 2px 2px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -273,7 +273,7 @@ export default defineComponent({
|
||||
.status-text {
|
||||
font-size: 14px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
// justify-content: center;
|
||||
align-items: center;
|
||||
&::before {
|
||||
content: "";
|
||||
|
||||
@@ -151,7 +151,7 @@ export function setSurveyTags(data) {
|
||||
});
|
||||
}
|
||||
|
||||
// 模版引用
|
||||
// 模板引用
|
||||
export function useTempCreateProject(sn, data) {
|
||||
return request({
|
||||
url: `/console/templates/${sn}`,
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<a-form-item label="问卷名称" name="project_name">
|
||||
<!-- @keydown.enter="onSubmit" -->
|
||||
<a-input
|
||||
style="border-radius: 4px;"
|
||||
style="border-radius: 4px;"
|
||||
v-model:value="ruleForm.project_name"
|
||||
placeholder="请输入问卷名称"
|
||||
:maxlength="30"
|
||||
@@ -45,14 +45,13 @@
|
||||
</a-form-item> -->
|
||||
<a-form-item label="问卷标签" name="tags" v-if="isShow">
|
||||
<a-select
|
||||
|
||||
v-model:value="ruleForm.tags"
|
||||
style="width: 100%;border-radius: 4px;"
|
||||
mode="multiple"
|
||||
placeholder="搜索或新建标签"
|
||||
@change="handleChange"
|
||||
:filterOption="filterOption"
|
||||
class="show-select"
|
||||
class="custom-select show-select"
|
||||
:dropdownStyle="{zIndex: 10000}"
|
||||
>
|
||||
<a-select-option
|
||||
@@ -90,11 +89,11 @@
|
||||
autoSize
|
||||
:maxlength="150"
|
||||
placeholder="请输入"
|
||||
style="border-radius: 4px;"
|
||||
style="border-radius: 4px;"
|
||||
allowClear
|
||||
/> -->
|
||||
<a-input
|
||||
style="border-radius: 4px;"
|
||||
style="border-radius: 4px;"
|
||||
autoSize
|
||||
:maxlength="150"
|
||||
placeholder="请输入"
|
||||
@@ -293,7 +292,7 @@ export default defineComponent({
|
||||
data = await renewSurvey({ ...ruleForm, sn: props.info.sn });
|
||||
context.emit("update");
|
||||
} else {
|
||||
// 模版添加
|
||||
// 模板添加
|
||||
if (props.temp_sn) {
|
||||
useTempCreateProject(props.temp_sn, ruleForm).then((res) => {
|
||||
context.emit("temPreview", res.data);
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
:customRequest="postSurveyWordImport"
|
||||
:remove="handleFileRemove"
|
||||
>
|
||||
<a-button class="opeBtn" style="margin: 0">
|
||||
<a-button class="opeBtn" style="margin: 0;border-radius: 4px;">
|
||||
<span><UploadOutlined /></span>
|
||||
<span class="tubiao">选取word文件</span></a-button
|
||||
>
|
||||
@@ -29,6 +29,7 @@
|
||||
@keydown.enter="onSubmit"
|
||||
placeholder="请输入问卷名称"
|
||||
:showCount="true"
|
||||
class="custom-input"
|
||||
>
|
||||
<template #suffix>
|
||||
<span class="suffix">
|
||||
@@ -70,7 +71,7 @@
|
||||
placeholder="搜索或新建标签"
|
||||
@change="handleChange"
|
||||
:filterOption="filterOption"
|
||||
class="show-select"
|
||||
class="show-select custom-select"
|
||||
>
|
||||
<a-select-option
|
||||
:value="item.id"
|
||||
@@ -108,6 +109,7 @@
|
||||
:maxlength="150"
|
||||
placeholder="请输入"
|
||||
allowClear
|
||||
class="input-textarea"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item class="button" style="text-align: right">
|
||||
@@ -348,7 +350,7 @@ export default defineComponent({
|
||||
console.log(data);
|
||||
context.emit("update");
|
||||
} else {
|
||||
// 模版添加
|
||||
// 模板添加
|
||||
if (props.temp_sn) {
|
||||
useTempCreateProject(props.temp_sn, ruleForm).then((res) => {
|
||||
context.emit("update");
|
||||
@@ -578,4 +580,9 @@ export default defineComponent({
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
.input-textarea {
|
||||
:deep(.ant-input-affix-wrapper) {
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
</template> -->
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item label="模版简介" name="desp">
|
||||
<a-form-item label="模板简介" name="desp">
|
||||
<a-textarea v-model:value="formState.desp" placeholder="请输入" :rows="4" showCount :maxlength="150" allowClear />
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
:filter-option="false"
|
||||
:not-found-content="fetching ? undefined : null"
|
||||
@search="fetchUser"
|
||||
class="custom-select"
|
||||
>
|
||||
<!-- <template v-if="fetching" #notFoundContent>
|
||||
<a-spin size="small" />
|
||||
@@ -48,6 +49,7 @@
|
||||
:filter-option="false"
|
||||
:not-found-content="fetching ? undefined : null"
|
||||
@search="fetchUser"
|
||||
class="custom-select"
|
||||
>
|
||||
<a-select-option
|
||||
:value="item.id"
|
||||
@@ -75,6 +77,7 @@
|
||||
:filter-option="false"
|
||||
:not-found-content="fetching ? undefined : null"
|
||||
@search="fetchUser"
|
||||
class="custom-select"
|
||||
>
|
||||
<template v-if="fetching" #notFoundContent>
|
||||
<a-spin size="small" />
|
||||
@@ -88,22 +91,24 @@
|
||||
<a-range-picker
|
||||
v-model:value="ruleForm.created_at"
|
||||
@change="handleCreated"
|
||||
class="custom-date-picker"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item label="编辑时间">
|
||||
<a-range-picker
|
||||
v-model:value="ruleForm.updated_at"
|
||||
@change="handleUpdated"
|
||||
class="custom-date-picker"
|
||||
/>
|
||||
</a-form-item>
|
||||
<div class="button" style="text-align: right; padding: 10px; padding-right: 45px;">
|
||||
<a-button
|
||||
style="margin-right: 12px"
|
||||
style="margin-right: 12px;border-radius: 4px"
|
||||
type="cancel"
|
||||
@click="$emit('cancel')"
|
||||
>取消</a-button
|
||||
>
|
||||
<a-button type="primary" @click="onSubmit">确定</a-button>
|
||||
<a-button type="primary" @click="onSubmit" style="border-radius: 4px">确定</a-button>
|
||||
</div>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
@@ -69,7 +69,7 @@ const surveyActions = [{
|
||||
},
|
||||
{
|
||||
action: 'save',
|
||||
name: '保存为模版',
|
||||
name: '保存为模板',
|
||||
type: 'action',
|
||||
text: '保存',
|
||||
},
|
||||
|
||||
@@ -66,13 +66,21 @@ export default defineComponent({
|
||||
justify-content: space-between;
|
||||
margin-bottom: 25px;
|
||||
.search-title {
|
||||
font-size: 20px;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
color: #000;
|
||||
}
|
||||
.search-right {
|
||||
display: flex;
|
||||
.input-wrap {
|
||||
margin: 0 16px;
|
||||
:deep(.ant-input-affix-wrapper) {
|
||||
border-radius: 4px;
|
||||
height: 32px;
|
||||
}
|
||||
:deep(.ant-btn) {
|
||||
border-radius: 4px;
|
||||
}
|
||||
}
|
||||
.choose-btn {
|
||||
width: 32px;
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
:filter-option="false"
|
||||
:not-found-content="fetching ? undefined : null"
|
||||
@search="fetchUser"
|
||||
class="custom-select"
|
||||
>
|
||||
<template v-if="fetching" #notFoundContent>
|
||||
<a-spin size="small" />
|
||||
@@ -43,6 +44,7 @@
|
||||
:filter-option="false"
|
||||
:not-found-content="fetching ? undefined : null"
|
||||
@search="fetchUser"
|
||||
class="custom-select"
|
||||
>
|
||||
<template v-if="fetching" #notFoundContent>
|
||||
<a-spin size="small" />
|
||||
@@ -56,6 +58,7 @@
|
||||
<a-range-picker
|
||||
v-model:value="ruleForm.created_at"
|
||||
@change="handleCreated"
|
||||
class="custom-date-picker"
|
||||
/>
|
||||
</a-form-item>
|
||||
<!-- <a-form-item label="编辑时间">
|
||||
@@ -63,12 +66,12 @@
|
||||
</a-form-item> -->
|
||||
<a-form-item class="button" style="text-align: right">
|
||||
<a-button
|
||||
style="margin-right: 12px"
|
||||
style="margin-right: 12px;border-radius: 4px;"
|
||||
type="cancel"
|
||||
@click="$emit('cancel')"
|
||||
>取消</a-button
|
||||
>
|
||||
<a-button type="primary" @click="onSubmit">确定</a-button>
|
||||
<a-button type="primary" @click="onSubmit" style="border-radius: 4px;">确定</a-button>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
@@ -38,7 +38,7 @@ export default defineComponent({
|
||||
props: {
|
||||
type: {
|
||||
type: Number,
|
||||
default: 0, // 0:问卷 1:模版
|
||||
default: 0, // 0:问卷 1:模板
|
||||
}
|
||||
},
|
||||
// props: {
|
||||
|
||||
@@ -37,7 +37,7 @@ export default defineComponent({
|
||||
const searchParams = ref({})
|
||||
const columns = ref([
|
||||
{
|
||||
title: '模版标题',
|
||||
title: '模板标题',
|
||||
key: 'title',
|
||||
dataIndex: 'title',
|
||||
// align: 'center',
|
||||
|
||||
@@ -458,4 +458,16 @@ export default defineComponent({
|
||||
.group-a {
|
||||
color: #70b936;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.ant-modal-content {
|
||||
border-radius: 8px;
|
||||
.ant-modal-title {
|
||||
font-size: 18px;
|
||||
}
|
||||
.ant-modal-header {
|
||||
border-radius: 8px 8px 0 0;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
:columns="columns"
|
||||
:data-source="tableData"
|
||||
row-key="sn"
|
||||
:scroll="{ x: 'max-content', y: 'calc(100vh - 268px)' }"
|
||||
:scroll="{ x: 'max-content', y: 'calc(100vh - 272px)' }"
|
||||
@change="handleChangeTable"
|
||||
:pagination="false"
|
||||
>
|
||||
@@ -64,7 +64,8 @@
|
||||
@click.prevent
|
||||
>
|
||||
更多
|
||||
<DownOutlined />
|
||||
<!-- <DownOutlined /> -->
|
||||
<i class="icon iconfont"></i>
|
||||
</a>
|
||||
<template #overlay>
|
||||
<SurveyAction
|
||||
@@ -138,6 +139,7 @@
|
||||
v-model:pageSize="pageSize"
|
||||
v-model:defaultPageSize="pageSize"
|
||||
:total="total"
|
||||
:show-total="total => `共 ${total} 条`"
|
||||
@change="onPaginationChange"
|
||||
@showSizeChange="onShowSizeChange"
|
||||
/>
|
||||
@@ -267,7 +269,7 @@ import {
|
||||
onBeforeUnmount,
|
||||
computed,
|
||||
} from "vue";
|
||||
import { DownOutlined } from "@ant-design/icons-vue";
|
||||
// import { DownOutlined } from "@ant-design/icons-vue";
|
||||
import { useStore } from "vuex";
|
||||
|
||||
import { getSurveyList, getSurveySorts } from "../api.js";
|
||||
@@ -362,7 +364,7 @@ export default defineComponent({
|
||||
Search,
|
||||
CreateSurvey,
|
||||
CreateWord,
|
||||
DownOutlined,
|
||||
// DownOutlined,
|
||||
SurveyAction,
|
||||
MoveGroup,
|
||||
editLabel,
|
||||
@@ -740,7 +742,7 @@ export default defineComponent({
|
||||
onCreate,
|
||||
onWord,
|
||||
wordVisible,
|
||||
DownOutlined,
|
||||
// DownOutlined,
|
||||
columns,
|
||||
visible,
|
||||
visibleMove,
|
||||
@@ -844,7 +846,7 @@ export default defineComponent({
|
||||
}
|
||||
.pagination {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
justify-content: flex-end;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
@@ -874,3 +876,11 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
</style>
|
||||
<style lang="scss">
|
||||
.ant-pagination-prev .ant-pagination-item-link, .ant-pagination-next .ant-pagination-item-link, .ant-pagination-item, .ant-select:not(.ant-select-customize-input) .ant-select-selector {
|
||||
border-radius: 4px;
|
||||
}
|
||||
.ant-dropdown-menu {
|
||||
border-radius: 4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -38,7 +38,7 @@ export default defineComponent({
|
||||
children: [],
|
||||
path: "/survey/publish/link-source",
|
||||
},
|
||||
|
||||
|
||||
]);
|
||||
let { proxy } = getCurrentInstance();
|
||||
const checkHandle = async (e) => {
|
||||
@@ -86,6 +86,7 @@ export default defineComponent({
|
||||
height: calc(100vh - 70px);
|
||||
.left {
|
||||
margin-left: 24px;
|
||||
margin-bottom: -4px;
|
||||
&::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
background-color: #ddd;
|
||||
@@ -98,9 +99,10 @@ export default defineComponent({
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
flex: 1;
|
||||
padding: 0 24px;
|
||||
margin: 0 24px;
|
||||
// padding-top: 2px;
|
||||
background-color: #ffffff;
|
||||
border-radius: 6px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -246,14 +246,14 @@ export default {
|
||||
const openPublishModal = async () => {
|
||||
var res = await canPlanetPublish(route.query.sn);
|
||||
if(res){
|
||||
|
||||
|
||||
await publishSurvey({
|
||||
publish_type: 0,
|
||||
sn: route.query.sn,
|
||||
});
|
||||
status.value = 1;
|
||||
getList(status);
|
||||
|
||||
|
||||
// Modal.confirm({
|
||||
// title: "提示",
|
||||
// // icon: createVNode(ExclamationCircleOutlined),
|
||||
|
||||
@@ -84,7 +84,7 @@ export default defineComponent({
|
||||
.title {
|
||||
position: absolute;
|
||||
top: -16px;
|
||||
left: -25px;
|
||||
left: -24px;
|
||||
display: flex;
|
||||
// justify-content: center;
|
||||
align-items: center;
|
||||
@@ -146,7 +146,7 @@ export default defineComponent({
|
||||
color: #70b936;
|
||||
cursor: pointer;
|
||||
width: 220px;
|
||||
height: 48px;
|
||||
height: 52px;
|
||||
line-height: 48px;
|
||||
text-align: center;
|
||||
background-color: #ffffff;
|
||||
@@ -174,5 +174,6 @@ export default defineComponent({
|
||||
opacity: 1;
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
margin-top: -4px;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -257,7 +257,7 @@ export function moveBankQuesGroup(params) {
|
||||
method: 'post',
|
||||
});
|
||||
}
|
||||
/* 通过标签获取包装测试问卷模版*/
|
||||
/* 通过标签获取包装测试问卷模板*/
|
||||
export function getTemplateTag(params) {
|
||||
return request({
|
||||
url: `/console/template_tag`,
|
||||
|
||||
@@ -199,26 +199,6 @@
|
||||
</template>
|
||||
<!-- 包装 -->
|
||||
<template v-else>
|
||||
<!-- 产品内包装测试 -->
|
||||
<div class="create-survey-title survey-title">
|
||||
<div class="create-survey-title-line"></div>
|
||||
<div class="create-survey-title-text">产品内包装测试</div>
|
||||
</div>
|
||||
<packing-card-list
|
||||
title="请配置参与调研的产品内包装"
|
||||
addText="新增产品内包装"
|
||||
v-model:list="packingData.inner"
|
||||
/>
|
||||
<!-- 产品外包装测试 -->
|
||||
<div class="create-survey-title survey-title">
|
||||
<div class="create-survey-title-line"></div>
|
||||
<div class="create-survey-title-text">产品外包装测试</div>
|
||||
</div>
|
||||
<packing-card-list
|
||||
title="请配置参与调研的产品外包装"
|
||||
addText="新增产品外包装"
|
||||
v-model:list="packingData.outer"
|
||||
/>
|
||||
<!-- 货架可见度认知 -->
|
||||
<div class="create-survey-title survey-title">
|
||||
<div class="create-survey-title-line"></div>
|
||||
@@ -241,6 +221,26 @@
|
||||
addText="新增产品包装"
|
||||
v-model:list="packingData.stack"
|
||||
/>
|
||||
<!-- 产品内包装测试 -->
|
||||
<div class="create-survey-title survey-title">
|
||||
<div class="create-survey-title-line"></div>
|
||||
<div class="create-survey-title-text">产品内包装测试</div>
|
||||
</div>
|
||||
<packing-card-list
|
||||
title="请配置参与调研的产品内包装"
|
||||
addText="新增产品内包装"
|
||||
v-model:list="packingData.inner"
|
||||
/>
|
||||
<!-- 产品外包装测试 -->
|
||||
<div class="create-survey-title survey-title">
|
||||
<div class="create-survey-title-line"></div>
|
||||
<div class="create-survey-title-text">产品外包装测试</div>
|
||||
</div>
|
||||
<packing-card-list
|
||||
title="请配置参与调研的产品外包装"
|
||||
addText="新增产品外包装"
|
||||
v-model:list="packingData.outer"
|
||||
/>
|
||||
<!-- 示例 -->
|
||||
<!-- <div class="create-survey-title">
|
||||
<div class="create-survey-title-line"></div>
|
||||
@@ -509,7 +509,7 @@ export default defineComponent({
|
||||
return style;
|
||||
};
|
||||
|
||||
// 使用模版
|
||||
// 使用模板
|
||||
const toSub = async () => {
|
||||
loading.value = true;
|
||||
let data;
|
||||
@@ -523,13 +523,13 @@ export default defineComponent({
|
||||
...ruleForm,
|
||||
};
|
||||
if (props.curTemp.type === 100) {
|
||||
// 使用口味模版
|
||||
// 使用口味模板
|
||||
params.taste_test_list = flavorList.value.map((item) => ({
|
||||
product_title: item.productName,
|
||||
taste_title: item.flavorName,
|
||||
}));
|
||||
} else {
|
||||
// 使用包装模版
|
||||
// 使用包装模板
|
||||
params.internal_package_test_list = packingData.value.inner
|
||||
.filter((item) => !item.status)
|
||||
.map((item) => ({
|
||||
@@ -561,7 +561,7 @@ export default defineComponent({
|
||||
taste_title: item.packType,
|
||||
}));
|
||||
}
|
||||
params.extendJson = props.extendJson;
|
||||
params.extend_json = props.extendJson;
|
||||
useTempCreateProject(props.temp_sn, params).then((res) => {
|
||||
context.emit("update");
|
||||
context.emit("close");
|
||||
|
||||
@@ -450,7 +450,7 @@ export default defineComponent({
|
||||
data = await renewSurvey({ ...ruleForm, sn: props.info.sn });
|
||||
context.emit("update");
|
||||
} else {
|
||||
// 模版添加
|
||||
// 模板添加
|
||||
if (props.temp_sn) {
|
||||
let params = {
|
||||
...ruleForm,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
:model="ruleForm"
|
||||
:rules="rules"
|
||||
>
|
||||
<a-form-item label="模版标题" name="title">
|
||||
<a-form-item label="模板标题" name="title">
|
||||
<a-input v-model:value="ruleForm.title"></a-input>
|
||||
</a-form-item>
|
||||
<a-form-item class="button" style="text-align: right">
|
||||
@@ -30,7 +30,7 @@ export default defineComponent({
|
||||
});
|
||||
const rules = {
|
||||
title: [
|
||||
{ required: true, message: '请输入模版名称', trigger: 'blur' },
|
||||
{ required: true, message: '请输入模板名称', trigger: 'blur' },
|
||||
{ min: 1, max: 30, message: '字数超过限制', trigger: 'blur' },
|
||||
],
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
:filter-option="false"
|
||||
:not-found-content="fetching ? undefined : null"
|
||||
@search="fetchUser"
|
||||
class="custom-select"
|
||||
>
|
||||
<template v-if="fetching" #notFoundContent>
|
||||
<a-spin size="small" />
|
||||
@@ -41,6 +42,7 @@
|
||||
:filter-option="false"
|
||||
:not-found-content="fetching ? undefined : null"
|
||||
@search="fetchUser"
|
||||
class="custom-select"
|
||||
>
|
||||
<template v-if="fetching" #notFoundContent>
|
||||
<a-spin size="small" />
|
||||
@@ -52,11 +54,11 @@
|
||||
</a-form-item>
|
||||
<a-form-item label="创建时间">
|
||||
<!-- <a-date-picker @change="onChange" /> -->
|
||||
<a-range-picker v-model:value="ruleForm.created_at" @change="onChange"/>
|
||||
<a-range-picker v-model:value="ruleForm.created_at" @change="onChange" class="custom-date-picker"/>
|
||||
</a-form-item>
|
||||
<a-form-item class="button" style="text-align: right">
|
||||
<a-button style="margin-right:12px" type="cancel" @click="$emit('cancel')">取消</a-button>
|
||||
<a-button type="primary" @click="onSubmit">确定</a-button>
|
||||
<a-button style="margin-right:12px;border-radius: 4px;" type="cancel" @click="$emit('cancel')">取消</a-button>
|
||||
<a-button type="primary" style="border-radius: 4px;" @click="onSubmit">确定</a-button>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</template>
|
||||
|
||||
@@ -70,12 +70,13 @@
|
||||
@click.prevent
|
||||
>
|
||||
更多
|
||||
<DownOutlined />
|
||||
<!-- <DownOutlined /> -->
|
||||
<i class="icon iconfont"></i>
|
||||
</a>
|
||||
<template #overlay v-if="record.type === 1">
|
||||
<a-menu>
|
||||
<a-menu-item @click="handleRemove(record)">重命名模版</a-menu-item>
|
||||
<a-menu-item @click="handleDel(record)">删除模版</a-menu-item>
|
||||
<a-menu-item @click="handleRemove(record)">重命名模板</a-menu-item>
|
||||
<a-menu-item @click="handleDel(record)">删除模板</a-menu-item>
|
||||
<!-- <a-menu-item @click="handleMove(record)">移动到分组</a-menu-item> -->
|
||||
</a-menu>
|
||||
</template>
|
||||
@@ -101,6 +102,7 @@
|
||||
v-model:pageSize="pageSize"
|
||||
v-model:defaultPageSize="pageSize"
|
||||
:total="total"
|
||||
:show-total="total => `共 ${total} 条`"
|
||||
@change="onPaginationChange"
|
||||
@showSizeChange="onShowSizeChange"
|
||||
/>
|
||||
@@ -122,7 +124,7 @@
|
||||
/>
|
||||
<a-modal
|
||||
v-model:visible="renameVisible"
|
||||
title="重命名模版"
|
||||
title="重命名模板"
|
||||
:footer="null"
|
||||
:sn="sn"
|
||||
>
|
||||
@@ -181,7 +183,7 @@ import {
|
||||
getCurrentInstance,
|
||||
} from "vue";
|
||||
import { useRouter } from "vue-router";
|
||||
import { DownOutlined } from "@ant-design/icons-vue";
|
||||
// import { DownOutlined } from "@ant-design/icons-vue";
|
||||
|
||||
import { delTemplate, getTemplateList } from "@/api/template-market";
|
||||
import { getSurveySorts } from "@/views/ProjectManage/api.js";
|
||||
@@ -240,7 +242,7 @@ export default defineComponent({
|
||||
name: "TableList",
|
||||
components: {
|
||||
Search,
|
||||
DownOutlined,
|
||||
// DownOutlined,
|
||||
MoveGroup,
|
||||
editLabel,
|
||||
ReName,
|
||||
@@ -442,7 +444,7 @@ export default defineComponent({
|
||||
function handleDel(record) {
|
||||
Modal.confirm({
|
||||
title: "提示",
|
||||
content: "确定删除该模版?",
|
||||
content: "确定删除该模板?",
|
||||
onOk() {
|
||||
delTemplate(record.sn)
|
||||
.then(() => {
|
||||
@@ -562,7 +564,7 @@ export default defineComponent({
|
||||
});
|
||||
handleUse(data);
|
||||
} catch (error) {
|
||||
console.log('包装测试模版错误', error);
|
||||
console.log('包装测试模板错误', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -579,7 +581,7 @@ export default defineComponent({
|
||||
actionClick,
|
||||
update,
|
||||
onCreate,
|
||||
DownOutlined,
|
||||
// DownOutlined,
|
||||
columns,
|
||||
visible,
|
||||
visibleMove,
|
||||
@@ -663,7 +665,7 @@ export default defineComponent({
|
||||
}
|
||||
.pagination {
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
justify-content: flex-end;
|
||||
position: relative;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="answer-setting">
|
||||
<div class="answer-setting scrollbar">
|
||||
<div class="section">
|
||||
<div class="section-title">基础设置</div>
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@
|
||||
:min="1"
|
||||
:max="100000"
|
||||
:value="configTemp.show_time"
|
||||
@update:value="(val) => configTemp.show_time = Number(val).toFixed(0)"
|
||||
@update:value="updateShowTime"
|
||||
:formatter="value => `${value}秒`"
|
||||
:parser="value => value.replace('秒', '')"
|
||||
style="width: 80px; border-radius: 4px;"
|
||||
@@ -197,6 +197,37 @@
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
<template v-if="questionType == QUESTION_TYPE.MATRIX_RADIO">
|
||||
<div class="config-base-item config-ext-item">
|
||||
<span>限制连选</span>
|
||||
<a-switch
|
||||
class="custom-switch"
|
||||
:checkedValue="1"
|
||||
:unCheckedValue="0"
|
||||
v-model:checked="configTemp.is_disable_lines_same"
|
||||
@change="(val) => {
|
||||
configTemp.disable_lines_same = 5;
|
||||
onUpdate(val);
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-if="configTemp.is_disable_lines_same"
|
||||
class="config-base-item config-ext-item config-item-last"
|
||||
>
|
||||
<span>连选次数</span>
|
||||
<a-input-number
|
||||
:min="2"
|
||||
:max="rowLen"
|
||||
:value="configTemp.disable_lines_same"
|
||||
@update:value="updateDisableLinesSame"
|
||||
:formatter="value => `${value}次`"
|
||||
:parser="value => value.replace('次', '')"
|
||||
style="width: 80px; border-radius: 4px;"
|
||||
@change="onUpdate"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
</template>
|
||||
<div v-else class="config-item-last"></div>
|
||||
<a-modal
|
||||
@@ -314,6 +345,18 @@ export default {
|
||||
// },
|
||||
},
|
||||
computed: {
|
||||
|
||||
rowLen(){
|
||||
var len = 0;
|
||||
try{
|
||||
len = this.question.options[0].length;
|
||||
}
|
||||
catch(e){
|
||||
|
||||
}
|
||||
return len;
|
||||
},
|
||||
|
||||
// question_code 以 1_开头的不显示3D入口
|
||||
isQuestionCode(){
|
||||
try{
|
||||
@@ -419,6 +462,18 @@ export default {
|
||||
this.onUpdate();
|
||||
},
|
||||
|
||||
// 限制时间 更新
|
||||
updateShowTime(val) {
|
||||
if(!val || isNaN(val)) return;
|
||||
this.configTemp.show_time = Number(val).toFixed(0);
|
||||
},
|
||||
|
||||
// 连选次数 更新
|
||||
updateDisableLinesSame(val) {
|
||||
if(!val || isNaN(val)) return;
|
||||
this.configTemp.disable_lines_same = Number(val).toFixed(0);
|
||||
},
|
||||
|
||||
onUpdate() {
|
||||
this.$emit("update:config", this.configTemp);
|
||||
this.$emit("changeConfig", this.configTemp);
|
||||
|
||||
@@ -2033,6 +2033,7 @@ function getQuesOptionListAfter(questionInfo, info) {
|
||||
img {
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
&::v-deep p {
|
||||
|
||||
@@ -44,14 +44,14 @@
|
||||
<template #title>
|
||||
<div sytle="font-size:14px;">下载模板</div>
|
||||
<div sytle="font-size:14px;max-height: 350px;" class="tips-auto scrollbar">
|
||||
点击 价格梯度模版.xlxs 即可获取默认的价格梯度excel表格。<br />
|
||||
点击 价格梯度模板.xlxs 即可获取默认的价格梯度excel表格。<br />
|
||||
该表符合价格设置默认配置条件,您下载后可通过修改锚定的市场价格行中的数值以及修改不同产品的梯度值,手动生成价格梯度表后保存,单击【导入价格梯度表】完成导入,在生成设计时,会按照导入的价格梯度进行生成产品卡片中价格展示。<br />
|
||||
价格梯度模版说明: ①前两行必须是字段行<br />
|
||||
价格梯度模板说明: ①前两行必须是字段行<br />
|
||||
前两行分别为产品行和梯度值,默认产品卡片数量为6个,您可以根据您的实际业务场景按表中格式增删产品数量以及填写符合梯度列表中的梯度值<br />
|
||||
② 水平数量与表中的价格点数量一致,<br />
|
||||
默认是9个价格点,若您修改了价格设置中的水平数量,在该表中您需要手动增加相同价格点数量,并填写完整<br />
|
||||
③ 标黄高亮位置为锚定市场价格 ④ 计算公式:<br />
|
||||
您下载的价格梯度模版中,自带计算公式<br />
|
||||
您下载的价格梯度模板中,自带计算公式<br />
|
||||
若默认表符合您的实际业务场景,只需修改梯度值和市场价格行即可自动获得其他阶梯价格<br />
|
||||
若默认表不符合您的实际业务场景,您可以自己的实际使用需求增加和删减产品列和价格行,并重新锚定市场行,以该行为基准,向上数值计算公式为:市场价格-市场价格*梯度值,向下数值计算公式为:市场价格+市场价格*梯度值<br />
|
||||
</div>
|
||||
@@ -104,7 +104,7 @@
|
||||
<div class="config-base-item line block">
|
||||
<div class="row">
|
||||
<span class="flex-none text">下载模板 </span>
|
||||
<span> <a @click="downloadTemplate">价格梯度模版.xls</a></span>
|
||||
<span> <a @click="downloadTemplate">价格梯度模板.xls</a></span>
|
||||
</div>
|
||||
<div class="row">
|
||||
<UpdateExcel @onUpLoadChange="onUpLoadChange" v-if="!copyInfo.config.file_url">
|
||||
@@ -334,7 +334,7 @@ export default {
|
||||
{
|
||||
type: 4,
|
||||
},
|
||||
"价格梯度模版.xls"
|
||||
"价格梯度模板.xls"
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -426,9 +426,10 @@ export default {
|
||||
align-items: center;
|
||||
height: 40px;
|
||||
&-remove {
|
||||
font-size: 16px;
|
||||
font-size: 17px;
|
||||
cursor: pointer;
|
||||
color: #bfbfbf;
|
||||
margin-right: 6px;
|
||||
&:hover {
|
||||
color: $yili-default-color;
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</ConfigBaseItem>
|
||||
|
||||
<!-- 3D 相关配置 -->
|
||||
<Config3D :key="copyConfig.question_index" v-model:config="copyConfig.config" @changeConfig="() => updateConfig(copyConfig)" :questionType="copyConfig.question_type"/>
|
||||
<Config3D :key="copyConfig.question_index" v-model:config="copyConfig.config" @changeConfig="() => updateConfig(copyConfig)" :questionType="copyConfig.question_type" :question="copyConfig"/>
|
||||
|
||||
<ConfigRequire
|
||||
title="选项随机"
|
||||
|
||||
@@ -85,9 +85,9 @@
|
||||
<template #title>
|
||||
<div sytle="font-size:14px;">下载模板</div>
|
||||
<div sytle="font-size:14px;" class="tips-auto scrollbar">
|
||||
点击 生成设计模版.xlxs<br />
|
||||
点击 生成设计模板.xlxs<br />
|
||||
即可获取生成设计表excel表,编辑生成设计表后通过单击【导入设计】完成导入<br />
|
||||
生成设计模版说明: ①第一行必须是字段行<br />
|
||||
生成设计模板说明: ①第一行必须是字段行<br />
|
||||
Version、Set为固定字段不可修改,Version代表问卷版本,Set代表随机任务,Item代表每屏展示选项;Item1、Item2、Item3、Item4为举例属性字段可以根据具体业务情况进行编辑和新增在首行依次编写即可(eg.新增Item5,代表每屏展示第5个选项)<br />
|
||||
② 所有字段都是必填字段,并用数字代替 ③ 级别索引举例:<br />
|
||||
Item1: 1 - HUAWEI 2 - APPLE 3 – Xiaomi … Item2: 1 -<br />
|
||||
|
||||
@@ -153,6 +153,7 @@ export default {
|
||||
position: relative;
|
||||
z-index: 99;
|
||||
border-radius: 6px;
|
||||
margin-top: -4px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="logical">
|
||||
<div class="logical-bar">
|
||||
<div class="catalog">
|
||||
<div style="padding: 12px">
|
||||
<div style="padding: 0 12px 12px 12px">
|
||||
<a-input
|
||||
class="custom-input"
|
||||
style="height: 32px"
|
||||
@@ -66,7 +66,7 @@
|
||||
<ModelMenuTitle
|
||||
v-show="!iframeShow"
|
||||
:titles="logicTitles"
|
||||
:posLeft="140"
|
||||
:posLeft="100"
|
||||
:lineWidth="60"
|
||||
@check="
|
||||
(e) => {
|
||||
@@ -396,6 +396,7 @@ function sendInfoToIframe(questionInfo) {
|
||||
border-right: 1px solid #f5f5f5;
|
||||
.catalog {
|
||||
padding: 24px 0;
|
||||
padding-top: 0;
|
||||
&-main {
|
||||
max-height: calc(100vh - 200px);
|
||||
overflow-y: auto;
|
||||
@@ -461,9 +462,14 @@ function sendInfoToIframe(questionInfo) {
|
||||
min-width: 815px;
|
||||
background: #ffffff;
|
||||
border-radius: 6px;
|
||||
padding: 20px;
|
||||
// padding: 20px;
|
||||
min-height: 100%;
|
||||
box-shadow: 0px 0px 6px 1px rgb(0 0 0 / 10%);
|
||||
// box-shadow: 0px 0px 6px 1px rgb(0 0 0 / 10%);
|
||||
.logical-content-main-title {
|
||||
:deep(.logical-title .logical-title-span) {
|
||||
margin-right: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
&-empty {
|
||||
min-width: 500px;
|
||||
@@ -475,7 +481,7 @@ function sendInfoToIframe(questionInfo) {
|
||||
justify-content: center;
|
||||
}
|
||||
&-content {
|
||||
padding: 10px 20px 10px 20px;
|
||||
padding: 18px 20px 10px 16px;
|
||||
overflow-y: auto;
|
||||
flex: 1;
|
||||
&-main {
|
||||
|
||||
@@ -1897,6 +1897,8 @@ function getQuesOptionListAfter(questionInfo, info) {
|
||||
img {
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
margin-top: 120px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
}
|
||||
&::v-deep p {
|
||||
|
||||
@@ -831,6 +831,7 @@ export default {
|
||||
img {
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
margin-top: 120px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -24,7 +24,7 @@ const emit = defineEmits(["mobile"]);
|
||||
|
||||
const mobileList = reactive([
|
||||
{ name: '手机', icon: '', type: 'mobile', class: 'mo-phone' },
|
||||
{ name: '电脑', icon: '', type: 'pc', class: 'mo-computer' }
|
||||
{ name: '电脑', icon: '', type: 'pc', class: 'mo-computer' }
|
||||
])
|
||||
const handlerChange = (e) => {
|
||||
emit('mobile', e)
|
||||
@@ -40,6 +40,8 @@ const handlerChange = (e) => {
|
||||
width: 100px;
|
||||
height: 40px;
|
||||
background: #ffffff;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
line-height: 37px;
|
||||
cursor: pointer;
|
||||
@@ -49,6 +51,9 @@ const handlerChange = (e) => {
|
||||
}
|
||||
.mo-computer{
|
||||
border-radius: 0px 4px 4px 0px;
|
||||
i {
|
||||
font-size: 22px;
|
||||
}
|
||||
}
|
||||
.mobile {
|
||||
opacity: 0.5;
|
||||
|
||||
@@ -81,11 +81,12 @@ const isMobile = ref('pc')
|
||||
display: none;
|
||||
}
|
||||
.theme-example-bg::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
background-color: #ddd;
|
||||
width: 4px;
|
||||
// background-color: #ffffff;
|
||||
}
|
||||
.theme-example-bg::-webkit-scrollbar-thumb {
|
||||
background-color: #a5b1c6;
|
||||
background-color: #D8D8D8;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.theme-mobile {
|
||||
height: 100%;
|
||||
|
||||
@@ -44,18 +44,19 @@ const choiceSkin = (e) => {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.theme-left::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
background-color: #ddd;
|
||||
width: 4px;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
.theme-left::-webkit-scrollbar-thumb {
|
||||
background-color: #a5b1c6;
|
||||
background-color: #D8D8D8;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.theme-left {
|
||||
float: left;
|
||||
width: 290px;
|
||||
height: 100%;
|
||||
box-shadow: 0px 0px 6px 1px rgb(0 0 0 / 10%);
|
||||
// box-shadow: 0px 0px 6px 1px rgb(0 0 0 / 10%);
|
||||
overflow-x: hidden;
|
||||
overflow-y: auto;
|
||||
.header {
|
||||
|
||||
@@ -285,11 +285,12 @@ const editButtonText = (item) => {
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.theme-right::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
background-color: #ddd;
|
||||
width: 4px;
|
||||
// background-color: #ffffff;
|
||||
}
|
||||
.theme-right::-webkit-scrollbar-thumb {
|
||||
background-color: #a5b1c6;
|
||||
background-color: #D8D8D8;
|
||||
border-radius: 10px;
|
||||
}
|
||||
.theme-right {
|
||||
float: right;
|
||||
@@ -339,17 +340,18 @@ const editButtonText = (item) => {
|
||||
width: 220px;
|
||||
height: 1px;
|
||||
background: #f5f5f5;
|
||||
margin: 0 15px 14px 15px;
|
||||
// margin: 0 15px 14px 15px;
|
||||
margin: 0 15px;
|
||||
}
|
||||
.show {
|
||||
font-size: 14px;
|
||||
font-family: PingFangSC-Medium, PingFang SC;
|
||||
font-weight: 500;
|
||||
color: #434343;
|
||||
padding: 32px 20px 10px 10px;
|
||||
padding: 32px 20px 10px;
|
||||
}
|
||||
.checkbox-group {
|
||||
margin-left: 10px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
.checkbox {
|
||||
margin-bottom: 10px;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div class="answer-setting">
|
||||
<div class="answer-setting scrollbar">
|
||||
<div class="section">
|
||||
<div class="section-title">我的抽奖</div>
|
||||
<div style="width:100%;text-align:right;display:flex;justify-content:end;">
|
||||
|
||||
@@ -28,7 +28,7 @@ export default defineComponent({
|
||||
}
|
||||
]);
|
||||
let { proxy } = getCurrentInstance();
|
||||
|
||||
|
||||
onMounted(() => {
|
||||
});
|
||||
return {
|
||||
|
||||
@@ -227,7 +227,6 @@ export default defineComponent({
|
||||
|
||||
const questionColumns = [
|
||||
{
|
||||
align: 'center',
|
||||
title: "随机名称",
|
||||
dataIndex: "title",
|
||||
key: "title",
|
||||
@@ -241,7 +240,6 @@ export default defineComponent({
|
||||
},
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
title: "显示题组数",
|
||||
dataIndex: "num",
|
||||
key: "num",
|
||||
@@ -255,37 +253,31 @@ export default defineComponent({
|
||||
},
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
title: "题组名称",
|
||||
dataIndex: "groupTitle",
|
||||
key: "groupTitle",
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
title: "题组起点",
|
||||
dataIndex: "start",
|
||||
key: "start",
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
title: "题组终点",
|
||||
dataIndex: "end",
|
||||
key: "end",
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
title: "配额数量",
|
||||
dataIndex: "sample_num",
|
||||
key: "sample_num",
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
title: "配额回收数量",
|
||||
dataIndex: "key_num",
|
||||
key: "key_num",
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
title: "配额进度",
|
||||
dataIndex: "precent",
|
||||
key: "precent",
|
||||
@@ -647,6 +639,10 @@ export default defineComponent({
|
||||
|
||||
border-bottom: none;
|
||||
}
|
||||
:deep(.ant-table-bordered.ant-table-empty .ant-table-placeholder) {
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
:deep(.ant-empty) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user