Browse Source

merge

new-ays
wzz 3 months ago
parent
commit
fa5fa27c7f
  1. 6
      acupuncture-前台/.env.development
  2. 5
      acupuncture-前台/.env.production
  3. 3
      acupuncture-前台/.env.productions
  4. 3
      acupuncture-前台/.env.staging
  5. 43
      acupuncture-前台/src/api/medicalFile.js
  6. 2
      acupuncture-前台/src/permission.js
  7. 13
      acupuncture-前台/src/router/index.js
  8. 4
      acupuncture-前台/src/utils/request.js
  9. 120
      acupuncture-前台/src/views/medicalFile/details.vue
  10. 119
      acupuncture-前台/src/views/medicalFile/h5Result.vue
  11. 298
      acupuncture-前台/src/views/medicalFile/h5eva.vue
  12. 41
      acupuncture-前台/src/views/medicalFile/index.vue
  13. 19
      acupuncture-前台/src/views/patientFile/index.vue
  14. BIN
      acupuncture-前台/针灸前台client.zip
  15. BIN
      acupuncture-前台/针灸前台clientssl.zip
  16. 2
      package-lock.json

6
acupuncture-前台/.env.development

@ -8,8 +8,12 @@ ENV = 'development'
VUE_APP_BASE_API = '/dev-api'
VUE_APP_IMG_URL = 'https://test.tall.wiki/acupuncture/api/'
VUE_APP_API_QZURL = 'https://test.tall.wiki/acupuncture/api/'
# 访问地址
VUE_APP_VISIT_URL = 'https://test.tall.wiki/acupuncture/client/'
# 筛查访问地址
VUE_APP_H5_URL = 'https://test.tall.wiki//acupuncture/client/screening/h5'
VUE_APP_H5_URL = 'https://test.tall.wiki/acupuncture/client/screening/h5'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
# 访问路径

5
acupuncture-前台/.env.production

@ -6,7 +6,10 @@ NODE_ENV = 'production'
# 因孚生产
VUE_APP_BASE_API = 'http://113.45.159.249:40010/acupuncture/api/'
VUE_APP_API_QZURL = 'http://113.45.159.249:40010/acupuncture/api/'
# 访问地址
VUE_APP_VISIT_URL = 'https://nnzjpt.ylinno.com/acupuncture/clientssl/'
# 筛查访问地址
VUE_APP_H5_URL = 'http://113.45.159.249:40010/acupuncture/client/screening/h5'
VUE_APP_H5_URL = 'https://nnzjpt.ylinno.com/acupuncture/clientssl/screening/h5'
# 访问路径
VUE_APP_PUBLIC_PATH = '/acupuncture/client/'

3
acupuncture-前台/.env.productions

@ -6,6 +6,9 @@ NODE_ENV = 'production'
# 因孚生产
VUE_APP_BASE_API = 'https://nnzjpt.ylinno.com/acupuncture/api/'
VUE_APP_API_QZURL = 'https://nnzjpt.ylinno.com/acupuncture/api/'
# 访问地址
VUE_APP_VISIT_URL = 'https://nnzjpt.ylinno.com/acupuncture/clientssl/'
# 筛查访问地址
VUE_APP_H5_URL = 'https://nnzjpt.ylinno.com/acupuncture/clientssl/screening/h5'
# 访问路径

3
acupuncture-前台/.env.staging

@ -6,6 +6,9 @@ NODE_ENV = 'production'
# 因孚生产
VUE_APP_BASE_API = 'https://test.tall.wiki/acupuncture/api/'
VUE_APP_API_QZURL = 'https://test.tall.wiki/acupuncture/api/'
# 访问地址
VUE_APP_VISIT_URL = 'https://test.tall.wiki/acupuncture/client/'
# 筛查访问地址
VUE_APP_H5_URL = 'https://test.tall.wiki/acupuncture/client/screening/h5'
# 访问路径

43
acupuncture-前台/src/api/medicalFile.js

@ -80,3 +80,46 @@ export function exportTreatmentPg(data) {
data: data,
});
}
// ------ 中医体质辩识 ------
// 查询二维码
export function zytzQrcode(data) {
return request({
url: "zytz/qrcode",
method: "post",
data: data,
});
}
// 测评试题列表
export function evaTestList(data) {
return request({
url: "zytz/questions/list",
method: "post",
data: data,
});
}
// 提交试题答案
export function evaTestSubmit(data) {
return request({
url: "zytz/questions/submit",
method: "post",
data: data,
});
}
// 完成测评
export function evaComplete(data) {
return request({
url: "zytz/eva/complete",
method: "post",
data: data,
});
}
// 测评结果
export function evaResult(data) {
return request({
url: "zytz/report/view",
method: "post",
data: data,
});
}

2
acupuncture-前台/src/permission.js

@ -15,6 +15,8 @@ const whiteList = [
"/screening/h5",
"/screening/h5eva",
"/screening/h5Result",
"/medicalEva",
'/medicalResult'
];
const isWhiteList = (path) => {

13
acupuncture-前台/src/router/index.js

@ -105,6 +105,7 @@ export const constantRoutes = [
hidden: true,
meta: { title: "诊疗信息", icon: "dashboard" },
},
],
},
{
@ -182,6 +183,18 @@ export const constantRoutes = [
component: () => import("@/views/screening/h5Result.vue"),
hidden: true,
},
{
path: "/medicalEva",
component: () => import("@/views/medicalFile/h5eva"),
name: "medicalEva",
hidden: true,
},
{
path: "/medicalResult",
component: () => import("@/views/medicalFile/h5Result"),
name: "medicalEva",
hidden: true,
}
];
// 动态路由,基于用户权限动态去加载

4
acupuncture-前台/src/utils/request.js

@ -37,6 +37,10 @@ service.interceptors.request.use(
"screening/save",
"screening/submitNoToken",
"screening/queryDetailNoToken",
"zytz/questions/list",
"zytz/questions/submit",
"zytz/eva/complete",
"zytz/report/view",
];
// console.log("config.url", config.url);

120
acupuncture-前台/src/views/medicalFile/details.vue

@ -84,13 +84,14 @@
<div class="div-title1">病情评估</div>
<div class="div-title2">
人体成分分析
<span @click="getHumanBody" class="foem-item-pg">同步</span>
<!-- <span
style="margin-left: 10px"
@click="getHumanBodyReport"
<span
@click="getHumanBody"
class="foem-item-pg"
>报告</span
> -->
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
>同步</span
>
</div>
</div>
<div class="human-body">
@ -194,6 +195,7 @@
>
<el-option
v-for="(item, index) in systemType"
:key="index"
:label="item"
:value="item"
>
@ -209,6 +211,7 @@
</el-form-item>
<el-form-item label="健康评分" prop="PG_RTCF_JKPF">
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_RTCF_JKPF']"
placeholder="请输入"
/>
@ -216,7 +219,25 @@
</div>
<div style="height: 10px"></div>
<a name="中医体质辨识"></a>
<div class="div-title2">中医体质辨识</div>
<div class="div-title2">
中医体质辨识
<span
@click="getEvaQr"
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
>二维码</span
>
<span
@click="getEvaTb"
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
>同步</span
>
</div>
<div>
<el-form-item
class="item-form-jjtz"
@ -267,6 +288,9 @@
<span>TAPS体态自觉评估得分(3-15)</span>
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="
handleComponents('PG_TT_TAPS_DF', 'TAPS体态自觉评估')
"
@ -286,6 +310,9 @@
<span>TRACE体态临床评估得分(0-11)</span>
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="
handleComponents('PG_TT_TRACE_DF', 'TRACE体态临床评估')
"
@ -305,6 +332,9 @@
<span>SRS-22问卷评估得分(1~5)</span>
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="
handleComponents('PG_TT_SRS22_DF', 'SRS-22问卷评估')
"
@ -328,6 +358,9 @@
<span> 患者健康问卷PHQ-9评估得分(0-27)</span>
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="
handleComponents(
'PG_SM_PHQ-9_DF',
@ -350,6 +383,9 @@
<span>Epworth嗜睡评估得分(0-24)</span>
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="
handleComponents('PG_SM_EPSW_DF', 'Epworth嗜睡评估')
"
@ -370,6 +406,9 @@
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="
handleComponents(
'PG_SM_PSQI_DF',
@ -396,6 +435,9 @@
<span>汉密尔顿抑郁评估HAMD-24得分(0-76)</span>
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="
handleComponents(
'PG_JL_HAMD-24_DF',
@ -418,6 +460,9 @@
<span>焦虑自评SAS得分(0-80)</span>
<span
class="foem-item-pg"
:class="{
'item-pg-disabled': form.status != 0 && form.status != 3,
}"
@click="handleComponents('PG_JL_SAS_DF', '焦虑自评(SAS)')"
>
评估
@ -700,6 +745,17 @@
>
<img width="560" :src="selectReportUrl" />
</el-dialog>
<el-dialog
class="popup"
title="中医体质辨识测评二维码"
:visible.sync="zytzOpen"
width="540px"
append-to-body
>
<div>
<img width="500" :src="pathUrl" />
</div>
</el-dialog>
</div>
</template>
@ -709,6 +765,8 @@ import {
saveAidRecord,
selectByMemberId,
selectReportByMemberId,
zytzQrcode,
evaResult,
} from "@/api/medicalFile";
import { followupQuery } from "@/api/followupFile";
//
@ -736,6 +794,9 @@ export default {
},
data() {
return {
userInfo: {}, //
zytzOpen: false,
pathUrl: "",
followupList: [],
title: "", //
open: false, //
@ -1214,8 +1275,48 @@ export default {
this.treatmentId = treatmentId;
this.handleDetails(treatmentId);
this.getFollowupQuery(); // 访
this.userInfo = JSON.parse(localStorage.getItem("user"));
},
methods: {
//
getEvaQr() {
zytzQrcode({
param: {
id: this.form.id,
// rewrite: 1,
path: `${process.env.VUE_APP_VISIT_URL}medicalEva?id=${this.form.id}&name=${this.form.name}&phone=${this.form.phone}&tenantId=${this.userInfo.tenantId}`,
},
}).then((res) => {
this.zytzOpen = true;
this.pathUrl = this.qzUrl + res.data;
});
},
//
getEvaTb() {
evaResult({ param: { evaId: this.form.id } }).then((res) => {
if (!res.data) {
this.$modal.msgError("暂无结果");
return;
}
this.$modal.msgSuccess("同步成功");
let result1 = res.data.result1;
let result2 = res.data.result2;
const zytz = this.extractConstitutionTypes(result1);
const jjtz = this.extractConstitutionTypes(result2);
this.detailsForm.PG_TZBS_ZYTZ = zytz.join(","); //
this.detailsForm.PG_TZBS_JJTZ = jjtz; //
});
},
extractConstitutionTypes(comment) {
const regex = /【(.*?)】/g;
const matches = [];
let match;
while ((match = regex.exec(comment)) !== null) {
matches.push(match[1]);
}
return matches;
},
//
getHumanBodyReport() {
selectReportByMemberId({
@ -1530,6 +1631,11 @@ export default {
margin-left: 5px;
height: 28px !important;
}
.item-pg-disabled {
color: #0000ff75;
border-bottom: 1px solid #0000ff75;
pointer-events: none;
}
.app-container {
display: flex;
}

119
acupuncture-前台/src/views/medicalFile/h5Result.vue

@ -0,0 +1,119 @@
<template>
<div class="app-container" v-loading="loading">
<div class="hospital">测评已完成</div>
<div class="card">
<div class="card-title">测评结果</div>
<div>
<div class="tip-content">主要体质{{ resultData.result1 || "-" }}</div>
<div class="tip-content">兼夹体质{{ resultData.result2 || "-" }}</div>
</div>
</div>
</div>
</template>
<script>
import { evaResult } from "@/api/medicalFile.js";
export default {
name: "Notice",
data() {
return {
loading: false,
resultData: {},
};
},
created() {
this.evaId = this.$route.query.evaId;
this.getEvaResult();
},
methods: {
getEvaResult() {
this.loading = true;
evaResult({ param: { evaId: this.evaId } }).then((res) => {
this.resultData = res.data;
this.loading = false;
});
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.tip-content {
font-size: 20px;
font-weight: bold;
color: #8e592d;
padding-right: 60px;
width: 100%;
text-align: left;
}
.hospital1 {
text-align: center;
font-size: 14px;
color: #999;
}
.hospital {
background: #fff;
font-size: 20px;
color: #70483e;
line-height: 50px;
font-weight: 600;
margin-bottom: 10px;
border-radius: 6px;
text-align: center;
}
.BIMTips1 {
color: #cccccc;
}
.BIMTips2 {
color: #66cc00;
}
.BIMTips3 {
color: #c3c300;
}
.BIMTips4 {
color: #ff9900;
}
.BIMTips5 {
color: red;
}
.item-radio {
display: block;
margin-bottom: 10px;
}
.item-title {
font-size: 18px;
font-weight: bold;
color: #3d3d3d;
line-height: 26px;
}
.item-radio-box {
margin: 16px 0px;
}
.card {
padding: 16px;
background: #fff;
border-radius: 6px;
margin-bottom: 14px;
}
.card-title {
font-weight: 600;
font-size: 20px;
margin-bottom: 16px;
}
.card-tips {
font-size: 14px;
color: #999999;
}
/* */
.app-container {
/* background: linear-gradient(to bottom, #70483e, #f7f8fa); */
background: #70483e;
min-height: 100vh;
}
</style>
<!-- >>> .el-input__inner {
padding: 0 15px !important;
} -->

298
acupuncture-前台/src/views/medicalFile/h5eva.vue

@ -0,0 +1,298 @@
<template>
<div class="app-container" v-loading="loading">
<div class="hospital">中医体质辩识</div>
<!-- 姓名性别单选出生日期年龄联系方式 -->
<div class="card">
<div class="card-title">基本信息</div>
<el-descriptions class="margin-top" :column="1">
<el-descriptions-item label="姓名">{{
form.name
}}</el-descriptions-item>
<el-descriptions-item label="手机号码">
{{ form.phone }}
</el-descriptions-item>
</el-descriptions>
</div>
<div class="card">
<div
class="q-example"
v-for="(item, index) in evaList"
:key="item.quesCode"
>
<div class="q-title">{{ index + 1 }}. {{ item.quesName }}</div>
<div class="q-option-box">
<el-radio-group v-model="item.optionCode" size="small">
<el-radio
class="q-radio"
v-for="option in item.options"
:key="option.optionCode"
:label="option.optionCode"
@click.native="handleRadio($event, item, option)"
>{{ option.optionName }}
</el-radio>
</el-radio-group>
</div>
</div>
</div>
<div class="submit-box">
<el-button
type="primary"
class="submit-box-but"
@click="handleEvaComplete"
>
提交
</el-button>
</div>
</div>
</template>
<script>
import { evaTestList, evaTestSubmit, evaComplete } from "@/api/medicalFile.js";
export default {
name: "Notice",
data() {
return {
form: {},
evaList: [],
disabled: true,
loading: false,
evaId: "",
};
},
created() {
let { id, name, phone, tenantId } = this.$route.query;
this.form = { id, name, phone, tenantId };
localStorage.setItem("tenantId", tenantId);
console.log(" this.form", this.form);
this.getList(); //
},
methods: {
/** 查看试题列表 */
getList() {
this.loading = true;
evaTestList({ param: { evaId: this.form.id } }).then((res) => {
//
res.data.questions.forEach((item) => {
item.options.forEach((row) => {
if (row.optionChecked == 1) {
item.optionCode = row.optionCode;
}
});
});
this.evaList = res.data.questions;
this.loading = false;
});
},
//
handleRadio(_e, _item, option) {
//
if (_e.target.tagName === "INPUT") {
return;
}
let questions = {
optionCode: option.optionCode,
optionName: option.optionName,
optionScore: option.optionScore,
quesCode: _item.quesCode,
};
evaTestSubmit({
param: { evaId: this.form.id, questions: [questions] },
}).then((res) => {});
},
/** 完成测评 */
handleEvaComplete() {
try {
let flat = true;
let testNUmArr = [];
this.evaList.forEach((item, index) => {
if (!item.optionCode) {
testNUmArr.push(index + 1);
flat = false;
}
});
if (!flat) {
this.$message.error(`请选择所有题目答案(${testNUmArr.join("、")}`);
return;
}
this.loading = true;
evaComplete({ param: { evaId: this.form.id } }).then((res) => {
this.evaList = res.data.questions;
this.loading = false;
this.$router.replace({
path: "/medicalResult",
query: {
evaId: this.form.id,
},
});
});
} catch (e) {
console.log("e", e);
}
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
>>> .el-descriptions-item__content {
font-weight: bold;
}
>>> .el-descriptions-item__container {
font-size: 16px;
}
.q-radio {
display: block;
margin-bottom: 10px;
}
.q-option-box {
margin: 16px 0px;
}
.q-title {
font-size: 18px;
font-weight: bold;
color: #3d3d3d;
line-height: 26px;
}
>>> .el-dialog__header {
padding-bottom: 0;
}
>>> .el-checkbox {
margin-right: 10px rtant;
}
.form-item-xbs >>> .el-form-item__content {
margin-left: 0 !important;
}
.qq {
color: green;
}
.idcardupd {
height: 44px;
margin-bottom: 14px;
}
.idcardupd-but {
height: 44px;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
}
.idcardupd-but span {
padding-top: 1px;
}
.idcardupd-but img {
width: 20px;
height: 20px;
}
.idcardupd >>> .el-upload {
height: 44px;
border: none;
background: #c6a268;
}
.hospital1 {
text-align: center;
font-size: 14px;
color: #999;
}
.hospital {
background: #fff;
font-size: 20px;
color: #70483e;
line-height: 50px;
font-weight: 600;
margin-bottom: 10px;
border-radius: 6px;
text-align: center;
}
.BIMTips1 {
color: #cccccc;
}
.BIMTips2 {
color: #66cc00;
}
.BIMTips3 {
color: #c3c300;
}
.BIMTips4 {
color: #ff9900;
}
.BIMTips5 {
color: red;
}
.item-radio {
display: block;
margin-bottom: 10px;
}
.item-title {
font-size: 18px;
font-weight: bold;
color: #3d3d3d;
line-height: 26px;
}
.item-radio-box {
margin: 16px 0px;
}
>>> .el-radio__label {
font-size: 16px;
color: #555555;
line-height: 20px;
}
.submit-box {
display: flex;
justify-content: center;
align-items: center;
}
.submit-box .submit-box-but {
background: #c6a268;
width: 100%;
font-size: 16px;
}
.card {
padding: 16px;
background: #fff;
border-radius: 6px;
margin-bottom: 14px;
}
.card-title {
font-weight: 600;
font-size: 20px;
margin-bottom: 16px;
}
.card-tips {
font-size: 14px;
color: #999999;
}
/* */
.app-container {
/* background: linear-gradient(to bottom, #70483e, #f7f8fa); */
background: #70483e;
min-height: 100vh;
}
>>> .el-input__inner {
border: none;
border-bottom: 1px solid #dcdfe6;
border-radius: 0;
}
>>> .el-date-editor.el-input {
width: 100% !important;
}
>>> .el-form-item--medium .el-form-item__label {
padding-right: 20px;
}
>>> .el-radio input[aria-hidden="true"] {
display: none !important;
}
>>> .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
.el-radio__inner {
box-shadow: none !important;
}
</style>
<!-- >>> .el-input__inner {
padding: 0 15px !important;
} -->

41
acupuncture-前台/src/views/medicalFile/index.vue

@ -478,7 +478,7 @@
>
</el-date-picker>
</el-form-item>
<el-form-item label="民族" prop="ethnicity">
<el-form-item label="民族" prop="">
<el-select v-model="form.ethnicity" placeholder="请选择" filterable>
<el-option
v-for="item in ethnicityList"
@ -489,7 +489,7 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="受教育程度" prop="educationYears">
<el-form-item label="受教育程度" prop="">
<el-select
v-model="form.educationYears"
placeholder="请选择"
@ -560,7 +560,7 @@
>
</el-date-picker>
</el-form-item>
<el-form-item label="责任医生" prop="doctor">
<el-form-item label="责任医生" prop="">
<el-input v-model="form.doctor" placeholder="请输入" />
</el-form-item>
@ -610,6 +610,12 @@
</el-form-item>
</el-form>
</el-dialog>
<iframe
:src="reportPath"
frameborder="0"
:id="'codePartIframe' + timestamp"
style="display: none"
></iframe>
</div>
</template>
@ -631,6 +637,9 @@ export default {
dicts: ["sys_normal_disable", "sys_user_sex"],
data() {
return {
reportPath: "",
timestamp: "",
qzUrl: process.env.VUE_APP_API_QZURL, //
userInfo: {},
//
@ -954,8 +963,18 @@ export default {
};
},
created() {
// urlidCard
let idCard = this.$route.query.idCard;
this.queryParams.param.keywords = idCard || "";
this.queryParams.param.keywords = idCard;
let patientInfo;
if (this.$route.query.patientInfo) {
this.form = JSON.parse(this.$route.query.patientInfo);
delete this.form.id;
this.form.visitType = 0; // /
this.form.status = 0; //
this.open = true;
}
this.getList();
this.userInfo = JSON.parse(localStorage.getItem("user"));
// this.getFollowupQuery();
@ -1086,9 +1105,21 @@ export default {
},
//
handleReport(row) {
try {
this.timestamp = new Date().getTime();
exportTreatmentPg({ treatmentId: row.id }).then((res) => {
window.open(`${process.env.VUE_APP_API_QZURL}${res.data}`);
this.reportPath = `${process.env.VUE_APP_API_QZURL}${res.data}`;
var iframe = document.getElementById(
"codePartIframe" + this.timestamp
);
iframe.onload = () => {
iframe.contentWindow.print();
};
// window.open(`${process.env.VUE_APP_API_QZURL}${res.data}`);
});
} catch (error) {
console.log("error: ", error);
}
},
/** 提交审核 */
handleExamine(row, _status) {

19
acupuncture-前台/src/views/patientFile/index.vue

@ -239,7 +239,7 @@
align="center"
prop="source"
show-overflow-tooltip
min-width="100"
min-width="80"
>
<template slot-scope="scope">
<span v-if="scope.row.source == 0">筛查</span>
@ -247,7 +247,7 @@
<span v-if="scope.row.source == 2">HIS</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="150">
<el-table-column fixed="right" label="操作" align="center" width="200">
<template slot-scope="scope">
<el-button
size="mini"
@ -277,6 +277,13 @@
@click="handleArchives(scope.row)"
>诊疗档案</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="handleArchivesAdd(scope.row)"
>新增诊疗档案
</el-button>
</template>
</el-table-column>
</el-table>
@ -817,7 +824,13 @@ export default {
/** 诊疗档案 */
handleArchives(row) {
this.$router.push({
path: `/medicalIndex?idCard=${row.idCard}`,
path: `/medicalIndex?idCard=${row.idCard || ""}`,
});
},
/** 新增诊疗档案 */
handleArchivesAdd(row) {
this.$router.push({
path: `/medicalIndex?patientInfo=${JSON.stringify(row)}`,
});
},
/** 提交按钮 */

BIN
acupuncture-前台/针灸前台client.zip

Binary file not shown.

BIN
acupuncture-前台/针灸前台clientssl.zip

Binary file not shown.

2
package-lock.json

@ -1,5 +1,5 @@
{
"name": "针灸",
"name": "acupuncture",
"lockfileVersion": 2,
"requires": true,
"packages": {}

Loading…
Cancel
Save