提交 90fb4470 authored 作者: lidongxu's avatar lidongxu

fix(mobile_promotion): 移动端_促销计划修复部分问题

状态去左边_搜索归属人加输入框_终端名修复
上级 84c7f587
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
"@vant/auto-import-resolver": "^1.3.0", "@vant/auto-import-resolver": "^1.3.0",
"@vitejs/plugin-vue": "5.0.5", "@vitejs/plugin-vue": "5.0.5",
"cz-conventional-changelog": "^3.3.0", "cz-conventional-changelog": "^3.3.0",
"postcss-pxtorem": "^6.1.0",
"sass": "1.77.5", "sass": "1.77.5",
"standard-version": "^9.5.0", "standard-version": "^9.5.0",
"unplugin-auto-import": "^0.17.6", "unplugin-auto-import": "^0.17.6",
......
import request from '@/utils/request' import request from '@/utils/request'
import { getToken } from '@/utils/auth'
// 提交其他报表超链接 // 提交其他报表超链接
export function submitOtherReportAPI(data) { export function submitOtherReportAPI(data) {
...@@ -18,3 +18,14 @@ export function enterOtherReportAPI(data) { ...@@ -18,3 +18,14 @@ export function enterOtherReportAPI(data) {
data data
}) })
} }
// 获取积木报表文件夹列表
export function getReportFolderListAPI() {
return request({
url: `/report/jmreport/category/list`,
headers: {
Token: getToken()
},
method: 'GET'
})
}
\ No newline at end of file
...@@ -57,7 +57,19 @@ import XlSelect from '@/components/XLSelect' ...@@ -57,7 +57,19 @@ import XlSelect from '@/components/XLSelect'
import OpenDialog from '@/components/OpenDialog' import OpenDialog from '@/components/OpenDialog'
// 只有在移动端引入 flexible.js // 只有在移动端引入 flexible.js
if (isMobile()) { if (isMobile()) {
import('lib-flexible') (function () {
const docEl = document.documentElement;
const designWidth = 375; // 设计稿宽度(375px设计稿)
const baseSize = 37.5; // 与 postcss-pxtorem 的 rootValue 一致
function setRem() {
const scale = Math.min(docEl.clientWidth / designWidth, 2);
docEl.style.setProperty('font-size', `${baseSize * scale}px`, 'important');
}
setRem();
window.addEventListener('resize', setRem);
})();
} }
const app = createApp(App) const app = createApp(App)
......
...@@ -9,14 +9,14 @@ ...@@ -9,14 +9,14 @@
<p>{{ planDetail.storeName }}</p> <p>{{ planDetail.storeName }}</p>
</template> </template>
<template #label> <template #label>
<p>{{ planDetail.employeeName }}</p> <p class="employee">{{ planDetail.employeeName }}</p>
<p v-if="planDetail.planStatus === 0">未执行</p>
<p v-else
class="plan-go">执行</p>
</template> </template>
<template #value> <template #value>
<p>{{ planDetail.pattern }}</p> <p>{{ planDetail.pattern }}</p>
<p>{{ parseTime(planDetail.date, '{y}:{m}:{d}') }}</p> <p>{{ parseTime(planDetail.date, '{y}:{m}:{d}') }}</p>
<p v-if="planDetail.planStatus === 0">未执行</p>
<p v-else
class="plan-go">执行</p>
</template> </template>
</van-cell> </van-cell>
</van-cell-group> </van-cell-group>
...@@ -76,7 +76,7 @@ const getPlanDetail = async () => { ...@@ -76,7 +76,7 @@ const getPlanDetail = async () => {
planDetail.value = res.data.planInfo planDetail.value = res.data.planInfo
// 循环多人打卡记录 // 循环多人打卡记录
planList.value = res.data.reporteds.map(o => { planList.value = res.data.reporteds?.map(o => {
const { tgcjPhotoInfos: tgcjPhotoInfosList, tghdPhotoInfos: tghdPhotoInfosList, tgscPhotoInfos: tgscPhotoInfosList } = o.reported const { tgcjPhotoInfos: tgcjPhotoInfosList, tghdPhotoInfos: tghdPhotoInfosList, tgscPhotoInfos: tgscPhotoInfosList } = o.reported
if (tgscPhotoInfosList) { if (tgscPhotoInfosList) {
var tgscPhotoInfos = [...tgscPhotoInfosList?.map(item => ({ var tgscPhotoInfos = [...tgscPhotoInfosList?.map(item => ({
...@@ -237,6 +237,17 @@ p { ...@@ -237,6 +237,17 @@ p {
} }
} }
} }
}
::v-deep(.employee) {
margin-bottom: 5px !important;
}
::v-deep(.van-popup--right) {
width: 85% !important;
}
::v-deep(.van-cell__label) {
font-size: 14px !important;
} }
</style> </style>
\ No newline at end of file
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
<div class="mobile-container"> <div class="mobile-container">
<van-nav-bar left-text="新增" <van-nav-bar left-text="新增"
right-text="搜索" right-text="搜索"
@click-right="showSearch = true" /> @click-right="showSearch = true"
placeholder
fixed />
<!-- 计划列表 --> <!-- 计划列表 -->
<van-pull-refresh v-model="refreshLoading" <van-pull-refresh v-model="refreshLoading"
:pull-distance="100" :pull-distance="100"
...@@ -16,13 +18,16 @@ ...@@ -16,13 +18,16 @@
<van-cell v-for="item in planList" <van-cell v-for="item in planList"
:key="item.id" :key="item.id"
:title="item.storeName" :title="item.storeName"
:label="item.employeeName"
:to="`/promotion_detail/${item.id}`"> :to="`/promotion_detail/${item.id}`">
<template #label>
<p class="employee">{{ item.employeeName }}</p>
<p v-if="item.planStatus === 0">未执行</p>
<p v-else
class="plan-go">执行</p>
</template>
<template #value> <template #value>
<span>{{ item.pattern }}</span> <span>{{ item.pattern }}</span>
<p>{{ parseTime(item.date, '{y}:{m}:{d}') }}</p> <p>{{ parseTime(item.date, '{y}-{m}-{d}') }}</p>
<p v-if="item.planStatus === 0">未执行</p>
<p v-else class="plan-go">执行</p>
</template> </template>
</van-cell> </van-cell>
</van-cell-group> </van-cell-group>
...@@ -110,13 +115,20 @@ ...@@ -110,13 +115,20 @@
<van-picker :model-value="planStatusStr" <van-picker :model-value="planStatusStr"
:columns="employeeIdColumns" :columns="employeeIdColumns"
@cancel="employeeIdShowPicker = false" @cancel="employeeIdShowPicker = false"
@confirm="onEmployeeConfirm" /> @confirm="onEmployeeConfirm">
<template #title>
<van-search v-model="searchEmployeeName"
placeholder="搜索归属人"
@update:model-value="onSearch"/>
</template>
</van-picker>
</van-popup> </van-popup>
<!-- 终端名 --> <!-- 终端名 -->
<van-field v-model="query.storeNameLike" <van-field v-model="query.storeNameLike"
label="终端名" label="终端名"
placeholder="请输入终端名" placeholder="请输入终端名"
@input="searchByStoreName" /> @update:model-value="searchByStoreName"
clearable />
<!-- 重置按钮 --> <!-- 重置按钮 -->
<van-button icon="replay" <van-button icon="replay"
class="reset" class="reset"
...@@ -126,10 +138,10 @@ ...@@ -126,10 +138,10 @@
<!-- 测试 url 参数用 --> <!-- 测试 url 参数用 -->
<div> <!-- <div>
<p>{{ url }}</p> <p class="my-p">{{ url }}</p>
<button @click="copy">复制 URL</button> <button @click="copy">复制 URL</button>
</div> </div> -->
</div> </div>
</template> </template>
...@@ -217,14 +229,23 @@ const onPlanConfirm = (val) => { ...@@ -217,14 +229,23 @@ const onPlanConfirm = (val) => {
getPlanList() getPlanList()
} }
// 归属人 // 归属人
const searchEmployeeName = ref('')
const employeeIdShowPicker = ref(false) const employeeIdShowPicker = ref(false)
const employeeIdStr = ref([]) const employeeIdStr = ref([])
// 所有归属人
const employeeIdColumnsAll = ref([])
// 展示归属人
const employeeIdColumns = ref([ const employeeIdColumns = ref([
]) ])
const onSearch = (val) => {
employeeIdColumns.value = employeeIdColumnsAll.value.filter(item => {
return item.text.includes(searchEmployeeName.value)
})
}
const getEmployeeList = async () => { const getEmployeeList = async () => {
const res = await getChargeListAPI() const res = await getChargeListAPI()
employeeIdColumns.value = res.data.map(item => { employeeIdColumnsAll.value = res.data.map(item => {
return { return {
text: item.name, text: item.name,
value: item.id, value: item.id,
...@@ -233,6 +254,7 @@ const getEmployeeList = async () => { ...@@ -233,6 +254,7 @@ const getEmployeeList = async () => {
deptQcId: item.deptQcId deptQcId: item.deptQcId
} }
}) })
employeeIdColumns.value = employeeIdColumnsAll.value
} }
getEmployeeList() getEmployeeList()
...@@ -276,7 +298,7 @@ const formatterEndDate = () => { ...@@ -276,7 +298,7 @@ const formatterEndDate = () => {
} }
const searchByStoreName = (val) => { const searchByStoreName = (val) => {
query.storeNameLike = val.data query.storeNameLike = val
planList.value = [] planList.value = []
planQueryParams.pageNum = 1 planQueryParams.pageNum = 1
getPlanList() getPlanList()
...@@ -294,27 +316,20 @@ const onRefresh = () => { ...@@ -294,27 +316,20 @@ const onRefresh = () => {
refreshLoading.value = true refreshLoading.value = true
setTimeout(() => { setTimeout(() => {
refreshLoading.value = false refreshLoading.value = false
planQueryParams.pageNum = 1 resetFn()
query.activityStartDate = ''
query.activityEndDate = ''
query.planStatus = ''
query.employeeId = ''
query.storeNameLike = ''
planList.value = []
getPlanList()
}, 1000) }, 1000)
} }
// 重置 // 重置
const resetFn = () => { const resetFn = () => {
query.activityStartDate = '' // query.activityStartDate = ''
query.activityEndDate = '' // query.activityEndDate = ''
query.planStatus = '' // query.planStatus = ''
query.employeeId = '' // query.employeeId = ''
query.storeNameLike = '' // query.storeNameLike = ''
planList.value = [] // planList.value = []
planQueryParams.pageNum = 1 // planQueryParams.pageNum = 1
getPlanList() // getPlanList()
} }
</script> </script>
...@@ -333,9 +348,10 @@ const resetFn = () => { ...@@ -333,9 +348,10 @@ const resetFn = () => {
::v-deep(.van-cell__title) { ::v-deep(.van-cell__title) {
/* 强制一行显示 */ /* 强制一行显示 */
white-space: nowrap; /* white-space: nowrap; */
} }
p{
p {
margin: 0; margin: 0;
} }
} }
...@@ -343,6 +359,7 @@ const resetFn = () => { ...@@ -343,6 +359,7 @@ const resetFn = () => {
.van-list { .van-list {
min-height: 100vh; min-height: 100vh;
/* overflow-x: hidden; */
} }
.reset { .reset {
...@@ -351,8 +368,9 @@ const resetFn = () => { ...@@ -351,8 +368,9 @@ const resetFn = () => {
::v-deep(.van-field):first-of-type { ::v-deep(.van-field):first-of-type {
.van-button { .van-button {
margin: 0 5px; margin: 0 2.5px;
padding: 0 5px; padding: 0 5px;
font-size: 12px !important;
} }
.van-cell__right-icon:first-of-type { .van-cell__right-icon:first-of-type {
...@@ -360,7 +378,23 @@ const resetFn = () => { ...@@ -360,7 +378,23 @@ const resetFn = () => {
} }
} }
.plan-go{ .plan-go {
color: #39bb74; color: #39bb74;
} }
::v-deep(.employee) {
margin-bottom: 5px !important;
}
::v-deep(.van-popup--right) {
width: 85% !important;
}
::v-deep(.van-cell__label) {
font-size: 14px !important;
}
.van-search{
width: 60%;
}
</style> </style>
\ No newline at end of file
...@@ -9,7 +9,19 @@ ...@@ -9,7 +9,19 @@
<el-form :model="form" <el-form :model="form"
:rules="rules" :rules="rules"
ref="reportRef" ref="reportRef"
label-width="100px"> label-width="140px">
<!-- 报表所属部门 -->
<el-form-item label="报表所属部门"
prop="id">
<el-select v-model="value"
placeholder="选择报表所属部门"
style="width: 240px">
<el-option v-for="item in deptList"
:key="item.value"
:label="item.title"
:value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="报表名字" <el-form-item label="报表名字"
prop="name"> prop="name">
<el-input v-model="form.name" <el-input v-model="form.name"
...@@ -34,7 +46,7 @@ ...@@ -34,7 +46,7 @@
<script setup> <script setup>
import { ref } from 'vue' import { ref } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import { enterOtherReportAPI } from '@/api' // 假设你的API接口 import { enterOtherReportAPI, getReportFolderListAPI } from '@/api' // 假设你的API接口
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
// 表单数据 // 表单数据
const form = ref({ const form = ref({
...@@ -45,6 +57,9 @@ const form = ref({ ...@@ -45,6 +57,9 @@ const form = ref({
// 表单验证规则 // 表单验证规则
const rules = ref({ const rules = ref({
id: [
{ required: true, message: '请选择报表所属部门', trigger: 'blur' }
],
name: [ name: [
{ required: true, message: '请输入报表名字', trigger: 'blur' } { required: true, message: '请输入报表名字', trigger: 'blur' }
], ],
...@@ -81,6 +96,14 @@ const handleSubmit = async () => { ...@@ -81,6 +96,14 @@ const handleSubmit = async () => {
} }
}) })
} }
// 获取积木报表文件夹分组一级
const deptList = ref([])
const getDeptList = async () => {
const res = await getReportFolderListAPI()
deptList.value = res.result
}
getDeptList()
</script> </script>
<style scoped> <style scoped>
......
...@@ -149,6 +149,7 @@ checkFsLoginAuth() ...@@ -149,6 +149,7 @@ checkFsLoginAuth()
// 检查-是否勤策回跳,并客户端登录 // 检查-是否勤策回跳,并客户端登录
const checkQcLoginAuth = async () => { const checkQcLoginAuth = async () => {
isShowLogin.value = false
const isState = window.location.href.includes('state') const isState = window.location.href.includes('state')
if (isState) { if (isState) {
loginByType('qc', window.location.href.split('?')[2]) loginByType('qc', window.location.href.split('?')[2])
......
import { defineConfig, loadEnv } from 'vite' import { defineConfig, loadEnv } from 'vite'
import path from 'path' import path from 'path'
import createVitePlugins from './vite/plugins' import createVitePlugins from './vite/plugins'
import pxtorem from 'postcss-pxtorem'
export default defineConfig(({ mode, command }) => { export default defineConfig(({ mode, command }) => {
const env = loadEnv(mode, process.cwd()) const env = loadEnv(mode, process.cwd())
...@@ -31,10 +32,8 @@ export default defineConfig(({ mode, command }) => { ...@@ -31,10 +32,8 @@ export default defineConfig(({ mode, command }) => {
changeOrigin: true, changeOrigin: true,
rewrite: (p) => p.replace(/^\/promotion-api/, '') rewrite: (p) => p.replace(/^\/promotion-api/, '')
}, },
'/ql_local': { 'ql_local': {
target: 'http://192.168.131.48:8080', target: 'http://192.168.131.48'
changeOrigin: true,
rewrite: (p) => p.replace(/^\/ql_local/, '')
} }
} }
}, },
...@@ -49,8 +48,16 @@ export default defineConfig(({ mode, command }) => { ...@@ -49,8 +48,16 @@ export default defineConfig(({ mode, command }) => {
atRule.remove(); atRule.remove();
} }
} }
} },
} },
pxtorem({
rootValue({ file }) {
// ? 后面调整 vant 大小
return file.indexOf('vant') !== -1 ? 37.5 : 37.5;
},
propList: ['*'],
exclude: file => !file.includes('mobile_views') && !file.includes('node_modules/vant')
})
] ]
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论