Răsfoiți Sursa

Merge remote-tracking branch 'origin/master' into master

肖路 1 lună în urmă
părinte
comite
b06811228c

+ 37 - 0
src/api/home/diy.ts

@@ -0,0 +1,37 @@
+import request from '@/utils/request';
+
+//当前客户下的站点地址
+export function getPlatformIndexDiyPcPage(query: any) {
+  return request({
+    url: '/mall/indexDiyPcPage/getPlatformIndexDiyPcPage',
+    method: 'get',
+    params: query
+  });
+}
+
+//咨询
+export function getAnnouncementPage(query: any) {
+  return request({
+    url: '/system/diySystem/getAnnouncementPage',
+    method: 'get',
+    params: query
+  });
+}
+
+//商品
+export function getDiyProductPage(query: any) {
+  return request({
+    url: '/product/diyProduct/getDiyProductPage',
+    method: 'get',
+    params: query
+  });
+}
+
+//商品
+export function getServiceCaseList(query: any) {
+  return request({
+    url: '/product/diyProduct/getServiceCaseList',
+    method: 'get',
+    params: query
+  });
+}

+ 2 - 1
src/permission.ts

@@ -25,7 +25,8 @@ const whiteList = [
   '/search',
   '/item',
   '/breg',
-  '/greg'
+  '/greg',
+  '/diy'
 ];
 
 const isWhiteList = (path: string) => {

+ 6 - 0
src/router/index.ts

@@ -86,6 +86,12 @@ export const constantRoutes: RouteRecordRaw[] = [
         name: 'IndexFuli',
         meta: { title: '福礼商城', icon: 'dashboard', affix: true, nav: true }
       },
+      {
+        path: '/diy',
+        component: () => import('@/views/home/diy.vue'),
+        name: 'IndexDiy',
+        meta: { title: 'Diy商城', icon: 'dashboard', affix: true, nav: true }
+      },
       {
         path: '/indexData',
         component: () => import('@/views/home/index-data.vue'),

+ 42 - 8
src/views/enterprise/companyInfo/edit.vue

@@ -115,10 +115,10 @@
               <el-form-item label="营业执照" prop="businessLicense">
                 <el-upload
                   class="upload-box"
-                  action="#"
-                  :auto-upload="false"
+                  :action="action"
                   :show-file-list="false"
-                  :on-change="(file: any) => handleUpload(file, 'businessLicense')"
+                  :on-success="handleBusinessLicenseSuccess"
+                  :before-upload="beforeAvatarUpload"
                 >
                   <div v-if="form.businessLicense" class="upload-preview">
                     <el-image :src="form.businessLicense" fit="cover" />
@@ -134,10 +134,10 @@
               <el-form-item label="法人身份证" prop="legalPersonCardUrl">
                 <el-upload
                   class="upload-box"
-                  action="#"
-                  :auto-upload="false"
+                  :action="action"
                   :show-file-list="false"
-                  :on-change="(file: any) => handleUpload(file, 'legalPersonCardUrl')"
+                  :on-success="handleLegalPersonCardUrlSuccess"
+                  :before-upload="beforeAvatarUpload"
                 >
                   <div v-if="form.legalPersonCardUrl" class="upload-preview">
                     <el-image :src="form.legalPersonCardUrl" fit="cover" />
@@ -168,9 +168,9 @@ import { useRouter } from 'vue-router';
 import { ArrowLeft, Plus } from '@element-plus/icons-vue';
 import { ElMessage } from 'element-plus';
 import { getEnterpriseInfo, updateEnterpriseInfo, getIndustryCategoryList, getEnterpriseScaleList } from '@/api/pc/enterprise';
-
+const action = import.meta.env.VITE_APP_BASE_API + '/resource/oss/upload';
 import { regionData } from 'element-china-area-data';
-
+import type { UploadProps } from 'element-plus';
 const router = useRouter();
 const formRef = ref();
 
@@ -236,6 +236,40 @@ const loadScaleList = async () => {
   }
 };
 
+//上传成功
+const handleBusinessLicenseSuccess = (res: any) => {
+  if (res.code == 200) {
+    form.businessLicense = res.data.url;
+  } else {
+    ElMessage({
+      message: res.msg,
+      type: 'warning'
+    });
+  }
+  console.log(res);
+};
+
+//上传成功
+const handleLegalPersonCardUrlSuccess = (res: any) => {
+  if (res.code == 200) {
+    form.legalPersonCardUrl = res.data.url;
+  } else {
+    ElMessage({
+      message: res.msg,
+      type: 'warning'
+    });
+  }
+  console.log(res);
+};
+
+const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
+  if (rawFile.size / 1024 / 1024 > 2) {
+    ElMessage.error('不能大于2MB!');
+    return false;
+  }
+  return true;
+};
+
 // 加载企业信息
 const loadEnterpriseInfo = async () => {
   try {

+ 35 - 0
src/views/home/diy.vue

@@ -0,0 +1,35 @@
+<template>
+  <div class="pay-pages"></div>
+</template>
+
+<script setup lang="ts">
+import { getAnnouncementPage, getDiyProductPage, getServiceCaseList,getPlatformIndexDiyPcPage } from '@/api/home/diy';
+
+getAnnouncementPage({
+  pageNum: 1,
+  pageSize: 10,
+  ids: '1,2,3'
+}).then((res) => {
+  if (res.code == 200) {
+    // carouselList.value = res.data;
+  }
+});
+getDiyProductPage({ pageNum: 1, pageSize: 10, ids: '434643,434645' }).then((res) => {
+  if (res.code == 200) {
+    // carouselList.value = res.data;
+  }
+});
+getServiceCaseList({ pageNum: 1, pageSize: 10, ids: '1031,1032' }).then((res) => {
+  if (res.code == 200) {
+    // carouselList.value = res.data;
+  }
+});
+
+getPlatformIndexDiyPcPage({}).then((res) => {
+  if (res.code == 200) {
+    // carouselList.value = res.data;
+  }
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 34 - 2
src/views/home/index-mro.vue

@@ -1,6 +1,9 @@
 <template>
   <div class="home-pages">
     <div class="head-pages">
+      <div class="bg-img">
+        <img :src="carouselList.length && carouselList[carouselIndex].imageUrl" alt="" />
+      </div>
       <!--  头部 -->
       <div class="home-head" @mouseleave="leaveClassify">
         <!-- 分类 -->
@@ -35,7 +38,7 @@
         </div>
         <!-- 轮播区域 -->
         <div class="carousel-bos">
-          <el-carousel trigger="click" height="540px">
+          <el-carousel trigger="click" height="540px" @change="onCarousel">
             <el-carousel-item v-for="item in carouselList" :key="item">
               <img :src="item.imageUrl" alt="" />
             </el-carousel-item>
@@ -200,6 +203,7 @@ const classifyShow = ref<any>(false);
 const classifyInfo = ref<any>([]);
 const classifyList = ref<any>([]);
 const carouselList = ref<any>([]);
+const carouselIndex = ref<any>(0);
 const realList = ref<any>([]);
 const interestsList = ref<any>([]);
 const sellList = ref<any>([]);
@@ -244,6 +248,7 @@ getProductCategoryTree({
 getHomeAdList({}).then((res) => {
   if (res.code == 200) {
     carouselList.value = res.data;
+    carouselIndex.value = 0;
   }
 });
 
@@ -322,6 +327,10 @@ const onNav = (item: any) => {
     }
   });
 };
+
+const onCarousel = (res: any) => {
+  carouselIndex.value = res;
+};
 </script>
 
 <style lang="scss" scoped>
@@ -329,9 +338,32 @@ const onNav = (item: any) => {
   width: 100%;
   .head-pages {
     width: 100%;
-    background: #000000;
+    // background: #000000;
     margin-top: 10px;
 
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+    position: relative;
+    backdrop-filter: blur(95px);
+    filter: blur(30rpx);
+
+    .bg-img {
+      position: absolute;
+      width: 100%;
+      height: 100%;
+      top: 0;
+      z-index: -1;
+      filter: blur(30rpx);
+      overflow: hidden;
+
+      img {
+        width: 100%;
+        height: 100%;
+        transform: scale(1.2);
+        filter: blur(30px);
+      }
+    }
+
     // 头部
     .home-head {
       width: 1200px;

+ 6 - 0
src/views/home/index.vue

@@ -326,6 +326,7 @@ import profile from '@/assets/images/profile.jpg';
 import { onPath } from '@/utils/siteConfig';
 import { getToken } from '@/utils/auth';
 import { getInfo } from '@/api/login';
+import { getPlatformIndexDiyPcPage } from '@/api/home/diy';
 import {
   getProductCategoryTree,
   getHomeAdList,
@@ -377,6 +378,11 @@ const bigbrandOne = ref<any>({});
 const homeList = ref<any>([]);
 const router = useRouter();
 
+getPlatformIndexDiyPcPage({}).then((res) => {
+  if (res.code == 200) {
+  }
+});
+
 onMounted(() => {
   if (getToken()) {
     getInfo().then((res) => {

+ 75 - 4
src/views/order/orderEvaluation/index.vue

@@ -132,8 +132,20 @@
           <el-input v-model="evaluateForm.content" type="textarea" :rows="4" placeholder="请输入评价内容" maxlength="200" show-word-limit />
         </el-form-item>
         <el-form-item label="上传图片">
-          <el-upload action="#" list-type="picture-card" :auto-upload="false" :limit="5">
-            <el-icon><Plus /></el-icon>
+          <el-upload
+            class="upload-box"
+            :action="action"
+            :show-file-list="false"
+            :on-success="handleEvaluateUrlSuccess"
+            :before-upload="beforeAvatarUpload"
+          >
+            <div v-if="evaluateForm.evaluateUrl" class="upload-preview">
+              <el-image :src="evaluateForm.evaluateUrl" fit="cover" />
+            </div>
+            <div v-else class="upload-placeholder">
+              <el-icon :size="24"><Plus /></el-icon>
+              <span>上传</span>
+            </div>
           </el-upload>
         </el-form-item>
       </el-form>
@@ -155,9 +167,10 @@ import { getOrderList, getOrderProducts, getEvalutionList, addOrderEvaluation, g
 import type { OrderMain, OrderStatusStats } from '@/api/pc/enterprise/orderTypes';
 import { getDeptTree } from '@/api/pc/organization';
 import { DeptInfo } from '@/api/pc/organization/types';
+const action = import.meta.env.VITE_APP_BASE_API + '/resource/oss/upload';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { order_status, pay_method } = toRefs<any>(proxy?.useDict('order_status', 'pay_method'));
-
+import type { UploadProps } from 'element-plus';
 const router = useRouter();
 const activeMainTab = ref('0');
 const evaluateDialogVisible = ref(false);
@@ -175,7 +188,7 @@ const mainTabs = [
 ];
 
 const queryParams = reactive({ keyword: '', dateRange: null, department: '', status: '', payType: '', evaluationStatus: '' });
-const evaluateForm = reactive({ deliverGoods: 5, content: '', evaluationType: null });
+const evaluateForm = reactive({ deliverGoods: 5, content: '', evaluationType: null, evaluateUrl: '' });
 const evaluateRules = {
   deliverGoods: [{ required: true, message: '请选择评分', trigger: 'change' }],
   content: [{ required: true, message: '请输入评价内容', trigger: 'blur' }]
@@ -292,6 +305,27 @@ const getorders = async () => {
   }
 };
 
+//上传成功
+const handleEvaluateUrlSuccess = (res: any) => {
+  if (res.code == 200) {
+    evaluateForm.evaluateUrl = res.data.url;
+  } else {
+    ElMessage({
+      message: res.msg,
+      type: 'warning'
+    });
+  }
+  console.log(res);
+};
+
+const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
+  if (rawFile.size / 1024 / 1024 > 2) {
+    ElMessage.error('不能大于2MB!');
+    return false;
+  }
+  return true;
+};
+
 // 监听标签页切换,重新获取数据
 watch(activeMainTab, () => {
   getorders();
@@ -582,6 +616,43 @@ onMounted(() => {
     }
   }
 }
+.upload-box {
+  :deep(.el-upload) {
+    width: 100px;
+    height: 100px;
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    overflow: hidden;
+
+    &:hover {
+      border-color: #e60012;
+    }
+  }
+
+  .upload-placeholder {
+    width: 100%;
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    color: #999;
+    font-size: 12px;
+    gap: 5px;
+  }
+
+  .upload-preview {
+    width: 100%;
+    height: 100%;
+
+    .el-image {
+      width: 100%;
+      height: 100%;
+    }
+  }
+}
+
 .evaluate-product {
   display: flex;
   align-items: center;

+ 3 - 1
src/views/order/orderManage/applyAfter.vue

@@ -115,7 +115,7 @@
               <el-input v-model="form.problemDescription" type="textarea" :rows="5" placeholder="请输入问题描述" />
             </el-form-item>
             <el-form-item label="凭证图片">
-              <el-upload v-model:file-list="form.voucherPhotoArray" list-type="picture-card" action="#" :auto-upload="false" :limit="5">
+              <el-upload v-model:file-list="form.voucherPhotoArray" list-type="picture-card" :action="action" :auto-upload="false" :limit="5">
                 <el-icon><Plus /></el-icon>
               </el-upload>
             </el-form-item>
@@ -208,6 +208,8 @@ import { getOrderInfo, getOrderProductsWithAvailableQty, getReturnReason } from
 import { getEnterpriseInfo, getAddressList } from '@/api/pc/enterprise';
 import { getOrderReturnInfo, addOrderReturn } from '@/api/pc/enterprise/orderReturn';
 import type { OrderReturn } from '@/api/pc/enterprise/orderReturnTypes';
+const action = import.meta.env.VITE_APP_BASE_API + '/resource/oss/upload';
+import type { UploadProps } from 'element-plus';
 const topBtnFlag = ref(true);
 const router = useRouter();
 const route = useRoute();

+ 32 - 5
src/views/valueAdded/complaint/index.vue

@@ -24,12 +24,16 @@
 
       <!-- 上传照片 -->
       <el-form-item label="上传照片">
-        <el-upload action="#" list-type="picture-card" :auto-upload="false" :limit="5" @change="handleUploadChange">
-          <el-icon><Plus /></el-icon>
-          <template #tip>
-            <div class="upload-tip">上传</div>
-          </template>
+        <el-upload
+          class="avatar-uploader"
+          :action="action"
+          :show-file-list="false"
+          :on-success="handleAvatarSuccess"
+          :before-upload="beforeAvatarUpload"
+        >
+          <el-icon class="avatar-uploader-icon"><Plus /></el-icon>
         </el-upload>
+        <img class="upload-img" v-if="form.relatedPictures" :src="form.relatedPictures" />
       </el-form-item>
 
       <!-- 联系方式 -->
@@ -53,6 +57,8 @@ import { PageTitle } from '@/components';
 import { addComplaintsSuggestions } from '@/api/pc/valueAdded';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { complaints_suggestion_type } = toRefs<any>(proxy?.useDict('complaints_suggestion_type'));
+const action = import.meta.env.VITE_APP_BASE_API + '/resource/oss/upload';
+import type { UploadProps } from 'element-plus';
 
 // 反馈类型选项
 const feedbackTypes = computed(() => complaints_suggestion_type.value || []);
@@ -71,6 +77,27 @@ const rules = {
 
 // 上传图片
 const handleUploadChange = (file, fileList) => {};
+
+//上传成功
+const handleAvatarSuccess = (res: any) => {
+  if (res.code == 200) {
+    form.relatedPictures = res.data.url;
+  } else {
+    ElMessage({
+      message: res.msg,
+      type: 'warning'
+    });
+  }
+  console.log(res);
+};
+
+const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
+  if (rawFile.size / 1024 / 1024 > 2) {
+    ElMessage.error('不能大于2MB!');
+    return false;
+  }
+  return true;
+};
 // 提交
 const handleSubmit = async () => {
   if (!form.feedbackContent) {