Sfoglia il codice sorgente

群消息问题收集

youchen 11 mesi fa
parent
commit
1a2c12a8aa

+ 7 - 7
src/api/business/as/hospital.js

@@ -34,10 +34,10 @@ export function remove(id) {
   })
 }
 
-// //查询医院和处理人列表
-// export function getHospitalAndProcessor() {
-//   return request({
-//     url: '/mk/as/hospital/getHospitalAndProcessor',
-//     method: 'get',
-//   })
-// }
+//查询微信群列表
+export function getWeChatRoomList() {
+  return request({
+    url: '/mk/as/chatRoom/getWeChatRoomList',
+    method: 'get',
+  })
+}

+ 28 - 0
src/api/business/as/problemInfo.js

@@ -68,5 +68,33 @@ export function getQuestionerList() {
   })
 }
 
+export function updateStageProblem(data) {
+  return request({
+    url: `/mk/as/problem/updateStageProblem`,
+    method: 'post',
+    data: data
+  })
+}
+
+export function getWorkOrderProcessorList() {
+  return request({
+    url: `/mk/as/problem/getWorkOrderProcessorList`,
+    method: 'get',
+  })
+}
 
+export function getProcessorList() {
+  return request({
+    url: `/mk/as/assignAuthority/getUesrList`,
+    method: 'get',
+  })
+}
 
+export function addProblem(data,params) {
+  return request({
+    url: `/mk/as/problem/add`,
+    method: 'post',
+    data: data,
+    params,
+  })
+}

+ 82 - 8
src/views/business/as/hospital/index.vue

@@ -37,6 +37,33 @@
         width="240">
       </el-table-column>
       <el-table-column
+        prop="defaultContactWay"
+        label="默认联系方式"
+        width="180">
+      </el-table-column>
+      <el-table-column
+        prop="wechatRoom"
+        label="微信群"
+        width="410">
+        <template #default="scope">
+          <el-row>
+            <el-col :span="22">
+              <el-select v-model="scope.row.wechatRoom" clearable placeholder="请选择" style="width: 100%">
+                <el-option
+                  v-for="item in wechatRoomOptions"
+                  :key="item.userName"
+                  :label="item.nickName"
+                  :value="item.userName">
+                </el-option>
+              </el-select>
+            </el-col>
+            <el-col :span="2">
+              <el-button type="text" @click="bingBtn(scope.row)">绑定</el-button>
+            </el-col>
+          </el-row>
+        </template>
+      </el-table-column>
+      <el-table-column
         prop="remark"
         label="备注"
         width="240">
@@ -45,7 +72,8 @@
         fixed="right"
         label="操作">
         <template #default="scope">
-          <el-button type="text">编辑</el-button>|
+          <el-button type="text" @click="createBtn(scope.row)">生成链接</el-button>|
+          <el-button type="text" @click="editBtn(scope.row)">编辑</el-button>|
           <el-button type="text" @click="routerBtn(scope.row)">权限分配</el-button>|
           <el-button type="text" @click="delBtn(scope.row)">删除</el-button>
         </template>
@@ -70,18 +98,34 @@
         <el-form-item label="项目/医院名称">
           <el-input v-model="form.projectSource"></el-input>
         </el-form-item>
+        <el-form-item label="默认联系方式">
+          <el-input v-model="form.defaultContactWay"></el-input>
+        </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
-    <el-button @click="dialogVisible = false">取 消</el-button>
-    <el-button type="primary" @click="submitForm">确 定</el-button>
-  </span>
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+      </span>
+    </el-dialog>
+
+    <el-dialog
+      title="项目链接"
+      :visible.sync="createDialog"
+      width="30%"
+      :before-close="handleClose">
+      <span>{{ this.projectUrl }}</span>
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="createDialog = false">取 消</el-button>
+        <el-button type="primary" @click="createDialog = false">确 定</el-button>
+      </span>
     </el-dialog>
   </div>
 
 
 </template>
 <script>
-import {add,edit,list,remove} from '@/api/business/as/hospital'
+import {add, edit, getWeChatRoomList, list, remove} from '@/api/business/as/hospital'
+import {getToken} from "@/utils/auth";
 export default {
   mounted() {
     //挂载window.onresize事件(动态设置table高度)
@@ -98,9 +142,34 @@ export default {
   },
   created() {
     this.getData()
-    this.getTableHeight();
+    this.getTableHeight()
+    this.getWeChatRoomData()
   },
   methods:{
+    createBtn(param){
+      this.createDialog=true
+      this.projectUrl =`http://sy.derom.com/drp-admin/after-sales/login?id=${param.id}`
+
+    },
+    getWeChatRoomData(){
+      getWeChatRoomList().then(res =>{
+        if(200 == res.code){
+          this.wechatRoomOptions=res.data
+        }
+      })
+    },
+    bingBtn(param){
+      edit(param).then(res =>{
+        if(res.code == 200){
+          this.$modal.msgSuccess("修改成功");
+        }
+      })
+    },
+    editBtn(param){
+      this.dialogVisible=true
+      this.title='编辑'
+      this.form=param
+    },
     routerBtn(row,event,colum) {
       let resolve = this.$router.push({path:'/business/as/hospital/assignAuthority',query:{id:row.id}});
     },
@@ -173,7 +242,7 @@ export default {
               }
             })
           }else {
-            edit().then(res =>{
+            edit(this.form).then(res =>{
               if(res.code == 200){
                 this.$modal.msgSuccess("修改成功");
                 this.dialogVisible = false
@@ -186,11 +255,14 @@ export default {
   },
   data() {
     return {
+      projectUrl:'',
+      createDialog:false,
       dialogVisible:false,
       loading:false,
       tableHeight:'', //表格高度
       title:'',
       total:'',
+      wechatRoomOptions:[],
       dataList:[],
       queryParams:{
         pageNum:1,
@@ -199,7 +271,9 @@ export default {
       },
       form:{
         id:undefined,
-        projectSource:''
+        projectSource:'',
+        defaultContactWay:'',
+        wechatRoom:''
       }
     }
   }

+ 10 - 33
src/views/business/as/problemInfo/detail.vue

@@ -144,9 +144,9 @@
           <el-row>
             <el-col :span="15">
               <el-form-item >
-                <el-select v-model="form.workOrderProcessor" placeholder="请选择工单处理人">
+                <el-select v-model="form.workOrderProcessor" filterable="true" placeholder="请选择工单处理人" clearable="true">
                   <el-option
-                    v-for="item in processorOptions"
+                    v-for="item in workOrderProcessorOptions"
                     :key="item.userCode"
                     :label="item.nickName"
                     :value="item.userCode">
@@ -180,7 +180,7 @@
 import {getDetail} from "@/api/business/as/detail";
 import axios from "axios";
 import {getToken} from "@/utils/auth";
-import {pushWorkOrder} from "@/api/business/as/problemInfo";
+import {getWorkOrderProcessorList, pushWorkOrder} from "@/api/business/as/problemInfo";
 
 export default {
   created() {
@@ -189,7 +189,7 @@ export default {
       getDetail(this.queryParams.id).then(res => {
         if(200 == res.code){
           this.data=res.data
-          if(this.data.problemStateSolve == 0){
+          if(this.data.problemStateConvert == 0){
             this.flag=false
           }
         }
@@ -249,25 +249,6 @@ export default {
       this.form.problemPicture=fileList
     },
     handleClose(done) {
-      // this.form = {
-      //   id:undefined,
-      //   problemCode:'',
-      //   projectSource:'',
-      //   questioner:'',
-      //   problemType:'',
-      //   roomInformation:'',
-      //   processor:'',
-      //   processorWay:'',
-      //   problemDescription:'',
-      //   problemPicture:[],
-      //   questionerWay:'',
-      //   processingFeedback:'',
-      //   problemStateSolve:'',
-      //   problemStateConvert:'',
-      //   processorPicture:[],
-      //   workOrderProcessor:'',
-      //   processorEndTime:'',
-      // }
       this.$confirm('确认关闭?')
         .then(_ => {
           done();
@@ -279,23 +260,19 @@ export default {
       this.form=this.data
     },
     handleWorkOrder(){
+      getWorkOrderProcessorList().then(res =>{
+        if(200 == res.code){
+          this.workOrderProcessorOptions=res.data
+        }
+      })
       this.dialogWorkOrder=true
       this.form=this.data
     },
   },
   data() {
     return {
+      workOrderProcessorOptions:[],
       pictureList:[],
-      processorOptions:[
-        {
-          userCode: '10001',
-          nickName: '王五'
-        },
-        {
-          userCode: '10002',
-          nickName: '张三'
-        }
-      ],
       form: {
         id:undefined,
         problemCode:'',

+ 157 - 121
src/views/business/as/problemInfo/index.vue

@@ -8,17 +8,23 @@
         <el-tab-pane label="已解决" name="4" ></el-tab-pane>
       </el-tabs>
     </el-row>
-    <el-form ref="form" :model="queryParams" label-width="90px">
+    <el-form ref="form" :model="queryParams" label-width="100px">
       <el-row>
         <el-col :span="5">
           <el-form-item label="项目/医院">
-            <el-autocomplete
-              v-model="queryParams.projectSource"
-              :fetch-suggestions="querySearchAsync"
-              placeholder="请输入内容"
-              @select="handleSelect"
-              clearable
-            ></el-autocomplete>
+            <el-select v-model="queryParams.projectSource" filterable placeholder="请选择" clearable>
+              <el-option
+                v-for="item in restaurants"
+                :key="item.projectSource"
+                :label="item.projectSource"
+                :value="item.projectSource">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="5">
+          <el-form-item label="问题描述">
+            <el-input v-model="queryParams.problemDescription" clearable placeholder="请输入内容"></el-input>
           </el-form-item>
         </el-col>
         <el-col :span="5">
@@ -35,24 +41,14 @@
         </el-col>
         <el-col :span="5">
           <el-form-item label="科室信息">
-            <el-autocomplete
-              v-model="queryParams.roomInformation"
-              :fetch-suggestions="querySearchAsync2"
-              placeholder="请输入内容"
-              @select="handleSelect2"
-              clearable
-            ></el-autocomplete>
-          </el-form-item>
-        </el-col>
-        <el-col :span="5">
-          <el-form-item label="提问人" v-if="activeName != '3'">
-            <el-autocomplete
-              v-model="queryParams.questioner"
-              :fetch-suggestions="querySearchAsync3"
-              placeholder="请输入内容"
-              @select="handleSelect3"
-              clearable
-            ></el-autocomplete>
+            <el-select v-model="queryParams.roomInformation" filterable placeholder="请选择" clearable>
+              <el-option
+                v-for="item in roomInformationList"
+                :key="item.roomInformation"
+                :label="item.roomInformation"
+                :value="item.roomInformation">
+              </el-option>
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="4">
@@ -61,6 +57,18 @@
       </el-row>
       <el-row>
         <el-col :span="5">
+          <el-form-item label="提问人" v-if="activeName != '3'">
+            <el-select v-model="queryParams.questioner" filterable placeholder="请选择" clearable>
+              <el-option
+                v-for="item in questionerList"
+                :key="item.questioner"
+                :label="item.questioner"
+                :value="item.questioner">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="5">
           <el-form-item label="问题状态" v-if="activeName != '2' && activeName != '3' ">
             <el-select v-model="state" placeholder="请选择" clearable>
               <el-option
@@ -74,7 +82,7 @@
         </el-col>
         <el-col :span="5">
           <el-form-item label="处理负责人">
-            <el-select v-model="queryParams.processor" placeholder="请选择" clearable>
+            <el-select v-model="queryParams.processor" filterable placeholder="请选择" clearable>
               <el-option
                 v-for="item in processorOptions"
                 :key="item.userName"
@@ -84,11 +92,36 @@
             </el-select>
           </el-form-item>
         </el-col>
-        <el-col :span="4" :offset="10">
+        <el-col :span="5">
+          <el-form-item label="是否非问题">
+            <el-select v-model="queryParams.isProblem" placeholder="请选择" clearable>
+              <el-option
+                v-for="item in isProblemOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
           <el-button icon="el-icon-refresh" @click="btnReset">重置</el-button>
         </el-col>
       </el-row>
-
+      <el-row>
+        <el-col :span="5">
+          <el-form-item label="问题创建时间">
+            <el-date-picker
+              v-model="dateRange"
+              type="daterange"
+              value-format="yyyy-MM-dd"
+              range-separator="至"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-row style="margin-bottom: 10px">
 <!--        <el-col :span="1">-->
 <!--          <el-button  @click="handleDelete" :disabled="multiple">删除</el-button>-->
@@ -96,6 +129,9 @@
         <el-col :span="24">
           <el-row type="flex" justify="end">
             <el-col :span="2">
+              <el-button   @click="handleUpdateProblem">置为非问题</el-button>
+            </el-col>
+            <el-col :span="2">
               <el-button   @click="addFrom">新增问题</el-button>
             </el-col>
             <el-col :span="2" style="width: 120px">
@@ -136,7 +172,7 @@
       <el-table-column
         prop="problemCode"
         label="编码"
-        width="55"
+        width="110"
         align="center">
       </el-table-column>
       <el-table-column
@@ -146,6 +182,12 @@
         align="center">
       </el-table-column>
       <el-table-column
+        prop="wechatGroupNum"
+        label="微信群号"
+        width="120"
+        align="center">
+      </el-table-column>
+      <el-table-column
         prop="problemDescription"
         label="问题描述"
         width="120"
@@ -192,6 +234,12 @@
         align="center">
       </el-table-column>
       <el-table-column
+        prop="wechatNum"
+        label="联系人微信号"
+        width="120"
+        align="center">
+      </el-table-column>
+      <el-table-column
         prop="createTime"
         label="创建时间"
         width="120"
@@ -275,13 +323,14 @@
         <el-row>
           <el-col :span="6">
             <el-form-item label="项目来源/医院" prop="projectSource">
-              <el-autocomplete
-                v-model="form.projectSource"
-                :fetch-suggestions="querySearchAsync1"
-                placeholder="请输入内容"
-                @select="handleSelect1"
-                clearable
-              ></el-autocomplete>
+              <el-select v-model="form.projectSource" filterable placeholder="请选择" clearable>
+                <el-option
+                  v-for="item in restaurants"
+                  :key="item.projectSource"
+                  :label="item.projectSource"
+                  :value="item.projectSource">
+                </el-option>
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="6">
@@ -427,12 +476,12 @@
         <el-row>
           <el-col :span="15">
             <el-form-item >
-              <el-select v-model="form.workOrderProcessor" placeholder="请选择工单处理人">
+              <el-select v-model="form.workOrderProcessor" filterable placeholder="请选择工单处理人" clearable>
                 <el-option
-                  v-for="item in processorOptions1"
-                  :key="item.userCode"
+                  v-for="item in workOrderProcessorOptions"
+                  :key="item.userName"
                   :label="item.nickName"
-                  :value="item.userCode">
+                  :value="item.userName">
                 </el-option>
               </el-select>
             </el-form-item>
@@ -465,7 +514,13 @@ import {
   updateStage,
   pushWorkOrder,
   downloadExcel,
-  getHospitalAndProcessor, getRoomInformation, getQuestionerList
+  getHospitalAndProcessor,
+  getRoomInformation,
+  getQuestionerList,
+  updateStageProblem,
+  getWorkOrderProcessorList,
+  getProcessorList,
+  addProblem
 } from "@/api/business/as/problemInfo"
 import {getToken} from "@/utils/auth";
 import axios from 'axios'
@@ -487,76 +542,27 @@ export default {
         this.questionerList=res.data
       }
     })
+    getProcessorList().then(res =>{
+      if(200 == res.code){
+        this.processorOptions=res.data
+      }
+    })
   },
   methods: {
-
-    querySearchAsync1(queryString, cb) {
-      this.restaurants.forEach((item) =>{
-        item.value=item.projectSource
-      })
-      var restaurants = this.restaurants
-      var results = queryString ? restaurants.filter(this.createStateFilter1(queryString)) : restaurants;
-      cb(results)
-    },
-    createStateFilter1(queryString) {
-      return (item) => {
-        return item.projectSource.match(queryString);
-      };
-    },
-    handleSelect1(item) {
-      item.assignAuthorityUser.forEach((item) =>{
-        if(item.isDefaultPerson == 0){
-          this.processorOptions=[item]
-        }
-      })
-    },
-    querySearchAsync(queryString, cb) {
-      this.restaurants.forEach((item) =>{
-        item.value=item.projectSource
-      })
-      var restaurants = this.restaurants
-      var results = queryString ? restaurants.filter(this.createStateFilter(queryString)) : restaurants;
-      cb(results)
-    },
-    createStateFilter(queryString) {
-      return (item) => {
-        return item.projectSource.match(queryString);
-      };
-    },
-    handleSelect(item) {
-      this.processorOptions=item.assignAuthorityUser
-    },
-    querySearchAsync2(queryString, cb) {
-      this.roomInformationList.forEach((item) =>{
-        item.value=item.roomInformation
-      })
-      var restaurants = this.roomInformationList
-      var results = queryString ? restaurants.filter(this.createStateFilter2(queryString)) : restaurants;
-      cb(results)
-    },
-    createStateFilter2(queryString) {
-      return (item) => {
-        return item.roomInformation.match(queryString);
-      };
-    },
-    handleSelect2(item) {
-      // this.processorOptions=item.roomInformation
-    },
-    querySearchAsync3(queryString, cb) {
-      this.questionerList.forEach((item) =>{
-        item.value=item.questioner
+    handleUpdateProblem(){
+      this.$confirm("是否确认修改选中的数据项?", "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(()=>{
+        updateStageProblem(this.problemInfos).then(res =>{
+          if(200 == res.code){
+            this.$message.success("修改成功");
+            this.queryParams.pageNum=1;
+            this.handleClick()
+          }
+        })
       })
-      var restaurants = this.questionerList
-      var results = queryString ? restaurants.filter(this.createStateFilter3(queryString)) : restaurants;
-      cb(results)
-    },
-    createStateFilter3(queryString) {
-      return (item) => {
-        return item.questioner.match(queryString);
-      };
-    },
-    handleSelect3(item) {
-      // this.processorOptions=item.roomInformation
     },
     getChangeType2(e) {
       for (var i = 0; i < this.problemTypeOptions.length; i++) {
@@ -586,6 +592,11 @@ export default {
       })
     },
     handleWorkOrder(data){
+      getWorkOrderProcessorList().then(res =>{
+        if(200 == res.code){
+          this.workOrderProcessorOptions=res.data
+        }
+      })
       this.dialogWorkOrder=true
       this.form=data
     },
@@ -646,6 +657,11 @@ export default {
         this.queryParams.problemStateSolve=stateList[0]
         this.queryParams.problemStateConvert=stateList[1]
       }
+      if(this.dateRange.length >0){
+        console.log(this.dateRange.length)
+        this.queryParams.creatStart=this.dateRange[0]
+        this.queryParams.creatEnd=this.dateRange[1]
+      }
       if(this.activeName){
         if(this.activeName=='1'){
           list(this.queryParams).then(res => {
@@ -690,12 +706,18 @@ export default {
           if(res.code == 200){
             this.dataList=res.rows
             this.total=res.total
+            this.queryParams.creatStart=''
+            this.queryParams.creatEnd=''
           }
         })
       }
     },
     btnReset(){
       this.queryParams={
+        creatStart:'',
+        creatEnd:'',
+        problemDescription:'',
+        isProblem: '',
         projectSource:'',
         problemType:'',
         roomInformation:'',
@@ -746,7 +768,9 @@ export default {
     },
     submitFormWorkOrder(){
       pushWorkOrder(this.form).then(res =>{
-
+        if(200 == res.code){
+          this.$message.success('转工单成功')
+        }
       })
       this.dialogWorkOrder=false
     },
@@ -756,7 +780,7 @@ export default {
           if (this.form.id == undefined) {
             //新增售后问题
             let formData = new FormData();
-            formData.append("problemInfo",new Blob([JSON.stringify(this.form)], {type: "application/json"}))
+            //formData.append("problemInfo",new Blob([JSON.stringify(this.form)], {type: "application/json"}))
             if(this.pictureList.length < 1 ){
                 formData.append("files",null)
             }else {
@@ -764,16 +788,8 @@ export default {
                 formData.append("files",file.raw)
               })
             }
-            return await axios({
-              method: "POST",
-              url: process.env.VUE_APP_BASE_API + '/mk/as/problem/add',
-              headers: {
-                'Content-Type': 'multipart/form-data',
-                'Authorization': 'Bearer ' + getToken()
-              },
-              data: formData,
-            }).then(res =>{
-              if(res.data.code == 200){
+            return await addProblem(formData,this.form).then(res =>{
+              if(res.code == 200){
                 this.$modal.msgSuccess("新增成功");
                 this.dialogVisible = false
                 this.handleClick()
@@ -892,6 +908,22 @@ export default {
   },
   data() {
     return {
+      dateRange:[],
+      isProblemOptions:[
+        {
+          value:'0',
+          label:'全部'
+        },
+        {
+          value:'1',
+          label:'问题'
+        },
+        {
+          value:'2',
+          label:'非问题'
+        },
+      ],
+      workOrderProcessorOptions:[],
       roomInformationList:[],
       questionerList:[],
       rules: {
@@ -975,6 +1007,10 @@ export default {
       dialogVisible: false,
       dialogVisiblePicture: false,
       queryParams: {
+        creatStart:'',
+        creatEnd:'',
+        problemDescription:'',
+        isProblem:'',
         projectSource:'',
         problemType:'',
         roomInformation:'',