瀏覽代碼

Merge remote-tracking branch 'origin/master'

yjwang 2 天之前
父節點
當前提交
4b59428275

+ 2 - 0
package.json

@@ -28,6 +28,8 @@
     "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",
     "preview": "node build/index.js --preview",
     "lint": "eslint --ext .js,.vue src"
   },

+ 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',

+ 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
+  })
+}

+ 699 - 125
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
@@ -261,6 +307,25 @@
       <el-form-item label="入账时间" prop="tuiMoneyTime">
             <el-date-picker v-model="tuiMoneyTime" size="small" style="width: 220px" value-format="yyyy-MM-dd" type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" @change="changeTime"></el-date-picker>
       </el-form-item>
+      <el-form-item label="ERP账户" prop="erpAccount" v-if="SFDFopen">
+        <el-select v-model="queryParams.erpAccount" placeholder="ERP账户" clearable size="small">
+          <el-option
+            v-for="dict in erpAccountList"
+            :key="dict"
+            :label="dict"
+            :value="dict"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="ERP电话" prop="erpPhoneNumber" v-if="SFDFopen">
+        <el-input
+          v-model="queryParams.erpPhoneNumber"
+          placeholder="ERP电话"
+          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>
@@ -309,7 +374,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 +386,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 +399,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 +429,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 +492,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 +510,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 +678,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 +713,7 @@
           @click="confirmCreateErpOrder"
           :disabled="!erpAccountForm.selectedAccount"
           :loading="erpAccountDialog.submitting"
-        >确认推送</el-button>
+        >确认</el-button>
       </div>
     </el-dialog>
   </div>
@@ -631,7 +721,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 +747,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 +801,7 @@ export default {
       companys:[],
       deptOptions:[],
       companyId:undefined,
+      companyIds:[],
       deptId:undefined,
       actName:"10",
       show:{
@@ -753,6 +873,7 @@ export default {
         pageSize: 10,
         storeId: null,
         orderCode: null,
+        orderCodes: [],
         userId: null,
         userName: null,
         userPhone: null,
@@ -801,7 +922,9 @@ export default {
         companyName:null,
         packageSecondName:null,
         isFirst:null,
-		source:null,
+		    source:null,
+        companyId:null,
+        companyIds:null
       },
       // 表单参数
       form: {},
@@ -827,7 +950,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:"无"})
@@ -847,9 +970,9 @@ export default {
     this.getDicts("sys_store_pay_type").then(response => {
         this.PayOptions = response.data;
     });
-	this.getDicts("sys_order_source").then(response => {
-	  this.sourceOptions = response.data;
-	});
+    this.getDicts("sys_order_source").then(response => {
+      this.sourceOptions = response.data;
+    });
     this.getDicts("sys_store_order_type").then(response => {
         this.orderTypeOptions = response.data;
     });
@@ -884,22 +1007,262 @@ export default {
     this.getDicts("sys_store_order_delivery_status").then(response => {
           this.deliveryStatusOptions = response.data;
     });
-
+    this.getErpAccountList();
 
   },
   methods: {
-    // 修改:显示ERP账户选择对话框
+    // 新增排序处理方法
+    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.getErpAccountList();
+      this.erpSettingType = 'push'
+      // this.getErpAccountList();
       this.calculateOrderSummary();
     },
     
-    // 新增:获取ERP账户列表
+    //获取ERP账户列表
     async getErpAccountList() {
+    // getErpAccountList() {  
       try {
         const response = await getErpAccount();
+        // const response = getErpAccount();
         if (response.code === 200) {
           this.erpAccountList = response.data || [];
         } else {
@@ -950,24 +1313,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 +1468,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 +1749,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 +1886,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 +1900,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 +2115,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 +2139,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 - 2
src/views/his/storeProductCategory/index.vue

@@ -268,8 +268,11 @@ export default {
     },
     handleAvatarSuccess(res, file) {
         if(res.code==200){
-          this.form.imgUrl=res.url;
-          self.$forceUpdate()
+          // this.form.imgUrl=res.url;
+          
+          this.form.pic=res.url;
+         
+          this.$forceUpdate()
         }
         else{
           this.msgError(res.msg);

+ 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>

+ 7 - 0
src/views/system/config/config.vue

@@ -1187,6 +1187,13 @@
     </el-input>
   </el-tooltip>
 </el-form-item>
+ <el-form-item label="是否允许用户暂停" prop="isAllowUserPause" label-width="120">
+          <el-switch
+            v-model="form18.isAllowUserPause"
+            active-color="#13ce66"
+            inactive-color="#ff4949">
+          </el-switch>
+        </el-form-item>
            <el-form-item label="可查看评论条数" v-if="false">
              <el-tooltip class="item" effect="dark" content="在评论区可以查看的历史评论条数,默认200" placement="top-end">
                <el-input-number  v-model="form18.viewCommentNum" :min="1"></el-input-number>