فهرست منبع

完善患者基础信息

wjj 2 هفته پیش
والد
کامیت
8697960a62
2فایلهای تغییر یافته به همراه172 افزوده شده و 148 حذف شده
  1. 9 0
      src/api/patient/info.js
  2. 163 148
      src/views/qw/patient/index.vue

+ 9 - 0
src/api/patient/info.js

@@ -50,4 +50,13 @@ export function exportInfo(query) {
     method: 'get',
     params: query
   })
+}
+
+
+//生成二维码
+export function getWxaCodePatientUnLimit(patientId,appId) {
+  return request({
+    url: '/company/patient/getWxaCodePatientUnLimit/'+patientId+"/"+appId,
+    method: 'get',
+  })
 }

+ 163 - 148
src/views/qw/patient/index.vue

@@ -2,78 +2,29 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="姓名" prop="name">
-        <el-input
-          v-model="queryParams.name"
-          placeholder="请输入姓名"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.name" placeholder="请输入姓名" clearable size="small"
+          @keyup.enter.native="handleQuery" />
       </el-form-item>
       <el-form-item label="性别" prop="sex">
         <el-select v-model="queryParams.sex" placeholder="请选择性别" clearable size="small">
-          <el-option
-            v-for="dict in sexOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
+          <el-option v-for="dict in sexOptions" :key="dict.dictValue" :label="dict.dictLabel" :value="dict.dictValue" />
         </el-select>
       </el-form-item>
       <el-form-item label="年龄" prop="age">
-        <el-input
-          v-model="queryParams.age"
-          placeholder="请输入年龄"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="医生id" prop="doctorId">
-        <el-input
-          v-model="queryParams.doctorId"
-          placeholder="请输入医生id"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="理疗方案" prop="projectId">
-        <el-input
-          v-model="queryParams.projectId"
-          placeholder="请输入理疗方案"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="用户" prop="userId">
-        <el-input
-          v-model="queryParams.userId"
-          placeholder="请输入用户"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
+        <el-input v-model="queryParams.age" placeholder="请输入年龄" clearable size="small"
+          @keyup.enter.native="handleQuery" />
       </el-form-item>
+
       <el-form-item label="状态" prop="status">
         <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
-          <el-option
-            v-for="dict in statusOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
+          <el-option v-for="dict in statusOptions" :key="dict.dictValue" :label="dict.dictLabel"
+            :value="dict.dictValue" />
         </el-select>
       </el-form-item>
       <el-form-item label="完善状态" prop="doctorStatus">
         <el-select v-model="queryParams.doctorStatus" placeholder="请选择医生完善状态" clearable size="small">
-          <el-option
-            v-for="dict in doctorStatusOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
+          <el-option v-for="dict in doctorStatusOptions" :key="dict.dictValue" :label="dict.dictLabel"
+            :value="dict.dictValue" />
         </el-select>
       </el-form-item>
       <el-form-item>
@@ -84,16 +35,10 @@
 
     <el-row :gutter="10" class="mb8">
       <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-          v-hasPermi="['patient:info:add']"
-        >新增</el-button>
+        <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
+          v-hasPermi="['patient:info:add']">新增</el-button>
       </el-col>
-      <el-col :span="1.5">
+      <!-- <el-col :span="1.5">
         <el-button
           type="success"
           plain
@@ -114,8 +59,8 @@
           @click="handleDelete"
           v-hasPermi="['patient:info:remove']"
         >删除</el-button>
-      </el-col>
-      <el-col :span="1.5">
+      </el-col> -->
+      <!-- <el-col :span="1.5">
         <el-button
           type="warning"
           plain
@@ -125,7 +70,7 @@
           @click="handleExport"
           v-hasPermi="['patient:info:export']"
         >导出</el-button>
-      </el-col>
+      </el-col> -->
       <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
     </el-row>
 
@@ -135,53 +80,34 @@
       <el-table-column label="姓名" align="center" prop="name" />
       <el-table-column label="性别" align="center" prop="sex">
         <template slot-scope="scope">
-          <dict-tag :options="sexOptions" :value="scope.row.sex"/>
+          <dict-tag :options="sexOptions" :value="scope.row.sex" />
         </template>
       </el-table-column>
       <el-table-column label="年龄" align="center" prop="age" />
-      <el-table-column label="患者基本信息" align="center" prop="baseInfo" />
-      <el-table-column label="诊断结果" align="center" prop="diagnosisResult" />
-      <el-table-column label="治疗目标" align="center" prop="treatmentTreatment" />
-      <el-table-column label="医生id" align="center" prop="doctorId" />
-      <el-table-column label="理疗方案id" align="center" prop="projectId" />
-      <el-table-column label="用户id" align="center" prop="userId" />
-      <el-table-column label="用户绑定状态" align="center" prop="status" >
+      <el-table-column label="用户绑定状态" align="center" prop="status">
         <template slot-scope="scope">
-          <dict-tag :options="statusOptions" :value="scope.row.status"/>
+          <dict-tag :options="statusOptions" :value="scope.row.status" />
         </template>
       </el-table-column>
-      <el-table-column label="医生完善状态" align="center" prop="doctorStatus" >
+      <el-table-column label="医生完善状态" align="center" prop="doctorStatus">
         <template slot-scope="scope">
-          <dict-tag :options="doctorStatusOptions" :value="scope.row.doctorStatus"/>
+          <dict-tag :options="doctorStatusOptions" :value="scope.row.doctorStatus" />
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['patient:info:edit']"
-          >修改</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['patient:info:remove']"
-          >删除</el-button>
+          <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
+            v-hasPermi="['patient:info:edit']">修改</el-button>
+          <el-button v-if="scope.row.doctorStatus === 1" size="mini" type="text" icon="el-icon-share" @click="handleShare(scope.row)"
+            v-hasPermi="['patient:info:WxaCodePatientUnLimit']">分享</el-button>
+          <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
+            v-hasPermi="['patient:info:remove']">删除</el-button>
         </template>
       </el-table-column>
     </el-table>
 
-    <pagination
-      v-show="total>0"
-      :total="total"
-      :page.sync="queryParams.pageNum"
-      :limit.sync="queryParams.pageSize"
-      @pagination="getList"
-    />
+    <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
+      @pagination="getList" />
 
     <!-- 添加或修改患者基本信息对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
@@ -191,42 +117,66 @@
         </el-form-item>
         <el-form-item label="性别" prop="sex">
           <el-select v-model="form.sex" placeholder="请选择性别">
-            <el-option
-              v-for="dict in sexOptions"
-              :key="dict.dictValue"
-              :label="dict.dictLabel"
-              :value="parseInt(dict.dictValue)"
-            ></el-option>
+            <el-option v-for="dict in sexOptions" :key="dict.dictValue" :label="dict.dictLabel"
+              :value="parseInt(dict.dictValue)"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="年龄" prop="age">
-          <el-input v-model="form.age" placeholder="请输入年龄" />
+          <el-input-number v-model="form.age" placeholder="请输入年龄"   style="width: 20%"/>
         </el-form-item>
         <el-form-item label="患者基本信息" prop="baseInfo">
           <el-input v-model="form.baseInfo" type="textarea" placeholder="请输入内容" />
         </el-form-item>
         <el-form-item label="理疗方案" prop="projectId">
           <el-select v-model="form.projectId" placeholder="请选择理疗方案">
-            <el-option
-              v-for="dict in projectOptions"
-              :key="dict.id"
-              :label="dict.projectName"
-              :value="parseInt(dict.id)"
-            ></el-option>
+            <el-option v-for="dict in projectOptions" :key="dict.id" :label="dict.projectName"
+              :value="parseInt(dict.id)"></el-option>
           </el-select>
         </el-form-item>
+        <el-form-item label="诊断结果" prop="diagnosisResult">
+          <el-input :disabled="true" v-model="form.diagnosisResult" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="治疗目标" prop="treatmentTarget">
+          <el-input :disabled="true" v-model="form.treatmentTarget" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
+    <!-- 患者信息分享 -->
+    <el-dialog title="分享" :visible.sync="shareOpen" width="700px" append-to-body>
+      <el-form ref="shareForm" :model="shareForm" :rules="shareRules" label-width="80px">
+        <el-form-item label="小程序" prop="appId">
+          <el-select v-model="shareForm.appId" placeholder="小程序" clearable>
+            <el-option v-for="dict in sourceList" :key="dict.dictValue1" :label="dict.dictLabel"
+              :value="dict.dictValue1" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="shareSubmit">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :title="wxMaForm.title" v-if="wxMaForm.open" :visible.sync="wxMaForm.open"
+               width="450px" append-to-body>
+      <div style="padding-bottom:15px;">
+        <img :src="codeImage" width="400px">
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="downloadImage(codeImage, wxMaForm.name + '.png')">下载二维码</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listInfo, getInfo, delInfo, addInfo, updateInfo, exportInfo } from "@/api/patient/info";
-import { options } from "@/api/project/project";
+import { listInfo, getInfo, delInfo, addInfo, updateInfo, exportInfo, getWxaCodePatientUnLimit } from "@/api/patient/info";
+import { options as projectOptions } from "@/api/project/project";
+import { options } from "@/api/course/coursePlaySourceConfig";
 
 export default {
   name: "Info",
@@ -254,21 +204,22 @@ export default {
       open: false,
       // 性别 0-女 1-男字典
       sexOptions: [
-        {dictValue: '0',dictLabel:'女'},
-        {dictValue: '1',dictLabel:'男'}
+        { dictValue: '0', dictLabel: '女' },
+        { dictValue: '1', dictLabel: '男' }
       ],
       // 状态
       statusOptions: [
-        {dictValue: '0',dictLabel:'未绑定'},
-        {dictValue: '1',dictLabel:'已绑定'}
+        { dictValue: '0', dictLabel: '未绑定' },
+        { dictValue: '1', dictLabel: '已绑定' }
       ],
       //医生完善状态
-      doctorStatusOptions:[
-        {dictValue: '0',dictLabel:'未完善'},
-        {dictValue: '1',dictLabel:'已完善'}
+      doctorStatusOptions: [
+        { dictValue: '0', dictLabel: '未完善' },
+        { dictValue: '1', dictLabel: '已完善' }
       ],
       //理疗选项
-      projectOptions:[],
+      projectOptions: [],
+      sourceList: [],
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -289,16 +240,80 @@ export default {
       form: {},
       // 表单校验
       rules: {
-      }
+        name: [
+          { required: true, message: "姓名不能为空", trigger: "blur" }
+        ],
+        sex: [
+          { required: true, message: "性别不能为空", trigger: "change" }
+        ],
+        age: [
+          { required: true, message: '请输入年龄', trigger: 'blur' },
+          { type: 'number', min: 18, max: 150, message: '年龄必须在 18 到 150 之间', trigger: 'blur' }
+        ],
+        baseInfo: [
+          { required: true, message: "患者基本信息不能为空", trigger: "blur" }
+        ],
+        projectId: [
+          { required: true, message: "理疗方案不能为空", trigger: "change" }
+        ],
+      },
+      shareForm: {},
+      shareOpen: false,
+      shareRules: {
+      },
+
+      wxMaForm:{
+        open: false,
+        title: "患者信息分享",
+        name: null,
+      },
+      codeImage: null,
     };
   },
   created() {
-    options().then(res=>{
+    options().then(res => {
+      this.sourceList = res.data;
+    });
+    projectOptions().then(res => {
       this.projectOptions = res.data;
     });
     this.getList();
   },
   methods: {
+    shareSubmit(){
+      let loadingRock = this.$loading({
+        lock: true,
+        text: '生成二维码中~~请不要刷新页面!!',
+        spinner: 'el-icon-loading',
+        background: 'rgba(0, 0, 0, 0.7)'
+      });
+
+      getWxaCodePatientUnLimit(this.shareForm.id,this.shareForm.appId).then(response => {
+        this.shareOpen = false;
+        this.codeImage = response.url
+        this.wxMaForm.open = true;
+        this.wxMaForm.name = this.shareForm.id;
+        loadingRock.close();
+      }).finally(res => {
+        loadingRock.close();
+      });
+    },
+
+    downloadImage(imageSrc, fileName) {
+      const link = document.createElement('a');
+      link.href = imageSrc;
+      link.download = fileName || '付款二维码.png';
+      document.body.appendChild(link);
+      link.click();
+      document.body.removeChild(link);
+    },
+
+    handleShare(row) {
+      this.shareForm = {};
+      this.shareOpen = true;
+      this.shareForm.id = row.id;
+    },
+
     /** 查询患者基本信息列表 */
     getList() {
       this.loading = true;
@@ -346,7 +361,7 @@ export default {
     // 多选框选中数据
     handleSelectionChange(selection) {
       this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
+      this.single = selection.length !== 1
       this.multiple = !selection.length
     },
     /** 新增按钮操作 */
@@ -389,30 +404,30 @@ export default {
     handleDelete(row) {
       const ids = row.id || this.ids;
       this.$confirm('是否确认删除患者基本信息编号为"' + ids + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delInfo(ids);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function () {
+        return delInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.msgSuccess("删除成功");
+      }).catch(() => { });
     },
     /** 导出按钮操作 */
     handleExport() {
       const queryParams = this.queryParams;
       this.$confirm('是否确认导出所有患者基本信息数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          this.exportLoading = true;
-          return exportInfo(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-          this.exportLoading = false;
-        }).catch(() => {});
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        this.exportLoading = true;
+        return exportInfo(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+        this.exportLoading = false;
+      }).catch(() => { });
     }
   }
 };