Эх сурвалжийг харах

feat: 优化服务评价管理功能

UI优化:
- 优化评价项目穿梭框显示,格式改为:code - name(value)
- value为空时不显示,避免显示空括号
- 增加评价项目弹窗宽度(560 -> 800),防止文字遮挡
- 增加添加系统穿梭框高度(540 -> 600),确保内容完整显示

功能优化:
- 权重显示优化:将接口返回的小数(如0.2)转换为百分比(20%)
- 获取选项接口(getEvaluationSelect)添加serviceType参数
- 所有调用该接口的地方都传入serviceType参数(4处)

代码质量:
- 完善类型定义,evalItemDict添加code和value字段
- 统一数据获取逻辑,从currentCategory获取serviceType
code4eat 7 сар өмнө
parent
commit
da46d3970f

+ 25 - 12
src/pages/platform/setting/serviceEvaluate/index.tsx

@@ -160,9 +160,9 @@ const ServiceEvaluatePage: React.FC = () => {
     Record<string, { id: number | string; hospId?: string; itemCode: string; code: string; name: string; value: number; sort: number }[]>
   >({});
 
-  // 评价项目弹窗(右侧“添加”
+  // 评价项目弹窗(右侧"添加"
   const [evalItemModalOpen, set_evalItemModalOpen] = useState(false);
-  const [evalItemDict, set_evalItemDict] = useState<{ key: string; title: string }[]>([]);
+  const [evalItemDict, set_evalItemDict] = useState<{ key: string; code: string; value: string; title: string }[]>([]);
   const [evalItemTargetKeys, set_evalItemTargetKeys] = useState<string[]>([]);
   const [evalItemSelectedKeys, set_evalItemSelectedKeys] = useState<string[]>([]);
   // 评价项权重编辑态
@@ -255,7 +255,12 @@ const ServiceEvaluatePage: React.FC = () => {
   // 获取评价项目字典
   const fetchEvaluationItemsDict = async () => {
     const resp: any = await getDictByDictTypeAndSysid('1547394914533380096', 'EVALUATION_ITEM');
-    const list = (resp?.dataVoList || []).map((x: any) => ({ key: String(x.code || x.value), title: String(x.name) }));
+    const list = (resp?.dataVoList || []).map((x: any) => ({ 
+      key: String(x.code || x.value), 
+      code: String(x.code),
+      value: String(x.value),
+      title: String(x.name) 
+    }));
     set_evalItemDict(list);
   };
 
@@ -271,7 +276,8 @@ const ServiceEvaluatePage: React.FC = () => {
     const list = (await getServiceEvaluationItem(serviceCode)) || [];
     const normalizePercent = (v: any): number => {
       const n = Number(v);
-      return Number.isFinite(n) && n >= 0 ? n : 0;
+      // 接口返回的是小数(如0.2),需要转换为百分比(20)
+      return Number.isFinite(n) && n >= 0 ? n * 100 : 0;
     };
     const mapped = (list || []).map((it: any, idx: number) => ({
       id: it.id,  // 保留 id 字段,用于删除等操作
@@ -396,7 +402,9 @@ const ServiceEvaluatePage: React.FC = () => {
           <a key="opt" onClick={async () => { 
             set_bindItemCode(record.itemCode); 
             // 获取该评价项已有的选项
-            const existingOptions = await getEvaluationSelect(record.itemCode);
+            const current: any = currentCategory as any;
+            const serviceType = String(current?.code || current?.name || '');
+            const existingOptions = await getEvaluationSelect(record.itemCode, serviceType);
             const existingKeys = (existingOptions || []).map((item: any) => String(item.code));
             set_selectTargetKeys(existingKeys); 
             set_selectSelectedKeys([]); 
@@ -577,7 +585,9 @@ const ServiceEvaluatePage: React.FC = () => {
               const res = await deleteEvaluationSelect(row.id);
               if (res !== false) {
                 // 删除成功,重新加载该评价项的选项列表
-                const list = await getEvaluationSelect(parentCode);
+                const current: any = currentCategory as any;
+                const serviceType = String(current?.code || current?.name || '');
+                const list = await getEvaluationSelect(parentCode, serviceType);
                 set_serviceOptionsMap((old) => ({
                   ...old,
                   [parentCode]: (list || []) as any,
@@ -630,7 +640,8 @@ const ServiceEvaluatePage: React.FC = () => {
     
     // 加载数据
     if (node && node.nodeType === 'service') {
-      const list = await getEvaluationSelect(record.itemCode);
+      const serviceType = String(node.code || node.name || '');
+      const list = await getEvaluationSelect(record.itemCode, serviceType);
       set_serviceOptionsMap((old: Record<string, { id: number | string; hospId?: string; itemCode: string; code: string; name: string; value: number; sort: number }[]>) => ({
         ...old,
         [record.itemCode]: (list || []) as { id: number | string; hospId?: string; itemCode: string; code: string; name: string; value: number; sort: number }[],
@@ -846,7 +857,7 @@ const ServiceEvaluatePage: React.FC = () => {
     >
       <Transfer
         className="tree-transfer"
-        listStyle={{ height: 540 }}
+        listStyle={{ height: 600, overflowY: 'auto' }}
         dataSource={(function buildFlat(){
           const res: any[] = [];
           const walk = (list: SystemTreeNode[], parentChecked: boolean)=>{
@@ -983,19 +994,19 @@ const ServiceEvaluatePage: React.FC = () => {
           await loadServiceEvalItems(String(current.code || current.name));
         }
       }}
-      width={560}
+      width={800}
       destroyOnClose
     >
       <Transfer
         titles={[`待选项`,`已选项`]}
         dataSource={evalItemDict}
         rowKey={(item)=> item.key}
-        render={(item)=> item.title}
+        render={(item)=> item.value ? `${item.code} - ${item.title}(${item.value})` : `${item.code} - ${item.title}`}
         targetKeys={evalItemTargetKeys}
         selectedKeys={evalItemSelectedKeys}
         onChange={(next)=> set_evalItemTargetKeys(next as string[])}
         onSelectChange={(l,r)=> set_evalItemSelectedKeys([...(l as string[]), ...(r as string[])])}
-        listStyle={{ height: 460, width: 'calc(50% - 32px)' }}
+        listStyle={{ height: 460, width: 'calc(50% - 24px)' }}
         operationStyle={{ margin: '0 12px', display: 'flex', alignItems: 'center' }}
         showSearch
         locale={{ itemUnit:'项', itemsUnit:'项', searchPlaceholder:'请输入' }}
@@ -1016,7 +1027,9 @@ const ServiceEvaluatePage: React.FC = () => {
           set_selectTargetKeys([]);
           set_selectSelectedKeys([]);
           // 重新加载该评价项的选项数据
-          const list = await getEvaluationSelect(bindItemCode);
+          const current: any = currentCategory as any;
+          const serviceType = String(current?.code || current?.name || '');
+          const list = await getEvaluationSelect(bindItemCode, serviceType);
           set_serviceOptionsMap((old) => ({
             ...old,
             [bindItemCode]: (list || []) as any,

+ 2 - 2
src/pages/platform/setting/serviceEvaluate/service.ts

@@ -102,10 +102,10 @@ export const getServiceEvaluationItem = async (serviceType: string) => {
 };
 
 // 获取右侧表格:评价项目列表(按 ItemCode)
-export const getEvaluationSelect = async (ItemCode: string) => {
+export const getEvaluationSelect = async (ItemCode: string, serviceType: string) => {
   return request<any>('/centerSys/evaluation/getEvaluationSelect', {
     method: 'GET',
-    params: { ItemCode },
+    params: { ItemCode, serviceType },
   });
 };