hejianhao
2026-08-18 4a20e725576d2b484ed89706e6c12dfb1792b536
feat0806: 同意按钮样式
1个文件已添加
6个文件已修改
41 ■■■■■ 已修改文件
tcm-training-admin/src/pages/member/clinic/index.tsx 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/member/clinic/manage.less 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/member/clinic/manage.tsx 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/member/clinic/service.ts 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/member/clinic/style.less 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/member/user/list-page.tsx 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/member/user/style.less 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin/src/pages/member/clinic/index.tsx
@@ -217,7 +217,7 @@
        </div>
        <div className="member-clinic-toolbar">
          <Button onClick={handleExport}>导出</Button>
          <Button type="primary" onClick={handleExport}>导出</Button>
          <Upload
            accept=".xlsx,.xls"
            showUploadList={false}
@@ -226,9 +226,9 @@
              return false;
            }}
          >
            <Button loading={importing}>更新绑定关系</Button>
            <Button type="primary" loading={importing}>更新绑定关系</Button>
          </Upload>
          <Button loading={templateDownloading} onClick={handleTemplateDownload}>
          <Button type="primary" loading={templateDownloading} onClick={handleTemplateDownload}>
            下载模板
          </Button>
        </div>
tcm-training-admin/src/pages/member/clinic/manage.less
New file
@@ -0,0 +1,10 @@
.clinic-edit-page { min-height: 100%; padding: 24px; background: #f5f7fa; }
.clinic-edit-panel { max-width: 1040px; margin: 0 auto; padding: 24px 32px; background: #fff; border-radius: 4px; }
.clinic-edit-panel h2 { margin: 0 0 24px; font-size: 20px; }
.clinic-edit-panel .ant-form { max-width: 760px; }
.clinic-edit-upload { display: flex; width: 104px; height: 104px; align-items: center; justify-content: center; overflow: hidden; border: 1px dashed #d9d9d9; border-radius: 4px; background: #fafafa; cursor: pointer; }
.clinic-edit-upload--license { width: 208px; height: 128px; }
.clinic-edit-upload:hover { border-color: #409eff; }
.clinic-edit-upload img { width: 100%; height: 100%; object-fit: cover; }
.clinic-edit-upload > div { display: flex; flex-direction: column; gap: 8px; align-items: center; color: #909399; }
@media (max-width: 768px) { .clinic-edit-page { padding: 12px; } .clinic-edit-panel { padding: 20px 16px; } }
tcm-training-admin/src/pages/member/clinic/manage.tsx
@@ -1,8 +1,10 @@
import { history, useAccess, useParams } from '@umijs/max';
import { Avatar, Button, Form, Input, Select, message } from 'antd';
import { PlusOutlined } from '@ant-design/icons';
import { Button, Form, Input, Select, Upload, message } from 'antd';
import React, { useEffect, useState } from 'react';
import RegionCascader from '@/components/RegionCascader';
import { getClinicDetail, getProvincialAgentOptions, updateClinic } from './service';
import { getClinicDetail, getProvincialAgentOptions, updateClinic, uploadClinicImage } from './service';
import './manage.less';
type FormValues = { avatar?: string; name?: string; loginAccount?: string; regionCodes?: string[]; address?: string; businessLicenseUrl?: string; status?: number; agentId?: number; bankName?: string; accountHolder?: string; accountNumber?: string; branchName?: string };
const ClinicManagePage: React.FC = () => {
@@ -19,22 +21,23 @@
    try { const [provinceCode, cityCode, districtCode] = values.regionCodes || []; await updateClinic(params.id, { ...values, provinceCode, cityCode, districtCode }); message.success('保存成功'); history.push(`/member/user/clinic/${params.id}`); }
    finally { setLoading(false); }
  };
  return <div style={{ padding: 24, background: '#fff' }}><h2>编辑诊所</h2>
  return <div className="clinic-edit-page"><div className="clinic-edit-panel"><h2>编辑诊所</h2>
    <Form form={form} labelCol={{ span: 4 }} wrapperCol={{ span: 10 }}>
      <Form.Item shouldUpdate noStyle>{() => <div style={{ marginBottom: 20 }}><Avatar size={72} src={form.getFieldValue("avatar")} /></div>}</Form.Item>
      <Form.Item shouldUpdate noStyle>{() => <div style={{ marginBottom: 20 }}><div className="clinic-edit-upload" /></div>}</Form.Item>
      <Form.Item name="avatar" label="头像"><Input placeholder="请输入头像地址" /></Form.Item>
      <Form.Item name="name" label="诊所名称"><Input maxLength={100} placeholder="请输入诊所名称" /></Form.Item>
      <Form.Item name="loginAccount" label="登录账号"><Input maxLength={50} placeholder="请输入登录账号" /></Form.Item>
      <Form.Item name="regionCodes" label="诊所地址"><RegionCascader placeholder="请选择省/市/区" /></Form.Item>
      <Form.Item name="address" label="详细地址"><Input maxLength={255} placeholder="请输入详细地址" /></Form.Item>
      <Form.Item name="businessLicenseUrl" label="营业执照"><Input placeholder="请输入营业执照图片地址" /></Form.Item>
      <Form.Item label="营业执照" shouldUpdate>{() => <Upload accept="image/*" showUploadList={false} beforeUpload={async (file) => { const response = await uploadClinicImage(file); form.setFieldValue("businessLicenseUrl", response.data?.url || response.data); return false; }}><div className="clinic-edit-upload clinic-edit-upload--license">{form.getFieldValue("businessLicenseUrl") ? <img src={form.getFieldValue("businessLicenseUrl")} alt="营业执照" /> : <div><PlusOutlined /><span>上传营业执照</span></div>}</div></Upload>}</Form.Item>
      <Form.Item name="status" label="状态"><Select options={[{ label: "启用", value: 1 }, { label: "禁用", value: 0 }]} placeholder="请选择状态" /></Form.Item>
      <Form.Item name="agentId" label="所属省区代理"><Select allowClear showSearch optionFilterProp="label" options={agentOptions} placeholder="请选择省区代理" /></Form.Item>
      <Form.Item name="bankName" label="银行名称"><Input maxLength={100} placeholder="请输入银行名称" /></Form.Item>
      <Form.Item name="accountHolder" label="账号名称"><Input maxLength={50} placeholder="请输入账号名称" /></Form.Item>
      <Form.Item name="accountNumber" label="账号"><Input maxLength={30} placeholder="请输入账号" /></Form.Item>
      <Form.Item name="branchName" label="支行名称"><Input maxLength={100} placeholder="请输入支行名称" /></Form.Item>
      <Form.Item name="agentId" label="所属省区代理"><Select allowClear showSearch optionFilterProp="label" options={agentOptions} placeholder="请选择省区代理" /></Form.Item>
      <Form.Item wrapperCol={{ offset: 4 }}><Button onClick={() => history.back()}>取消</Button><Button type="primary" loading={loading} onClick={submit} style={{ marginLeft: 8 }}>保存</Button></Form.Item>
    </Form></div>;
    </Form></div></div>;
};
export default ClinicManagePage;
tcm-training-admin/src/pages/member/clinic/service.ts
@@ -73,3 +73,9 @@
export async function getProvincialAgentOptions() {
  return request('/provincial-agents', { method: 'GET', params: { page: 1, pageSize: 1000 } });
}
export async function uploadClinicImage(file: File) {
  const data = new FormData();
  data.append('file', file);
  return request('/upload/image', { method: 'POST', data });
}
tcm-training-admin/src/pages/member/clinic/style.less
@@ -71,6 +71,7 @@
.member-clinic-toolbar {
  display: flex;
  gap: 12px;
  justify-content: flex-start;
  margin: 14px 0 10px;
}
tcm-training-admin/src/pages/member/user/list-page.tsx
@@ -459,7 +459,7 @@
            </Button>
          ) : null}
          {mode === 'all' && canEdit ? (
            <Button disabled={!selectedUserIds.length} onClick={() => setBatchClinicOpen(true)}>
            <Button type="primary" disabled={!selectedUserIds.length} onClick={() => setBatchClinicOpen(true)}>
              批量修改诊所
            </Button>
          ) : null}
tcm-training-admin/src/pages/member/user/style.less
@@ -75,6 +75,7 @@
.member-user-toolbar {
  display: flex;
  gap: 12px;
  justify-content: flex-start;
  margin: 14px 0 10px;
}