Browse Source

添加便民服务数据同步

wuyunfeng 1 year ago
parent
commit
7761511123

+ 13 - 1
languages/en.js

@@ -1128,7 +1128,8 @@ module.exports = {
     changeBattery: 'Replace the battery of the device',
     interactionPush: 'Interactive record push configuration',
     interactionPushParamConfig: 'Push parameter configuration',
-    CustomerDistribution: 'User Distribution'
+    CustomerDistribution: 'User Distribution',
+    convenientDataSync: 'Convenient Data Sync'
   },
   deviceType: {
     NURSE_HOST: 'Nurse Host',
@@ -1562,5 +1563,16 @@ module.exports = {
     bedsTodayInTotal: 'Hospitalization today',
     yesterdayPatientTotal: 'Yesterday patients total',
     patientToadyOutTotal: 'Discharged today'
+  },
+  convenientSync: {
+    regionLoadUrl: 'Region Load Address',
+    hospitalSelect: 'Choose a hospital',
+    hospitalRegion: 'Hospital area',
+    dataSyncUrl: 'Data synchronization address',
+    jsonData: 'Call system JSON data',
+    syncData: 'Synchronize data',
+    refreshJsonData: 'Refresh JSON data',
+    selectHospitalPls: 'Please select a hospital',
+    selectRegionPls: 'Please select an administrative region'
   }
 }

+ 13 - 1
languages/es.js

@@ -1128,7 +1128,8 @@ module.exports = {
     changeBattery: 'Reemplazar la batería del dispositivo',
     interactionPush: 'Configuración push de registro interactivo',
     interactionPushParamConfig: 'Configuración de parámetros push',
-    CustomerDistribution: 'Distribución de usuarios'
+    CustomerDistribution: 'Distribución de usuarios',
+    convenientDataSync: 'Sincronización conveniente de datos'
   },
   deviceType: {
     NURSE_HOST: 'Enfermera asignada',
@@ -1562,5 +1563,16 @@ module.exports = {
     bedsTodayInTotal: 'Hospitalizado hoy',
     yesterdayPatientTotal: 'Número total de pacientes ayer',
     patientToadyOutTotal: 'Alta hoy'
+  },
+  convenientSync: {
+    regionLoadUrl: 'Dirección de carga regional',
+    hospitalSelect: 'Selección de hospitales',
+    hospitalRegion: 'Área hospitalaria',
+    dataSyncUrl: 'Dirección de sincronización de datos',
+    jsonData: 'Datos json del sistema de llamadas',
+    syncData: 'Datos sincronizados',
+    refreshJsonData: 'Actualizar los datos de json',
+    selectHospitalPls: 'Por favor, elija el hospital',
+    selectRegionPls: 'Por favor, elija el área administrativa'
   }
 }

+ 13 - 1
languages/ru-RU.js

@@ -1128,7 +1128,8 @@ module.exports = {
     changeBattery: 'Замена батарей в оборудовании',
     interactionPush: 'Интерактивная запись push - конфигурация',
     interactionPushParamConfig: 'Настройка параметров push',
-    CustomerDistribution: 'Распределение пользователей'
+    CustomerDistribution: 'Распределение пользователей',
+    convenientDataSync: 'Удобная синхронизация данных'
   },
   deviceType: {
     NURSE_HOST: 'Устройство медсестры',
@@ -1562,5 +1563,16 @@ module.exports = {
     bedsTodayInTotal: 'Сегодня в больнице.',
     yesterdayPatientTotal: 'Общее число пациентов вчера',
     patientToadyOutTotal: 'Сегодня выписывают.'
+  },
+  convenientSync: {
+    regionLoadUrl: 'Адрес загрузки',
+    hospitalSelect: 'Выбрать больницу',
+    hospitalRegion: 'Больничный округ',
+    dataSyncUrl: 'Адрес синхронизации данных',
+    jsonData: 'Данные системы JSON',
+    syncData: 'Синхронизация данных',
+    refreshJsonData: 'Обновить данные JSON',
+    selectHospitalPls: 'Пожалуйста, выберите больницу.',
+    selectRegionPls: 'Выберите административный район'
   }
 }

+ 13 - 1
languages/zh-CN.js

@@ -1128,7 +1128,8 @@ module.exports = {
     changeBattery: '更换设备电池',
     interactionPush: '交互记录推送配置',
     interactionPushParamConfig: '推送参数配置',
-    CustomerDistribution: '用户分布'
+    CustomerDistribution: '用户分布',
+    convenientDataSync: '便民服务数据同步'
   },
   deviceType: {
     NURSE_HOST: '护士主机',
@@ -1562,6 +1563,17 @@ module.exports = {
     bedsTodayInTotal: '今日入院',
     yesterdayPatientTotal: '昨日患者数',
     patientToadyOutTotal: '今日出院'
+  },
+  convenientSync: {
+    regionLoadUrl: '行政区加载地址',
+    hospitalSelect: '选择医院',
+    hospitalRegion: '医院行政区',
+    dataSyncUrl: '数据同步地址',
+    jsonData: '呼叫系统JSON数据',
+    syncData: '同步数据',
+    refreshJsonData: '刷新JSON数据',
+    selectHospitalPls: '请选择医院',
+    selectRegionPls: '请选择行政区域'
   }
 
 }

+ 29 - 0
src/api/ncs_convenient_sync.js

@@ -0,0 +1,29 @@
+import request from '@/utils/request'
+
+/** 同步数据 */
+export function structSync(baseUrl, param) {
+  return request({
+    baseURL: baseUrl || '',
+    url: '/ncs_sync/shop/json_data',
+    method: 'POST',
+    data: param
+  })
+}
+
+
+export function getShopList(partId) {
+  return request({
+    url: `/ncs/shop/getShopByHospitalId/${partId}`,
+    method: 'GET'
+  })
+}
+
+
+export function getPartList(depType) {
+  return request({
+    url: `/mgr/partinfo/list/${depType}`,
+    method: 'GET'
+  })
+}
+
+

+ 17 - 0
src/api/shop_regions.js

@@ -0,0 +1,17 @@
+import request from "@/utils/request";
+
+export function getRegionsByDepth(depth, baseUrl) {
+  return request({
+    baseURL: baseUrl || '',
+    url: `/regions/depth/${depth}`,
+    method: 'GET'
+  })
+}
+
+export function getRegionsChildren(id, baseUrl) {
+  return request({
+    baseURL: baseUrl || '',
+    url: `/regions/${id}/children`,
+    method: 'GET'
+  })
+}

+ 13 - 0
src/router/index.js

@@ -776,6 +776,19 @@ export const adminRoutes = [
     ]
   },
   {
+    path: '/convenient_sync',
+    component: Layout,
+    redirect: '/convenient_sync/index',
+    children: [
+      {
+        path: 'index',
+        component: () => import('@/views/convenient-data-sync/index'),
+        name: 'convenient-data-sync',
+        meta: { title: i18n.t('tab.convenientDataSync'), icon: 'el-icon-refresh', noCache: true }
+      }
+    ]
+  },
+  {
     path: '/device_frame',
     component: Layout,
     redirect: '/device_frame/index',

+ 226 - 0
src/views/convenient-data-sync/index.vue

@@ -0,0 +1,226 @@
+<template>
+    <div>
+        <el-main>
+            <el-form ref="editform" :rules="rules" label-width="150px" :model="formmodel">
+
+                <el-row>
+                    <el-col :span="24">
+                        <el-form-item :label="this.$t('convenientSync.regionLoadUrl')" prop="base_url">
+                            <el-input
+                                    v-model="formmodel.base_url"
+                                    clearable
+                            />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="24">
+                        <el-form-item :label="this.$t('convenientSync.hospitalSelect')" prop="hospital_id">
+                            <el-select v-model="formmodel.hospital_id"
+                                       :placeholder="this.$t('convenientSync.hospitalSelect')" @change="hospitalChange"
+                                       clearable>
+                                <el-option
+                                        v-for="(item,index) in hospitals"
+                                        :key="index"
+                                        :label="item.shop_name"
+                                        :value="item.shop_id"
+                                />
+                            </el-select>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+                <el-row>
+                    <el-col :span="24">
+                        <el-form-item :label="this.$t('convenientSync.hospitalRegion')" prop="region">
+                            <el-cascader :props="props" ref="cascader" clearable v-model="formmodel.region" filterable
+                                         @change="regionChange"></el-cascader>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+
+                <!--                <el-row>-->
+                <!--                    <el-col :span="24">-->
+                <!--                        <el-form-item label="医院地址" prop="address">-->
+                <!--                            <el-input-->
+                <!--                                    v-model="formmodel.address"-->
+                <!--                                    clearable-->
+                <!--                            />-->
+                <!--                        </el-form-item>-->
+                <!--                    </el-col>-->
+                <!--                </el-row>-->
+
+                <el-row>
+                    <el-col :span="24">
+                        <el-form-item :label="this.$t('convenientSync.dataSyncUrl')" prop="upload_url">
+                            <el-input
+                                    v-model="formmodel.upload_url"
+                                    clearable
+                            />
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+
+
+                <fieldset class="margin-top-sm">
+                    <legend>{{this.$t('convenientSync.jsonData')}}</legend>
+                    <json-viewer :expand-depth="100"
+                                 sort
+                                 :show-array-index="true"
+                                 copyable :value="paramExample"></json-viewer>
+                </fieldset>
+
+                <el-form-item align="center" class="margin-top-sm">
+                    <el-button type="success" @click="onSubmit('editform')">{{this.$t('convenientSync.syncData')}}
+                    </el-button>
+                    <el-button type="danger" @click="loadPartJson">{{this.$t('convenientSync.refreshJsonData')}}
+                    </el-button>
+
+                </el-form-item>
+            </el-form>
+        </el-main>
+
+    </div>
+</template>
+
+<script>
+    //便民服务数据结构同步
+    import * as  API_ShopRegions from '@/api/shop_regions'
+    import * as  API_Convenient from '@/api/ncs_convenient_sync'
+
+    const url = 'https://api.base.wdklian.com/'
+    export default {
+        name: "index",
+        data() {
+            let _this = this
+            return {
+                formmodel: {
+                    base_url: url,
+                    upload_url: url
+                },
+                props: {
+                    lazy: true,
+                    lazyLoad(node, resolve) {
+                        const {level} = node;
+
+                        if (level == 0) {
+                            API_ShopRegions.getRegionsByDepth(level + 1, _this.formmodel.base_url).then(res => {
+                                console.log(res)
+                                const nodes = res.map(item => ({
+                                    value: item.id,
+                                    label: item.local_name,
+                                    leaf: false
+                                }));
+                                resolve(nodes);
+                            })
+                        } else {
+                            const {value} = node.data
+                            API_ShopRegions.getRegionsChildren(value, _this.formmodel.base_url).then(res => {
+                                console.log(res)
+                                const nodes = res.map(item => ({
+                                    value: item.id,
+                                    label: item.local_name,
+                                    leaf: item.bool_leaf
+                                }));
+                                resolve(nodes);
+                            })
+                        }
+                    }
+                },
+                hospitals: [],
+                paramExample: {},
+                rules: {
+                    region: [
+                        {required: true, message: this.$t('convenientSync.selectHospitalPls'), trigger: 'blur'}
+                    ],
+                    hospital_id: [
+                        {required: true, message: this.$t('convenientSync.selectRegionPls'), trigger: 'blur'}
+                    ]
+                }
+            }
+        },
+        mounted() {
+            this.getHospitals()
+        },
+        methods: {
+            onSubmit(formName) {
+                this.$refs[formName].validate((valid) => {
+                    if (valid) {
+                        this.formmodel.json = JSON.stringify(this.paramExample)
+                        API_Convenient.structSync(this.formmodel.upload_url, this.formmodel).then(() => {
+
+                            this.$message.success(this.$t('action.saveSuccess'))
+                        })
+                    } else {
+                        this.$message.error(this.$t('action.fromError'))
+                    }
+                })
+
+            },
+            loadPartJson() {
+                if(this.formmodel.hospital_id){
+                    this.getJSON(this.formmodel.hospital_id)
+                }else{
+                    this.$message.error(this.$t('convenientSync.selectHospitalPls'))
+                }
+
+            },
+            getHospitals() {
+                API_Convenient.getPartList(6).then(res => {
+                    this.hospitals = [...res]
+                    if(res.length>0){
+                        this.formmodel.hospital_id=res[0].shop_id
+                        this.loadPartJson()
+                    }
+                }).catch(err => {
+
+                })
+            },
+            regionChange(val) {
+                if (val) {
+                    this.formmodel.region = val[val.length - 1]
+                } else {
+                    this.formmodel.region = null
+                }
+            },
+
+            hospitalChange(val) {
+                if (val) {
+                    this.getJSON(val)
+                } else {
+                    this.paramExample = {}
+                }
+
+            },
+            getJSON(val) {
+                API_Convenient.getShopList(val).then(res => {
+                    const partList = res.map(item => ({
+                        shopName: item.shop_name,
+                        unionId: item.union_id
+                    }))
+                    const hosptial = this.hospitals.find(p => p.shop_id === val)
+                    const {shop_name, union_id} = hosptial
+                    this.paramExample = {shopName: shop_name, unionId: union_id, partList}
+
+                }).catch(err => {
+
+                })
+            }
+
+        }
+    }
+</script>
+
+<style scoped>
+    /deep/ .el-cascader--medium {
+        width: 100%
+    }
+
+    fieldset {
+        border: 1px solid #DCDFE6;
+        border-radius: 5px;
+    }
+
+    .margin-top-sm {
+        margin-top: 20px;
+    }
+</style>