Merge branch 'feature-1210-matirx' into feature-creative-center-v2

This commit is contained in:
wanganmao
2022-12-11 13:59:09 +08:00
71 changed files with 645 additions and 245 deletions

View File

@@ -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 {

View File

@@ -475,7 +475,7 @@ onMounted(() => {
// width: 88px;
height: 32px;
line-height: 18px;
border-radius: 6px;
border-radius: 4px;
}
.share-button {
margin-left: 10px;

View File

@@ -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({

View File

@@ -243,6 +243,7 @@ function menusStatusToFalsefather(menus) {
&-main {
width: 220px;
height: 48px;
padding-bottom: 4px;
cursor: pointer;
display: flex;
align-items: center;

View File

@@ -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>

View File

@@ -54,6 +54,36 @@
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe80c;</span>
<div class="name">下拉</div>
<div class="code-name">&amp;#xe80c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe80d;</span>
<div class="name">电脑</div>
<div class="code-name">&amp;#xe80d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe80e;</span>
<div class="name">手机</div>
<div class="code-name">&amp;#xe80e;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe80b;</span>
<div class="name">展开1</div>
<div class="code-name">&amp;#xe80b;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe80a;</span>
<div class="name">收起</div>
<div class="code-name">&amp;#xe80a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe60e;</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>

View File

@@ -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

View File

@@ -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.

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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){

View File

@@ -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;
}
}
}

View File

@@ -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)
}

View File

@@ -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 {

View File

@@ -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,

View File

@@ -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>

View File

@@ -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>

View File

@@ -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">&#xe6df;</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>

View File

@@ -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>

View File

@@ -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;

View File

@@ -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 对应

View File

@@ -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">&#xe6de;</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)

View File

@@ -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;

View File

@@ -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;

View File

@@ -45,7 +45,8 @@
<a-dropdown :trigger="['click']">
<a class="ant-dropdown-link" @click.prevent>
更多
<DownOutlined />
<!-- <DownOutlined /> -->
<i class="icon iconfont">&#xe80c;</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

View File

@@ -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">&#xe80c;</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: {},

View File

@@ -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%;
}

View File

@@ -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: "";

View File

@@ -151,7 +151,7 @@ export function setSurveyTags(data) {
});
}
// 模引用
// 模引用
export function useTempCreateProject(sn, data) {
return request({
url: `/console/templates/${sn}`,

View File

@@ -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);

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -69,7 +69,7 @@ const surveyActions = [{
},
{
action: 'save',
name: '保存为模',
name: '保存为模',
type: 'action',
text: '保存',
},

View File

@@ -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;

View File

@@ -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>

View File

@@ -38,7 +38,7 @@ export default defineComponent({
props: {
type: {
type: Number,
default: 0, // 0:问卷 1
default: 0, // 0:问卷 1
}
},
// props: {

View File

@@ -37,7 +37,7 @@ export default defineComponent({
const searchParams = ref({})
const columns = ref([
{
title: '模标题',
title: '模标题',
key: 'title',
dataIndex: 'title',
// align: 'center',

View File

@@ -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>

View File

@@ -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">&#xe80c;</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>

View File

@@ -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>

View File

@@ -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),

View File

@@ -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>

View File

@@ -257,7 +257,7 @@ export function moveBankQuesGroup(params) {
method: 'post',
});
}
/* 通过标签获取包装测试问卷模*/
/* 通过标签获取包装测试问卷模*/
export function getTemplateTag(params) {
return request({
url: `/console/template_tag`,

View File

@@ -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");

View File

@@ -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,

View File

@@ -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' },
],
};

View File

@@ -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>

View File

@@ -70,12 +70,13 @@
@click.prevent
>
更多
<DownOutlined />
<!-- <DownOutlined /> -->
<i class="icon iconfont">&#xe80c;</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%);

View File

@@ -1,5 +1,5 @@
<template>
<div class="answer-setting">
<div class="answer-setting scrollbar">
<div class="section">
<div class="section-title">基础设置</div>

View File

@@ -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);

View File

@@ -2033,6 +2033,7 @@ function getQuesOptionListAfter(questionInfo, info) {
img {
width: 160px;
height: 160px;
margin-bottom: 8px;
}
}
&::v-deep p {

View File

@@ -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"
);
};

View File

@@ -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;
}

View File

@@ -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="选项随机"

View File

@@ -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 />
VersionSet为固定字段不可修改Version代表问卷版本Set代表随机任务Item代表每屏展示选项Item1Item2Item3Item4为举例属性字段可以根据具体业务情况进行编辑和新增在首行依次编写即可eg.新增Item5代表每屏展示第5个选项<br />
所有字段都是必填字段并用数字代替 级别索引举例<br />
Item1 1 - HUAWEI 2 - APPLE 3 Xiaomi Item2 1 -<br />

View File

@@ -153,6 +153,7 @@ export default {
position: relative;
z-index: 99;
border-radius: 6px;
margin-top: -4px;
}
}
</style>

View File

@@ -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 {

View File

@@ -1897,6 +1897,8 @@ function getQuesOptionListAfter(questionInfo, info) {
img {
width: 160px;
height: 160px;
margin-top: 120px;
margin-bottom: 8px;
}
}
&::v-deep p {

View File

@@ -831,6 +831,7 @@ export default {
img {
width: 160px;
height: 160px;
margin-top: 120px;
}
}
</style>

View File

@@ -24,7 +24,7 @@ const emit = defineEmits(["mobile"]);
const mobileList = reactive([
{ name: '手机', icon: '&#xe6b7;', type: 'mobile', class: 'mo-phone' },
{ name: '电脑', icon: '&#xe6a5;', type: 'pc', class: 'mo-computer' }
{ name: '电脑', icon: '&#xe80d;', 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;

View File

@@ -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%;

View File

@@ -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 {

View File

@@ -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;

View File

@@ -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;">

View File

@@ -28,7 +28,7 @@ export default defineComponent({
}
]);
let { proxy } = getCurrentInstance();
onMounted(() => {
});
return {

View File

@@ -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;
}