Commit 89492153 by HoMeTown

fix: 修复bug

parent b914ba26
......@@ -16,7 +16,7 @@ const serviceEnvConfig: ServiceEnv = {
proxy: '/api'
},
sit: {
url: 'https://sit-pet.chonglinzs.com/chonglin-api/manager/api', // 本地调试打开
url: 'http://82.156.138.187:19001/sdream-api/manager/api', // 本地调试打开
proxy: ''
},
uat: {
......@@ -28,7 +28,7 @@ const serviceEnvConfig: ServiceEnv = {
proxy: '/api'
},
prod: {
url: 'https://pet.chonglinzs.com/chonglin-api/manager/api', // 本地调试打开
url: 'http://82.156.138.187:19001/sdream-api/manager/api', // 本地调试打开
proxy: ''
}
};
......
......@@ -10,7 +10,7 @@ lerna-debug.log*
node_modules
.DS_Store
dist
chonglin-admin
sdream-admin-fe
dist-ssr
coverage
*.local
......
......@@ -4,7 +4,7 @@ export function createViteBuild(viteEnv: ImportMetaEnv, viteCommand: string) {
const isProd = viteEnv.VITE_ENV_TYPE === 'prod';
const isBuild = viteCommand === 'build';
const build: Record<string, any | BuildOptions> = {
outDir: 'chonglin-admin',
outDir: 'sdream-admin-fe',
brotliSize: false,
sourcemap: false,
chunkSizeWarningLimit: 500,
......
/** 请求超时时间 */
export const REQUEST_TIMEOUT = 60 * 1000;
export const REQUEST_TIMEOUT = 60 * 1000 * 5;
/** 错误信息的显示时间 */
export const ERROR_MSG_DURATION = 3 * 1000;
......
......@@ -78,7 +78,9 @@ import {
NAvatar,
NTimeline,
NTimelineItem,
NAlert
NAlert,
NLayout,
NLayoutSider
} from 'naive-ui';
/** 按需引入naiveUI */
......@@ -162,7 +164,9 @@ export default function setupNaiveUI(app: App) {
NTransfer,
NTimeline,
NTimelineItem,
NAlert
NAlert,
NLayout,
NLayoutSider
]
});
app.use(naive);
......
......@@ -5,7 +5,7 @@ import { constantRoutes } from './routes';
import { scrollBehavior } from './helpers';
import { createRouterGuard } from './guard';
const history = createWebHistory('/chonglin-admin');
const history = createWebHistory('/sdream-admin-fe');
export const router = createRouter({
history,
......
......@@ -39,6 +39,13 @@ export function fetchDeactivateProduct<T>(params: T) {
}
/**
* 更新产品状态 (01-启用 02-停用)
*/
export function fetchUpdateProductStatus<T>(params: T) {
return request.post(`/product/pc/v1/update_product_status`, params)
}
/**
* 删除 产品
*/
export function fetchDeleteProduct<T>(params: T) {
......
......@@ -2,6 +2,7 @@
border-radius: 8px;
/* 设置dialog的圆角 */
}
.n-popover {
border-radius: 8px !important;
/* 设置popover的圆角 */
......@@ -10,14 +11,17 @@
.n-image-preview-toolbar .n-base-icon {
width: 1.6em !important;
}
.n-form-item-blank > div,
.n-form-item-blank > span,
.n-form-item-blank > p {
.n-form-item-blank>div,
.n-form-item-blank>span,
.n-form-item-blank>p {
width: 100%;
}
.n-notification {
border-radius: 8px !important;
}
.n-message {
border-radius: 24px !important;
}
......@@ -25,3 +29,7 @@
.n-data-table .n-data-table-th {
background-color: #f7f7f8 !important;
}
.vxe-table--render-default.border--inner .vxe-table--header-wrapper {
background-color: #f9f9fb !important;
}
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { onBeforeRouteLeave } from 'vue-router'
import { PAGINATION_PAGE_SIZES } from '@/const/index'
import { Icon } from '@iconify/vue';
import { objectClean } from '@/utils';
......@@ -20,7 +21,8 @@ const docTypeCodeOptions = [
{ label: '渠道业务规则文档', value: '01' },
{ label: '产品相关监管规定文档', value: '02' },
{ label: '产品相关宣传素材文档', value: '03' },
{ label: '个养-商养产品信息文档', value: '04' },
{ label: '个养产品信息文档', value: '04' },
{ label: '商养产品信息文档', value: '05' },
]
const docStatusOptions = [
{ label: '草稿', value: '00' },
......@@ -75,6 +77,11 @@ const queryParams = ref(createQueryParams());
/** 检索 */
function handleQuery() {
pagination.value = {
pageSize: 10,
itemCount: 0,
pageNum: 1
}
getListData();
}
/** 重置检索 */
......@@ -87,9 +94,17 @@ function handleResetQuery() {
}
getListData();
}
const timer = ref<any>(null)
function startPolling() {
clearTimeout(timer.value)
timer.value = null
timer.value = setTimeout(() => {
getListData(false)
}, 5000);
}
async function getListData() {
loading.value = true;
async function getListData(showLoading = true) {
loading.value = showLoading;
const { pageNum, pageSize } = pagination.value;
const { docName, docTypeCode, docStatus, analyzeStatus, createTime, auditTime } = queryParams.value;
const params = {
......@@ -108,6 +123,10 @@ async function getListData() {
if (data?.ok) {
listData.value = data.data.records;
pagination.value.itemCount = data.data.total;
const hasParsingData = listData.value.some((item: any) => item.analyzeStatus === '01')
if (hasParsingData) {
startPolling()
}
}
loading.value = false;
}
......@@ -159,7 +178,7 @@ function filterDocStatus(status: string) {
const isShowAddDocModal = ref(false)
const addDocForm = ref({
const addDocForm = ref<any>({
docTypeCode: null,
docUrl: '',
docName: '',
......@@ -194,7 +213,7 @@ function onCloseAddDocModal() {
}
const addDocLoading = ref(false)
function handleValidateAddDocForm() {
addDocFormRef.value?.validate((errors) => {
addDocFormRef.value?.validate((errors: any) => {
if (!errors) {
submitAddProdcutDoc()
}
......@@ -204,7 +223,7 @@ function handleValidateAddDocForm() {
})
}
const defaultFileList = ref([])
const defaultFileList = ref<any>([])
const operateType = ref('')
function onAddDoc() {
......@@ -285,15 +304,12 @@ async function customRequest({
onFinish,
onError,
onProgress
}: UploadCustomRequestOptions) {
}: any) {
const fm = new FormData()
fm.append('file', file.file)
fm.append('scene', 'product')
const res = await fetchUploadImgFile(fm, {
withCredentials,
onUploadProgress: ({ percent }) => {
onProgress({ percent: Math.ceil(percent) })
}
withCredentials
})
if (res.data) {
addDocForm.value.docUrl = res.data.data.fullUrl
......@@ -372,6 +388,13 @@ function onAuditDoc(data: any) {
onMounted(() => {
getListData()
})
onBeforeRouteLeave((to, from, next) => {
clearTimeout(timer.value)
timer.value = null
next()
})
</script>
<template>
<div>
......@@ -434,6 +457,7 @@ onMounted(() => {
<vxe-column min-width="120" field="analyzeStatus" title="解析状态">
<template #default="{ row }">
<span>{{ filterAnalyzeStatus(row.analyzeStatus) }}</span>
<n-spin v-if="row.analyzeStatus === '01'" class="define-mini-size" :stroke-width="22" size="small" />
</template>
</vxe-column>
<vxe-column min-width="200" field="createBy" title="创建人"></vxe-column>
......@@ -473,46 +497,13 @@ onMounted(() => {
</div>
</n-card>
<n-modal v-model:show="showAddProductModal">
<n-card style="max-width: 600px;" title="新增产品" :bordered="false" size="huge" role="dialog" aria-modal="true">
<template #header-extra>
<Icon icon="ic:sharp-close" class="text-size-22px cursor-pointer" @click="showAddProductModal = false" />
</template>
<n-form ref="addProductFormRef" :model="addFormModal" :rules="rules" label-placement="left" label-width="auto"
require-mark-placement="right-hanging" :size="size" :style="{
maxWidth: '640px',
}">
<n-form-item label="产品编码" path="productCode">
<n-input show-count maxlength="16" v-model:value="addFormModal.productCode" placeholder="产品编码" />
</n-form-item>
<n-form-item label="产品名称" path="productName">
<n-input show-count maxlength="32" v-model:value="addFormModal.productName" placeholder="产品名称" />
</n-form-item>
<n-form-item label="产品类别" path="productTypeId">
<n-select label-field="typeName" value-field="typeId" v-model:value="addFormModal.productTypeId" clearable
placeholder="产品类别" :options="productTypeList" />
</n-form-item>
<n-form-item label="产品介绍" path="description">
<n-input type="textarea" v-model:value="addFormModal.description" placeholder="产品介绍" />
</n-form-item>
</n-form>
<template #footer>
<n-space justify="center">
<n-button @click="onCloseAddForm">取消</n-button>
<n-button :loading="addProductLoading" type="primary" @click="handleValidateAddForm">确定</n-button>
</n-space>
</template>
</n-card>
</n-modal>
<n-modal v-model:show="isShowAddDocModal">
<n-card style="max-width: 600px;" title="新增文档" :bordered="false" size="huge" role="dialog" aria-modal="true">
<template #header-extra>
<Icon icon="ic:sharp-close" class="text-size-22px cursor-pointer" @click="isShowAddDocModal = false" />
</template>
<n-form ref="addDocFormRef" :model="addDocForm" :rules="addDocRules" label-placement="left" label-width="auto"
require-mark-placement="right-hanging" :size="size" :style="{
require-mark-placement="right-hanging" :style="{
maxWidth: '640px',
}">
<n-form-item label="文档类型" path="docTypeCode">
......@@ -526,8 +517,8 @@ onMounted(() => {
</n-alert>
<br />
<n-upload :disabled="operateType === 'preview'" @preview="handlePreview"
:default-file-list="defaultFileList" accept="'.txt, .docx, .pdf, .doc, .wps, .ett, .xls, .xlsx'"
:max="1" action="https://naive-upload.free.beeceptor.com/" :headers="{
:default-file-list="defaultFileList" accept=".txt,.docx,.pdf,.doc,.wps,.ett,.xls,.xlsx" :max="1"
action="https://naive-upload.free.beeceptor.com/" :headers="{
'naive-info': 'hello!',
}" :data="{
'naive-data': 'cool! naive!',
......@@ -545,8 +536,8 @@ onMounted(() => {
<n-form-item
v-if="operateType === 'audit' || operateType === 'preview' && (addDocForm.docStatus === '02' || addDocForm.docStatus === '03')"
label="审核意见" path="auditDesc">
<n-input :disabled="operateType === 'preview'" type="textarea" v-model:value="addDocForm.auditDesc"
placeholder="审核意见" />
<n-input maxlength="200" show-count :disabled="operateType === 'preview'" type="textarea"
v-model:value="addDocForm.auditDesc" placeholder="审核意见" />
</n-form-item>
</n-form>
<template #footer v-if="operateType !== 'preview'">
......@@ -562,3 +553,10 @@ onMounted(() => {
</n-modal>
</div>
</template>
<style>
.define-mini-size .n-base-loading {
font-size: 12px !important;
margin-left: 4px;
}
</style>
......@@ -14,7 +14,7 @@ export default defineConfig(configEnv => {
const viteCommand = configEnv.command;
const vitePath = resolvePath('./', import.meta.url);
return {
base: '/chonglin-admin/',
base: '/sdream-admin-fe/',
resolve: {
alias: {
'~': vitePath.root,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment