Kaynağa Gözat

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_adminUI

lmx 2 gün önce
ebeveyn
işleme
dcd3b77c15

+ 40 - 0
.env.prod-kyt

@@ -0,0 +1,40 @@
+# 页面标题
+VUE_APP_TITLE =互联网医院管理系统
+# 首页菜单标题
+VUE_APP_TITLE_INDEX =互联网医院管理系统
+# 公司名称
+VUE_APP_COMPANY_NAME =重庆云联融智科技有限公司
+# ICP备案号
+VUE_APP_ICP_RECORD =渝ICP备2024031984号-1
+# ICP网站访问地址
+VUE_APP_ICP_URL =https://beian.miit.gov.cn
+# 网站LOG
+VUE_APP_LOG_URL =@/assets/logo/ylrz.png
+# 存储桶配置
+VUE_APP_OBS_ACCESS_KEY_ID = K2UTJGIN7UTZJR2XMXYG
+# 存储桶配置
+VUE_APP_OBS_SECRET_ACCESS_KEY = sbyeNJLbcYmH6copxeFP9pAoksM4NIT9Zw4x0SRX
+# 存储桶配置
+VUE_APP_OBS_SERVER = https://obs.cn-north-4.myhuaweicloud.com
+# 存储桶配置
+VUE_APP_OBS_BUCKET = kyt-hw079058881
+# 存储桶配置
+VUE_APP_COS_BUCKET = kyt-1323137866
+# 存储桶配置
+VUE_APP_COS_REGION = ap-chongqing
+# 线路一地址
+VUE_APP_VIDEO_LINE_1 = https://kyttcpv.ylrzcloud.com
+# 线路二地址
+VUE_APP_VIDEO_LINE_2 = https://kytobs.ylrztop.com
+
+# 开发环境配置
+ENV = 'development'
+
+# FS管理系统/开发环境
+VUE_APP_BASE_API = '/prod-api'
+
+#默认 1、会员 2、企微
+VUE_APP_COURSE_DEFAULT = 1
+
+# 路由懒加载
+VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 1 - 0
package.json

@@ -26,6 +26,7 @@
     "build:prod-drk": "vue-cli-service build --mode prod-drk",
     "build:prod-qdtst": "vue-cli-service build --mode prod-qdtst",
     "build:prod-jkj": "vue-cli-service build --mode prod-jkj",
+    "build:prod-kyt": "vue-cli-service build --mode prod-kyt",
     "build:stage": "vue-cli-service build --mode staging",
     "build:prod-cqxzt": "vue-cli-service build --mode prod-cqxzt",
     "build:prod-bjyjb": "vue-cli-service build --mode prod-bjyjb",

+ 12 - 3
src/api/his/storeOrder.js

@@ -1,11 +1,11 @@
 import request from '@/utils/request'
 
 // 查询订单列表
-export function listOrder(query) {
+export function listOrder(data) {
   return request({
     url: '/his/storeOrder/list',
-    method: 'get',
-    params: query
+    method: 'post',
+    data: data
   })
 }
 // 下载导入模板
@@ -266,6 +266,15 @@ export function batchCreateErpOrder(data) {
   })
 }
 
+export function batchSetErpOrder(data) {
+  return request({
+    url: '/his/storeOrder/batchSetErpOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+
 export function getErpAccount() {
   return request({
     url: '/his/storeOrder/getErpAccount',

+ 9 - 0
src/api/his/userOperationLog.js

@@ -8,3 +8,12 @@ export function listUserOperationLog(query) {
     params: query
   })
 }
+
+// 查询用户操作日志类型
+export function getOperationType() {
+  return request({
+    url: '/his/userOperationLog/getOperationType',
+    method: 'get'
+  })
+}
+

+ 53 - 0
src/api/qw/qwIpadServer.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询ipad服务器列表
+export function listQwIpadServer(query) {
+  return request({
+    url: '/qw/qwIpadServer/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询ipad服务器详细
+export function getQwIpadServer(id) {
+  return request({
+    url: '/qw/qwIpadServer/' + id,
+    method: 'get'
+  })
+}
+
+// 新增ipad服务器
+export function addQwIpadServer(data) {
+  return request({
+    url: '/qw/qwIpadServer',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改ipad服务器
+export function updateQwIpadServer(data) {
+  return request({
+    url: '/qw/qwIpadServer',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除ipad服务器
+export function delQwIpadServer(id) {
+  return request({
+    url: '/qw/qwIpadServer/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出ipad服务器
+export function exportQwIpadServer(query) {
+  return request({
+    url: '/qw/qwIpadServer/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/qw/qwIpadServerLog.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询ipad服务器日志列表
+export function listQwIpadServerLog(query) {
+  return request({
+    url: '/qw/qwIpadServerLog/ipadServerLogList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询ipad服务器日志详细
+export function getQwIpadServerLog(id) {
+  return request({
+    url: '/qw/qwIpadServerLog/' + id,
+    method: 'get'
+  })
+}
+
+// 新增ipad服务器日志
+export function addQwIpadServerLog(data) {
+  return request({
+    url: '/qw/qwIpadServerLog',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改ipad服务器日志
+export function updateQwIpadServerLog(data) {
+  return request({
+    url: '/qw/qwIpadServerLog',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除ipad服务器日志
+export function delQwIpadServerLog(id) {
+  return request({
+    url: '/qw/qwIpadServerLog/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出ipad服务器日志
+export function exportQwIpadServerLog(query) {
+  return request({
+    url: '/qw/qwIpadServerLog/export',
+    method: 'get',
+    params: query
+  })
+}

+ 53 - 0
src/api/qw/qwIpadServerUser.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询ipad用户列表
+export function listQwIpadServerUser(query) {
+  return request({
+    url: '/qw/qwIpadServerUser/ipadServerUserList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询ipad用户详细
+export function getQwIpadServerUser(id) {
+  return request({
+    url: '/qw/qwIpadServerUser/' + id,
+    method: 'get'
+  })
+}
+
+// 新增ipad用户
+export function addQwIpadServerUser(data) {
+  return request({
+    url: '/qw/qwIpadServerUser',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改ipad用户
+export function updateQwIpadServerUser(data) {
+  return request({
+    url: '/qw/qwIpadServerUser',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除ipad用户
+export function delQwIpadServerUser(id) {
+  return request({
+    url: '/qw/qwIpadServerUser/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出ipad用户
+export function exportQwIpadServerUser(query) {
+  return request({
+    url: '/qw/qwIpadServerUser/export',
+    method: 'get',
+    params: query
+  })
+}

BIN
src/assets/logo/ylrz.png


+ 41 - 5
src/views/course/userCourseComplaintRecord/index.vue

@@ -1,15 +1,36 @@
 <template>
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="用户昵称" prop="nickName">
+      <el-form-item label="用户ID" prop="userId">
         <el-input
-          v-model="queryParams.nickName"
-          placeholder="请输入用户昵称"
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
           clearable
           size="small"
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="投诉类型" prop="complaintTypeName">
+        <el-input
+          v-model="queryParams.complaintTypeName"
+          placeholder="请输入投诉类型"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="创建时间" prop="dateRange">
+        <el-date-picker
+          v-model="dateRange"
+          type="daterange"
+          range-separator="至"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+          value-format="yyyy-MM-dd"
+          style="width: 260px"
+          @change="handleDateRangeChange"
+        />
+      </el-form-item>
       <el-form-item>
         <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -65,6 +86,7 @@
 
     <el-table border v-loading="loading" :data="userCourseComplaintRecordList" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
       <el-table-column label="用户昵称" align="center" prop="nickName" />
       <el-table-column label="投诉类型" align="center" prop="complaintTypeName" />
       <el-table-column label="所属课程" align="center" prop="courseName" />
@@ -189,12 +211,17 @@ export default {
       open: false,
       // 图片列表
       imageList: [],
+      // 日期范围
+      dateRange: [],
       // 查询参数
       queryParams: {
         pageNum: 1,
         pageSize: 10,
-        nickName: null,
-        // userId: null,
+        // nickName: null,
+        userId: null,
+        complaintTypeName: null,
+        startCreateTime: null,
+        endCreateTime: null,
         // complaintTypeId: null,
         // complaintContent: null,
         // courseId: null,
@@ -244,6 +271,15 @@ export default {
       this.imageList = [];
       this.resetForm("form");
     },
+    handleDateRangeChange(dates) {
+      if (dates) {
+        this.queryParams.startCreateTime = dates[0];
+        this.queryParams.endCreateTime = dates[1];
+      } else {
+        this.queryParams.startCreateTime = null;
+        this.queryParams.endCreateTime = null;
+      }
+    },
     /** 搜索按钮操作 */
     handleQuery() {
       this.queryParams.pageNum = 1;

+ 3 - 1
src/views/course/videoResource/index.vue

@@ -1047,10 +1047,12 @@ export default {
     //获取第一帧封面
     async getFirstThumbnail(file, form){
       try {
+        const uniqueFileName = `clipped_${Date.now()}_${Math.random().toString(36).slice(2, 8)}.mp4`;
+
         //截取小文件
         const clippedBlob = await this.clipVideoFirstTwoSeconds(file);
 
-        const clippedFile = new File([clippedBlob], 'clipped_video.mp4', {
+        const clippedFile = new File([clippedBlob], uniqueFileName, {
           type: 'video/mp4',
           lastModified: Date.now()
         });

+ 671 - 118
src/views/his/storeOrder/order1.vue

@@ -2,7 +2,7 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item label="公司名" prop="companyId">
-          <el-select filterable  v-model="queryParams.companyId" placeholder="请选择公司名"  @change="companyChange" clearable size="small">
+          <el-select filterable  v-model="companyIds" placeholder="请选择公司名" multiple @change="companyChange" clearable size="small">
               <el-option
                 v-for="item in companys"
                 :key="item.companyId"
@@ -12,7 +12,7 @@
         </el-select>
       </el-form-item>
 
-     <el-form-item>
+     <el-form-item v-if="deptOpen">
         <treeselect style="width: 220px" :clearable="false"  v-model="queryParams.deptId"  :options="deptOptions" clearable :show-count="true" placeholder="请选择归属部门"  />
      </el-form-item>
      <el-form-item label="会员ID" prop="userId">
@@ -34,14 +34,60 @@
           />
         </el-select>
       </el-form-item>
-      <el-form-item label="订单号" prop="orderCode">
-        <el-input
-          v-model="queryParams.orderCode"
-          placeholder="请输入订单号"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
+      <el-form-item label="订单号" prop="orderCodes">
+        <div class="tag-input-container">
+          <!-- 标签显示区域 -->
+          <div class="tags-wrapper" @click="focusInput">
+            <!-- 已添加的订单号标签 -->
+            <el-tag
+              v-for="(code, index) in queryParams.orderCodes"
+              :key="index"
+              closable
+              size="small"
+              @close="removeOrderCode(index)"
+              class="order-tag"
+              :class="{ 'tag-error': false }"
+            >
+              {{ code }}
+            </el-tag>
+            
+            <!-- 输入框 -->
+            <el-input
+              ref="tagInput"
+              v-model="currentInput"
+              v-show="inputVisible || queryParams.orderCodes.length === 0"
+              :placeholder="queryParams.orderCodes.length === 0 ? '请输入订单号,按回车或逗号分隔' : '继续输入...'"
+              size="small"
+              class="tag-input"
+              @keydown.native="handleKeyDown"
+              @keyup.native="handleKeyUp"
+              @blur="handleInputConfirm"
+              @focus="inputVisible = true"
+              clearable
+            />
+            
+            <!-- 添加按钮(当没有输入时显示) -->
+            <el-button
+              v-if="!inputVisible && queryParams.orderCodes.length > 0"
+              class="button-new-tag"
+              size="small"
+              @click="showInput"
+              icon="el-icon-plus"
+              type="text"
+            >
+              添加订单号
+            </el-button>
+          </div>
+          
+          <!-- 输入提示 -->
+          <div class="input-tips">
+            <span class="tip-text">
+              支持:回车、逗号、空格分隔 | 
+              已添加 {{ queryParams.orderCodes.length }} 个订单号
+              <span v-if="maxOrderCodes > 0"> (最多{{ maxOrderCodes }}个)</span>
+            </span>
+          </div>
+        </div>
       </el-form-item>
       <el-form-item label="快递单号" prop="deliverySn">
         <el-input
@@ -309,7 +355,7 @@
             v-hasPermi="['store:storeOrder:importExpress']"
           >导入银行回单</el-button>
         </el-col>
-        <el-col :span="1.5" v-if="orderStatus == 5"> <!--待推送erp-->
+        <el-col :span="1.5" v-if="SFDFopen && orderStatus == 6"> <!--待推送erp-->
           <el-tooltip content="默认erp推送手机号" placement="top">
             <el-button
               type="warning"
@@ -321,7 +367,7 @@
             >推送手机号码</el-button>
           </el-tooltip>
         </el-col>
-        <el-col :span="1.5" v-if="orderStatus == 5">
+        <el-col :span="1.5" v-if="SFDFopen && orderStatus == 6">
           <el-tooltip content="批量设置erp推送手机号" placement="top">
             <el-button
               type="warning"
@@ -334,19 +380,19 @@
             >设置推送手机</el-button>
           </el-tooltip>
         </el-col>
-        <!-- <el-col :span="1.5" v-if="orderStatus == 5">
-          <el-tooltip content="批量推送erp" placement="top">
+        <el-col :span="1.5" v-if="SFDFopen && orderStatus == 6">
+          <el-tooltip content="批量设置erp账户" placement="top">
             <el-button
               type="warning"
               plain
               icon="el-icon-s-cooperation"
               size="mini"
-              @click="createErpOrder"
+              @click="showErpAccountSetDialog"
               v-hasPermi="['his:storeOrder:createErpOrder']"
-            >创建erp</el-button>
+            >数据分捡</el-button>
           </el-tooltip>
-        </el-col> -->
-        <el-col :span="1.5" v-if="orderStatus == 5">
+        </el-col>
+        <el-col :span="1.5" v-if="SFDFopen && orderStatus == 6">
           <el-tooltip content="批量推送erp" placement="top">
             <el-button
               type="warning"
@@ -364,31 +410,54 @@
         <el-tab-pane label="全部订单" name="10"></el-tab-pane>
         <el-tab-pane v-for="(item,index) in orderOptions" :label="item.dictLabel" :name="item.dictValue"></el-tab-pane>
       </el-tabs>
-      <el-table height="500" v-loading="loading" border :data="orderList" @selection-change="handleSelectionChange" >
+      <el-table ref="orderTable" height="500" v-loading="loading" border :data="orderList" @selection-change="handleSelectionChange"
+        @sort-change="handleSortChange" :default-sort="{prop: 'createTime', order: 'descending'}">
         <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="ERP电话" align="center" prop="erpPhone" v-if="SFDFopen && orderStatus!=null && orderStatus != 1"/>
+        <el-table-column label="ERP账号" align="center" prop="erpAccount" v-if="SFDFopen && orderStatus!=null && orderStatus != 1"/>
         <el-table-column label="处方单编号" align="center" prop="prescribeCode" width="180px"/>
         <el-table-column label="药品订单号" align="center" prop="orderCode" width="180px"/>
         <el-table-column label="所属公司" align="center" prop="companyName" />
-        <el-table-column label="员工" align="center" prop="companyUserName" />
+        <el-table-column label="员工" align="center" prop="companyUserName" sortable="custom" :sort-orders="['ascending', 'descending']">
+          <template slot="header" slot-scope="scope">
+            <span>员工</span>
+            <el-tooltip content="按员工姓名排序" placement="top"/>
+          </template>
+        </el-table-column>
         <el-table-column label="店铺名称" align="center" prop="storeName" />
         <el-table-column label="就诊人" align="center" prop="patientName" />
         <el-table-column label="收货人" align="center" prop="userName" />
-        <el-table-column label="套餐名称" align="center" prop="packageName" />
+        <el-table-column label="套餐名称" align="center" prop="packageName" width="100px" sortable="custom" :sort-orders="['ascending', 'descending']">
+          <template slot="header" slot-scope="scope">
+            <span>套餐名称</span>
+            <el-tooltip content="按套餐名称排序" placement="top"/>
+          </template>
+        </el-table-column>
         <el-table-column label="套餐别名" align="center" prop="packageSecondName" width="100px"/>
-        <el-table-column label="应收金额" align="center" prop="payPrice" />
-        <el-table-column label="实收金额" align="center" prop="payMoney" />
+        <el-table-column label="应收金额" align="center" prop="payPrice" width="100px" sortable="custom" :sort-orders="['ascending', 'descending']">
+          <template slot="header" slot-scope="scope">
+            <span>应收金额</span>
+            <el-tooltip content="按应收金额排序" placement="top"/>
+          </template>
+        </el-table-column>
+        <el-table-column label="实收金额" align="center" prop="payMoney" width="100px" sortable="custom" :sort-orders="['ascending', 'descending']">
+          <template slot="header" slot-scope="scope">
+            <span>实收金额</span>
+            <el-tooltip content="按实收金额排序" placement="top"/>
+          </template>
+        </el-table-column>
         <el-table-column label="支付方式" align="center" prop="payType" >
         <template slot-scope="scope">
                 <dict-tag :options="PayOptions" :value="scope.row.payType"/>
           </template>
         </el-table-column>
           <el-table-column label="下单时间" align="center" prop="createTime" width="180" />
-          <el-table-column label="支付时间" align="center" prop="payTime" width="180" />
-          <el-table-column label="订单状态" align="center" prop="status" >
-            <template slot-scope="scope">
-                  <dict-tag :options="orderOptions" :value="scope.row.status"/>
-            </template>
-          </el-table-column>
+        <el-table-column label="支付时间" align="center" prop="payTime" width="180" />
+        <el-table-column label="订单状态" align="center" prop="status" >
+          <template slot-scope="scope">
+                <dict-tag :options="orderOptions" :value="scope.row.status"/>
+          </template>
+        </el-table-column>
         <el-table-column label="订单来源" align="center" prop="source" >
           <template slot-scope="scope">
             <dict-tag :options="sourceOptions" :value="scope.row.source"/>
@@ -404,7 +473,6 @@
                 <dict-tag :options="deliveryPayStatusOptions" :value="scope.row.deliveryPayStatus"/>
           </template>
         </el-table-column>
-        <el-table-column label="ERP电话" align="center" prop="erpPhone" v-if="orderStatus == 5"/>
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
           <template slot-scope="scope">
               <el-button
@@ -423,6 +491,21 @@
         :limit.sync="queryParams.pageSize"
         @pagination="getList"
       />
+      <!-- 排序状态显示 -->
+      <div v-if="currentSort.prop" class="sort-info">
+        <el-tag size="small" type="info" closable @close="clearSort">
+          <i class="el-icon-sort"></i>
+          当前排序:{{ getSortLabel(currentSort.prop) }} 
+          {{ currentSort.order === 'ascending' ? '升序' : '降序' }}
+        </el-tag>
+          <el-button 
+            type="text" 
+            size="mini" 
+            @click="clearSort"
+            style="margin-left: 8px; color: #909399;"
+          >
+        </el-button>
+      </div>
       <el-drawer
             :with-header="false"
             size="75%"
@@ -576,18 +659,6 @@
               </el-option>
             </el-select>
           </el-form-item>
-          <!-- <el-form-item label="账户信息" v-if="selectedAccountInfo">
-            <div class="account-info">
-              <p><strong>账户名称:</strong>{{ selectedAccountInfo.accountName }}</p>
-              <p><strong>账户编码:</strong>{{ selectedAccountInfo.accountCode }}</p>
-              <p><strong>账户状态:</strong>
-                <el-tag :type="selectedAccountInfo.status === 1 ? 'success' : 'danger'">
-                  {{ selectedAccountInfo.status === 1 ? '正常' : '禁用' }}
-                </el-tag>
-              </p>
-              <p v-if="selectedAccountInfo.description"><strong>描述:</strong>{{ selectedAccountInfo.description }}</p>
-            </div>
-          </el-form-item> -->
         </el-form>
         
         <!-- 订单统计信息 -->
@@ -623,7 +694,7 @@
           @click="confirmCreateErpOrder"
           :disabled="!erpAccountForm.selectedAccount"
           :loading="erpAccountDialog.submitting"
-        >确认推送</el-button>
+        >确认</el-button>
       </div>
     </el-dialog>
   </div>
@@ -631,7 +702,7 @@
 
 <script>
 import { listOrder, getOrder, delOrder, addOrder,importExpressTemplate, updateOrder, exportOrder,importTemplate,exportOrder2,queryErpPhone,
-  saveErpPhone,editErpPhone,batchCreateErpOrder,getErpAccount } from "@/api/his/storeOrder";
+  saveErpPhone,editErpPhone,batchCreateErpOrder,getErpAccount,batchSetErpOrder } from "@/api/his/storeOrder";
 import storeOrderDetails from '../../components/his/storeOrderDetails.vue';
 import { getToken } from "@/utils/auth";
 import {listStore} from "@/api/his/storeProduct";
@@ -657,6 +728,35 @@ export default {
   // },
   data() {
     return {
+      // 新增排序相关数据
+      currentSort: {
+        prop: null,
+        order: null
+      },
+      
+      // 排序字段映射
+      sortFieldMap: {
+        'companyUserName': '员工',
+        'packageName': '套餐名称', 
+        'payPrice': '应收金额',
+        'payMoney': '实收金额',
+        'createTime': '下单时间'
+      },
+      erpSettingType:'set',
+      SFDFopen:false,
+      // 最大订单号数量限制
+      maxOrderCodes: {
+        type: Number,
+        default: 50
+      },
+      // 输入框是否可见
+      inputVisible: false,
+      
+      // 无效订单号对话框
+      showInvalidDialog: false,
+      // 当前输入值
+      currentInput: '',
+      deptOpen:true,
       // ERP账户相关数据
       erpAccountDialog: {
         open: false,
@@ -682,6 +782,7 @@ export default {
       companys:[],
       deptOptions:[],
       companyId:undefined,
+      companyIds:[],
       deptId:undefined,
       actName:"10",
       show:{
@@ -753,6 +854,7 @@ export default {
         pageSize: 10,
         storeId: null,
         orderCode: null,
+        orderCodes: [],
         userId: null,
         userName: null,
         userPhone: null,
@@ -801,7 +903,9 @@ export default {
         companyName:null,
         packageSecondName:null,
         isFirst:null,
-		source:null,
+		    source:null,
+        companyId:null,
+        companyIds:null
       },
       // 表单参数
       form: {},
@@ -827,7 +931,7 @@ export default {
     getCompanyList().then(response => {
         this.companys = response.data;
          if(this.companys!=null&&this.companys.length>0){
-          this.companyId=this.companys[0].companyId;
+          // this.companyId=this.companys[0].companyId;
           this.getTreeselect();
         }
         this.companys.push({companyId:"-1",companyName:"无"})
@@ -888,10 +992,248 @@ export default {
 
   },
   methods: {
+    // 新增排序处理方法
+    handleSortChange({ column, prop, order }) {
+      console.log('排序变化:', { column, prop, order });
+      
+      // 更新当前排序状态
+      this.currentSort = {
+        prop: prop,
+        order: order
+      };
+      
+      // 更新查询参数
+      if (order) {
+        this.queryParams.sortField = prop;
+        this.queryParams.sortOrder = order === 'ascending' ? 'asc' : 'desc';
+      } else {
+        this.queryParams.sortField = null;
+        this.queryParams.sortOrder = null;
+      }
+      
+      // 重新查询数据
+      this.queryParams.pageNum = 1; // 重置到第一页
+      this.getList();
+      
+      // 显示排序提示
+      if (order) {
+        const fieldLabel = this.getSortLabel(prop);
+        const orderLabel = order === 'ascending' ? '升序' : '降序';
+        this.$message.success(`已按${fieldLabel}${orderLabel}排序`);
+      }
+    },
+    
+    // 获取排序字段的中文标签
+    getSortLabel(prop) {
+      return this.sortFieldMap[prop] || prop;
+    },
+    
+    // 清除排序
+    clearSort() {
+      this.currentSort = {
+        prop: null,
+        order: null
+      };
+      this.queryParams.sortField = null;
+      this.queryParams.sortOrder = null;
+      this.queryParams.pageNum = 1;
+      // 重置表格排序状态 - 关键代码
+      this.$nextTick(() => {
+        if (this.$refs.orderTable) {
+          this.$refs.orderTable.clearSort();
+        }
+      });
+      this.getList();
+      this.$message.success('已清除排序');
+    },
+
+    // 修改查询列表方法,添加排序参数
+    getList() {
+      this.loading = true;
+      
+      // 处理多选参数
+      if(this.payTypeArr.length>0){
+        this.queryParams.payType=this.payTypeArr.toString();
+      } else {
+        this.queryParams.payType=null
+      }
+      
+      if(this.scheduleIdArr.length>0){
+        this.queryParams.scheduleId=this.scheduleIdArr.toString();
+      } else {
+        this.queryParams.scheduleId=null
+      }
+      
+      if(this.buyTypeArr.length>0){
+        this.queryParams.orderBuyType=this.buyTypeArr.toString();
+      } else {
+        this.queryParams.orderbuyType=null
+      }
+      
+      if(this.channelArr.length>0){
+        this.queryParams.orderChannel=this.channelArr.toString();
+      } else {
+        this.queryParams.orderChannel=null
+      }
+      
+      if(this.qwSubjectArr.length>0){
+        this.queryParams.qwSubject=this.qwSubjectArr.toString();
+      } else {
+        this.queryParams.qwSubject=null
+      }
+      
+      // 处理公司参数
+      if(this.companyIds && this.companyIds.length>1){
+        this.queryParams.companyIds = this.companyIds
+        this.queryParams.companyId = null;
+        this.queryParams.deptId = null;
+      } else {
+        this.queryParams.companyId = this.companyId
+        this.queryParams.companyIds = null;
+      }
+      
+      // 处理订单号数组
+      if (this.queryParams.orderCodes && this.queryParams.orderCodes.length > 0) {
+        this.queryParams.orderCodeList = this.queryParams.orderCodes.join(',');
+      } else {
+        this.queryParams.orderCodeList = null;
+      }
+      
+      console.log('查询参数:', this.queryParams);
+      
+      listOrder(this.queryParams).then(response => {
+        this.orderList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+        
+        if(response.msg == 'jnmy'){
+          this.SFDFopen = true;
+        } else{
+          this.SFDFopen = false;
+        }
+        
+        // 如果有排序,显示排序结果提示
+        if (this.currentSort.prop) {
+          const fieldLabel = this.getSortLabel(this.currentSort.prop);
+          const orderLabel = this.currentSort.order === 'ascending' ? '升序' : '降序';
+          console.log(`数据已按${fieldLabel}${orderLabel}加载`);
+        }
+      }).catch(error => {
+        console.error('查询失败:', error);
+        this.loading = false;
+        this.$message.error('查询数据失败');
+      });
+    },
+    // 处理键盘按下事件
+    handleKeyDown(event) {
+      const { key, target } = event
+      
+      // 处理退格键删除标签
+      if (key === 'Backspace' && !target.value && this.queryParams.orderCodes.length > 0) {
+        event.preventDefault()
+        this.removeOrderCode(this.queryParams.orderCodes.length - 1)
+      }
+      
+      // 处理分隔符
+      if ([',', ',', ' ', 'Enter'].includes(key)) {
+        event.preventDefault()
+        this.handleInputConfirm()
+      }
+    },
+    
+    // 处理键盘抬起事件(实时分割输入)
+    handleKeyUp(event) {
+      const value = event.target.value
+      
+      // 检查是否包含分隔符
+      if (/[,,\s]/.test(value)) {
+        this.handleInputConfirm()
+      }
+    },
+    
+    // 确认输入
+    handleInputConfirm() {
+      const inputValue = this.currentInput.trim()
+      
+      if (inputValue) {
+        // 分割多个订单号
+        const codes = inputValue.split(/[,,\s]+/).filter(code => code.trim())
+        
+        codes.forEach(code => {
+          this.addOrderCode(code.trim())
+        })
+      }
+      
+      this.currentInput = ''
+    },
+    
+    // 添加订单号
+    addOrderCode(code) {
+      if (!code) return
+      
+      // 检查数量限制
+      if (this.maxOrderCodes > 0 && this.queryParams.orderCodes.length >= this.maxOrderCodes) {
+        this.$message.warning(`最多只能添加 ${this.maxOrderCodes} 个订单号`)
+        return
+      }
+      
+      // 检查重复
+      if (this.queryParams.orderCodes.includes(code)) {
+        this.$message.warning(`订单号 "${code}" 已存在`)
+        return
+      }
+      
+      // 添加到列表
+      this.queryParams.orderCodes.push(code)
+      
+    },
+    
+    // 删除订单号
+    removeOrderCode(index) {
+      this.queryParams.orderCodes.splice(index, 1)
+    },
+    
+    // 清空所有标签
+    clearAllTags() {
+      this.$confirm('确认清空所有订单号吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.queryParams.orderCodes = []
+        this.$message.success('已清空所有订单号')
+      })
+    },
+    // 显示输入框
+    showInput() {
+      this.inputVisible = true
+      this.$nextTick(() => {
+        this.$refs.tagInput.focus()
+      })
+    },
+    // 删除订单号
+    removeOrderCode(index) {
+      this.queryParams.orderCodes.splice(index, 1)
+    },
+    // 聚焦输入框
+    focusInput() {
+      if (!this.inputVisible) {
+        this.showInput()
+      }
+    },
+    // 设置erp账户
+    showErpAccountSetDialog() {
+      this.erpAccountDialog.open = true;
+      this.erpAccountDialog.loading = true;
+      this.erpSettingType = 'set'
+      this.getErpAccountList();
+      this.calculateOrderSummary();
+    },
     // 修改:显示ERP账户选择对话框
     showErpAccountDialog() {
       this.erpAccountDialog.open = true;
       this.erpAccountDialog.loading = true;
+      this.erpSettingType = 'push'
       this.getErpAccountList();
       this.calculateOrderSummary();
     },
@@ -950,24 +1292,92 @@ export default {
         this.$message.warning('请选择ERP账户');
         return;
       }
+      console.log("-----------------",this.erpSettingType)
+      if(this.erpSettingType == 'set'){
+        this.$confirm(
+          `确认将订单设置ERP账户为"${this.erpAccountForm.selectedAccount}"吗?`, 
+          '确认', 
+          {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }
+        ).then(() => {
+          this.executSetErpOrder();
+        });
+      } else if(this.erpSettingType == 'push'){
+        this.$confirm(
+          `确认将订单推送到ERP账户"${this.erpAccountForm.selectedAccount}"吗?`, 
+          '确认推送', 
+          {
+            confirmButtonText: '确定推送',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }
+        ).then(() => {
+          this.executeCreateErpOrder();
+        });
+      }
       
-      // const selectedAccount = this.selectedAccountInfo;
-      // if (selectedAccount.status !== 1) {
-      //   this.$message.error('选中的ERP账户状态异常,无法推送');
-      //   return;
-      // }
+    },
+
+    async executSetErpOrder() {
+      this.erpAccountDialog.submitting = true;
       
-      this.$confirm(
-        `确认将订单推送到ERP账户"${this.erpAccountForm.selectedAccount}"吗?`, 
-        '确认推送', 
-        {
-          confirmButtonText: '确定推送',
-          cancelButtonText: '取消',
-          type: 'warning'
+      try {
+        let param = {
+          loginAccount: this.erpAccountForm.selectedAccount
+        };
+        
+        if (this.ids.length > 0) {
+          // 如果有选中的订单,只推送选中的
+          param.orderIds = this.ids;
+        } else {
+          // 如果没有选中订单,推送查询条件下的所有订单
+          if (this.payTypeArr.length > 0) {
+            this.queryParams.payType = this.payTypeArr.toString();
+          } else {
+            this.queryParams.payType = null;
+          }
+          if (this.scheduleIdArr.length > 0) {
+            this.queryParams.scheduleId = this.scheduleIdArr.toString();
+          } else {
+            this.queryParams.scheduleId = null;
+          }
+          if (this.buyTypeArr.length > 0) {
+            this.queryParams.orderBuyType = this.buyTypeArr.toString();
+          } else {
+            this.queryParams.orderBuyType = null;
+          }
+          if (this.channelArr.length > 0) {
+            this.queryParams.orderChannel = this.channelArr.toString();
+          } else {
+            this.queryParams.orderChannel = null;
+          }
+          if (this.qwSubjectArr.length > 0) {
+            this.queryParams.qwSubject = this.qwSubjectArr.toString();
+          } else {
+            this.queryParams.qwSubject = null;
+          }
+          
+          // 合并查询参数
+          param = { ...param, ...this.queryParams };
         }
-      ).then(() => {
-        this.executeCreateErpOrder();
-      });
+        
+        const response = await batchSetErpOrder(param);
+        if (response.code === 200) {
+          this.$message.success('订单ERP账号设置成功');
+          this.cancelErpAccountDialog();
+          this.getList(); // 刷新列表
+        } else {
+          this.$message.error(response.msg || 'ERP账号设置失败');
+        }
+      } catch (error) {
+        console.error('ERP账号设置失败:', error);
+        this.$message.error('ERP账号设置失败');
+      } finally {
+        this.erpAccountDialog.submitting = false;
+      }
     },
     
     //执行创建ERP订单
@@ -1037,57 +1447,6 @@ export default {
       this.orderSummary = null;
       this.erpAccountList = [];
     },
-    createErpOrder(){
-      this.$confirm('确认创建erp?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
-        type: 'warning'
-      }).then(() => {
-        let param = {};
-        if(this.ids.length>0){
-          param = {orderIds:this.ids};
-        } else {
-          if(this.payTypeArr.length>0){
-            this.queryParams.payType=this.payTypeArr.toString();
-          }
-          else{
-            this.queryParams.payType=null
-          }
-          if(this.scheduleIdArr.length>0){
-            this.queryParams.scheduleId=this.scheduleIdArr.toString();
-          }
-          else{
-            this.queryParams.scheduleId=null
-          }
-          if(this.buyTypeArr.length>0){
-            this.queryParams.orderBuyType=this.buyTypeArr.toString();
-          }
-          else{
-            this.queryParams.orderbuyType=null
-          }
-          if(this.channelArr.length>0){
-            this.queryParams.orderChannel=this.channelArr.toString();
-          }
-          else{
-            this.queryParams.orderChannel=null
-          }
-          if(this.qwSubjectArr.length>0){
-            this.queryParams.qwSubject=this.qwSubjectArr.toString();
-          }
-          else{
-            this.queryParams.qwSubject=null
-          }
-          param = this.queryParams;
-        }
-        batchCreateErpOrder(param).then(response=>{
-          if(response.code == 200){
-            this.$message.success('创建成功');
-            this.getList();
-          }
-        })
-        
-      });
-    },
     handleCancelErpPhone(){
       this.erpPhoneValue = [];
       this.setPhoneOpen = false;
@@ -1369,10 +1728,23 @@ export default {
       else{
         this.queryParams.qwSubject=null
       }
+      if(this.companyIds && this.companyIds.length>1){
+        this.queryParams.companyIds = this.companyIds
+        this.queryParams.companyId = null;
+        this.queryParams.deptId = null;
+      } else {
+        this.queryParams.companyId = this.companyId
+        this.queryParams.companyIds = null;
+      }
       listOrder(this.queryParams).then(response => {
         this.orderList = response.rows;
         this.total = response.total;
         this.loading = false;
+        if(response.msg == 'jnmy'){
+          this.SFDFopen = true;
+        } else{
+          this.SFDFopen = false;
+        }
       });
 
     },
@@ -1493,10 +1865,10 @@ export default {
     /** 重置按钮操作 */
     resetQuery() {
       this.resetForm("queryForm");
-       this.createTime=null;
+      this.createTime=null;
       this.queryParams.sTime=null;
       this.queryParams.eTime=null;
-       this.payTime=null;
+      this.payTime=null;
       this.queryParams.paysTime=null;
       this.queryParams.payeTime=null;
       this.queryParams.deliveryImportTime = null;
@@ -1507,6 +1879,28 @@ export default {
       this.queryParams.deliverySendeTime = null;
       this.queryParams.tuisTIme = null;
       this.queryParams.tuieTIme = null;
+      this.companyIds = null;
+      this.companyId = null;
+       // 清除排序
+       this.currentSort = {
+        prop: null,
+        order: null
+      };
+      this.queryParams.sortField = null;
+      this.queryParams.sortOrder = null;
+      
+      // 清除订单号标签
+      this.queryParams.orderCodes = [];
+      this.currentInput = '';
+      this.inputVisible = false;
+
+       // 重置表格排序状态 - 关键代码
+       this.$nextTick(() => {
+        if (this.$refs.orderTable) {
+          this.$refs.orderTable.clearSort();
+        }
+      });
+      
       this.handleQuery();
     },
     // 多选框选中数据
@@ -1700,10 +2094,23 @@ export default {
       });
     },
      companyChange(val){
-      console.log(val);
-      this.companyId=val;
-      this.getTreeselect();
+      console.log(this.companyIds);
+      if(this.companyIds.length>1){
+        this.deptOpen = false;
+      } else {
+        this.deptOpen = true
+        if(this.companyIds.length=1){
+          this.companyId=this.companyIds[0];
+          this.getTreeselect();
+        }
+      }
+      
     },
+    // companyChange(val){
+    //   console.log(val);
+    //   this.companyId=val;
+    //   this.getTreeselect();
+    // },
      currDeptChange(val){
           console.log(val)
           this.queryParams.deptId=val;
@@ -1711,4 +2118,150 @@ export default {
     },
   }
 };
-</script>
+</script>
+<style scoped>
+.tag-input-order-search {
+  padding: 20px;
+  background: #fff;
+  border-radius: 4px;
+}
+
+.tag-input-container {
+  min-width: 445px;
+}
+
+.tags-wrapper {
+  min-height: 32px;
+  padding: 4px 8px;
+  border: 1px solid #dcdfe6;
+  border-radius: 4px;
+  cursor: text;
+  display: flex;
+  flex-wrap: wrap;
+  align-items: center;
+  gap: 4px;
+  transition: border-color 0.2s;
+}
+
+.tags-wrapper:hover {
+  border-color: #c0c4cc;
+}
+
+.tags-wrapper:focus-within {
+  border-color: #409eff;
+  box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2);
+}
+
+.order-tag {
+  margin: 2px;
+  flex-shrink: 0;
+}
+
+.tag-error {
+  background-color: #fef0f0;
+  border-color: #fbc4c4;
+  color: #f56c6c;
+}
+
+.tag-input {
+  border: none;
+  outline: none;
+  flex: 1;
+  min-width: 120px;
+}
+
+.tag-input >>> .el-input__inner {
+  border: none;
+  padding: 0;
+  height: 24px;
+  line-height: 24px;
+}
+
+.button-new-tag {
+  height: 24px;
+  line-height: 22px;
+  padding: 0 8px;
+  margin: 2px;
+}
+
+.input-tips {
+  margin-top: 4px;
+  font-size: 12px;
+  color: #909399;
+}
+
+/* 新增排序相关样式 */
+.sort-info {
+  margin-top: 10px;
+  padding: 8px 0;
+}
+
+
+.tip-text {
+  display: flex;
+  align-items: center;
+  gap: 8px;
+}
+
+.quick-actions {
+  margin-top: 12px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 8px 0;
+  border-top: 1px solid #ebeef5;
+}
+
+.stats-info {
+  font-size: 12px;
+  color: #909399;
+  display: flex;
+  align-items: center;
+  gap: 4px;
+}
+
+.invalid-codes-list {
+  margin: 16px 0;
+  max-height: 200px;
+  overflow-y: auto;
+}
+
+.invalid-tag {
+  margin: 4px;
+}
+
+.debug-preview {
+  margin-top: 20px;
+}
+
+.debug-content {
+  font-size: 12px;
+}
+
+.debug-content code {
+  display: block;
+  background: #f5f5f5;
+  padding: 8px;
+  border-radius: 4px;
+  margin: 4px 0 12px 0;
+  white-space: pre-wrap;
+}
+
+/* 响应式设计 */
+@media (max-width: 768px) {
+  .tag-input-container {
+    min-width: auto;
+    width: 100%;
+  }
+  
+  .tags-wrapper {
+    min-height: 40px;
+  }
+  
+  .quick-actions {
+    flex-direction: column;
+    align-items: flex-start;
+    gap: 8px;
+  }
+}
+</style>

+ 5 - 5
src/views/his/user/userBehavior.vue

@@ -13,9 +13,9 @@
         >
           <el-option
             v-for="item in typeList"
-            :key="item.dictValue"
-            :label="item.dictLabel"
-            :value="item.dictLabel"
+            :key="item"
+            :label="item"
+            :value="item"
           ></el-option>
         </el-select>
       </div>
@@ -143,7 +143,7 @@
 </template>
 
 <script>
-import { listUserOperationLog} from "@/api/his/userOperationLog";
+import { listUserOperationLog,getOperationType} from "@/api/his/userOperationLog";
 
 export default {
   data() {
@@ -163,7 +163,7 @@ export default {
     };
   },
   created() {
-    this.getDicts("fs_user_operation_type").then(response => {
+    getOperationType().then(response => {
       this.typeList = response.data;
     });
   },

+ 358 - 0
src/views/qw/qwIpadServer/index.vue

@@ -0,0 +1,358 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="标题" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入标题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="地址" prop="addressId">
+        <el-input
+          v-model="queryParams.addressId"
+          placeholder="请输入地址"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="ip" prop="ip">
+        <el-input
+          v-model="queryParams.ip"
+          placeholder="请输入ip"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <!-- <el-form-item label="地址" prop="port">
+        <el-input
+          v-model="queryParams.port"
+          placeholder="请输入地址"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item> -->
+      <el-form-item label="url" prop="url">
+        <el-input
+          v-model="queryParams.url"
+          placeholder="请输入url"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <!-- <el-form-item label="总数" prop="totalCount">
+        <el-input
+          v-model="queryParams.totalCount"
+          placeholder="请输入总数"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="剩余数量" prop="count">
+        <el-input
+          v-model="queryParams.count"
+          placeholder="请输入剩余数量"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item> -->
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['qw:qwIpadServer:add']"
+        >新增</el-button>
+      </el-col>
+      <!-- <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['qw:qwIpadServer:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['qw:qwIpadServer:remove']"
+        >删除</el-button>
+      </el-col> -->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['qw:qwIpadServer:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="qwIpadServerList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column width="100px" label="id" align="center" prop="id" />
+      <el-table-column label="标题" align="center" prop="title" />
+      <el-table-column label="地址" align="center" prop="addressId" />
+      <el-table-column label="ip" align="center" prop="ip" />
+      <el-table-column width="100px" label="端口" align="center" prop="port" />
+      <el-table-column label="url" align="center" prop="url" />
+      <el-table-column label="总数" align="center" prop="totalCount" />
+      <el-table-column label="剩余数量" align="center" prop="count" />
+      <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['qw:qwIpadServer:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['qw:qwIpadServer:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column> -->
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改ipad服务器对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入标题" />
+        </el-form-item>
+        <el-form-item label="地址" prop="addressId">
+          <el-input v-model="form.addressId" placeholder="请输入地址" />
+        </el-form-item>
+        <el-form-item label="ip" prop="ip">
+          <el-input v-model="form.ip" placeholder="请输入ip" />
+        </el-form-item>
+        <el-form-item label="端口" prop="port">
+          <el-input v-model="form.port" placeholder="请输入地址" />
+        </el-form-item>
+        <el-form-item label="url" prop="url">
+          <el-input v-model="form.url" placeholder="请输入url" />
+        </el-form-item>
+        <el-form-item label="总数" prop="totalCount">
+          <el-input v-model="form.totalCount" placeholder="请输入总数" />
+        </el-form-item>
+        <el-form-item label="剩余数量" prop="count">
+          <el-input v-model="form.count" placeholder="请输入剩余数量" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listQwIpadServer, getQwIpadServer, delQwIpadServer, addQwIpadServer, updateQwIpadServer, exportQwIpadServer } from "@/api/qw/qwIpadServer";
+
+export default {
+  name: "QwIpadServer",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // ipad服务器表格数据
+      qwIpadServerList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: null,
+        addressId: null,
+        ip: null,
+        port: null,
+        url: null,
+        totalCount: null,
+        count: null,
+        groupNo: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询ipad服务器列表 */
+    getList() {
+      this.loading = true;
+      listQwIpadServer(this.queryParams).then(response => {
+        this.qwIpadServerList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        title: null,
+        addressId: null,
+        ip: null,
+        port: null,
+        url: null,
+        totalCount: null,
+        count: null,
+        createTime: null,
+        updateTime: null,
+        groupNo: null,
+        createBy: null,
+        updateBy: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加ipad服务器";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getQwIpadServer(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改ipad服务器";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateQwIpadServer(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addQwIpadServer(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除ipad服务器编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delQwIpadServer(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有ipad服务器数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportQwIpadServer(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>

+ 342 - 0
src/views/qw/qwIpadServerLog/index.vue

@@ -0,0 +1,342 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="服务器" prop="serverName">
+        <el-input
+          v-model="queryParams.serverName"
+          placeholder="请输入服务器"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="企微用户" prop="qwUserName">
+        <el-input
+          v-model="queryParams.qwUserName"
+          placeholder="请输入企微用户"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司" prop="companyName">
+        <el-input
+          v-model="queryParams.companyName"
+          placeholder="请输入公司"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司用户" prop="companyUserName">
+        <el-input
+          v-model="queryParams.companyUserName"
+          placeholder="请输入公司用户"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <!-- <el-form-item label="标题" prop="tilie">
+        <el-input
+          v-model="queryParams.tilie"
+          placeholder="请输入标题"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item> -->
+      <el-form-item label="类别" prop="type">
+        <el-select v-model="queryParams.type" placeholder="请选择类别" clearable size="small">
+          <el-option label="绑定" value="1" />
+          <el-option label="解绑" value="2" />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['qw:qwIpadServerLog:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['qw:qwIpadServerLog:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['qw:qwIpadServerLog:remove']"
+        >删除</el-button>
+      </el-col> -->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['qw:qwIpadServerLog:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="qwIpadServerLogList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="服务器" align="center" prop="serverName" />
+      <el-table-column label="企微用户" align="center" prop="qwUserName" />
+      <el-table-column label="公司" align="center" prop="companyName" />
+      <el-table-column label="公司用户" align="center" prop="companyUserName" />
+      <el-table-column label="标题" align="center" prop="tilie" />
+      <el-table-column label="类别" align="center" prop="type" >
+        <template slot-scope="scope">
+          <el-tag v-if="scope.row.type == 1" type="success">绑定</el-tag>
+          <el-tag v-if="scope.row.type == 2" type="danger">解绑</el-tag>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['qw:qwIpadServerLog:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['qw:qwIpadServerLog:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column> -->
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改ipad服务器日志对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="服务器id" prop="serverId">
+          <el-input v-model="form.serverId" placeholder="请输入服务器id" />
+        </el-form-item>
+        <el-form-item label="企微用户" prop="qwUserId">
+          <el-input v-model="form.qwUserId" placeholder="请输入企微用户" />
+        </el-form-item>
+        <el-form-item label="公司id" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入公司id" />
+        </el-form-item>
+        <el-form-item label="公司用户id" prop="companyUserId">
+          <el-input v-model="form.companyUserId" placeholder="请输入公司用户id" />
+        </el-form-item>
+        <el-form-item label="标题" prop="tilie">
+          <el-input v-model="form.tilie" placeholder="请输入标题" />
+        </el-form-item>
+        <el-form-item label="类别 1 绑定 2 解绑" prop="type">
+          <el-select v-model="form.type" placeholder="请选择类别 1 绑定 2 解绑">
+            <el-option label="请选择字典生成" value="" />
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listQwIpadServerLog, getQwIpadServerLog, delQwIpadServerLog, addQwIpadServerLog, updateQwIpadServerLog, exportQwIpadServerLog } from "@/api/qw/qwIpadServerLog";
+
+export default {
+  name: "QwIpadServerLog",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // ipad服务器日志表格数据
+      qwIpadServerLogList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        serverName: null,
+        qwUserName: null,
+        companyName: null,
+        companyUserName: null,
+        tilie: null,
+        type: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询ipad服务器日志列表 */
+    getList() {
+      this.loading = true;
+      listQwIpadServerLog(this.queryParams).then(response => {
+        this.qwIpadServerLogList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        serverName: null,
+        qwUserName: null,
+        companyName: null,
+        companyUserName: null,
+        tilie: null,
+        type: null,
+        createTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加ipad服务器日志";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getQwIpadServerLog(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改ipad服务器日志";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateQwIpadServerLog(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addQwIpadServerLog(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除ipad服务器日志编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delQwIpadServerLog(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有ipad服务器日志数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportQwIpadServerLog(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>

+ 308 - 0
src/views/qw/qwIpadServerUser/index.vue

@@ -0,0 +1,308 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="服务器" prop="serverName">
+        <el-input
+          v-model="queryParams.serverName"
+          placeholder="请输入服务器"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="企微用户" prop="qwUserName">
+        <el-input
+          v-model="queryParams.qwUserName"
+          placeholder="请输入企微用户"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司" prop="companyName">
+        <el-input
+          v-model="queryParams.companyName"
+          placeholder="请输入公司"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="公司用户" prop="companyUserName">
+        <el-input
+          v-model="queryParams.companyUserName"
+          placeholder="请输入公司用户"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['qw:qwIpadServerUser:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['qw:qwIpadServerUser:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['qw:qwIpadServerUser:remove']"
+        >删除</el-button>
+      </el-col> -->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+          v-hasPermi="['qw:qwIpadServerUser:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table border v-loading="loading" :data="qwIpadServerUserList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="服务器" align="center" prop="serverName" />
+      <el-table-column label="企微用户" align="center" prop="qwUserName" />
+      <el-table-column label="公司" align="center" prop="companyName" />
+      <el-table-column label="公司用户" align="center" prop="companyUserName" />
+      <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['qw:qwIpadServerUser:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['qw:qwIpadServerUser:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column> -->
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改ipad用户对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="服务器id" prop="serverId">
+          <el-input v-model="form.serverId" placeholder="请输入服务器id" />
+        </el-form-item>
+        <el-form-item label="企微用户id" prop="qwUserId">
+          <el-input v-model="form.qwUserId" placeholder="请输入企微用户id" />
+        </el-form-item>
+        <el-form-item label="公司id" prop="companyId">
+          <el-input v-model="form.companyId" placeholder="请输入公司id" />
+        </el-form-item>
+        <el-form-item label="公司用户id" prop="companyUserId">
+          <el-input v-model="form.companyUserId" placeholder="请输入公司用户id" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listQwIpadServerUser, getQwIpadServerUser, delQwIpadServerUser, addQwIpadServerUser, updateQwIpadServerUser, exportQwIpadServerUser } from "@/api/qw/qwIpadServerUser";
+
+export default {
+  name: "QwIpadServerUser",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // ipad用户表格数据
+      qwIpadServerUserList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        serverName: null,
+        qwUserName: null,
+        companyName: null,
+        companyUserName: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询ipad用户列表 */
+    getList() {
+      this.loading = true;
+      listQwIpadServerUser(this.queryParams).then(response => {
+        this.qwIpadServerUserList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        serverName: null,
+        qwUserName: null,
+        companyName: null,
+        companyUserName: null,
+        createTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加ipad用户";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getQwIpadServerUser(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改ipad用户";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateQwIpadServerUser(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addQwIpadServerUser(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除ipad用户编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delQwIpadServerUser(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有ipad用户数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportQwIpadServerUser(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>

+ 86 - 9
src/views/system/config/config.vue

@@ -721,6 +721,7 @@
         <el-radio v-model="form13.erpType" label=2>旺店通</el-radio>
         <el-radio v-model="form13.erpType" label=3>瀚智OMS</el-radio>
         <el-radio v-model="form13.erpType" label=4>代服管家</el-radio>
+        <el-radio v-model="form13.erpType" label=5>聚水潭</el-radio>
       </el-form-item>
       <el-form-item   label="erpAppKey" v-if="form13.erpOpen == 1 && form13.erpType == 1 " prop="erpAppKey">
           <el-input   v-model="form13.erpAppKey"  label="请输入erpAppKey"></el-input>
@@ -771,26 +772,26 @@
       <el-form-item   label="erpHzOMBaseUrl" v-if="form13.erpOpen == 1 && form13.erpType == 3 " prop="erpHzOMBaseUrl">
         <el-input   v-model="form13.erpHzOMBaseUrl"  label="请输入erpHzOMBaseUrl"></el-input>
       </el-form-item>
-       
+
       <!-- 代付管家 - 修改为支持多账户 -->
       <div v-if="form13.erpOpen == 1 && form13.erpType == 4">
         <el-form-item label="代付管家账户配置">
           <el-button type="primary" icon="el-icon-plus" @click="addDfAccount" style="margin-bottom: 10px;">添加新账号</el-button>
         </el-form-item>
-        
+
         <div v-for="(account, index) in form13.dfAccounts" :key="index" style="border: 1px solid #dcdfe6; padding: 20px; margin-bottom: 20px; border-radius: 4px;">
           <div style="display: flex; justify-content: between; align-items: center; margin-bottom: 15px;">
             <div style="margin: 0; color: #409eff;">账户 {{ index + 1 }}</div>
-            <el-button 
-              type="danger" 
-              icon="el-icon-delete" 
-              size="mini" 
+            <el-button
+              type="danger"
+              icon="el-icon-delete"
+              size="mini"
               @click="removeDfAccount(index)"
               v-if="form13.dfAccounts.length > 1">
               删除账户
             </el-button>
           </div>
-          
+
           <el-form-item label="dfAppKey" :prop="`dfAccounts.${index}.dfAppKey`">
             <el-input v-model="account.dfAppKey" placeholder="请输入dfAppKey"></el-input>
           </el-form-item>
@@ -806,6 +807,9 @@
           <el-form-item label="月结账号" :prop="`dfAccounts.${index}.monthlyCard`">
             <el-input v-model="account.monthlyCard" placeholder="月结账号"></el-input>
           </el-form-item>
+          <el-form-item label="物流产品编码" :prop="`dfAccounts.${index}.expressProductCode`">
+            <el-input v-model="account.expressProductCode" placeholder="物流产品编码:1-顺丰标快,2-顺丰标快(陆运),204-陆运微小件,231-陆运包裹,208-特惠专配,247-电商标快"></el-input>
+          </el-form-item>
           <el-form-item label="寄件人姓名" :prop="`dfAccounts.${index}.senderName`">
             <el-input v-model="account.senderName" placeholder="寄件人姓名"></el-input>
           </el-form-item>
@@ -825,7 +829,64 @@
           </el-form-item>
         </div>
       </div>
-            
+
+
+          <el-form-item   label="erpWdAppKey" v-if="form13.erpOpen == 1 && form13.erpType == 2 " prop="erpWdAppKey">
+            <el-input   v-model="form13.erpWdAppKey"  label="请输入erpAppKey"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpWdAppsecret" v-if="form13.erpOpen == 1 && form13.erpType == 2 " prop="erpWdAppsecret">
+            <el-input   v-model="form13.erpWdAppsecret"  label="erpWdAppsecret"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpWdSid" v-if="form13.erpOpen == 1 && form13.erpType == 2 " prop="erpWdSid">
+            <el-input   v-model="form13.erpWdSid"  label="请输入erpWdSid"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpWdShopCode" v-if="form13.erpOpen == 1 && form13.erpType == 2 " prop="erpWdShopCode">
+            <el-input   v-model="form13.erpWdShopCode"  label="请输入erpWdShopCode"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpWdBaseUrl" v-if="form13.erpOpen == 1 && form13.erpType == 2 " prop="erpWdBaseUrl">
+            <el-input   v-model="form13.erpWdBaseUrl"  label="请输入erpWdBaseUrl"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpWarehouseCode" v-if="form13.erpOpen == 1 && form13.erpType == 2 " prop="erpWarehouseCode">
+            <el-input   v-model="form13.erpWarehouseCode"  label="请输入erpWarehouseCode"></el-input>
+          </el-form-item>
+
+          <el-form-item   label="erpHzOMSAppKey" v-if="form13.erpOpen == 1 && form13.erpType == 3 " prop="erpHzOMSAppKey">
+            <el-input   v-model="form13.erpHzOMSAppKey"  label="请输入erpAppKey"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpHzOMSAppsecret" v-if="form13.erpOpen == 1 && form13.erpType == 3 " prop="erpHzOMSAppsecret">
+            <el-input   v-model="form13.erpHzOMSAppsecret"  label="erpWdAppsecret"></el-input>
+          </el-form-item>
+          <!-- erpHzOMSid -->
+          <el-form-item   label="erpHzOMSItenantid" v-if="form13.erpOpen == 1 && form13.erpType == 3 " prop="erpHzOMSItenantid">
+            <el-input   v-model="form13.erpHzOMSItenantid"  label="请输入erpHzOMSItenantid"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpHzOMTokenUrl" v-if="form13.erpOpen == 1 && form13.erpType == 3 " prop="erpHzOMTokenUrl">
+            <el-input   v-model="form13.erpHzOMTokenUrl"  label="请输入erpHzOMTokenUrl"></el-input>
+          </el-form-item>
+          <el-form-item   label="erpHzOMBaseUrl" v-if="form13.erpOpen == 1 && form13.erpType == 3 " prop="erpHzOMBaseUrl">
+            <el-input   v-model="form13.erpHzOMBaseUrl"  label="请输入erpHzOMBaseUrl"></el-input>
+          </el-form-item>
+
+       <el-form-item   label="erpJstAppKey" v-if="form13.erpOpen == 1 && form13.erpType == 5 " prop="erpJstAppKey">
+         <el-input   v-model="form13.erpJstAppKey"  label="请输入erpJstAppKey"></el-input>
+       </el-form-item>
+       <el-form-item   label="erpJstAppsecret" v-if="form13.erpOpen == 1 && form13.erpType == 5 " prop="erpJstAppsecret">
+         <el-input   v-model="form13.erpJstAppsecret"  label="erpJstAppsecret"></el-input>
+       </el-form-item>
+       <el-form-item   label="erpJstSid" v-if="form13.erpOpen == 1 && form13.erpType == 5 " prop="erpJstSid">
+         <el-input   v-model="form13.erpJstSid"  label="请输入erpJstSid"></el-input>
+       </el-form-item>
+       <el-form-item   label="erpJstShopCode" v-if="form13.erpOpen == 1 && form13.erpType == 5 " prop="erpJstShopCode">
+         <el-input   v-model="form13.erpJstShopCode"  label="请输入erpJstShopCode"></el-input>
+       </el-form-item>
+       <el-form-item   label="erpJstBaseUrl" v-if="form13.erpOpen == 1 && form13.erpType == 5 " prop="erpJstBaseUrl">
+         <el-input   v-model="form13.erpJstBaseUrl"  label="请输入erpJstBaseUrl"></el-input>
+       </el-form-item>
+       <el-form-item   label="erpJstrehouseCode" v-if="form13.erpOpen == 1 && form13.erpType == 5 " prop="erpJstrehouseCode">
+         <el-input   v-model="form13.erpJstrehouseCode"  label="请输入erpJstrehouseCode"></el-input>
+       </el-form-item>
+
+
       <el-form-item   label="appid" prop="appid">
           <el-input   v-model="form13.appid"  label="请输入appid"></el-input>
       </el-form-item>
@@ -1139,6 +1200,21 @@
              </el-tooltip>
            </el-form-item>
 
+           <el-form-item label="授权方式">
+             <el-tooltip class="item" effect="dark" content="小程序授权头像昵称方式(目前仅会员看课有效)" placement="top-end">
+               <el-radio-group v-model="form18.miniAppAuthType">
+                 <el-radio label="1">小程序原生</el-radio>
+                 <el-radio label="2">跳转H5服务号</el-radio>
+               </el-radio-group>
+             </el-tooltip>
+           </el-form-item>
+
+           <el-form-item v-if="form18.miniAppAuthType==2" label="跳转域名">
+             <el-tooltip class="item" effect="dark" content="会员看课小程序授权头像昵称,跳转H5服务号授权域名" placement="top-end">
+               <el-input style="width: 200px"  v-model="form18.userCourseAuthDomain" label="跳转域名"></el-input>
+             </el-tooltip>
+           </el-form-item>
+
            <div class="line"></div>
            <div style="float:right;margin-right:20px">
              <el-button type="primary" @click="submitForm18">提交</el-button>
@@ -1587,6 +1663,7 @@ export default {
         loginAccount: '',
         callBackUrl: '',
         monthlyCard: '',
+        expressProductCode:'',
         senderName: '',
         senderPhone: '',
         cityIds: '',
@@ -1907,7 +1984,7 @@ export default {
   },
   submitForm13(){
     const accounts =  this.form13.dfAccounts
-    
+
     console.log(accounts)
     var param={configId:this.configId,configValue:JSON.stringify(this.form13)}
     updateConfigByKey(param).then(response => {