WXL (wul)
10 天以前 20043e072aee67f1162a5d490c063cadc2e1dcde
测试完成
已修改27个文件
已添加1个文件
912 ■■■■■ 文件已修改
src/api/AiCentre/Qtemplate.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/optionalModule/index.vue 727 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/Continue/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/HistoricalFollow/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/OutpatientAgain/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/SpecificDisease/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/Tracking/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/again/index.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/beHospitalized/followUp.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/complaint/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/discharge/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/discharge/outpatientService.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/mzsatisfaction/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/TracingInfo/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/detailpage/index copy.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/detailpage/index.vue 70 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/physical/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/technology/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/zbAgain/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/zysatisfaction/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/AwaitingAdmission.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/behospitalized.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/hospital.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/outpatient.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/QuestionnaireTask.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/AiCentre/Qtemplate.js
@@ -240,3 +240,11 @@
    data: data,
  });
}
//切换子任务模板
export function updateTemplate(data) {
  return request({
    url: "/smartor/serviceSubtask/updateTemplate",
    method: "post",
    data: data,
  });
}
src/components/optionalModule/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,727 @@
<template>
  <div class="template-selector">
    <!-- æ¨¡æ¿é€‰æ‹©æŒ‰é’®å’Œé¢„览 -->
    <div class="template-selector__header">
      <el-form>
        <el-form-item label="当前使用模板">
          <el-input
            style="width: 300px"
            v-model="selectedTemplateName"
            placeholder="请点击右侧选择"
          />
          <el-button
            v-if="(selectedTemplateId && isEditable) || !selectedTemplateId"
            style="margin-left: 10px"
            type="primary"
            icon="el-icon-edit"
            @click="drawerVisible = true"
            circle
          ></el-button>
          <!-- <el-button
            v-if="selectedTemplateId"
            type="success"
            icon="el-icon-search"
            @click="handlePreview"
            circle
          ></el-button> -->
        </el-form-item>
      </el-form>
    </div>
    <!-- æ¨¡æ¿é€‰æ‹©æŠ½å±‰ -->
    <el-drawer
      title="问卷内容列表"
      :visible.sync="drawerVisible"
      direction="rtl"
      size="50%"
      :before-close="handleDrawerClose"
    >
      <div class="drawer-content">
        <el-form
          :model="queryParams"
          ref="queryForm"
          size="small"
          :inline="true"
          label-width="98px"
        >
          <el-form-item label="问卷名称">
            <el-input
              v-model="queryParams.svyname"
              @keyup.enter.native="handleSearch"
            ></el-input>
          </el-form-item>
          <el-form-item>
            <el-button
              type="primary"
              icon="el-icon-search"
              size="medium"
              @click="handleSearch"
              >搜索</el-button
            >
            <el-button
              icon="el-icon-refresh"
              size="medium"
              @click="handleReset"
              >重置</el-button
            >
          </el-form-item>
        </el-form>
        <el-divider></el-divider>
        <!-- æ¨¡æ¿åˆ—表 -->
        <el-table
          :data="templateList"
          style="width: 100%"
          @row-click="handleSelectTemplate"
        >
          <el-table-column prop="svyname" label="问卷标题" />
          <el-table-column prop="description" label="问卷描述" />
          <el-table-column prop="updateTime" label="修改日期" />
          <el-table-column prop="createBy" label="创建人" />
          <el-table-column label="操作" width="120">
            <template slot-scope="scope">
              <el-button
                type="primary"
                size="mini"
                @click.stop="handlePreviewTemplate(scope.row)"
                >预览</el-button
              >
            </template>
          </el-table-column>
        </el-table>
        <!-- åˆ†é¡µ -->
        <pagination
          v-show="total > 0"
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="handleSearch"
        />
      </div>
    </el-drawer>
    <!-- æ¨¡æ¿é¢„览对话框 -->
    <el-dialog
      title="模板预览"
      :visible.sync="previewVisible"
      width="70%"
      :before-close="handlePreviewClose"
    >
      <el-tabs v-model="activeTab" type="border-card">
        <el-tab-pane label="模板基础数据" name="basic">
          <div class="preview-content">
            <el-form :model="previewData" label-width="100px">
              <el-row :gutter="10">
                <el-col :span="14">
                  <el-form-item label="问卷分类">
                    <el-select
                      v-model="previewData.categoryid"
                      size="medium"
                      filterable
                      placeholder="请选择分类"
                      disabled
                    >
                      <el-option-group
                        v-for="group in categoryOptions"
                        :key="group.id"
                        :label="group.name"
                      >
                        <el-option
                          v-for="item in group.svyLibTemplateCategoryList"
                          :key="item.id"
                          :label="item.name"
                          :value="item.id"
                        />
                      </el-option-group>
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="10">
                  <el-form-item label="评价类型">
                    <el-select
                      v-model="previewData.scoreType"
                      placeholder="请选择分类"
                      disabled
                    >
                      <el-option
                        v-for="group in appraisalOptions"
                        :key="group.value"
                        :label="group.label"
                        :value="group.value"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row :gutter="20">
                <el-col :span="14">
                  <el-form-item label="可用状态">
                    <el-radio-group v-model="previewData.isenable" disabled>
                      <el-radio
                        v-for="(item, index) in usableOptions"
                        :key="index"
                        :label="item.value"
                      >
                        {{ item.label }}
                      </el-radio>
                    </el-radio-group>
                  </el-form-item>
                </el-col>
                <el-col :span="8">
                  <el-form-item label="版本号">
                    <el-input
                      v-model="previewData.version"
                      placeholder="默认1.0"
                      disabled
                    />
                  </el-form-item>
                </el-col>
              </el-row>
              <el-form-item label="问卷标题">
                <el-input v-model="previewData.svyname" disabled />
              </el-form-item>
              <el-form-item label="问卷描述">
                <el-input
                  type="textarea"
                  :rows="2"
                  v-model="previewData.description"
                  disabled
                />
              </el-form-item>
              <el-form-item label="问卷结束语">
                <el-input
                  type="textarea"
                  :rows="2"
                  v-model="previewData.conclusion"
                  disabled
                />
              </el-form-item>
            </el-form>
          </div>
        </el-tab-pane>
        <el-tab-pane label="问题展示" name="questions">
          <div class="preview-content">
            <div v-for="item in questionList" :key="item.sort">
              <!-- å•选 -->
              <div
                class="scriptTopic-dev"
                v-if="item.scriptType == 1"
              >
                <div class="dev-text">
                  {{ item.sort }}、[单选]<span>{{ item.scriptContent }}</span>
                </div>
                <div class="dev-xx">
                  <el-radio-group v-model="item.remark" disabled>
                    <el-radio
                      v-for="(items, index) in item.svyLibTemplateTargetoptions"
                      :key="index"
                      :label="index"
                    >
                      {{ items.optioncontent }}
                    </el-radio>
                  </el-radio-group>
                </div>
              </div>
              <!-- å¤šé€‰ -->
              <div
                class="scriptTopic-dev"
                v-if="item.scriptType == 2"
              >
                <div class="dev-text">
                  {{ item.sort }}、[多选]<span>{{ item.scriptContent }}</span>
                </div>
                <div class="dev-xx">
                  <el-checkbox-group v-model="item.qremark" disabled>
                    <el-checkbox
                      v-for="(items, index) in item.svyLibTemplateTargetoptions"
                      :key="index"
                      :label="index"
                    >
                      {{ items.optioncontent }}
                    </el-checkbox>
                  </el-checkbox-group>
                </div>
              </div>
              <!-- å¡«ç©º -->
              <div
                class="scriptTopic-dev"
                v-if="item.scriptType == 4"
              >
                <div class="dev-text">
                  {{ item.sort }}、[问答]<span>{{ item.scriptContent }}</span>
                </div>
                <div class="dev-xx">
                  <el-input
                    placeholder="请输入答案"
                    v-model="item.radioas"
                    disabled
                  />
                </div>
              </div>
            </div>
          </div>
        </el-tab-pane>
      </el-tabs>
      <span slot="footer" class="dialog-footer">
        <el-button @click="handleCancelPreview">取消</el-button>
        <el-button
          v-if="!selectedTemplateId"
          type="primary"
          @click="handleConfirmSelect"
        >
          é€‰æ‹©ä½¿ç”¨
        </el-button>
        <el-button
          v-else
          type="primary"
          @click="handleConfirmReplace"
        >
          æ›¿æ¢ä½¿ç”¨
        </el-button>
      </span>
    </el-dialog>
  </div>
</template>
<script>
import { getQtemplatelist, getQtemplateobj, getQtemplateclassify } from "@/api/AiCentre/index";
import store from "@/store";
import pagination from "@/components/Pagination";
export default {
  name: "TemplateSelector",
  components: {
    pagination
  },
  props: {
    // å½“前选中的模板ID
    value: {
      type: [String, Number],
      default: null
    },
    // å½“前选中的模板名称
    templateName: {
      type: String,
      default: ''
    },
    // æ˜¯å¦å¯ç¼–辑
    isEditable: {
      type: Boolean,
      default: true
    },
    // æ˜¯å¦æ˜¾ç¤ºå˜é‡é…ç½®
    showVariableConfig: {
      type: Boolean,
      default: true
    },
    // æœåŠ¡ç±»åž‹ï¼Œç”¨äºŽè¿‡æ»¤æ¨¡æ¿
    serviceType: {
      type: [String, Number],
      default: null
    }
  },
  data() {
    return {
      // ç»„件状态
      drawerVisible: false,
      previewVisible: false,
      activeTab: 'basic',
      loading: false,
      // æ¨¡æ¿æ•°æ®
      selectedTemplateId: null,
      selectedTemplateName: '',
      selectedTemplateData: null,
      // åˆ—表数据
      templateList: [],
      questionList: [],
      variableList: [],
      previewData: {},
      // æŸ¥è¯¢å‚æ•°
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        svyname: '',
        isenable: ''
      },
      total: 0,
      // é€‰é¡¹æ•°æ®
      categoryOptions: [],
      appraisalOptions: store.getters.appraiselist || [],
      usableOptions: [
        { value: "0", label: "可用" },
        { value: "1", label: "停用" }
      ],
      // é»˜è®¤å˜é‡
      transitionList: [
        {
          name: "姓名",
          value: "${name}",
          fill: "派发时自动匹配",
          default: true
        },
        {
          name: "地址",
          value: "${dzz}",
          fill: "派发时自动匹配",
          default: true
        },
        {
          name: "智能语音",
          value: "${dhh}",
          fill: "派发时自动匹配",
          default: true
        }
      ]
    };
  },
  watch: {
    value: {
      immediate: true,
      handler(newVal) {
        this.selectedTemplateId = newVal;
      }
    },
    templateName: {
      immediate: true,
      handler(newVal) {
        this.selectedTemplateName = newVal;
      }
    },
    selectedTemplateId(newVal) {
      this.$emit('input', newVal);
    },
    selectedTemplateName(newVal) {
      this.$emit('update:templateName', newVal);
    }
  },
  created() {
    this.loadCategories();
      this.handleSearch();
  },
  methods: {
    // åŠ è½½æ¨¡æ¿åˆ†ç±»
    async loadCategories() {
      try {
        const response = await getQtemplateclassify({});
        if (response.code === 200) {
          this.categoryOptions = response.rows;
        }
      } catch (error) {
        console.error('加载分类失败:', error);
      }
    },
    // æœç´¢æ¨¡æ¿
    async handleSearch() {
      try {
        this.loading = true;
        const response = await getQtemplatelist(this.queryParams);
        if (response.code === 200) {
          this.templateList = response.rows;
          this.total = response.total;
        }
      } catch (error) {
        console.error('搜索模板失败:', error);
        this.$modal.msgError('搜索模板失败');
      } finally {
        this.loading = false;
      }
    },
    // é‡ç½®æœç´¢
    handleReset() {
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
        svyname: '',
        isenable: ''
      };
      this.handleSearch();
    },
    // é€‰æ‹©æ¨¡æ¿
    handleSelectTemplate(row) {
      this.selectedTemplateData = row;
      this.loadTemplateDetail(row.svyid);
    },
    // é¢„览模板
    handlePreviewTemplate(row) {
      this.selectedTemplateData = row;
      this.loadTemplateDetail(row.svyid);
    },
    // åŠ è½½æ¨¡æ¿è¯¦æƒ…
    async loadTemplateDetail(templateId) {
      try {
        this.loading = true;
        const response = await getQtemplateobj({ svyid: templateId });
        if (response.code === 200) {
          const templateData = response.rows[0];
          this.previewData = templateData;
          this.questionList = templateData.svyTemplateLibScripts || [];
          // åˆå§‹åŒ–问题状态
          this.questionList.forEach(item => {
            item.qremark = [];
          });
          // å¤„理变量
          this.extractVariables(templateData.svyTemplateLibScripts || []);
          this.previewVisible = true;
          this.drawerVisible = false;
        }
      } catch (error) {
        console.error('加载模板详情失败:', error);
        this.$modal.msgError('加载模板详情失败');
      } finally {
        this.loading = false;
      }
    },
    // æå–变量
    extractVariables(scripts) {
      let variableList = [];
      scripts.forEach(script => {
        try {
          const otherData = JSON.parse(script.otherdata || '[]');
          otherData.forEach(item => {
            if (item.default != 1) {
              variableList.push({
                value: item.variate,
                fill: "",
                name: item.variatename
              });
            }
          });
        } catch (e) {
          console.warn('解析otherdata失败:', e);
        }
      });
      // åŽ»é‡
      const uniqueVariables = variableList.filter(
        (obj, index, self) =>
          index ===
          self.findIndex(
            t => t.name === obj.name && t.value === obj.value
          )
      );
      this.variableList = [...this.transitionList, ...uniqueVariables];
    },
    // é¢„览已选模板
    handlePreview() {
      if (!this.selectedTemplateId) {
        this.$modal.msgWarning('请先选择模板');
        return;
      }
      this.loadTemplateDetail(this.selectedTemplateId);
    },
    // ç¡®è®¤é€‰æ‹©æ¨¡æ¿
    handleConfirmSelect() {
      if (!this.selectedTemplateData) {
        this.$modal.msgWarning('请先选择模板');
        return;
      }
      this.selectedTemplateId = this.selectedTemplateData.svyid;
      this.selectedTemplateName = this.selectedTemplateData.svyname;
      // è½¬æ¢å˜é‡æ ¼å¼
      const filteredVariables = this.variableList.filter(
        item => item.name !== "姓名" && item.name !== "电话" && item.name !== "地址"
      );
      const textParam = this.convertFormat2ToFormat1(filteredVariables);
      // è§¦å‘选择事件
      this.$emit('select', {
        templateId: this.selectedTemplateId,
        templateName: this.selectedTemplateName,
        templateData: this.previewData,
        variableList: this.variableList,
        textParam: textParam
      });
      this.previewVisible = false;
      this.$modal.msgSuccess('选择模板成功');
    },
    // ç¡®è®¤æ›¿æ¢æ¨¡æ¿
    handleConfirmReplace() {
      this.$modal.confirm('确定要替换当前模板吗?')
        .then(() => {
          this.handleConfirmSelect();
        })
        .catch(() => {});
    },
    // å–消预览
    handleCancelPreview() {
      this.previewVisible = false;
      this.$emit('cancel');
    },
    // å…³é—­æŠ½å±‰
    handleDrawerClose(done) {
      done();
      this.$emit('drawer-close');
    },
    // å…³é—­é¢„览
    handlePreviewClose(done) {
      done();
      this.$emit('preview-close');
    },
    // åˆ é™¤å˜é‡
    handleVariableDelete(index, row) {
      this.variableList.splice(index, 1);
      this.$emit('variable-delete', row);
    },
    // å˜é‡æ ¼å¼è½¬æ¢ï¼šæ•°ç»„转对象
    convertFormat2ToFormat1(data) {
      let result = {};
      data.forEach(item => {
        let innerObj = {};
        innerObj[item.value] = item.fill;
        result[item.name] = innerObj;
      });
      return result;
    },
    // å˜é‡æ ¼å¼è½¬æ¢ï¼šå¯¹è±¡è½¬æ•°ç»„
    convertFormat1ToFormat2(data) {
      let result = [];
      for (let key in data) {
        let innerKey = Object.keys(data[key])[0];
        result.push({
          name: key,
          value: innerKey,
          fill: data[key][innerKey]
        });
      }
      return result;
    },
    // è®¾ç½®å˜é‡
    setVariables(variables) {
      if (variables) {
        const converted = this.convertFormat1ToFormat2(variables);
        this.variableList = [...this.transitionList, ...converted];
      }
    },
    // æ¸…除选择
    clear() {
      this.selectedTemplateId = null;
      this.selectedTemplateName = '';
      this.selectedTemplateData = null;
      this.variableList = [...this.transitionList];
      this.$emit('clear');
    },
    // èŽ·å–å˜é‡æ•°æ®
    getVariables() {
      const filteredVariables = this.variableList.filter(
        item => item.name !== "姓名" && item.name !== "电话" && item.name !== "地址"
      );
      return this.convertFormat2ToFormat1(filteredVariables);
    }
  }
};
</script>
<style lang="scss" scoped>
.template-selector {
  &__header {
    margin-bottom: 20px;
  }
  &__variables {
    margin-top: 20px;
    padding: 20px;
    background: #f5f7fa;
    border-radius: 4px;
    .el-table {
      background: transparent;
    }
  }
}
.drawer-content {
  padding: 20px;
  .el-form {
    margin-bottom: 20px;
  }
}
.preview-content {
  max-height: 600px;
  overflow-y: auto;
  padding: 20px;
  .scriptTopic-dev {
    margin-bottom: 25px;
    font-size: 16px;
    .dev-text {
      margin-bottom: 10px;
      font-weight: 500;
      color: #333;
      span {
        margin-left: 10px;
        color: #666;
      }
    }
    .dev-xx {
      padding-left: 20px;
    }
  }
}
::v-deep .el-drawer__body {
  padding: 0;
}
::v-deep .el-table {
  font-size: 14px;
}
::v-deep .el-table__row {
  cursor: pointer;
  &:hover {
    background-color: #f5f7fa;
  }
}
</style>
src/views/followvisit/Continue/index.vue
@@ -1675,8 +1675,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/HistoricalFollow/index.vue
@@ -798,8 +798,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/OutpatientAgain/index.vue
@@ -1456,8 +1456,8 @@
      // const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/SpecificDisease/index.vue
@@ -1028,8 +1028,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/Tracking/index.vue
@@ -1395,8 +1395,8 @@
      // const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/again/index.vue
@@ -1453,11 +1453,11 @@
    },
    //患者360跳转
    gettoken360(sfzh, drcode, drname, id) {
      // const orgname = localStorage.getItem("orgname");
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/beHospitalized/followUp.vue
@@ -1845,8 +1845,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/complaint/index.vue
@@ -1588,8 +1588,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/discharge/index.vue
@@ -1844,8 +1844,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/discharge/outpatientService.vue
@@ -1429,8 +1429,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/mzsatisfaction/index.vue
@@ -1632,8 +1632,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/record/TracingInfo/index.vue
@@ -1455,8 +1455,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/record/detailpage/index copy.vue
@@ -1633,8 +1633,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/record/detailpage/index.vue
@@ -262,10 +262,15 @@
      <!-- éšè®¿å†…容 -->
      <div class="call-action">
        <div class="call-container">
          <!-- <div class="call-header">
            <h2>一键呼叫功能</h2>
          </div> -->
          <template-selector
          v-if="orgname=='南华大学附属第一医院'&&!Voicetype"
            v-model="form.templateid"
            :templateName="form.templatename"
            :service-type="form.serviceType"
            :is-editable="form.sendState !== 2"
            @select="handleTemplateSelect"
            @clear="handleTemplateClear"
          />
          <div class="headline">
            <div>随访内容</div>
          </div>
@@ -1157,6 +1162,8 @@
  savequestiondetail,
  addPersonVoices,
  query360PatInfo,
  updateTemplate,
  query360PatInfonh,
  sendMsg,
} from "@/api/AiCentre/index";
import {
@@ -1165,6 +1172,7 @@
  listcontactinformation,
} from "@/api/patient/homepage";
import CallButton from "@/components/CallButton";
import TemplateSelector from "@/components/optionalModule";
import MergeAndModify from "./MergeAndModify.vue";
import CallCenterLs from "@/components/CallCenterLs";
import store from "@/store";
@@ -1173,6 +1181,7 @@
    CallButton,
    MergeAndModify,
    CallCenterLs,
    TemplateSelector,
  },
  directives: {
    numericOnly: {
@@ -1295,6 +1304,7 @@
      showContinuationCareBtn: false, // æŽ§åˆ¶å»¶ç»­æŠ¤ç†æŒ‰é’®æ˜¾ç¤º
      // è·¯ç”±ç›‘听相关
      routeWatcher: null,
      lastRoutePath: this.$route.path,
      input: "今天身体还不错",
      radio: "2",
@@ -1577,7 +1587,6 @@
    this.visitAgain = store.getters.visitAgain;
    console.log(store.getters.visitAgain);
    this.orgname = localStorage.getItem("orgname");
    if (this.orgname == "省立同德翠苑院区") {
      this.showContinuationCareBtn = true;
@@ -1728,8 +1737,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
@@ -1952,7 +1961,11 @@
          this.Editsingletasksonyic(this.serviceStates);
          const orgName = localStorage.getItem("orgname");
          if (this.form.isVisitAgain != 1 || orgName == "丽水市中医院"||this.visitAgain==1) {
          if (
            this.form.isVisitAgain != 1 ||
            orgName == "丽水市中医院" ||
            this.visitAgain == 1
          ) {
            this.Torouter();
            return;
          }
@@ -2036,6 +2049,35 @@
          message: "请输入正确的电话号码(手机号或带区号的固定电话)",
        };
      }
    },
    handleTemplateSelect(templateData) {
      console.log("选择了模板:", templateData);
      // å¤„理模板选择逻辑
      let templateobj = templateData.templateData;
      templateobj.templateid = templateobj.svyid;
      templateobj.taskid = this.form.taskid;
      templateobj.isoperation = 1;
      templateobj.svyTaskTemplateScriptVOS = templateobj.svyTemplateLibScripts;
      templateobj.svyTaskTemplateScriptVOS.forEach((item) => {
        item.taskid = this.form.taskid;
        item.templateid = item.svyid;
        item.svyTaskTemplateTargetoptions = item.svyLibTemplateTargetoptions;
      });
      let obj = {
        subId: this.form.id,
        svyTaskTemplateVO: templateobj,
      };
      updateTemplate(obj).then((res) => {
        if (res.code) {
          location.reload();
          this.$modal.msgSuccess("模板修改成功");
        } else {
        }
      });
    },
    handleTemplateClear() {
      console.log("清除了模板选择");
    },
    // ä½¿ç”¨ç¤ºä¾‹
    isValidPhone(phone) {
@@ -2149,7 +2191,11 @@
      const orgName = localStorage.getItem("orgname");
      console.log(orgName, "orgName");
      if (this.form.isVisitAgain != 1 || orgName == "丽水市中医院"||this.visitAgain==1) {
      if (
        this.form.isVisitAgain != 1 ||
        orgName == "丽水市中医院" ||
        this.visitAgain == 1
      ) {
        this.Torouter();
        return;
      }
@@ -2214,14 +2260,16 @@
          this.form = res.rows[0].serviceSubtaskList.find(
            (item) => item.id == this.id
          );
          console.log(this.form.templatename, "templatename");
          this.form.remark = this.form.remark || "";
          this.logsheetlist = res.rows[0].serviceSubtaskList;
          this.templateid = this.form.templateid;
          this.selectedTag = this.form.excep;
          const targetDate = new Date(this.form.visitTime); // ç›®æ ‡æ—¥æœŸ
          const now = new Date(); // å½“前时间
          console.log(now,'当前时间');
          console.log(targetDate,'目标日期');
          console.log(now, "当前时间");
          console.log(targetDate, "目标日期");
          if (now < targetDate && this.form.sendstate == 2) {
            this.$confirm("当前服务未到发送时间请谨慎修改", "提示", {
src/views/followvisit/record/index.vue
@@ -1147,8 +1147,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/record/physical/index.vue
@@ -697,8 +697,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/technology/index.vue
@@ -1103,8 +1103,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/zbAgain/index.vue
@@ -1446,8 +1446,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/followvisit/zysatisfaction/index.vue
@@ -1591,8 +1591,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/patient/patient/AwaitingAdmission.vue
@@ -818,8 +818,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/patient/patient/behospitalized.vue
@@ -1012,8 +1012,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/patient/patient/hospital.vue
@@ -843,8 +843,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/patient/patient/index.vue
@@ -1222,8 +1222,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/patient/patient/outpatient.vue
@@ -885,8 +885,8 @@
      const orgname = localStorage.getItem("orgname");
      if (orgname == "南华大学附属第一医院") {
        query360PatInfonh(id).then((res) => {
          if (res.url) {
            window.open(res.url, "_blank");
          if (res.data) {
            window.open(res.data, "_blank");
          } else {
            this.$modal.msgWarning("360查询无结果");
          }
src/views/patient/propaganda/QuestionnaireTask.vue
@@ -1299,7 +1299,7 @@
        this.form.serviceType == 15
      ) {
        this.checkboxlist = [
           {
          {
            value: "1",
            label: "人工",
          },
@@ -1523,7 +1523,7 @@
        this.form.icd10code = this.diagglist
          .map((item) => item.icdcode)
          .join(",");
          this.form.icd10name = this.diagglist
        this.form.icd10name = this.diagglist
          .map((item) => item.icdname)
          .join(",");
        Editsingletask(this.form).then((res) => {
@@ -1876,7 +1876,10 @@
        return;
      }
      if (this.patientqueryParams.searchscope == 1) {
      if (
        this.patientqueryParams.searchscope == 1 ||
        this.patientqueryParams.allhosp == 2
      ) {
        this.patientqueryParams.leaveldeptcodes = store.getters.belongDepts.map(
          (obj) => obj.deptCode
        );
vue.config.js
@@ -40,10 +40,10 @@
        // target: `http://192.168.100.10:8094`,//省立同德
        // target: `http://192.168.100.10:8095`,//新华
        // target: `http://192.168.100.10:8098`,//市一
        // target:`http://localhost:8095`,
        target:`http://localhost:8095`,
        // target:`http://35z1t16164.qicp.vip`,
        // target: `http://192.168.100.172:8095`,
        target: `http://192.168.100.10:8083`,//南华
        // target: `http://192.168.100.10:8083`,//南华
        // target: `http://192.168.191.181:8095`,
        changeOrigin: true,
        pathRewrite: {