Browse Source

1、删除无用用户页面;
2、重构亲属管理

wennn 2 years ago
parent
commit
949301b77a

+ 20 - 0
src/api/ncs_relative.js

@@ -0,0 +1,20 @@
+import request from '@/utils/request'
+
+export function getRelativeList(data) {
+    return request({
+        url: '/ncs/relative/page',
+        method: 'POST',
+        params: data,
+        loading: false
+    })
+}
+
+export function removeRelative(params) {
+    const ids = params.toString()
+    return request({
+        url: `/ncs/relative/${ids}`,
+        method: 'DELETE',
+        loading: false,
+        data: params
+    })
+}

+ 19 - 18
src/views/customer/components/customerManager.vue

@@ -260,16 +260,16 @@
                 style="width: 100%"
             >
               <el-table-column
-                  prop="true_name"
+                  prop="named"
                   :label="this.$t('customerManage.customerRelativeTrueName')"
                   width="180"
               />
-              <el-table-column
-                  prop="sex"
-                  :label="this.$t('member.sex')"
-                  width="180"
-                  :formatter="formatterSex"
-              />
+<!--              <el-table-column-->
+<!--                  prop="sex"-->
+<!--                  :label="this.$t('member.sex')"-->
+<!--                  width="180"-->
+<!--                  :formatter="formatterSex"-->
+<!--              />-->
               <el-table-column
                   prop="relative_name"
                   :label="this.$t('customerManage.relativeName')"
@@ -285,7 +285,7 @@
                   width="100"
               >
                 <template slot-scope="scope">
-                  <el-button type="danger" size="mini" @click="handlerDeleteRelative(scope.row.member_id)">{{ deleted }}</el-button>
+                  <el-button type="danger" size="mini" @click="handlerDeleteRelative(scope.row.id)">{{ deleted }}</el-button>
                 </template>
               </el-table-column>
             </el-table>
@@ -308,13 +308,13 @@
                 </el-col>
               </el-row>
               <el-row>
-                <el-col :span="12">
-                  <el-form-item :label="this.$t('member.sex')" class="form-item-sex">
-                    <el-radio v-model="relativeFormModel.sex" :label="0">{{ this.$t('member.woman') }}</el-radio>
-                    <el-radio v-model="relativeFormModel.sex" :label="1">{{ this.$t('member.man') }}</el-radio>
-                    <!--                    <el-radio v-model="relativeFormModel.sex" :label="2">未知</el-radio>-->
-                  </el-form-item>
-                </el-col>
+<!--                <el-col :span="12">-->
+<!--                  <el-form-item :label="this.$t('member.sex')" class="form-item-sex">-->
+<!--                    <el-radio v-model="relativeFormModel.sex" :label="0">{{ this.$t('member.woman') }}</el-radio>-->
+<!--                    <el-radio v-model="relativeFormModel.sex" :label="1">{{ this.$t('member.man') }}</el-radio>-->
+<!--                    &lt;!&ndash;                    <el-radio v-model="relativeFormModel.sex" :label="2">未知</el-radio>&ndash;&gt;-->
+<!--                  </el-form-item>-->
+<!--                </el-col>-->
                 <el-col :span="12">
                   <el-form-item :label="this.$t('member.mobile')" prop="mobile">
                     <el-input v-model="relativeFormModel.mobile" clearable :placeholder="this.$t('member.inputMobile')" :maxlength="20" />
@@ -550,6 +550,7 @@ import {CHILDBIRTH_TYPE} from "@/utils/enum/ChildbirthTypeEnum";
 import * as shop_API from "@/api/ncs_shop";
 import {getDevicesByUuid} from "@/api/initialize"
 import myMapHtml from '@/views/customer/myMapHtml'
+import {getRelativeList, removeRelative} from "@/api/ncs_relative";
 const serverUrl = domain.serverUrl
 export default {
   name: 'CustomerManager',
@@ -1431,8 +1432,8 @@ export default {
     },
     /** 拉取亲属列表 **/
     getRelatives() {
-      this.relativeParams.fixedCondition = ' relative_id=' + this.formmodel.member_id
-      API_User.getList(this.relativeParams).then(res => {
+      this.relativeParams.fixedCondition = ' member_id=' + this.formmodel.member_id
+      getRelativeList(this.relativeParams).then(res => {
         this.relativeData = res.data
       }).catch(() => {
 
@@ -1446,7 +1447,7 @@ export default {
         cancelButtonText: this.$t('action.cancel'),
         type: 'warning'
       }).then(() => {
-        API_User.remove(ids).then(
+        removeRelative(ids).then(
           response => {
             this.getRelatives()
           }

+ 19 - 19
src/views/customer/components/elderlyCareManager.vue

@@ -253,16 +253,16 @@
                                 style="width: 100%"
                         >
                             <el-table-column
-                                    prop="true_name"
+                                    prop="named"
                                     :label="this.$t('customerManage.customerRelativeTrueName')"
                                     width="180"
                             />
-                            <el-table-column
-                                    prop="sex"
-                                    :label="this.$t('member.sex')"
-                                    width="180"
-                                    :formatter="formatterSex"
-                            />
+<!--                            <el-table-column-->
+<!--                                    prop="sex"-->
+<!--                                    :label="this.$t('member.sex')"-->
+<!--                                    width="180"-->
+<!--                                    :formatter="formatterSex"-->
+<!--                            />-->
                             <el-table-column
                                     prop="relative_name"
                                     :label="this.$t('customerManage.relativeName')"
@@ -279,7 +279,7 @@
                             >
                                 <template slot-scope="scope">
                                     <el-button type="danger" size="mini"
-                                               @click="handlerDeleteRelative(scope.row.member_id)">{{ deleted }}
+                                               @click="handlerDeleteRelative(scope.row.id)">{{ deleted }}
                                     </el-button>
                                 </template>
                             </el-table-column>
@@ -305,13 +305,13 @@
                                 </el-col>
                             </el-row>
                             <el-row>
-                                <el-col :span="12">
-                                    <el-form-item :label="this.$t('member.sex')" class="form-item-sex">
-                                        <el-radio v-model="relativeFormModel.sex" :label="0">{{ this.$t('member.woman') }}</el-radio>
-                                        <el-radio v-model="relativeFormModel.sex" :label="1">{{ this.$t('member.man') }}</el-radio>
-                                        <!--                    <el-radio v-model="relativeFormModel.sex" :label="2">未知</el-radio>-->
-                                    </el-form-item>
-                                </el-col>
+<!--                                <el-col :span="12">-->
+<!--                                    <el-form-item :label="this.$t('member.sex')" class="form-item-sex">-->
+<!--                                        <el-radio v-model="relativeFormModel.sex" :label="0">{{ this.$t('member.woman') }}</el-radio>-->
+<!--                                        <el-radio v-model="relativeFormModel.sex" :label="1">{{ this.$t('member.man') }}</el-radio>-->
+<!--                                        &lt;!&ndash;                    <el-radio v-model="relativeFormModel.sex" :label="2">未知</el-radio>&ndash;&gt;-->
+<!--                                    </el-form-item>-->
+<!--                                </el-col>-->
                                 <el-col :span="12">
                                     <el-form-item :label="this.$t('member.mobile')" prop="mobile">
                                         <el-input v-model="relativeFormModel.mobile" clearable :placeholder="this.$t('member.inputMobile')"
@@ -522,6 +522,7 @@
     import { getDevicesByUuid } from '@/api/initialize'
     import {RELATIVE_NAME_TYPE} from "@/utils/enum/RelativeNameTypeEnum";
     import SleepDetectData from "../sleep-detect-data";
+    import {getRelativeList, removeRelative} from "@/api/ncs_relative";
     const serverUrl = domain.serverUrl
     export default {
         name: 'ElderlyCareManager',
@@ -601,7 +602,6 @@
                     page_no: 1,
                     sort: 'create_time',
                     dir: 'desc',
-                    fixedCondition: Object.keys(this.frame).length === 0 ? 'part_id=' + this.$store.getters.partId : 'part_id=' + this.$store.getters.partId + ' and relative_id =' + this.formmodel.member_id
                 },
                 relativeRules: {
                     true_name: [{required: true, message: this.$t('customerManage.inputRemarks'), trigger: 'blur'}],
@@ -1413,8 +1413,8 @@
             },
             /** 拉取亲属列表 **/
             getRelatives() {
-                this.relativeParams.fixedCondition = ' relative_id=' + this.formmodel.member_id
-                API_User.getList(this.relativeParams).then(res => {
+                this.relativeParams.fixedCondition = ' member_id=' + this.formmodel.member_id
+              getRelativeList(this.relativeParams).then(res => {
                     this.relativeData = res.data
                 }).catch(() => {
 
@@ -1428,7 +1428,7 @@
                     cancelButtonText: this.$t('action.cancel'),
                     type: 'warning'
                 }).then(() => {
-                    API_User.remove(ids).then(
+                  removeRelative(ids).then(
                         response => {
                             this.getRelatives()
                         }

+ 22 - 22
src/views/customer/components/patientManager.vue

@@ -273,16 +273,16 @@
                                 style="width: 100%"
                         >
                             <el-table-column
-                                    prop="true_name"
+                                    prop="named"
                                     :label="this.$t('customerManage.customerRelativeTrueName')"
                                     width="180"
                             />
-                            <el-table-column
-                                    prop="sex"
-                                    :label="this.$t('member.sex')"
-                                    width="180"
-                                    :formatter="formatterSex"
-                            />
+<!--                            <el-table-column-->
+<!--                                    prop="sex"-->
+<!--                                    :label="this.$t('member.sex')"-->
+<!--                                    width="180"-->
+<!--                                    :formatter="formatterSex"-->
+<!--                            />-->
                             <el-table-column
                                     prop="relative_name"
                                     :label="this.$t('customerManage.relativeName')"
@@ -299,7 +299,7 @@
                             >
                                 <template slot-scope="scope">
                                     <el-button type="danger" size="mini"
-                                               @click="handlerDeleteRelative(scope.row.member_id)">{{ deleted }}
+                                               @click="handlerDeleteRelative(scope.row.id)">{{ deleted }}
                                     </el-button>
                                 </template>
                             </el-table-column>
@@ -323,13 +323,13 @@
                                 </el-col>
                             </el-row>
                             <el-row>
-                                <el-col :span="12">
-                                    <el-form-item :label="this.$t('member.sex')" class="form-item-sex">
-                                        <el-radio v-model="relativeFormModel.sex" :label="0">{{ this.$t('member.woman') }}</el-radio>
-                                        <el-radio v-model="relativeFormModel.sex" :label="1">{{ this.$t('member.man') }}</el-radio>
-                                        <!--                    <el-radio v-model="relativeFormModel.sex" :label="2">未知</el-radio>-->
-                                    </el-form-item>
-                                </el-col>
+<!--                                <el-col :span="12">-->
+<!--                                    <el-form-item :label="this.$t('member.sex')" class="form-item-sex">-->
+<!--                                        <el-radio v-model="relativeFormModel.sex" :label="0">{{ this.$t('member.woman') }}</el-radio>-->
+<!--                                        <el-radio v-model="relativeFormModel.sex" :label="1">{{ this.$t('member.man') }}</el-radio>-->
+<!--                                        &lt;!&ndash;                    <el-radio v-model="relativeFormModel.sex" :label="2">未知</el-radio>&ndash;&gt;-->
+<!--                                    </el-form-item>-->
+<!--                                </el-col>-->
                                 <el-col :span="12">
                                     <el-form-item :label="this.$t('member.mobile')" prop="mobile">
                                         <el-input v-model="relativeFormModel.mobile" clearable :placeholder="this.$t('member.inputMobile')"
@@ -540,6 +540,7 @@
     import {RELATIVE_NAME_TYPE} from "@/utils/enum/RelativeNameTypeEnum";
     import {CHILDBIRTH_TYPE} from "@/utils/enum/ChildbirthTypeEnum";
     import SleepDetectData from "../sleep-detect-data";
+    import {getRelativeList, removeRelative} from "@/api/ncs_relative";
     const serverUrl = domain.serverUrl
     export default {
         name: 'PatientManager',
@@ -623,7 +624,6 @@
                     page_no: 1,
                     sort: 'create_time',
                     dir: 'desc',
-                    fixedCondition: Object.keys(this.frame).length === 0 ? 'part_id=' + this.$store.getters.partId : 'part_id=' + this.$store.getters.partId + ' and relative_id =' + this.formmodel.member_id
                 },
                 relativeRules: {
                     true_name: [{required: true, message: this.$t('customerManage.inputRemarks'), trigger: 'blur'}],
@@ -1476,12 +1476,12 @@
             },
             /** 拉取亲属列表 **/
             getRelatives() {
-                this.relativeParams.fixedCondition = ' relative_id=' + this.formmodel.member_id
-                API_User.getList(this.relativeParams).then(res => {
-                    this.relativeData = res.data
-                }).catch(() => {
+              this.relativeParams.fixedCondition = ' member_id=' + this.formmodel.member_id
+              getRelativeList(this.relativeParams).then(res => {
+                this.relativeData = res.data
+              }).catch(() => {
 
-                })
+              })
             },
             /** 单条数据删除处理 */
             handlerDeleteRelative(ids) {
@@ -1491,7 +1491,7 @@
                     cancelButtonText: this.$t('action.cancel'),
                     type: 'warning'
                 }).then(() => {
-                    API_User.remove(ids).then(
+                  removeRelative(ids).then(
                         response => {
                             this.getRelatives()
                         }

+ 0 - 612
src/views/customer/customerEdit.vue

@@ -1,612 +0,0 @@
-<template>
-  <div class="formwrap">
-    <el-tabs v-model="activeName" @tab-click="handleClick">
-      <el-tab-pane label="用户管理" name="customerEdit">
-        <el-form ref="editForm" :model="formmodel" :rules="rules" label-width="140px">
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="用户姓名" prop="named">
-                <el-input v-model="formmodel.named" clearable placeholder="请输入姓名" :maxlength="20" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="用户编号">
-                <el-input v-model="formmodel.card_no" clearable placeholder="请输入用户编号" :maxlength="20" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="年龄" prop="age">
-                <el-input v-model="formmodel.age" clearable :maxlength="4" placeholder="请输入年龄">
-                  <el-select slot="append" v-model="formmodel.age_unit" placeholder="请选择年龄单位">
-                    <el-option label="岁" value="岁" />
-                    <el-option label="月" value="月" />
-                    <el-option label="天" value="天" />
-                  </el-select>
-                </el-input>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="性别" class="form-item-sex">
-                <el-radio v-model="formmodel.sex" :label="1">男</el-radio>
-                <el-radio v-model="formmodel.sex" :label="0">女</el-radio>
-                <el-radio v-model="formmodel.sex" :label="3">未知</el-radio>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="在院状态">
-                <el-radio v-model="formmodel.status" :label="0">在院</el-radio>
-                <el-radio v-model="formmodel.status" :label="1">已出院</el-radio>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="证件类型">
-                <el-radio v-model="formmodel.id_type" label="身份证">身份证</el-radio>
-                <el-radio v-model="formmodel.id_type" label="护照">护照</el-radio>
-                <el-radio v-model="formmodel.id_type" label="军人证">军人证</el-radio>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="证件号">
-                <el-input v-model="formmodel.id_no" clearable placeholder="请输入证件号" :maxlength="20" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="入院日期" prop="in_date">
-                <el-date-picker
-                  v-model="formmodel.in_date"
-                  type="date"
-                  :editable="false"
-                  value-format="timestamp"
-                  placeholder="选择入院日期"
-                  :picker-options="{disabledDate(time) { return time.getTime() > Date.now() }}"
-                />
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="出院日期" prop="out_date">
-                <el-date-picker
-                  v-model="formmodel.out_date"
-                  type="date"
-                  :editable="false"
-                  value-format="timestamp"
-                  placeholder="选择出院日期"
-                  :picker-options="{disabledDate(time) { return time.getTime() < Date.now() }}"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="8">
-              <el-form-item label="责任医生">
-                <el-select v-model="formmodel.doctor_id" placeholder="请选择医生" @change="doctorChange(1)">
-                  <el-option v-for="(item,index) in doctors" :key="index" :label="item.clerk_name" :value="item.clerk_id" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="责任护士">
-                <el-select v-model="formmodel.nurse_id" placeholder="请选择护士" @change="doctorChange(2)">
-                  <el-option v-for="(item,index) in nurses" :key="index" :label="item.clerk_name" :value="item.clerk_id" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="8">
-              <el-form-item label="责任护工">
-                <el-select v-model="formmodel.worker_id" placeholder="请选择护工" @change="doctorChange(3)">
-                  <el-option v-for="(item,index) in workrs" :key="index" :label="item.clerk_name" :value="item.clerk_id" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row v-if="nurseData.length > 0">
-            <el-col v-for="(item, index) in nurseList" :key="index" :span="24 / nurseList.length">
-              <el-form-item :label="item[0]">
-                <el-select v-model="nurseData[index].nurse_level" :placeholder="'请选择'+item[0]" @change="changeNurseData(index)">
-                  <el-option v-for="(t,i) in item[1]" :key="i" :label="t.option_name" :value="t.id">
-                    <span style="float: left">{{ t.option_name }}</span>
-                    <span :style="'float: right; background-color: #'+t.color_rgb+';color: #'+t.color_rgb">颜色</span>
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-row>
-            <el-col :span="16">
-              <el-form-item label="病况描述">
-                <el-input
-                  v-model="formmodel.illness_desc"
-                  type="textarea"
-                  :autosize="{ minRows: 2, maxRows: 4}"
-                  :minlength="2"
-                  :maxlength="50"
-                  :placeholder="'请输入文本内容,长度2~50'"
-                />
-              </el-form-item>
-            </el-col>
-          </el-row>
-
-          <el-form-item style="margin-top:15px;">
-            <el-button type="primary" :disabled="isDisabled" class="save" @click="handlerSubmit('editForm')">保存修改</el-button>
-          </el-form-item>
-        </el-form>
-
-        <el-card v-if="this.customerId != 0" style="maring:15px">
-          <div>
-            <div style="float: left"><h4>用户备注</h4></div>
-            <div style="float: right">
-              <el-button type="success" @click="dialogAddVisible = true">添加备注</el-button>
-            </div>
-          </div>
-          <div style="clear:both">
-            <div>
-              <el-card v-for="(item, index) in tableData" :key="index">
-                <div>
-                  <span style="margin-left: 20px;font-weight:bold">备注内容:</span><span style="line-height:1.5">{{ item.content }}</span>
-                </div>
-                <div style="margin: 10px">
-                  <div style="float: left">
-                    <span v-if="item.file_name">
-                      <el-link :href="item.file_path" icon="el-icon-folder" type="success" target="_blank" :download="item.file_name">{{ item.file_name }}</el-link>
-                    </span>
-                  </div>
-                  <div style="float: right">
-                    <p>
-                      <span style="font-weight:bold">创建时间:</span>{{ forDate(item.create_time) }}
-                      <span style="font-weight:bold;margin-left: 10px;">创建人:</span>{{ item.create_name }}
-                    </p>
-                  </div>
-                </div>
-              </el-card>
-              <!--翻页-->
-              <el-pagination
-                v-if="pageData"
-                slot="pagination"
-                :current-page="pageData.page_no"
-                :page-sizes="[10, 30, 50, 100]"
-                :page-size="pageData.page_size"
-                layout="total, sizes, prev, pager, next, jumper"
-                :total="pageData.data_total"
-                @size-change="handlePageSizeChange"
-                @current-change="handlePageCurrentChange"
-              />
-            </div>
-          </div>
-        </el-card>
-        <el-dialog title="添加用户备注" :visible.sync="dialogAddVisible" :append-to-body="true" width="80%">
-          <el-form ref="editForm" :model="formmodel" :rules="rules" label-width="140px">
-            <el-form-item label="内容" prop="content">
-              <el-input
-                v-model="content"
-                type="textarea"
-                :autosize="{ minRows: 2, maxRows: 6}"
-                :minlength="2"
-                :maxlength="300"
-                show-word-limit
-                :placeholder="'请输入文本内容,长度300'"
-              />
-            </el-form-item>
-            <el-form-item label="附件">
-              <el-upload
-                v-if="!filePath"
-                class="avatar-uploader"
-                :action="`${uploadServer}?scene=avatar`"
-                :show-file-list="false"
-                :on-success="uploaded"
-                :before-upload="handleShopLogoBefore"
-              >
-                <i class="el-icon-plus avatar-uploader-icon" />
-              </el-upload>
-              <span v-if="filePath">{{ fileName }}</span>
-            </el-form-item>
-            <el-form-item>
-              <el-button type="primary" @click="addRemark">立即添加</el-button>
-              <el-button @click="quxiao">取消</el-button>
-            </el-form-item>
-          </el-form>
-        </el-dialog>
-      </el-tab-pane>
-      <el-tab-pane v-if="customerId != 0" label="用户亲属" name="customer-relative">
-        <customer-relative :member-id="memberId" />
-      </el-tab-pane>
-
-    </el-tabs>
-
-  </div>
-
-</template>
-
-<script>
-import * as customer_API from '@/api/ncs_customer'
-import * as clerk_API from '@/api/ncs_clerk'
-import * as NurseConfig_API from '@/api/ncs_nurse_config'
-import * as remark_API from '@/api/ncs_remark'
-import * as RegExp from '@/utils/RegExp'
-import { unixToDate } from '@/utils/Foundation'
-// import { serverUrl } from '@/utils/domain'
-import customerRelative from '@/views/customer/customer_relative'
-const serverUrl = domain.serverUrl
-
-export default {
-  name: 'PatientInfoEdit',
-  components: { customerRelative },
-  props: {
-    customerId: {
-      type: Number,
-      default: 0
-    },
-    frameId: {
-      type: Number,
-      default: 0
-    }
-  },
-  data: function() {
-    return {
-      formmodel: {
-        sex: 1,
-        status: 0,
-        age_unit: '岁',
-        id_type: '身份证',
-        part_id: this.$store.getters.partId
-      },
-      nurseList: [],
-      nurseData: [],
-      nurseConfigDtos: [],
-      rules: {
-        named: [
-          this.MixinRequired('请输入真实姓名!'),
-          { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
-          {
-            validator: (rule, value, callback) => {
-              if (!RegExp.userName.test(value)) {
-                callback(new Error('只支持汉字、字母、数字、“-”、“_”的组合!'))
-              } else {
-                callback()
-              }
-            }
-          }
-        ],
-        age: [{ required: true, message: '请输入年龄', trigger: 'blur' }],
-        content: [{ required: true, message: '请输入备注内容', trigger: 'blur' }],
-        in_date: [{ required: true, message: '请选择入院日期', trigger: 'blur' }]
-      },
-      isDisabled: false,
-      doctors: [],
-      nurses: [],
-      workrs: [],
-      doctor_mapping_id: false,
-      nurse_Mapping_id: false,
-      worker_mapping_id: false,
-      params: {
-        page_size: 10,
-        page_no: 1,
-        sort: 'create_time',
-        dir: 'desc'
-      },
-      tableData: [],
-      pageData: [],
-      dialogAddVisible: false,
-      fileName: null,
-      filePath: null,
-      uploadServer: serverUrl + '/ncs/upload/uploadFile',
-      userInfo: this.$store.getters.userInfo,
-      content: null,
-      activeName: 'customerEdit',
-      memberId: null
-    }
-  },
-  watch: {
-    frameId: function(newval) {
-      this.getNurseConfigs()
-      this.hasCustomerId()
-    }
-  },
-  mounted() {
-    this.getEmployees()
-    if (this.nurseList.length === 0) {
-      this.getNurseConfigs()
-      this.hasCustomerId()
-    }
-  },
-
-  methods: {
-    getEmployees() {
-      const _this = this
-      clerk_API.listByPartRoleId({ partId: this.$store.getters.partId }).then(res => {
-        const groupBy = (arr, func) =>
-          arr.map(typeof func === 'function' ? func : val => val[func]).reduce((acc, val, i) => {
-            acc[val] = (acc[val] || []).concat(arr[i])
-            return acc
-          }, {})
-        const groupData = groupBy(res, item => item.role_name)
-        if (Object.entries(groupData).length > 0) {
-          Object.entries(groupData).forEach(item => {
-            if (item[0] === '医生') {
-              _this.doctors = item[1]
-            } else if (item[0] === '护士') {
-              _this.nurses = item[1]
-            } else if (item[0] === '护工') {
-              _this.workrs = item[1]
-            }
-          })
-        }
-      })
-    },
-    getNurseConfigs() {
-      this.nurseData = []
-      const _this = this
-      NurseConfig_API.listByPartId({ partId: this.$store.getters.partId }).then(res => {
-        const groupBy = (arr, func) =>
-          arr.map(typeof func === 'function' ? func : val => val[func]).reduce((acc, val, i) => {
-            acc[val] = (acc[val] || []).concat(arr[i])
-            return acc
-          }, {})
-          // 以参数名称来分组
-        const groupData = groupBy(res, item => item.config_name)
-        _this.nurseList = Object.entries(groupData)
-        if (_this.nurseList.length > 0) {
-          _this.nurseList.forEach((item, index) => {
-            _this.nurseData.push({ nurse_level: null, id: null, nurse_config: item[1][0].ncfg_id })
-          })
-        }
-      })
-    },
-    hasCustomerId() {
-      this.clearForm()
-      if (this.customerId !== 0) {
-        const _this = this
-        customer_API.getCustomerInfo(this.customerId).then(res => {
-          _this.formmodel = res
-          _this.doctor_mapping_id = res.doctor_mapping_id
-          _this.nurse_Mapping_id = res.nurse_Mapping_id
-          _this.worker_mapping_id = res.worker_mapping_id
-          _this.formmodel.doctor_mapping_id = null
-          _this.formmodel.nurse_Mapping_id = null
-          _this.formmodel.worker_mapping_id = null
-          if (_this.formmodel.in_date) {
-            _this.formmodel.in_date = _this.formmodel.in_date * 1000
-          }
-          if (_this.formmodel.out_date) {
-            _this.formmodel.out_date = _this.formmodel.out_date * 1000
-          }
-          console.log(_this.formmodel.in_date, _this.formmodel.out_date)
-          _this.getRemarks()
-          if (res.list !== null) {
-            _this.nurseData.forEach((item, index) => {
-              res.list.forEach((t, i) => { // 为护理项赋值
-                if (item.nurse_config === t.nurse_config) {
-                  item.nurse_level = t.nurse_level
-                  item.id = t.id
-                }
-              })
-            })
-          }
-        })
-      }
-    },
-    doctorChange(type) {
-      if (this.customerId !== 0) {
-        if (type === 1) {
-          if (this.doctor_mapping_id === null) {
-            this.formmodel.doctor_mapping_id = 0 // 为0则新增,// 其他值为修改
-          } else {
-            this.formmodel.doctor_mapping_id = this.doctor_mapping_id
-          }
-        } else if (type === 2) {
-          if (this.nurse_Mapping_id === null) {
-            this.formmodel.nurse_Mapping_id = 0 // 为0则新增,// 其他值为修改
-          } else {
-            this.formmodel.nurse_Mapping_id = this.nurse_Mapping_id
-          }
-        } else {
-          if (this.worker_mapping_id === null) {
-            this.formmodel.worker_mapping_id = 0 // 为0则新增,// 其他值为修改
-          } else {
-            this.formmodel.worker_mapping_id = this.worker_mapping_id
-          }
-        }
-      }
-    },
-    /** 保存按钮处理事件 */
-    handlerSubmit(formName) {
-      this.$refs[formName].validate(valid => {
-        if (valid) {
-          this.isDisabled = true
-          if (this.formmodel.in_date) {
-            this.formmodel.in_date = this.formmodel.in_date / 1000
-          }
-          if (this.formmodel.out_date) {
-            this.formmodel.out_date = this.formmodel.out_date / 1000
-          }
-          if (this.customerId === 0) {
-            this.formmodel.frame_id = this.frameId
-            this.formmodel.list = this.nurseConfigDtos
-            customer_API.addAll(this.formmodel).then(res => {
-              this.$message.success(this.$t('action.addSuccess2'))
-              this.clearForm()
-              this.$emit('saved')
-            }).catch(e => {
-              this.isDisabled = false
-            })
-          } else {
-            this.formmodel.list = this.nurseConfigDtos
-            customer_API.updateAll(this.formmodel).then(res => {
-              this.$message.success(this.$t('action.editSuccess'))
-              this.isDisabled = false
-              this.$emit('saved')
-            })
-          }
-        } else {
-          this.$message.error(this.$t('action.fromError'))
-          return false
-        }
-      })
-    },
-    clearForm() {
-      this.activeName = 'customerEdit'
-      this.formmodel = {
-        sex: 1,
-        status: 0,
-        age_unit: '岁',
-        id_type: '身份证',
-        part_id: this.$store.getters.partId,
-        named: null,
-        card_no: null,
-        id_no: null,
-        in_date: new Date(new Date().toLocaleDateString()).getTime(),
-        out_date: null,
-        doctor_id: null,
-        nurse_id: null,
-        worker_id: null,
-        illness_desc: null
-      }
-      this.isDisabled = false
-      this.nurseConfigDtos = []
-    },
-    // 选择了护理项
-    changeNurseData(index) {
-      const i = this.nurseConfigDtos.findIndex(item => {
-        return item.nurse_level === this.nurseData[index].nurse_level
-      })
-      if (i !== -1) {
-        this.nurseConfigDtos.splice(i, 1)
-      }
-      this.nurseConfigDtos.push(this.nurseData[index])
-    },
-    getRemarks() {
-      const _this = this
-      this.params.fixedCondition = ' part_id=' + this.$store.getters.partId + ' and type=1 and member_id = ' + this.formmodel.member_id
-      remark_API.getRemarks(this.params).then(res => {
-        _this.tableData = res.data
-        _this.pageData = {
-          page_no: res.page_no,
-          page_size: res.page_size,
-          data_total: res.data_total
-        }
-      })
-    },
-    /** 分页大小发生改变 */
-    handlePageSizeChange(size) {
-      this.params.page_size = size
-      this.getRemarks()
-    },
-    /** 分页页数发生改变 */
-    handlePageCurrentChange(page) {
-      this.params.page_no = page
-      this.getRemarks()
-    },
-    forDate(date) {
-      return unixToDate(date)
-    },
-    /** 上传成功后的钩子 更换图片 置空存储数组*/
-    uploaded(res) {
-      this.filePath = serverUrl + '/' + res
-    },
-    /** 图片上传之前的校验 */
-    handleShopLogoBefore(file) {
-      const _this = this
-      return new Promise((resolve, reject) => {
-        let hz = file.name
-        _this.fileName = hz
-        const index = hz.lastIndexOf('.')
-        hz = hz.substring(index + 1, hz.length)
-        const isImg = hz === 'jpeg' || hz === 'png' || hz === 'jpg' || hz === 'txt' || hz === 'doc' || hz === 'docx' || hz === 'xls' || hz === 'xlsx'
-        const isLt5M = file.size / 1024 / 1024 < 5
-        if (!isImg) {
-          _this.$message.error('上传附件只能是txt,doc,docx,xls,xlsx,jpg,png,jpeg格式!')
-          reject()
-        }
-        if (!isLt5M) {
-          _this.$message.error('上传附件大小不能超过 5MB!')
-          reject()
-        }
-        resolve()
-      })
-    },
-    addRemark() {
-      if (!this.content) {
-        this.$message.info('请输入内容!')
-        return
-      }
-      if (!this.filePath) {
-        this.fileName = null
-      }
-      const data = {
-        partId: this.$store.getters.partId,
-        type: 1,
-        memberId: this.formmodel.member_id,
-        createName: this.userInfo.username,
-        content: this.content,
-        filePath: this.filePath,
-        fileName: this.fileName
-      }
-      const _this = this
-      remark_API.save(data).then(res => {
-        _this.$message.success(this.$t('action.addSuccess2'))
-        _this.getRemarks()
-        _this.quxiao()
-      })
-    },
-    quxiao() {
-      this.dialogAddVisible = false
-      this.content = null
-      this.fileName = null
-      this.filePath = null
-    },
-    handleClick(tab) {
-      this.memberId = this.formmodel.member_id
-    }
-  }
-}
-</script>
-
-<style type="text/scss" scoped>
-  .el-input .el-select {
-    width: 68px;
-  }
-  .el-select {
-    width: 100%;
-  }
-  .formwrap {
-    border: 1px solid #ebebeb;
-    border-radius: 3px;
-    background: #fff;
-    padding: 24px;
-    min-height: 500px;
-  }
-  /deep/ .avatar-uploader .el-upload {
-    border: 1px dashed #d9d9d9;
-    border-radius: 6px;
-    cursor: pointer;
-    position: relative;
-    overflow: hidden;
-  }
-
-  /deep/ .avatar-uploader .el-upload:hover {
-    border-color: #409EFF;
-  }
-
-  /deep/ .avatar-uploader-icon {
-    font-size: 28px;
-    color: #8c939d;
-    width: 100px;
-    height: 100px;
-    line-height: 100px;
-    text-align: center;
-  }
-
-  /deep/ .avatar {
-    width: 100px;
-    height: 100px;
-    display: block;
-  }
-
-</style>

+ 1 - 0
src/views/customer/customerManagement.vue

@@ -5,6 +5,7 @@
 </template>
 
 <script>
+// 月子中心版
 import CustomerManager from './components/customerManager'
 export default {
   name: 'CustomerManagement',

+ 0 - 284
src/views/customer/customer_relative.vue

@@ -1,284 +0,0 @@
-<template>
-  <div>
-    <en-table-layout
-      toolbar
-      @selection-change="selectFun"
-      pagination
-      :tableData="tableData"
-      :height="600"
-      :loading="loading"
-      :default-sort="{prop: 'id', order: 'ascending'}"
-    >
-      <!--工具栏-->
-      <div slot="toolbar" class="inner-toolbar">
-        <div class="toolbar-search">
-          <en-table-search @search="handlerSearch" :placeholder="this.$t('action.keywords')"/>
-        </div>
-        <div class="toolbar-btns">
-          <el-button type="primary" @click="handleAdd">添加亲属</el-button>
-           <el-button type="danger" :disabled="multipleSelection.length === 0" @click="batchDelete">批量删除</el-button>
-        </div>
-      </div>
-      <!--表头-->
-      <template slot="table-columns">
-        <el-table-column type="selection" width="55" align="center"></el-table-column>
-        <el-table-column prop="nickname" label="姓名" align="center"></el-table-column>
-        <el-table-column prop="relative_name" label="亲属称呼" align="center"></el-table-column>
-        <el-table-column prop="sex" label="性别" align="center" :formatter="formatterSex"></el-table-column>
-        <el-table-column prop="mobile" label="手机" align="center"></el-table-column>
-        <el-table-column label="操作" width="120">
-          <template slot-scope="scope">
-            <el-button type="danger" size="mini" @click="handlerDelete(scope.row.member_id)">
-              删除
-            </el-button>
-          </template>
-        </el-table-column>
-      </template>
-
-      <!--翻页-->
-      <el-pagination
-        slot="pagination"
-        v-if="pageData"
-        :current-page="pageData.page_no"
-        :page-sizes="[20, 30, 50, 100]"
-        :page-size="pageData.page_size"
-        @size-change="handlePageSizeChange"
-        @current-change="handlePageCurrentChange"
-        layout="total, sizes, prev, pager, next, jumper"
-        :total="pageData.data_total">
-      </el-pagination>
-    </en-table-layout>
-
-    <el-dialog title="添加用户亲属" :visible.sync="dialogAddVisible" :append-to-body="true" width="80%">
-      <el-form :model="formmodel" :rules="rules" ref="editForm" label-width="140px">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="姓名" prop="nickname">
-              <el-input v-model="formmodel.nickname" clearable placeholder="请输入姓名" :maxlength="20"></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="亲属称呼" prop="relative_name">
-              <el-input v-model="formmodel.relative_name" clearable placeholder="请输入亲属称呼" :maxlength="20"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="性别" class="form-item-sex">
-              <el-radio v-model="formmodel.sex" :label="1">男</el-radio>
-              <el-radio v-model="formmodel.sex" :label="0">女</el-radio>
-              <el-radio v-model="formmodel.sex" :label="3">未知</el-radio>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="手机号码">
-              <el-input v-model="formmodel.mobile" clearable placeholder="请输入手机号码" :maxlength="20"></el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item>
-          <el-button type="primary" @click="addMember">立即添加</el-button>
-          <el-button @click="quxiao">取消</el-button>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import * as API_user from '@/api/user'
-  import * as RegExp from "@/utils/RegExp";
-
-  export default {
-    name: 'customer_relative',
-    props: {
-      memberId: {
-        type: Number,
-        default: 0
-      }
-    },
-    data: function() {
-      return {
-        /** 列表loading状态 */
-        loading: false,
-        /** 列表参数 */
-        params: {
-          page_size: 10,
-          page_no: 1,
-          sort: 'create_time',
-          dir: 'desc',
-          fixedCondition: ''
-        },
-        currentRow: {},
-        /** 列表数据 */
-        tableData: [],
-        pageData: [],
-        dialogAddVisible: false,
-        /** 选中行数据 */
-        multipleSelection: [],
-        lookForm: {},
-        formshow: false,
-        formmodel: {
-          sex: 1
-        },
-        rules: {
-          nickname: [
-            this.MixinRequired('请输入亲属姓名!'),
-            { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
-            {
-              validator: (rule, value, callback) => {
-                if (!RegExp.userName.test(value)) {
-                  callback(new Error('只支持汉字、字母、数字、“-”、“_”的组合!'))
-                } else {
-                  callback()
-                }
-              }
-            }
-          ],
-          relative_name: [
-            this.MixinRequired('请输入亲属称呼!'),
-            { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
-            {
-              validator: (rule, value, callback) => {
-                if (!RegExp.userName.test(value)) {
-                  callback(new Error('只支持汉字、字母、数字、“-”、“_”的组合!'))
-                } else {
-                  callback()
-                }
-              }
-            }
-          ],
-        },
-      }
-    },
-    mounted() {
-      // if (this.memberId) {
-      //   this.GET_List()
-      // }
-    },
-    watch: {
-      memberId: function() {
-        if (this.memberId) {
-          this.GET_List()
-        }
-      }
-    },
-    methods: {
-      /** 选择行变化时,记录选中的行数据 */
-      selectFun(val) {
-        this.multipleSelection = val
-      },
-      /** 加载设备信息列表 */
-      GET_List() {
-        this.loading = true
-        this.params.fixedCondition = ' relative_id=' + this.memberId
-        API_user.getList(this.params).then(res => {
-          this.loading = false
-          this.tableData = res.data
-          this.pageData = {
-            page_no: res.page_no,
-            page_size: res.page_size,
-            data_total: res.data_total
-          }
-        }).catch(() => {
-          this.loading = false
-        })
-      },
-      /** 处理搜索 **/
-      handlerSearch(keywords) {
-        this.params.query = keywords
-        this.GET_List()
-      },
-      /** 单条数据删除处理 */
-      handlerDelete(ids) {
-        let test = '你确定要删除此用户亲属信息?'
-        let _this = this
-        this.$confirm(test, this.$t('action.waring'), {
-          confirmButtonText: this.$t('action.yes'),
-          cancelButtonText: this.$t('action.cancel'),
-          type: 'warning'
-        }).then(() => {
-          API_user.remove(ids).then(
-            response => {
-              _this.GET_List()
-            }
-          ).catch(response => {
-            _this.$message({
-              type: 'info',
-              message: response.message
-            })
-          })
-        })
-      },
-      /** 批量数据删除处理(删除选中的行) */
-      batchDelete: function() {
-        const ids = []
-        this.multipleSelection.forEach(function(item) {
-          ids.push(item.member_id)
-        })
-        this.handlerDelete(ids.join(','), 'del')
-      },
-      /** 添加设备信息 */
-      handleAdd() {
-        this.dialogAddVisible = true
-      },
-      /** 编辑设备信息 */
-      handlerEdit(index, row) {
-        this.lookForm = Object.assign({}, row);
-        this.formshow = true
-      },
-      /** 分页大小发生改变 */
-      handlePageSizeChange(size) {
-        this.params.page_size = size
-        this.GET_List()
-      },
-      /** 分页页数发生改变 */
-      handlePageCurrentChange(page) {
-        this.params.page_no = page
-        this.GET_List()
-      },
-      addMember() {
-        this.formmodel.relative_id = this.memberId
-        let _this = this
-        API_user.add(this.formmodel).then(res=> {
-          _this.GET_List()
-          _this.quxiao()
-        })
-      },
-      quxiao() {
-        this.dialogAddVisible = false
-        this.formmodel = {
-          sex: 1
-        }
-      },
-      formatterSex(row, column, cellValue) {
-        if (row.sex === 1) {
-          return '男'
-        } else if (row.sex === 0) {
-          return '女'
-        } else {
-          return '未知'
-        }
-      }
-    }
-  }
-</script>
-
-<style type="text/scss" scoped>
-
-  /deep/ div.toolbar {
-    height: 70px;
-    padding: 20px 0;
-  }
-
-  /deep/ .el-table {
-    width: 100%;
-    overflow-x: scroll;
-
-    & td:not(.is-left) {
-      text-align: center;
-    }
-  }
-
-</style>

+ 1 - 0
src/views/customer/elderlyCareManagement.vue

@@ -5,6 +5,7 @@
 </template>
 
 <script>
+// 养老院版
     import elderlyCareManager from "./components/elderlyCareManager"
     export default {
         name: "ElderlyCareManagement",

+ 0 - 474
src/views/customer/list.vue

@@ -1,474 +0,0 @@
-<template>
-  <div>
-    <!--工具栏-->
-    <div class="toolbar" style="padding-left: 20px">
-      <el-form :inline="true" label-width="120px">
-        <el-form-item>
-          <el-input v-model="searchStr" placeholder="请输入用户姓名、编号、床位" clearable @clear="clickSearch" @keyup.native.enter="clickSearch">
-            <el-button slot="append" icon="el-icon-search" @click="clickSearch"></el-button>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="用户状态">
-          <el-select v-model="callingType" placeholder="请选择用户状态" clearable @change="changeStatus">
-            <el-option label="在院" :value="0" />
-            <el-option label="已出院" :value="1" />
-          </el-select>
-        </el-form-item>
-        <el-form-item>
-          <el-button type="danger" @click="batchDelete">批量删除</el-button>
-        </el-form-item>
-      </el-form>
-    </div>
-    <ag-grid-layout
-            :toolbar="false"
-            :table-height="tableHeight"
-            theme="ag-theme-alpine"
-            :column-defs="columnDefs"
-            :row-data="tableData"
-            :locale-text="localeText"
-            :grid-options="gridOptions"
-            :default-col-def="defaultColDef"
-            :animate-rows="true"
-            :row-selection="rowSelection"
-            @filterChanged="filterModifed"
-            @sortChanged="gridSortChange"
-    >
-      <el-pagination
-              v-if="pageData"
-              slot="pagination"
-              :current-page="pageData.page_no"
-              :page-sizes="[10, 20, 50, 100]"
-              :page-size="pageData.page_size"
-              layout="total, sizes, prev, pager, next, jumper"
-              :total="pageData.data_total"
-              @size-change="handlePageSizeChange"
-              @current-change="handlePageCurrentChange"
-      />
-    </ag-grid-layout>
-    <el-dialog title="编辑用户信息" :visible.sync="dialogAddVisible" :append-to-body="true" width="85%">
-      <customer-edit :customer-id="customerId" :frame-id="frameId" @saved="handlePatientFinished"></customer-edit>
-    </el-dialog>
-
-    <el-dialog title="换床" :visible.sync="formshow" :append-to-body="true" width="80%">
-      <el-form ref="editForm" label-width="140px">
-        <el-form-item label="当前床位:"><svg-icon icon-class="bed" style="color: #9aaabf;margin-top: 5px" />{{ full_name }}</el-form-item>
-        <el-form-item label="可换床位:">
-          <el-radio-group v-model="changeFrameId">
-            <el-radio v-for="(item, index) in frameList" :label="item.id" :key="index">
-              <svg-icon icon-class="bed" style="color: #9aaabf;margin-top: 5px" />{{ item.full_name }}
-            </el-radio>
-          </el-radio-group>
-        </el-form-item>
-
-        <el-form-item>
-          <el-button type="primary" @click="updateFrameId">确定换床</el-button>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-  import * as API_customer from '@/api/ncs_customer'
-  import { unixToDate } from "@/utils/Foundation"
-  import customerEdit from '@/views/customer/customerEdit'
-  import * as RegExp from "@/utils/RegExp"
-  import * as API_hospitalFrame from "@/api/ncs_hospitalFrame"
-  import { AG_GRID_LOCALE_CN } from '@/utils/AgGridVueLocaleCn'
-  import {param} from "@/utils"
-  import ButtonCellRender from "@/components/AgGridCellRender/ButtonCellRender";
-  import RadioFilter from "@/components/AgGridCustomFilter/RadioFilter";
-
-  export default {
-    name: 'customer_list',
-    components: { customerEdit, ButtonCellRender, RadioFilter },
-    data: function() {
-      return {
-        /** 列表loading状态 */
-        loading: false,
-        /** 列表参数 */
-        params: {
-          page_size: 10,
-          page_no: 1,
-          sort: 'status,create_time',
-          dir: 'desc',
-          fixedCondition: ' part_id = ' + this.$store.getters.partId,
-          alias: 'nc'
-        },
-        currentRow: {},
-        /** 列表数据 */
-        tableData: [],
-        pageData: [],
-        dialogAddVisible: false,
-        /** 选中行数据 */
-        multipleSelection: [],
-        lookForm: {},
-        formshow: false,
-        changeFrameId: null,
-        customerId: null,
-        frameId: null,
-        callingType: null,
-        frameList: [],
-        searchStr: null,
-        full_name: '',
-        columnDefs: null,
-        defaultColDef: null,
-        gridOptions: null,
-        gridApi: null,
-        columnApi: null,
-        localeText: AG_GRID_LOCALE_CN,
-        rowSelection: null,
-        sexTransfer: [
-          { key: '男', value: 1, color: 'green' },
-          { key: '女', value: 0, color: 'red' }
-        ],
-        statusTransfer: [
-        { key: '已出院', value: 1,  color: 'orange' },
-          { key: '在院', value: 0,  color: 'green' }
-        ]
-      }
-    },
-    computed: {
-      tableHeight() {
-        return this.mainAreaHeight - 130
-      }
-    },
-    beforeMount() {
-      this.gridOptions = {
-      }
-      this.columnDefs = [
-        {
-          headerName: '#',
-          headerCheckboxSelection: true,
-          headerCheckboxSelectionFilteredOnly: true,
-          checkboxSelection: true,
-          sortable: false, filter: false,
-          width: 50,
-          resizable: false,
-          valueGetter: this.hashValueGetter
-        },
-        { headerName: '姓名', field: 'named', sortable: true, filter: 'agTextColumnFilter', minWidth: 160 },
-        { headerName: '用户编号', field: 'card_no', sortable: true, filter: true, minWidth: 170 },
-        { headerName: '年龄', field: 'age', sortable: true, filter: 'agNumberColumnFilter', valueFormatter: this.formatterAge, minWidth: 100 },
-        { headerName: '性别', field: 'sex', sortable: true, filter: true, cellRenderer: this.formatterSex, minWidth: 100, filterFramework: 'RadioFilter',
-          filterParams: {
-            listData: this.sexTransfer
-          }
-        },
-        { headerName: '住院时间', field: 'in_date', valueFormatter: this.formatterDate, sortable: true, minWidth: 220, filter: 'agDateColumnFilter',
-          filterParams: {
-            comparator: (filterLocalDateAtMidnight, cellValue) => { // 所有数据都由服务器端过滤,此处只需返回0 即可
-              const celldate = unixToDate(cellValue, 'yyyy-MM-dd 00:00:00')
-              return (new Date(celldate).getTime() / 1000) - (filterLocalDateAtMidnight.getTime() / 1000)
-            }
-          }
-        },
-        { headerName: '状态', field: 'status', sortable: true, filter: false, cellRenderer: this.formatterStatus, minWidth: 100, filterFramework: 'RadioFilter',
-          filterParams: {
-            listData: this.statusTransfer
-          }
-        },
-        { headerName: '床位', field: 'full_name', sortable: true, filter: true, minWidth: 120 },
-        { headerName: '操作任务', field: 'id',
-          cellRendererFramework: 'ButtonCellRender',
-          cellRendererParams: param => {
-            return {
-              onClick: this.handleAdd,
-              label: this.$t('action.edit'),
-              buttonType: 'primary',
-              buttonSize: 'mini'
-            }
-          },
-          filter: false,
-          pinned: 'right',
-          lockPinned: true,
-          width: 100,
-          resizable: false,
-          sortable: false },
-        { headerName: '换床', field: 'id',
-          cellRendererFramework: 'ButtonCellRender',
-          cellRendererParams: param => {
-            return {
-              onClick: this.handlerEdit,
-              label: '换床',
-              buttonType: 'success',
-              buttonSize: 'mini',
-              show: !param.data['status']
-            }
-          },
-          filter: false,
-          pinned: 'right',
-          lockPinned: true,
-          width: 100,
-          resizable: false,
-          sortable: false },
-        { headerName: '出院', field: 'id',
-          cellRendererFramework: 'ButtonCellRender',
-          cellRendererParams: param => {
-            return {
-              onClick: this.cy,
-              label: '出院',
-              buttonType: 'danger',
-              buttonSize: 'mini',
-              show: !param.data['status']
-            }
-          },
-          pinned: 'right',
-          lockPinned: true,
-          width: 100,
-          resizable: false,
-          filter: false,
-          sortable: false }
-      ]
-      this.defaultColDef = {
-        filter: 'agTextColumnFilter',
-        sortable: true,
-        resizable: true,
-        comparator: this.testComparator,
-        filterParams: {
-          debounceMs: 200,
-          newRowsAction: 'keep',
-          textCustomComparator: this.textCustomComparator,
-          comparator: this.testComparator
-        }
-      },
-              this.rowSelection = 'multiple'
-    },
-    mounted() {
-      window.onresize = this.windowResize()
-      this.gridApi = this.gridOptions.api
-      this.GET_List()
-    },
-    methods: {
-      windowResize() {
-        this.$set(this, 'mainAreaHeight', Number(document.documentElement.clientHeight) - 84)
-      },
-      /** 选择行变化时,记录选中的行数据 */
-      selectFun(val) {
-        this.multipleSelection = val
-      },
-      /** 加载设备信息列表 */
-      GET_List() {
-        this.loading = true
-        this.gridApi.showLoadingOverlay()
-        this.gridApi.sizeColumnsToFit()
-        API_customer.getList(this.params).then(res => {
-          this.loading = false
-          this.tableData = res.data
-          this.pageData = {
-            page_no: res.page_no,
-            page_size: res.page_size,
-            data_total: res.data_total
-          }
-        }).catch(() => {
-          this.loading = false
-        })
-      },
-      /** 处理搜索 **/
-      handlerSearch(keywords) {
-        this.params.query = keywords
-        this.GET_List()
-      },
-      changeStatus(value) {
-        delete this.params.fixedCondition
-        if (value) {
-          this.params.fixedCondition = ' part_id =' + this.$store.getters.partId + ' and status=' + value
-        } else {
-          this.params.fixedCondition = ' 1 = 1'
-        }
-        this.GET_List()
-      },
-      /** 单条数据删除处理 */
-      handlerDelete(ids) {
-        let test = '你确定要删除此用户信息?'
-        let _this = this
-        this.$confirm(test, this.$t('action.waring'), {
-          confirmButtonText: this.$t('action.yes'),
-          cancelButtonText: this.$t('action.cancel'),
-          type: 'warning'
-        }).then(() => {
-          API_customer.remove(ids).then(
-            response => {
-              _this.GET_List()
-            }
-          ).catch(response => {
-            _this.$message({
-              type: 'info',
-              message: response.message
-            })
-          })
-        })
-      },
-      /** 批量数据删除处理(删除选中的行) */
-      batchDelete: function() {
-        let rows = this.gridApi.getSelectedRows()
-        if (rows.length === 0) {
-          this.$message({ type: 'info', message: '请先勾选需要删除的数据' })
-          return
-        }
-        const ids = []
-        rows.forEach(function (item) {
-          ids.push(item.id)
-        })
-        this.handlerDelete(ids.join(','), 'del')
-      },
-      /** 添加设备信息 */
-      handleAdd(row) {
-        this.dialogAddVisible = true
-        this.customerId = row.id
-        this.frameId = row.frame_id
-      },
-      handlerEdit(row) {
-        this.customerId = row.id
-        this.full_name = row.full_name
-        API_hospitalFrame.getSickbedByPartId(this.$store.getters.partId).then(res=> {
-          this.frameList = res
-        })
-        this.formshow = true
-      },
-      cy(row) {
-        this.customerId = row.id
-        let _this = this
-        this.$confirm('你确定要进行出院操作吗', this.$t('action.waring'), {
-          confirmButtonText: this.$t('action.yes'),
-          cancelButtonText: this.$t('action.cancel'),
-          type: 'warning'
-        }).then(() => {
-          const data = {
-            out_date: new Date(new Date().toLocaleDateString()).getTime(),
-            status: 1
-          }
-          _this.updateSave(data)
-        })
-      },
-      /** 分页大小发生改变 */
-      handlePageSizeChange(size) {
-        this.params.page_size = size
-        this.GET_List()
-      },
-      /** 分页页数发生改变 */
-      handlePageCurrentChange(page) {
-        this.params.page_no = page
-        this.GET_List()
-      },
-      formatterAge(param) {
-        return param.data.age + param.data.age_unit
-      },
-      formatterStatus(params) {
-        if (params.value === null || params.value === undefined) return ''
-        const item = this.statusTransfer.filter(p => p.value === params.value)[0]
-        if (item) {
-          return '<span style="color:' + item.color + ';">' + item.key + '</span>'
-        } else {
-          return '未知'
-        }
-      },
-      formatterDate(param) {
-        let date = unixToDate(param.data.in_date, 'yyyy-MM-dd')
-        if (param.data.out_date) {
-          date += '至' + unixToDate(param.data.out_date, 'yyyy-MM-dd')
-        } else {
-          if (param.data.in_date) {
-            date += '至今'
-          }
-        }
-        return date
-      },
-      handlePatientFinished() {
-        this.dialogAddVisible = false
-        this.GET_List()
-      },
-      updateFrameId() {
-        if (!this.changeFrameId) {
-          this.$message({
-            type: 'info',
-            message: '请选择床位'
-          })
-          return
-        }
-        const data = {
-          frame_id: this.changeFrameId
-        }
-        this.updateSave(data)
-      },
-      updateSave(data) {
-        API_customer.update(this.customerId, data).then(res=> {
-          this.$message({
-            type: 'success',
-            message: '修改成功'
-          })
-          this.formshow = false
-          this.GET_List()
-        })
-      },
-      clickSearch(value) {
-        this.params.query = this.searchStr
-        this.GET_List()
-      },
-      /** 性别格式化 */
-      formatterSex(params) {
-        if (params.value === null || params.value === undefined) return ''
-        const item = this.sexTransfer.filter(p => p.value === params.value)[0]
-        if (item) {
-          return '<span style="color:' + item.color + ';">' + item.key + '</span>'
-        } else {
-          return '未知'
-        }
-      },
-      filterModifed(param) {
-        let model = param.api.getFilterModel()
-        this.params.filter = JSON.stringify(model)
-        this.GET_List()
-      },
-      gridSortChange(param) {
-        const columnState = param.columnApi.getColumnState()
-        // 排序状态
-        const sortState = columnState.filter(function(s) {
-          return s.sort != null
-        }).map(function(s) {
-          return {
-            colId: s.colId,
-            sort: s.sort,
-            sortIndex: s.sortIndex
-          }
-        }).sort(function(a, b) {
-          return a.sortIndex - b.sortIndex
-        })
-        if (sortState.length > 0) {
-          if (sortState.length === 1) {
-            this.params.sort = sortState[0].colId
-            this.params.dir = sortState[0].sort
-          } else {
-            let sortstring = ''
-            sortState.forEach(function(item) {
-              sortstring += item.colId + ' ' + item.sort + ','
-            })
-            this.params.sort = sortstring.substring(0, sortstring.length - 1)
-            this.params.dir = ' '
-          }
-        } else {
-          delete this.params.sort
-          delete this.params.dir
-        }
-        this.GET_List()
-      },
-    }
-  }
-</script>
-
-<style type="text/scss" scoped>
-
-  /deep/ div.toolbar {
-    height: 70px;
-    padding: 20px 0;
-  }
-
-  /deep/ .el-table {
-    width: 100%;
-    overflow-x: scroll;
-
-    & td:not(.is-left) {
-      text-align: center;
-    }
-  }
-</style>

+ 1 - 0
src/views/customer/patientManagement.vue

@@ -5,6 +5,7 @@
 </template>
 
 <script>
+// 医院版
 import PatientManager from './components/patientManager'
 export default {
   name: 'PatientManagement',

+ 0 - 460
src/views/hospitalFrame/hospitalFrame.vue

@@ -1,460 +0,0 @@
-<template>
-  <div>
-    <div id="add-new-group">
-      <i class="add-btn" @click="frameAddVisible = true">+</i>
-      <div v-show="frameAddVisible" class="add-div">
-        <span class="add-div-title">房间</span>
-        <input v-model="frameName">
-        <el-button type="text" size="mini" @click="handleAddRoom">保存</el-button>
-        <el-button type="text" size="mini" @click="frameAddVisible = false">取消</el-button>
-      </div>
-    </div>
-    <div v-if="hospital_frame" id="params-container">
-      <el-card>
-        <div slot="header" class="clearfix">
-          <span><i class="el-icon-school" />科室</span>
-        </div>
-        <div>
-          <el-button type="text" class="add-params-btn" @click="handlePartDevice"><i class="el-icon-cpu" /> 查看设备 [{{ hospital_frame.device_count }}]</el-button>
-        </div>
-      </el-card>
-      <el-card v-for="(item,index) in hospital_frame.frame_room_vos" v-if="hospital_frame.frame_room_vos" :key="index">
-        <div v-if="item.frame_room!=null" slot="header" class="clearfix">
-          <span><i class="el-icon-house" /> {{ item.frame_room.name }} 房</span>
-          <el-dropdown trigger="click" style="float: right" @command="handleGroupCommand">
-            <span class="el-dropdown-link">操作<i class="el-icon-arrow-down el-icon--right" /></span>
-            <el-dropdown-menu slot="dropdown">
-              <el-dropdown-item :command="{type: 'edit', frame: item.frame_room}">编辑</el-dropdown-item>
-              <el-dropdown-item :command="{type: 'delete', frame: item.frame_room}">删除</el-dropdown-item>
-              <el-dropdown-item :command="{type: 'device', frame: item.frame_room}" divided><i class="el-icon-cpu" /> 设备 {{ item.device_count }}</el-dropdown-item>
-            </el-dropdown-menu>
-          </el-dropdown>
-        </div>
-        <template v-if="item.frame_bed_vos && item.frame_bed_vos.length > 0">
-          <div v-for="(subItem, i) in item.frame_bed_vos" :key="i" class="param-item">
-            <span><i class="el-icon-s-flag" /> {{ subItem.frame_bed.name }} 床</span>
-            <span v-if="subItem.customer_id">
-              <el-button style="width: 150px;" size="mini" plain round @click="handleEditPatient(subItem.customer_id,subItem.frame_bed.id)">
-                <i class="el-icon-user" /> {{ subItem.customer_name+ ' '+ subItem.customer_age+subItem.customer_age_unit }}
-                <span v-if="subItem.customer_sex === 1">男</span>
-                <span v-else-if="subItem.customer_sex === 0">女</span>
-                <span v-else>未知</span>
-              </el-button>
-            </span>
-            <span v-else>
-              <el-button size="mini" type="success" plain round @click="handleAddPatient(subItem.frame_bed)"><i class="el-icon-circle-plus-outline" /> 用户</el-button>
-            </span>
-            <span>
-              <el-dropdown size="mini" @command="handleGroupCommand">
-                <span class="el-dropdown-link">操作<i class="el-icon-arrow-down el-icon--right" /></span>
-                <el-dropdown-menu slot="dropdown">
-                  <el-dropdown-item :command="{type: 'edit', frame: subItem.frame_bed}">编辑</el-dropdown-item>
-                  <el-dropdown-item :command="{type: 'delete', frame: subItem.frame_bed}" style="color: #F56C6C">删除</el-dropdown-item>
-                  <el-dropdown-item :command="{type: 'device', frame: subItem.frame_bed}" divided><i class="el-icon-cpu" /> 设备 {{ subItem.device_count }}
-                  </el-dropdown-item>
-                </el-dropdown-menu>
-              </el-dropdown>
-            </span>
-          </div>
-          <el-button type="text" class="add-params-btn" @click="handleAddFrame(item.frame_room.id, item.frame_room.name)"><i class="el-icon-circle-plus" /> 添加床位</el-button>
-        </template>
-        <template v-else>
-          <div class="param-item empty">暂无数据...</div>
-          <el-button type="text" class="add-params-btn" @click="handleAddFrame(item.frame_room.id, item.frame_room.name)"><i class="el-icon-circle-plus" /> 添加床位</el-button>
-        </template>
-      </el-card>
-    </div>
-
-    <el-dialog
-      title="用户信息"
-      :visible.sync="dialogPatientVisible"
-      width="85%"
-    >
-      <customer-edit :customer-id="customerId" :frame-id="frameId" @saved="handlePatientFinished" />
-    </el-dialog>
-
-    <el-dialog title="科室结构" :visible.sync="dialogFrameVisible" width="500px">
-      <el-form ref="editForm" :model="frameInfo" :rules="rules" label-width="110px">
-        <el-row>
-          <el-col :span="24">
-            <!--医院结构名称-->
-            <el-form-item label="名称" prop="name">
-              <el-input v-model="frameInfo.name" :maxlength="20">
-                <template slot="append">{{ frameInfo.type === 4?"房":"床" }}</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="24">
-            <!--医院结构别名-->
-            <el-form-item label="别名" prop="alias">
-              <el-input v-model="frameInfo.alias" :maxlength="20" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row hidden>
-          <el-col :span="12">
-            <el-form-item label="类型">
-              <el-radio v-model="frameInfo.type" :label="1">客房</el-radio>
-              <el-radio v-model="frameInfo.type" :label="2">床位</el-radio>
-            </el-form-item>
-          </el-col>
-        </el-row>
-
-        <el-form-item>
-          <el-button type="primary" class="save" @click="handlerSubmit('editForm')">保存修改</el-button>
-        </el-form-item>
-      </el-form>
-    </el-dialog>
-
-    <el-drawer
-      :title="selectedFrame.full_name+' 设备'"
-      :visible.sync="deviceVisible"
-      :append-to-body="true"
-      size="60%"
-    >
-      <device-info :frame-id="frameId" :frame="selectedFrame" />
-    </el-drawer>
-  </div>
-</template>
-
-<script>
-import * as HospitalFrame_API from '@/api/ncs_hospitalFrame'
-import * as RegExp from '@/utils/RegExp'
-import customerEdit from '@/views/customer/customerEdit'
-import DeviceInfo from '@/views/ncs-device/deviceInfo'
-
-export default {
-  name: 'HospitalFrame',
-  components: { DeviceInfo, customerEdit },
-  data: function() {
-    return {
-      hospital_frame: null,
-      frameAddVisible: false,
-      frameName: '',
-      dialogPatientVisible: false,
-      customerId: null,
-      dialogFrameVisible: false,
-      frameInfo: {},
-      deviceVisible: false,
-      frameId: 0,
-      selectedFrame: {},
-      rules: {
-        name: [
-          this.MixinRequired('请输入名称!'),
-          { min: 1, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
-          {
-            validator: (rule, value, callback) => {
-              if (!RegExp.userName.test(value)) {
-                callback(new Error('只支持汉字、字母、数字、“-”、“_”的组合!'))
-              } else {
-                callback()
-              }
-            }
-          }
-        ],
-        alias: [
-          { min: 1, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
-          {
-            validator: (rule, value, callback) => {
-              if (!value) {
-                callback()
-              }
-              if (!RegExp.userName.test(value)) {
-                callback(new Error('只支持汉字、字母、数字、“-”、“_”的组合!'))
-              } else {
-                callback()
-              }
-            }
-          }
-        ]
-      },
-      fullName: null
-    }
-  },
-  watch: {
-    deviceVisible: function(newData) {
-      if (!newData) {
-        this.GET_All()
-      }
-    }
-  },
-  mounted() {
-    this.GET_All()
-  },
-  methods: {
-    GET_All() {
-      HospitalFrame_API.getHospitalFrameList(this.$store.getters.userInfo.last_login_shopid).then(response => {
-        if (response) {
-          console.log(response)
-          this.hospital_frame = response
-        }
-      }).catch(response => {
-        this.$message({
-          type: 'info',
-          message: response.message
-        })
-      })
-    },
-    /** 下拉触发 */
-    handleGroupCommand(object) {
-      console.log(object)
-      this.selectedFrame = object.frame
-      switch (object.type) {
-        case 'edit':
-          this.handelEditFrame(object.frame)
-          break
-        case 'delete':
-          this.handlerDeleteFrame(object.frame.id)
-          break
-        case 'device':
-          this.frameId = object.frame.id
-          this.openDeviceList()
-          break
-      }
-    },
-    handleAddPatient(bedFrame) {
-      this.customerId = 0
-      this.frameId = bedFrame.id
-      this.dialogPatientVisible = true
-    },
-    handlePatientFinished() {
-      this.dialogPatientVisible = false
-      this.GET_All()
-    },
-    handleEditPatient(id, frameId) {
-      this.dialogPatientVisible = true
-      this.customerId = id
-      this.frameId = frameId
-    },
-    // frame handle
-    handleAddRoom() {
-      let parent_id = null
-      if (this.hospital_frame) {
-        parent_id = this.hospital_frame.frame_part.id
-      }
-      const params = { type: 4, name: this.frameName, part_id: this.$store.getters.partId, parent_id: parent_id }
-      params.full_name = params.name + '房'
-      HospitalFrame_API.addHospitalFrame(params).then(response => {
-        this.$message.success(this.$t('action.addSuccess2'))
-        this.GET_All()
-      })
-    },
-    handleAddFrame(id, name) { // 新增床位
-      this.frameInfo = {}
-      this.frameInfo = { parent_id: id, type: 5 }
-      this.fullName = name
-      this.dialogFrameVisible = true
-    },
-    handelEditFrame(frame) {
-      this.frameInfo = { id: frame.id, type: frame.type, name: frame.name, alias: frame.alias, full_name: frame.full_name }
-      this.dialogFrameVisible = true
-    },
-    handleFrameFinished() {
-      this.dialogFrameVisible = false
-      this.GET_All()
-    },
-    /** 单条数据删除处理 */
-    handlerDeleteFrame(ids) {
-      this.$confirm('确定要删除此结构及其所有下级吗?', this.$t('action.waring'), {
-        confirmButtonText: this.$t('action.yes'),
-        cancelButtonText: this.$t('action.cancel'),
-        type: 'warning'
-      }).then(() => {
-        HospitalFrame_API.deleteHospitalFrame(ids).then(response => {
-          this.$message({
-            type: 'success',
-            message: '已删除!'
-          })
-          this.GET_All()
-        }).catch(response => {
-          this.$message({
-            type: 'info',
-            message: response.message
-          })
-        })
-      })
-    },
-
-    // --------------------设备管理
-    handlePartDevice() {
-      this.frameId = this.hospital_frame.frame_part.id
-      this.selectedFrame = this.hospital_frame.frame_part
-      this.openDeviceList()
-    },
-    openDeviceList() {
-      this.deviceVisible = true
-    },
-    handlerSubmit(formName) {
-      this.$refs[formName].validate(valid => {
-        if (valid) {
-          const params = this.MixinClone(this.frameInfo)
-          if (params.id) {
-            if (params.type === 5) {
-              const name = params.full_name.split('-')
-              params.full_name = name[0] + '-' + params.name + '床'
-            } else if (params.type === 4) {
-              params.full_name = params.name + '房'
-            }
-            HospitalFrame_API.updateHospitalFrame(params.id, params).then(response => {
-              this.$message.success(this.$t('action.editSuccess'))
-              this.handleFrameFinished()
-            })
-          } else {
-            if (!params.part_id) {
-              params.part_id = this.$store.getters.partId
-            }
-            params.full_name = this.fullName + '房-' + params.name + '床'
-            HospitalFrame_API.addHospitalFrame(params).then(response => {
-              this.$message.success(this.$t('action.addSuccess2'))
-              this.handleFrameFinished()
-            })
-          }
-        } else {
-          this.$message.error(this.$t('action.fromError'))
-          return false
-        }
-      })
-    }
-
-  }
-}
-</script>
-
-<style type="text/scss" lang="scss" scoped>
-  #params-container {
-    display: flex;
-    flex-wrap: wrap;
-    position: relative;
-    background-color: #fff;
-    padding: 10px;
-    min-height: 150px;
-
-    .el-card {
-      min-width: 350px;
-      max-width: 500px;
-      min-height: 100px;
-      margin: 10px;
-      overflow: hidden;
-    }
-
-    .el-card__header {
-      padding: 10px 15px;
-      background-color: #f5f7fa;
-    }
-
-    .el-card__body {
-      padding: 10px !important;
-    }
-
-    .el-dropdown-link {
-      cursor: pointer;
-      color: #409eff
-    }
-
-    .el-icon-arrow-down {
-      font-size: 12px
-    }
-  }
-
-  #add-new-group {
-    position: absolute;
-    left: 10px;
-    top: 10px;
-    z-index: 10;
-    min-width: 30px;
-    height: 30px;
-    background: #475669;
-    border-radius: 50%;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    transition: background-color .3s ease;
-
-    &:hover {
-      background-color: rgb(192, 204, 218);
-      cursor: pointer;
-
-      .add-btn {
-        color: rgb(71, 86, 105)
-      }
-    }
-
-    .add-btn {
-      display: block;
-      width: 30px;
-      text-align: center;
-      font-size: 30px;
-      font-weight: bold;
-      color: white;
-      margin-top: -7px;
-    }
-
-    .add-div {
-      display: flex;
-      background: #324057;
-      align-items: center;
-      justify-content: space-around;
-      min-width: 330px;
-      height: 40px;
-      position: absolute;
-      top: -5px;
-      left: 50px;
-      padding: 2px 5px;
-      color: #F9FAFC;
-      box-shadow: 0 0 10px 0 #303133;
-
-      .add-div-title {
-        font-size: 12px
-      }
-    }
-  }
-
-  .add-params-btn {
-    width: 100%;
-  }
-
-  .el-tag + .el-tag {
-    margin-left: 10px;
-  }
-
-  .button-new-tag {
-    margin-left: 10px;
-    height: 32px;
-    line-height: 30px;
-    padding-top: 0;
-    padding-bottom: 0;
-  }
-
-  .input-new-tag {
-    width: 90px;
-    margin-left: 10px;
-    vertical-align: bottom;
-  }
-
-  .el-checkbox + .el-checkbox {
-    margin-left: 20px
-  }
-
-  .el-button + .el-button {
-    margin-left: 0
-  }
-
-  .param-item {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    padding: 7px;
-    background-color: #f5f7fa;
-    font-size: 14px;
-
-    &.empty {
-      background-color: #fff
-    }
-  }
-
-  .line {
-    line-height: 32px;
-  }
-</style>