55f9876e876c7ddfcc2a7a2b870dfc224c9467a6..509e61f3b9a696b596d18fe6ca78125c5e21ae65
2026-04-02 WXL (wul)
测试完成
509e61 对比 | 目录
2026-04-02 WXL (wul)
测试完成
bb0a72 对比 | 目录
2026-04-02 WXL (wul)
测试完成
83928a 对比 | 目录
已删除3个文件
已修改9个文件
422 ■■■■■ 文件已修改
dist (2).zip 补丁 | 查看 | 原始文档 | blame | 历史
dist (3).zip 补丁 | 查看 | 原始文档 | blame | 历史
dist.zip 补丁 | 查看 | 原始文档 | blame | 历史
src/components/AskRegular/index.vue 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/Regular/index.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/Satisfaction/configurationmyd/index.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/record/detailpage/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/followvisit/satisfaction/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/patient/hospital.vue 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/QuestionnaireTask.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/patient/propaganda/particty.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/repositoryai/templateku/configurat/index.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
dist (2).zip
Binary files differ
dist (3).zip
Binary files differ
dist.zip
Binary files differ
src/components/AskRegular/index.vue
@@ -14,10 +14,18 @@
        ></el-col>
        <el-col :span="12"
          ><el-form-item label="异常提醒">
            <el-radio-group v-model="radio">
              <el-radio :label="3">是</el-radio>
              <el-radio :label="6">否</el-radio>
            </el-radio-group>
            <el-select v-model="item.isabnormal" placeholder="请选择状态">
              <el-option :value="0" label="正常" :style="{ color: '#67C23A' }">
                <span style="color: #67c23a">● 正常</span>
              </el-option>
              <el-option :value="2" label="警告" :style="{ color: '#FFBA00' }">
                <span style="color: #ffba00">● 警告</span>
              </el-option>
              <el-option :value="1" label="异常" :style="{ color: '#f75c5c' }">
                <span style="color: #f75c5c">● 异常</span>
              </el-option>
            </el-select>
          </el-form-item></el-col
        >
        <el-col :span="12" v-if="intent"
src/components/Regular/index.vue
@@ -18,13 +18,21 @@
              </el-input> </el-form-item
          ></el-col>
          <el-col :span="12"
            ><el-form-item label="异常提醒">
              <el-radio-group v-model="item.isabnormal">
                <el-radio :label="1">是</el-radio>
                <el-radio :label="0">否</el-radio>
              </el-radio-group>
            </el-form-item></el-col
          >
          ><el-form-item label="异常提醒">
            <el-select v-model="item.isabnormal" placeholder="请选择状态">
              <el-option :value="0" label="正常" :style="{ color: '#67C23A' }">
                <span style="color: #67c23a">● 正常</span>
              </el-option>
              <el-option :value="2" label="警告" :style="{ color: '#FFBA00' }">
                <span style="color: #ffba00">● 警告</span>
              </el-option>
              <el-option :value="1" label="异常" :style="{ color: '#f75c5c' }">
                <span style="color: #f75c5c">● 异常</span>
              </el-option>
            </el-select>
          </el-form-item></el-col
        >
          <!-- <el-col :span="12" v-if="intent"
            ><el-form-item label="选项节点">
              <el-input
src/views/Satisfaction/configurationmyd/index.vue
@@ -62,9 +62,6 @@
                  placeholder="请选择模板"
                  clearable
                  filterable
                  :disabled="
                    !templateForm.templateType || templateOptionsLoading
                  "
                  @change="handleTemplateChange"
                  style="width: 100%"
                >
@@ -315,7 +312,6 @@
                        filterable
                        clearable
                        multiple
                        collapse-tags
                        style="width: 100%"
                        @change="handleConfigChange(question)"
                      >
@@ -616,7 +612,7 @@
      changedCount: 0,
      // 满意度分类ID
      satisfactionCategoryIds: ["404", "405", "406"],
      satisfactionCategoryIds: ["404", "405", "406", "10039", "10041", "10042"],
      // 表单验证规则
      configRules: {
@@ -670,9 +666,15 @@
    // 满意度题目数量
    satisfactionQuestionsCount() {
      return this.questionList.filter((q) =>
        this.satisfactionCategoryIds.includes(q.categoryid?.toString())
      ).length;
      if (this.templateForm.templateType === 1) {
        return this.questionList.filter((q) =>
          this.satisfactionCategoryIds.includes(q.categoryid?.toString())
        ).length;
      } else if (this.templateForm.templateType === 2) {
        return this.questionList.filter((q) =>
          this.satisfactionCategoryIds.includes(q.scriptAssortid?.toString())
        ).length;
      }
    },
    // 筛选后的题目列表
@@ -680,9 +682,15 @@
      let filtered = this.questionList;
      // 筛选满意度题目
      filtered = filtered.filter((q) =>
        this.satisfactionCategoryIds.includes(q.categoryid?.toString())
      );
      if (this.templateForm.templateType === 1) {
        filtered = filtered.filter((q) =>
          this.satisfactionCategoryIds.includes(q.categoryid?.toString())
        );
      } else if (this.templateForm.templateType === 2) {
        filtered = filtered.filter((q) =>
          this.satisfactionCategoryIds.includes(q.scriptAssortid?.toString())
        );
      }
      // 应用搜索条件
      if (this.queryParams.scriptTopic) {
@@ -833,6 +841,16 @@
            templateStatus: selectedTemplate.isavailable,
            questionCount: 0,
          };
        }
        // 加载模板详情数据
        this.templateLoading = true;
        this.loading = true;
        this.questionList = [];
        if (this.templateForm.templateType === 1) {
          this.loadQuestionnaireTemplateDetail();
        } else if (this.templateForm.templateType === 2) {
          this.loadFollowupTemplateDetail();
        }
      } else {
        this.currentTemplateInfo = null;
@@ -992,7 +1010,7 @@
    /** 配置变更处理 */
    handleConfigChange(question) {
      this.$nextTick(() => {
        const index = this.questionList.findIndex((q) => q.id === question.id);
        const index = this.filteredQuestionList.findIndex((q) => q.id === question.id);
        if (index !== -1) {
          const formRef = this.$refs.configForm && this.$refs.configForm[index];
          if (formRef) {
@@ -1045,7 +1063,9 @@
    async saveSingleConfig(question) {
      if (!question.hasChanges) return;
      const index = this.questionList.findIndex((q) => q.id === question.id);
      const index = this.filteredQuestionList.findIndex((q) => q.id === question.id);
      console.log(index,'filteredQuestionList');
      if (index === -1) return;
      const formRef = this.$refs.configForm && this.$refs.configForm[index];
src/views/followvisit/record/detailpage/index.vue
@@ -1815,8 +1815,10 @@
        };
        if (item.scriptType == 2 && item.scriptResult[0]) {
          obj.asrtext = item.scriptResult.join("&");
          obj.ivrtext = item.scriptResult.join("&");
        } else if (item.scriptType != 2 && item.scriptResult) {
          obj.asrtext = item.scriptResult;
          obj.ivrtext = item.scriptResult;
        }
        // if (item.isoption == 3) {
@@ -2053,6 +2055,7 @@
        item.subId = this.id;
        item.taskid = this.taskid;
        item.asrtext = item.matchedtext;
        item.ivrtext = item.matchedtext;
        if (!item.id) {
          item.isoperation = 1;
        }
src/views/followvisit/satisfaction/index.vue
@@ -723,6 +723,8 @@
    },
    /** 导出按钮操作 */
    handleExport() {
      console.log(this.topqueryParams,'打印入参');
      this.download(
        "smartor/satisfaction/export",
        {
src/views/patient/patient/hospital.vue
@@ -121,6 +121,18 @@
          </el-col> -->
          <el-col :span="1.5">
            <el-button
              type="warning"
              plain
              icon="el-icon-plus"
              size="medium"
              :disabled="multiple"
              @click="handleBatchAddTask"
            >
              添加延续护理任务
            </el-button>
          </el-col>
          <el-col :span="1.5">
            <el-button
              type="danger"
              plain
              icon="el-icon-delete"
@@ -323,7 +335,114 @@
        />
      </el-col>
    </el-row>
    <!-- 批量添加任务弹窗 -->
    <el-dialog
      title="批量添加延续护理"
      :visible.sync="batchTaskVisible"
      width="90%"
      append-to-body
    >
      <el-row :gutter="20">
        <!-- 左侧:选中患者列表 -->
        <el-col :span="12">
          <div class="batch-patient-section">
            <h4>选中患者({{ selectedPatients.length }}人)</h4>
            <el-table
              :data="selectedPatients"
              border
              style="width: 100%"
              size="small"
            >
              <el-table-column prop="patname" label="姓名" width="100" />
              <el-table-column prop="sex" label="性别" width="80">
                <template slot-scope="scope">
                  {{ scope.row.sex === 1 ? "男" : "女" }}
                </template>
              </el-table-column>
              <el-table-column
                label="出院时间"
                align="center"
                key="endtime"
                prop="endtime"
              >
                <template slot-scope="scope">
                  <span>{{ formatTime(scope.row.endtime) }}</span>
                </template>
              </el-table-column>
              <el-table-column prop="inhospno" label="住院号" />
              <el-table-column prop="deptname" label="科室" />
            </el-table>
          </div>
        </el-col>
        <!-- 右侧:任务列表 -->
        <el-col :span="12">
          <div class="batch-task-section">
            <h4>任务列表(请选择1个任务)</h4>
            <el-table
              :data="taskList"
              border
              style="width: 100%"
              size="small"
              @current-change="handleTaskSelectionChange"
              highlight-current-row
            >
              <el-table-column
                label="任务名称"
                fixed
                align="center"
                key="taskName"
                prop="taskName"
                :show-overflow-tooltip="true"
              />
              <el-table-column
                label="服务项目"
                align="center"
                key="templatename"
                prop="templatename"
                :show-overflow-tooltip="true"
              />
              <el-table-column
                label="创建人"
                align="center"
                key="createBy"
                prop="createBy"
                :show-overflow-tooltip="true"
              />
              <el-table-column
                label="创建时间"
                sortable
                align="center"
                prop="createTime"
              >
                <template slot-scope="scope">
                  <span>{{ formatTime(scope.row.createTime) }}</span>
                </template>
              </el-table-column>
              <template #empty>
                <div class="empty-message">
                  <i class="el-icon-warning"></i>
                  <span>患者科室无匹配服务</span>
                </div>
              </template>
            </el-table>
          </div>
        </el-col>
      </el-row>
      <!-- 底部按钮 -->
      <div slot="footer" class="dialog-footer">
        <el-button @click="batchTaskVisible = false">取 消</el-button>
        <el-button
          type="primary"
          :loading="batchLoading"
          @click="submitBatchTask"
          >创建任务</el-button
        >
      </div>
    </el-dialog>
    <!-- 用户导入对话框 -->
    <el-dialog
      :title="upload.title"
@@ -435,7 +554,7 @@
import Treeselect from "@riophae/vue-treeselect";
import { listDept } from "@/api/system/dept";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import { query360PatInfo } from "@/api/AiCentre/index";
import { query360PatInfo, getTasklist, addSubtask } from "@/api/AiCentre/index";
import store from "@/store";
@@ -470,6 +589,12 @@
      // 默认密码
      initPassword: undefined,
      amendtag: false, //是否修改
      // 批量任务相关数据
      batchTaskVisible: false, // 弹窗可见性
      selectedPatients: [], // 选中的患者列表
      taskList: [], // 任务列表
      selectedTask: null, // 选中的任务
      batchLoading: false, // 批量提交加载状态
      // 日期范围
      dateRange: [],
      source: [
@@ -669,6 +794,144 @@
        }
      });
    },
    /** 批量添加任务按钮点击 */
    handleBatchAddTask() {
      // 校验是否选中患者
      if (this.ids.length === 0) {
        this.$modal.msgWarning("请至少选中1名患者");
        return;
      }
      // 获取选中患者的科室信息
      const patientDepts = new Set();
      let deptcode = "";
      this.ids.forEach((patId) => {
        const patient = this.userList.find((item) => item.patid === patId);
        if (patient) {
          patientDepts.add(patient.deptname);
          deptcode = patient.deptcode;
        }
      });
      // 获取选中患者列表
      this.selectedPatients = this.userList.filter((item) =>
        this.ids.includes(item.patid)
      );
      // 显示弹窗
      this.batchTaskVisible = true;
      // 获取任务列表
      this.loadTaskList(deptcode);
    },
    /** 加载任务列表 */
    loadTaskList(deptcode) {
      this.batchLoading = true;
      let topqueryParams = {
        pageNum: 1,
        pageSize: 100, // 设置较大的分页获取更多任务
        type: 2, // 根据实际情况调整
      };
      getTasklist(topqueryParams)
        .then((response) => {
          this.taskList = response.rows;
          this.batchLoading = false;
          if (this.taskList.length === 0) {
            this.$modal.msgWarning("当前科室无可用任务");
          }
        })
        .catch((error) => {
          this.$modal.msgError("获取任务列表失败:" + error.message);
          this.batchLoading = false;
        });
    },
    /** 处理任务选择变化 */
    handleTaskSelectionChange(currentRow) {
      this.selectedTask = currentRow;
    },
    /** 批量提交任务 */
    async submitBatchTask() {
      // 校验是否选中任务
      if (!this.selectedTask) {
        this.$modal.msgWarning("请选择1个任务");
        return;
      }
      this.batchLoading = true;
      const successPatients = [];
      const failedPatients = [];
      const errorMessages = [];
      try {
        // 遍历选中的患者,逐个调用接口
        for (const patient of this.selectedPatients) {
          const params = {
            taskid: this.selectedTask.taskid,
            type: this.selectedTask.type,
            taskName: this.selectedTask.taskName,
            serviceType: this.selectedTask.serviceType,
            preachform: this.selectedTask.preachform,
            templateid: this.selectedTask.templateid,
            libtemplateid: this.selectedTask.libtemplateid,
            sendstate: 2,
            ...patient,
            sendname: patient.patname,
            endtime: patient.endtime ? patient.endtime + " 00:00:00" : "",
            leavediagname: patient.leavediagname || patient.diagname || "",
            age: patient.age || "",
          };
          try {
            const response = await addSubtask(params);
            if (response.code === 200) {
              successPatients.push(patient.patname);
            } else {
              failedPatients.push(patient.patname);
              errorMessages.push(
                `${patient.patname}: ${response.msg || "添加失败"}`
              );
            }
          } catch (error) {
            failedPatients.push(patient.patname);
            errorMessages.push(
              `${patient.patname}: ${error.message || "网络错误"}`
            );
          }
        }
        // 显示处理结果
        if (failedPatients.length === 0) {
          this.$modal.msgSuccess(
            `成功为 ${successPatients.length} 名患者添加任务`
          );
        } else {
          this.$modal.msgWarning(
            `成功添加 ${successPatients.length} 人,失败 ${failedPatients.length} 人。` +
              (errorMessages.length > 0
                ? `失败原因:${errorMessages.join("; ")}`
                : "")
          );
        }
        this.batchTaskVisible = false;
        this.getList(); // 刷新患者列表
      } catch (error) {
        this.$modal.msgError("批量添加任务过程中出错:" + error.message);
      } finally {
        this.batchLoading = false;
      }
    },
    /** 格式化时间 */
    formatTime(time) {
      if (!time) return "";
      return time;
    },
    /** 查询标签列表 */
    gettabList() {
      const tagqueryParams = {
@@ -777,8 +1040,8 @@
        leavehospitaldistrictcodes: [],
      };
      this.queryParams.leaveldeptcodes = store.getters.belongDepts.map(
      (obj) => obj.deptCode
    );
        (obj) => obj.deptCode
      );
      this.handleQuery();
    },
    // 多选框选中数据
@@ -949,6 +1212,43 @@
  }
}
.button-textsc {
  color: #3664D9;
  color: #3664d9;
}
// 批量任务弹窗样式
.batch-patient-section,
.batch-task-section {
  h4 {
    margin: 0 0 10px 0;
    color: #606266;
    font-size: 16px;
  }
}
.empty-message {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 20px;
  color: #909399;
  i {
    font-size: 24px;
    margin-bottom: 8px;
  }
}
.dialog-footer {
  display: flex;
  justify-content: flex-end;
  padding-top: 20px;
  border-top: 1px solid #ebeef5;
}
// 响应式调整
@media screen and (max-width: 1200px) {
  .batch-patient-section,
  .batch-task-section {
    margin-bottom: 20px;
  }
}
</style>
src/views/patient/propaganda/QuestionnaireTask.vue
@@ -1299,6 +1299,10 @@
        this.form.serviceType == 15
      ) {
        this.checkboxlist = [
           {
            value: "1",
            label: "人工",
          },
          {
            value: "3",
            label: "智能语音",
src/views/patient/propaganda/particty.vue
@@ -1331,6 +1331,10 @@
        ];
      } else if (this.form.serviceType == 6) {
        this.checkboxlist = [
           {
            value: "1",
            label: "人工",
          },
          {
            value: "3",
            label: "智能语音",
src/views/repositoryai/templateku/configurat/index.vue
@@ -1467,7 +1467,7 @@
  illnesslistget,
  getillness,
  getgenerallist,
  depthospgetsondel
  depthospgetsondel,
} from "@/api/AiCentre/index";
import OptionalForm from "@/components/OptionalForm"; //正则组件
import { getToken } from "@/utils/auth";
@@ -1510,7 +1510,9 @@
      ruleForm: {
        templateName: "",
        revisitBefore:
          "亲爱的患者/家属,我们是"+localStorage.getItem("orgname")+"的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
          "亲爱的患者/家属,我们是" +
          localStorage.getItem("orgname") +
          "的医护人员,为了更好地了解您的康复情况,请您抽一点宝贵时间,完成这份随访。",
        revisitAfter:
          "请您注意休息和营养,生活上要劳逸结合,适当锻炼,戒烟限酒,保持心情舒畅,定期复诊。那本次回访就到这里,祝您身体健康!",
        ivrLibaTemplateTagList: [],
@@ -1627,7 +1629,7 @@
    this.auxiliary();
    this.getDeptTree();
    this.mode = store.getters.mode;
    console.log(this.mode,'this.mode');
    console.log(this.mode, "this.mode");
    this.usable = store.getters.usable;
    this.required = store.getters.required;
    this.valuetype = store.getters.valuetype;
@@ -1704,9 +1706,9 @@
            console.log(2211);
            this.ruleForm = res.data;
            if (this.ruleForm.deptNames)
            console.log(this.ruleForm.suitway,'suitway');
              console.log(this.ruleForm.suitway, "suitway");
            this.ruleForm.suitway = this.ruleForm.suitway.split(",");
            console.log(this.ruleForm.suitway,'suitway');
            console.log(this.ruleForm.suitway, "suitway");
            if (this.ruleForm.campus)
              this.ruleForm.campus = this.ruleForm.campus.split(",");
            this.ruleForm.submoduleID = this.ruleForm.submoduleID.split(",");
@@ -2113,6 +2115,7 @@
        console.log(res, "详情");
        res.data.isoperation = 1;
        res.data.pid = this.ruleForm.id;
        res.data.scriptAssortid = res.data.assortid;
        res.data.ivrLibaScriptTargetoptionList.forEach((item) => {
          item.isoperation = 1;
        });
@@ -2123,7 +2126,7 @@
    },
    handleDelete(row) {
      this.$modal
        .confirm('是否确认删除问题:"' + row.scriptTopic + '?')
        .confirm('是否确认删除问题:"' + row.scriptTopic + "?")
        .then(() => {
          this.ruleForm.ivrLibaTemplateScriptVOList.splice(
            this.ruleForm.ivrLibaTemplateScriptVOList.indexOf(row),
@@ -2195,7 +2198,7 @@
        } else {
          item.nextScriptno = item.sort + 1;
        }
        if (item.ivrLibaScriptTargetoptionList&&!item.branchFlag) {
        if (item.ivrLibaScriptTargetoptionList && !item.branchFlag) {
          item.ivrLibaScriptTargetoptionList.forEach((items) => {
            items.nextQuestion = Number(item.sort) + 1;
          });