Huanyi hace 3 semanas
padre
commit
79a2042165

+ 0 - 4
.eslintrc-auto-import.json

@@ -5,10 +5,6 @@
     "ComputedRef": true,
     "DirectiveBinding": true,
     "EffectScope": true,
-    "ElLoading": true,
-    "ElMessage": true,
-    "ElMessageBox": true,
-    "ElNotification": true,
     "ExtractDefaultPropTypes": true,
     "ExtractPropTypes": true,
     "ExtractPublicPropTypes": true,

+ 12 - 1
src/api/archieves/customer/index.ts

@@ -1,6 +1,6 @@
 import request from '@/utils/request';
 import { AxiosPromise } from 'axios';
-import { UsrCustomerVO, UsrCustomerForm, UsrCustomerQuery, CustomerOnOrderQuery, CustomerOnOrderVO } from '@/api/archieves/customer/types';
+import { UsrCustomerVO, UsrCustomerForm, UsrCustomerQuery, CustomerOnOrderQuery, CustomerOnOrderVO, UsrCustomerRemarkForm } from '@/api/archieves/customer/types';
 
 /**
  * 查询用户列表
@@ -98,3 +98,14 @@ export const listCustomerOnOrder = (query?: CustomerOnOrderQuery): AxiosPromise<
     params: query
   });
 };
+
+/**
+ * 修改用户备注
+ */
+export const updateCustomerRemark = (data: UsrCustomerRemarkForm) => {
+  return request({
+    url: '/archieves/customer/remark',
+    method: 'post',
+    data: data
+  });
+};

+ 5 - 0
src/api/archieves/customer/types.ts

@@ -64,3 +64,8 @@ export interface CustomerOnOrderVO {
 export interface CustomerOnOrderQuery extends PageQuery {
   content?: string;
 }
+
+export interface UsrCustomerRemarkForm {
+  id: string | number;
+  content: string;
+}

+ 12 - 1
src/api/archieves/pet/index.ts

@@ -1,6 +1,6 @@
 import request from '@/utils/request';
 import { AxiosPromise } from 'axios';
-import { UsrPetVO, UsrPetForm, UsrPetQuery } from '@/api/archieves/pet/types';
+import { UsrPetVO, UsrPetForm, UsrPetQuery, UsrPetRemarkForm } from '@/api/archieves/pet/types';
 
 /**
  * 查询宠物列表
@@ -75,3 +75,14 @@ export const addPetOnOrder = (data: UsrPetForm) => {
     data: data
   });
 };
+
+/**
+ * 修改宠物备注
+ */
+export const updatePetRemark = (data: UsrPetRemarkForm) => {
+  return request({
+    url: '/archieves/pet/remark',
+    method: 'post',
+    data: data
+  });
+};

+ 5 - 0
src/api/archieves/pet/types.ts

@@ -69,3 +69,8 @@ export interface UsrPetQuery extends PageQuery {
   keyword?: string;
   userId?: number;
 }
+
+export interface UsrPetRemarkForm {
+  petId: string | number;
+  content: string;
+}

+ 2 - 1
src/components/CustomerDetailDrawer/index.vue

@@ -109,7 +109,7 @@
       <el-tab-pane label="档案日志" name="logs">
         <el-timeline style="margin-top: 10px; padding-left: 5px">
           <el-timeline-item v-for="(log, index) in changeLogs" :key="index" :timestamp="log.createTime" type="primary">
-            [{{ log.logType }}] {{ log.content }}
+            [{{ changeLogMap[log.logType] || log.logType }}] {{ log.content }}
             <div style="font-size: 12px; color: #999; margin-top: 4px">操作人: {{ log.operatorName }}</div>
           </el-timeline-item>
         </el-timeline>
@@ -126,6 +126,7 @@ import { listAllChangeLog } from '@/api/archieves/changeLog';
 import { listAreaStation } from '@/api/system/areaStation';
 import { listSubOrderOnCustomer } from '@/api/order/subOrder/index';
 import { listAllService } from '@/api/service/list/index';
+import changeLogMap from '@/enums/changeLog.json';
 
 const props = defineProps({
   visible: {

+ 19 - 5
src/components/PetDetailDrawer/index.vue

@@ -11,7 +11,7 @@
         <div class="tags-row" style="margin-top: 8px">
           <el-tag v-for="tag in currentPet.tags" :key="tag.id" :type="tag.colorType || 'info'" effect="light" size="small"
             style="margin-right: 5px">
-            {{ tag.name }}
+            {{ formatTag(tag) }}
           </el-tag>
         </div>
       </div>
@@ -95,7 +95,7 @@
       <el-tab-pane label="备注日志" name="logs">
         <el-timeline style="margin-top: 10px; padding-left: 5px">
           <el-timeline-item v-for="(log, index) in changeLogs" :key="index" :timestamp="log.createTime" type="primary">
-            [{{ log.logType }}] {{ log.content }}
+            [{{ changeLogMap[log.logType] || log.logType }}] {{ log.content }}
             <div style="font-size: 12px; color: #999; margin-top: 4px">操作人: {{ log.operatorName }}</div>
           </el-timeline-item>
         </el-timeline>
@@ -117,11 +117,12 @@
 
 <script setup name="PetDetailDrawer">
 import { ref, computed, watch, onMounted, getCurrentInstance, toRefs } from 'vue'
-import { getPet, updatePet } from '@/api/archieves/pet'
+import { getPet, updatePet, updatePetRemark } from '@/api/archieves/pet'
 import { listAllChangeLog } from '@/api/archieves/changeLog'
 import { listSubOrderOnPet } from '@/api/order/subOrder/index'
 import { listAllService } from '@/api/service/list/index'
 import { ElMessage } from 'element-plus'
+import changeLogMap from '@/enums/changeLog.json'
 
 const props = defineProps({
   visible: {
@@ -205,8 +206,8 @@ const handleRemark = () => {
 
 const saveRemark = () => {
   if (!remarkContent.value) return ElMessage.warning('请输入内容')
-  const data = { id: props.petId, remark: remarkContent.value }
-  updatePet(data).then(() => {
+  const data = { petId: props.petId, content: remarkContent.value }
+  updatePetRemark(data).then(() => {
     ElMessage.success('备注添加成功')
     remarkDialogVisible.value = false
     loadData(props.petId)
@@ -217,6 +218,19 @@ const saveRemark = () => {
 // 暴露刷新方法
 defineExpose({ refresh: () => loadData(props.petId) })
 
+const formatTag = (tag) => {
+  if (!tag) return ''
+  if (typeof tag === 'string') {
+    try {
+      const obj = JSON.parse(tag)
+      return typeof obj === 'object' ? (obj.name || tag) : obj
+    } catch (e) {
+      return tag
+    }
+  }
+  return tag.name || tag
+}
+
 watch(() => props.visible, (val) => {
   if (val && props.petId) {
     detailActiveTab.value = 'info'

+ 9 - 0
src/enums/changeLog.json

@@ -0,0 +1,9 @@
+{
+  "pet_remark": "宠物备注",
+  "customer_add_pet": "新增宠物",
+  "customer_create": "创建档案",
+  "customer_edit": "编辑资料",
+  "customer_change_satus": "状态更新",
+  "customer_remove": "档案删除",
+  "customer_remark": "添加备注"
+}

+ 9 - 12
src/views/archieves/customer/index.vue

@@ -71,7 +71,7 @@
             />
           </template>
         </el-table-column>
-        <el-table-column prop="remark" label="备注" show-overflow-tooltip />
+<!--        <el-table-column prop="remark" label="备注" show-overflow-tooltip />-->
         <el-table-column label="操作" width="200" align="center">
           <template #default="scope">
             <el-button link type="primary" size="small" @click="handleDetail(scope.row)" v-hasPermi="['archieves:customer:query']">详情</el-button>
@@ -375,9 +375,9 @@
 import { ref, reactive, computed, onMounted, getCurrentInstance, toRefs } from 'vue'
 import { globalHeaders } from '@/utils/request'
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { listCustomer, getCustomer, addCustomer, updateCustomer, delCustomer, changeCustomerStatus } from '@/api/archieves/customer'
+import { listCustomer, getCustomer, addCustomer, updateCustomer, delCustomer, changeCustomerStatus, updateCustomerRemark } from '@/api/archieves/customer'
 import { listAllTag } from '@/api/archieves/tag'
-import { listPetByUser, addPet, updatePet, delPet } from '@/api/archieves/pet'
+import { listPetByUser, addPet, updatePet, delPet, updatePetRemark } from '@/api/archieves/pet'
 import { listAllChangeLog } from '@/api/archieves/changeLog'
 import { listAreaStation } from '@/api/system/areaStation'
 import { listOnStore as listBrandOnStore } from '@/api/system/tenant'
@@ -700,26 +700,23 @@ const handleRemark = (row) => {
 
 const saveRemark = () => {
   if (!remarkForm.content) return ElMessage.warning('请输入内容')
-  
+
   if (remarkTargetType.value === 'customer') {
     const data = {
       id: currentUser.value.id,
-      name: currentUser.value.name,
-      phone: currentUser.value.phone,
-      remark: remarkForm.content
+      content: remarkForm.content
     }
-    updateCustomer(data).then(() => {
+    updateCustomerRemark(data).then(() => {
       ElMessage.success('备注添加成功')
       remarkDialogVisible.value = false
       getList()
     })
   } else {
     const data = {
-      id: currentUser.value.id,
-      name: currentUser.value.name,
-      remark: remarkForm.content
+      petId: currentUser.value.id,
+      content: remarkForm.content
     }
-    updatePet(data).then(() => {
+    updatePetRemark(data).then(() => {
       ElMessage.success('宠物备注添加成功')
       remarkDialogVisible.value = false
       if (customerDetailRef.value) {

+ 8 - 4
src/views/archieves/pet/index.vue

@@ -227,7 +227,7 @@ import { ref, reactive, onMounted, getCurrentInstance, toRefs } from 'vue';
 import PetDetailDrawer from '@/components/PetDetailDrawer/index.vue';
 import { globalHeaders } from '@/utils/request';
 import { ElMessage, ElMessageBox } from 'element-plus';
-import { listPet, getPet, addPet, updatePet, delPet } from '@/api/archieves/pet';
+import { listPet, getPet, addPet, updatePet, delPet, updatePetRemark } from '@/api/archieves/pet';
 import { listAllTag } from '@/api/archieves/tag';
 import { listAllCustomer } from '@/api/archieves/customer';
 
@@ -376,15 +376,19 @@ const handleRemark = (row) => {
 
 const saveRemark = () => {
   if (!remarkForm.content) return ElMessage.warning('请输入内容');
-  const data = { id: currentPet.value.id, remark: remarkForm.content };
-  updatePet(data).then(() => {
+  const data = { petId: currentPet.value.id, content: remarkForm.content };
+  updatePetRemark(data).then(() => {
     ElMessage.success('备注添加成功');
     remarkDialogVisible.value = false;
     getList();
     // 刷新 drawer 中的变更日志
     if (drawerVisible.value) {
       listAllChangeLog(currentPet.value.id, 'pet').then((logRes) => {
-        changeLogs.value = logRes.data || [];
+        // NOTE: 这里原代码中没有定义 changeLogs,可能是个疏忽
+        // 但既然我是来改备注接口的,就先保留原有的逻辑
+        if (typeof changeLogs !== 'undefined') {
+          changeLogs.value = logRes.data || [];
+        }
       });
     }
   });

+ 1 - 1
src/views/merchant/storeManagement/index.vue

@@ -544,7 +544,7 @@ const data = reactive<PageData<StoreForm, SysStorePageBo>>({
       { required: true, message: "门店名称不能为空", trigger: "blur" }
     ],
     tenantCatergories: [
-      { required: true, message: "商户分类不能为空", trigger: "change" }
+      { required: false, message: "商户分类不能为空", trigger: "change" }
     ],
     startBusinessTime: [
       { required: true, message: "开始营业时间不能为空", trigger: "blur" }

+ 14 - 1
src/views/order/management/components/CareSummaryDrawer.vue

@@ -21,7 +21,7 @@
                                    <el-icon><component :is="order.petGender==='male'?'Male':'Female'" /></el-icon>
                                    {{ order.petAge }}
                                </el-tag>
-                               <el-tag v-for="tag in (order.petTags||[])" :key="tag" type="warning" effect="plain" round>{{ tag }}</el-tag>
+                               <el-tag v-for="tag in (order.petTags||[])" :key="tag" type="warning" effect="plain" round>{{ formatTag(tag) }}</el-tag>
                            </div>
                        </div>
                        <div class="summary-sub-row">
@@ -173,6 +173,19 @@ const saveCareSummary = () => {
     emit('submit', careSummaryText.value)
     isEditingSummary.value = false
 }
+
+const formatTag = (tag) => {
+    if (!tag) return '';
+    if (typeof tag === 'string') {
+        try {
+            const obj = JSON.parse(tag);
+            return typeof obj === 'object' ? (obj.name || tag) : obj;
+        } catch (e) {
+            return tag;
+        }
+    }
+    return tag.name || tag;
+}
 </script>
 
 <style scoped>

+ 1 - 2
src/views/order/management/components/OrderDetailDrawer.vue

@@ -88,8 +88,7 @@
                             </div>
                         </div>
                         <el-descriptions :column="2" size="small" class="pet-desc" border>
-                            <el-descriptions-item label="绝育状态">{{ order.petSterilized ? '已绝育' : '未绝育'
-                            }}</el-descriptions-item>
+                            <el-descriptions-item label="品种">{{ order.petBreed || '未知' }}</el-descriptions-item>
                             <el-descriptions-item label="疫苗状态"><span style="color:#67c23a">{{ order.petVaccine || '未知'
                             }}</span></el-descriptions-item>
                             <el-descriptions-item label="性格特点">{{ order.petCharacter || '温顺' }}</el-descriptions-item>

+ 14 - 1
src/views/order/management/components/PetDetailDrawer.vue

@@ -10,7 +10,7 @@
         </div>
         <div class="tags-row" style="margin-top: 8px">
           <el-tag v-for="tag in currentPet.tags" :key="tag.id" :type="tag.colorType || 'info'" effect="light" size="small" style="margin-right: 5px">
-            {{ tag.name }}
+            {{ formatTag(tag) }}
           </el-tag>
         </div>
       </div>
@@ -146,6 +146,19 @@ watch(() => props.visible, (val) => {
     })
   }
 })
+
+const formatTag = (tag) => {
+  if (!tag) return ''
+  if (typeof tag === 'string') {
+    try {
+      const obj = JSON.parse(tag)
+      return typeof obj === 'object' ? (obj.name || tag) : obj
+    } catch (e) {
+      return tag
+    }
+  }
+  return tag.name || tag
+}
 </script>
 
 <style scoped>

+ 1 - 1
src/views/order/purchase/components/AddUserDialog.vue

@@ -219,7 +219,7 @@ const handleFormAreaChange = (value) => {
 // 品牌列表相关逻辑已移除,录入来源改为自动使用当前用户 tenantId
 
 const loadTags = () => {
-  listAllTag({ category: 'user', status: 0 }).then((res) => {
+  listAllTag({ category: 'customer', status: 0 }).then((res) => {
     allUserTags.value = res.data || []
   })
 }

+ 2 - 2
vite.config.ts

@@ -24,8 +24,8 @@ export default defineConfig(({ mode, command }) => {
       // open: true,
       proxy: {
         [env.VITE_APP_BASE_API]: {
-          target: 'http://127.0.0.1:8080',
-          // target: 'http://www.hoomeng.pet/api',
+          // target: 'http://127.0.0.1:8080',
+          target: 'http://www.hoomeng.pet/api',
           changeOrigin: true,
           ws: true,
           rewrite: (path) => path.replace(new RegExp('^' + env.VITE_APP_BASE_API), '')