diff --git a/dist 9091.zip b/dist 9091.zip new file mode 100644 index 0000000..97cb27a Binary files /dev/null and b/dist 9091.zip differ diff --git a/dist 9092.zip b/dist 9092.zip new file mode 100644 index 0000000..f9de64d Binary files /dev/null and b/dist 9092.zip differ diff --git a/src/api/ImageUrl.ts b/src/api/ImageUrl.ts index b0ac22f..e79c2e9 100644 --- a/src/api/ImageUrl.ts +++ b/src/api/ImageUrl.ts @@ -1,4 +1,8 @@ // export const downLoadImage = 'http://1.94.237.210:3457/file/download/' -export const downLoadImage = 'http://27.30.77.229:9092/file/download/' +// export const downLoadImage = 'http://27.30.77.229:9092/file/download/' + +export const downLoadImage = 'http://160.202.242.36:9092/file/download/' +// export const downLoadImage = 'http://160.202.242.36:9091/file/download/' + diff --git a/src/api/myAxios.ts b/src/api/myAxios.ts index c0b52e8..922e590 100644 --- a/src/api/myAxios.ts +++ b/src/api/myAxios.ts @@ -7,11 +7,14 @@ import router from "../router"; const myAxios = axios.create({ withCredentials: true, // baseURL:'http://localhost:9091' - baseURL:'http://localhost:9092' + //baseURL:'http://localhost:9092' // baseURL:'http://1.94.237.210:3457' //baseURL:'http://1.94.237.210:8088' //baseURL:'http://27.30.77.229:9091/' //baseURL:'http://27.30.77.229:9092/' + // baseURL:'http://160.202.242.36:9092/' + baseURL:'http://160.202.242.36:9092/' + }); diff --git a/src/layout/manage/ManageSidebar.vue b/src/layout/manage/ManageSidebar.vue index ab4f2c8..d76a574 100644 --- a/src/layout/manage/ManageSidebar.vue +++ b/src/layout/manage/ManageSidebar.vue @@ -54,9 +54,9 @@ 工作详情 - + - 社群 + 业绩管理 diff --git a/src/router/routes.ts b/src/router/routes.ts index 347e7ce..f3b328d 100644 --- a/src/router/routes.ts +++ b/src/router/routes.ts @@ -32,11 +32,6 @@ export const routes = [ name: '工作详情', component: () => import("../view/work/workDetail.vue"), }, - { - path: '/community', - name: '社群', - component: () => import("../view/community/community.vue"), - }, { path: '/userList', name: '用户列表', @@ -122,6 +117,26 @@ export const routes = [ name:'课程订单', component: ()=> import("../view/course/courseOrder.vue") }, + { + path:'/performanceManagement', + name:'主管业绩报表', + component: ()=> import("../view/performance/performanceManagement.vue") + }, + { + path:'/employeePerformaince', + name:'员工业绩报表', + component: ()=> import("../view/performance/employeePerformaince.vue") + }, + { + path:'/customerOrder', + name:'客户订单明细', + component: ()=> import("../view/performance/customerOrder.vue") + }, + { + path:'/customerDetail', + name:'订单明细详情', + component: ()=> import("../view/performance/customerDetail.vue") + }, ] }, ] \ No newline at end of file diff --git a/src/view/community/community.vue b/src/view/community/community.vue deleted file mode 100644 index 19fcce0..0000000 --- a/src/view/community/community.vue +++ /dev/null @@ -1,4 +0,0 @@ - - diff --git a/src/view/components/RichTextEditor.vue b/src/view/components/RichTextEditor.vue index 5c7643f..d92e86e 100644 --- a/src/view/components/RichTextEditor.vue +++ b/src/view/components/RichTextEditor.vue @@ -71,7 +71,7 @@ const editorConfig = { if (res.code === 1) { // 拼接完整 URL 地址再插入到富文本中 - const imageUrl = 'http://27.30.77.229:9092/file/download/' + res.data + const imageUrl = 'http://160.202.242.36:9092/file/download/' + res.data insertFn(imageUrl) } else { console.error('上传失败:', res.message) diff --git a/src/view/course/addCourse.vue b/src/view/course/addCourse.vue index daf9231..e5c8d81 100644 --- a/src/view/course/addCourse.vue +++ b/src/view/course/addCourse.vue @@ -31,11 +31,6 @@
- -
-

推广码说明

-
-
@@ -128,41 +123,8 @@ -
-
- -
- -
- -
-
@@ -176,14 +138,6 @@ />
-
- 推广码说明 - -
@@ -191,6 +145,10 @@ 立即创建
+ @@ -268,7 +226,6 @@ const encode64 = (text: string): string => { const encryptValue = (value: any, key: string): any => { // 数值型字段直接返回,不加密 if (key === 'originPrice' || key === 'discountPrice' || - key === 'firstLevelRate' || key === 'secondLevelRate' || key === 'image' || key ==='name'||key === 'type') { return value; } @@ -292,17 +249,9 @@ const validatePrices = () => { return true; }; -const validateRates = () => { - if (formData.secondLevelRate >= formData.firstLevelRate) { - return false; - } - return true; -}; - const handleSubmit = async () => { // 验证价格和佣金比例 const isPriceValid = validatePrices(); - const isRateValid = validateRates(); let errorMessage = ''; @@ -310,9 +259,6 @@ const handleSubmit = async () => { errorMessage += '折扣价必须小于原价\n'; } - if (!isRateValid) { - errorMessage += '二级佣金比例必须小于一级佣金比例\n'; - } if (errorMessage) { alert(errorMessage); @@ -370,11 +316,8 @@ const validateForm = (): boolean => { 'type', 'image', 'detail', - 'promoCodeDesc', 'originPrice', - 'discountPrice', - 'firstLevelRate', - 'secondLevelRate' + 'discountPrice' ]; return requiredFields.every(field => { @@ -382,6 +325,10 @@ const validateForm = (): boolean => { return value !== '' && value !== null && value !== undefined; }); }; + +const returnBack=()=>{ + router.push('/courseManagement') +} @@ -643,17 +590,10 @@ const validateForm = (): boolean => { width: 100%; } -.rich-text-columns { - display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 1rem; - align-items: start; -} + .rich-text-group { - display: flex; - flex-direction: column; - gap: 0.5rem; + width: 100%; height: 100%; border: 2px solid #e2e8f0; border-radius: 0.75rem; @@ -850,5 +790,27 @@ const validateForm = (): boolean => { margin-left: 20px; margin-bottom: 10px; } +.submit-button-return { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + padding: 1rem; + margin-top: 1.5rem; + background: linear-gradient(135deg, #ffa940 0%, #ffe7ba 100%); + color: white; + border: none; + border-radius: 0.75rem; + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} +.submit-button-return:hover { + transform: translateY(-2px); + box-shadow: 0 8px 20px rgba(99, 102, 241, 0.3); +} \ No newline at end of file diff --git a/src/view/course/courseDetail.vue b/src/view/course/courseDetail.vue index 580d0d6..095423a 100644 --- a/src/view/course/courseDetail.vue +++ b/src/view/course/courseDetail.vue @@ -289,28 +289,12 @@ const limitPrice = (value: number, field: keyof CourseDetail) => { if (value < 0) (editData.value as any)[field] = 0; }; -const limitRate = (value: number, field: keyof CourseDetail) => { - if (!editData.value) return; - - // 确保是数字 - if (isNaN(value)) { - (editData.value as any)[field] = 0; - return; - } - - // 限制佣金比例在0-100之间 - if (value < 0) (editData.value as any)[field] = 0; - if (value > 100) (editData.value as any)[field] = 100; -}; // 添加输入时实时限制 - 立即修正值 const handlePriceInput = (value: number, field: keyof CourseDetail) => { limitPrice(value, field); }; -const handleRateInput = (value: number, field: keyof CourseDetail) => { - limitRate(value, field); -}; - - - - @@ -227,24 +219,7 @@ const columns = [ sorter: true, sortDirections: ['ascend', 'descend'] }, - { - title: '一级佣金比例', - dataIndex: 'firstLevelRate', - key: 'firstLevelRate', - width: 65, - align: 'center', - sorter: true, - sortDirections: ['ascend', 'descend'] - }, - { - title: '二级佣金比例', - dataIndex: 'secondLevelRate', - key: 'secondLevelRate', - width: 65, - align: 'center', - sorter: true, - sortDirections: ['ascend', 'descend'] - }, + { title: '操作', key: 'action', @@ -286,6 +261,12 @@ const toggleShelves = async (record: Course) => { // 课程名称搜索方法 const handleCourseSearch = async () => { + // 添加空值校验 + if (!searchCourseName.value.trim()) { + message.warning('课程名称不能为空'); + return; + } + searchParams.value.name = searchCourseName.value; searchParams.value.type = searchCourseType.value; searchParams.value.isShelves = searchIsShelves.value; @@ -308,6 +289,15 @@ const getCourseList = async () => { tableData.value = res.data.records; // 同步总条数到分页组件 pagination.value.total = res.data.total; + + // 添加搜索成功提示 - 只有实际搜索操作时显示 + if (searchParams.value.name || searchParams.value.type || searchParams.value.isShelves) { + if (res.data.records.length > 0) { + message.success(`搜索成功,共找到 ${res.data.records.length} 条记录`); + } else { + message.info('没有找到匹配的课程'); + } + } } else { message.error(res.message || '请求失败'); } @@ -478,12 +468,12 @@ const showDetails = (id: string) => { } // 查看章节详情 -const chapterDetails = (id: string) => { - router.push({ - path: '/chapterDetail', - query: { id: String(id) } - }) -} +// const chapterDetails = (id: string) => { +// router.push({ +// path: '/chapterDetail', +// query: { id: String(id) } +// }) +// } \ No newline at end of file diff --git a/src/view/performance/customerOrder.vue b/src/view/performance/customerOrder.vue new file mode 100644 index 0000000..369c84d --- /dev/null +++ b/src/view/performance/customerOrder.vue @@ -0,0 +1,347 @@ + + + + + \ No newline at end of file diff --git a/src/view/performance/employeePerformaince.vue b/src/view/performance/employeePerformaince.vue new file mode 100644 index 0000000..7c2fb2e --- /dev/null +++ b/src/view/performance/employeePerformaince.vue @@ -0,0 +1,329 @@ + + + + + \ No newline at end of file diff --git a/src/view/performance/performanceManagement.vue b/src/view/performance/performanceManagement.vue new file mode 100644 index 0000000..fc464b8 --- /dev/null +++ b/src/view/performance/performanceManagement.vue @@ -0,0 +1,329 @@ + + + + + \ No newline at end of file diff --git a/src/view/project/addProject.vue b/src/view/project/addProject.vue index 4c79cee..4149bfb 100644 --- a/src/view/project/addProject.vue +++ b/src/view/project/addProject.vue @@ -201,6 +201,10 @@ 立即创建
+ @@ -433,6 +437,10 @@ const limitPromoterCount = (event: Event) => { formData.maxPromoterCount = value; }; + +const returnBack =()=>{ + router.push('/project') +} @@ -589,7 +597,29 @@ const limitPromoterCount = (event: Event) => { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(99, 102, 241, 0.3); } +.submit-button-return { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + padding: 1rem; + margin-top: 1.5rem; + background: linear-gradient(135deg, #ffa940 0%, #ffe7ba 100%); + color: white; + border: none; + border-radius: 0.75rem; + font-size: 1rem; + font-weight: 600; + cursor: pointer; + transition: all 0.3s ease; + position: relative; + overflow: hidden; +} +.submit-button-return:hover { + transform: translateY(-2px); + box-shadow: 0 8px 20px rgba(99, 102, 241, 0.3); +} .button-sparkles { position: absolute; width: 20px; diff --git a/src/view/project/addprojectNotice.vue b/src/view/project/addprojectNotice.vue index b890443..1ceed3b 100644 --- a/src/view/project/addprojectNotice.vue +++ b/src/view/project/addprojectNotice.vue @@ -76,6 +76,10 @@ 发布通知
+ @@ -149,6 +153,10 @@ const handleSubmit = async () => { alert('通知发布失败,请检查网络或数据格式'); } }; + +const returnBack=()=>{ + router.push('/projectNotice') +}