chenguo hai 1 semana
pai
achega
2a444999fd

+ 54 - 0
src/api/hisStore/recommend.js

@@ -0,0 +1,54 @@
+// src/api/hisStore/storeRecommendScrm.js
+import request from '@/utils/request'
+
+// 查询推荐店铺列表
+export function listRecommendScrm(query) {
+  return request({
+    url: '/store/recommend/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询推荐店铺详细
+export function getRecommendScrm(id) {
+  return request({
+    url: '/store/recommend/' + id,
+    method: 'get'
+  })
+}
+
+// 新增推荐店铺
+export function addRecommendScrm(data) {
+  return request({
+    url: '/store/recommend',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改推荐店铺
+export function updateRecommendScrm(data) {
+  return request({
+    url: '/store/recommend',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除推荐店铺
+export function delRecommendScrm(id) {
+  return request({
+    url: '/store/recommend/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出推荐店铺
+export function exportRecommendScrm(query) {
+  return request({
+    url: '/store/recommend/export',
+    method: 'get',
+    params: query
+  })
+}

+ 8 - 0
src/api/hisStore/storeProduct.js

@@ -17,6 +17,14 @@ export function batchModify(param) {
   })
 }
 
+export function batchAudit(param) {
+  return request({
+    url: '/store/store/storeProduct/batchAudit',
+    method: 'post',
+    data: param
+  })
+}
+
 // 查询商品详细
 export function getStoreProduct(productId) {
   return request({

+ 96 - 0
src/views/hisStore/components/storeDetails.vue

@@ -63,6 +63,102 @@
           <span v-if="item!=null">{{item.updateTime}}</span>
         </el-descriptions-item>
 
+        <!--  // 重置证书相关字段
+        businessLicense: null,                    // 营业执照文件
+        businessLicenseExpireStart: null,              // 营业执照失效日期
+        businessLicenseExpireEnd: null,              // 营业执照失效日期
+        drugLicense: null,             // 药品经营许可证有效期
+        drugLicenseExpiryStart: null,               // 药品经营许可证文件
+        drugLicenseExpiryEnd: null,               // 药品经营许可证文件
+        // 医疗器械相关证书
+        medicalDevice1: null,          // 一类医疗器械备案证书
+        medicalDevice1ExpiryStart: null,        // 二类医疗器械备案有效期
+        medicalDevice1ExpiryEnd: null,        // 二类医疗器械备案有效期
+        medicalDevice2: null,          // 二类器械生产备案文件
+        medicalDevice2ExpiryStart: null,        // 一类生产备案有效期
+        medicalDevice2ExpiryEnd: null,        // 一类生产备案有效期
+        medicalDevice3: null,         // 三类器械经营许可证文件
+        medicalDevice3ExpiryStart: null,       // 三类器械经营许可证有效期
+        medicalDevice3ExpiryEnd: null,       // 三类器械经营许可证有效期
+        // 其他许可证相关字段
+        foodLicense: null,               // 食品经营许可证文件
+        foodLicenseExpiryStart: null,             // 食品经营许可证有效期
+        foodLicenseExpiryEnd: null,             // 食品经营许可证有效期
+        medicalLicense: null,  // 医疗机构执业许可证文件
+        medicalLicenseExpiryStart: null // 医疗机构执业许可证有效期
+        medicalLicenseExpiryEnd: null // 医疗机构执业许可证有效期
+        -->
+        <el-descriptions-item label="营业执照" >
+          <el-image
+            style="width: 100px"
+            :src="item.businessLicense"
+            :preview-src-list="[item.businessLicense]">
+          </el-image>
+        </el-descriptions-item>
+        <el-descriptions-item label="营业执照有效期" >
+          <span v-if="item!=null">{{item.businessLicenseExpireStart}} - {{item.businessLicenseExpireEnd}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="药品经营许可证" >
+          <el-image
+            style="width: 100px"
+            :src="item.drugLicense"
+            :preview-src-list="[item.drugLicense]">
+          </el-image>
+        </el-descriptions-item>
+        <el-descriptions-item label="药品经营许可证有效期" >
+          <span v-if="item!=null">{{item.drugLicenseExpiryStart}} - {{item.drugLicenseExpiryEnd}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="1类器械生产" >
+          <el-image
+            style="width: 100px"
+            :src="item.medicalDevice1"
+            :preview-src-list="[item.medicalDevice1]">
+          </el-image>
+        </el-descriptions-item>
+        <el-descriptions-item label="1类器械生产有效期" >
+          <span v-if="item!=null">{{item.medicalDevice1ExpiryStart}} - {{item.medicalDevice1ExpiryEnd}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="2类器械备案" >
+          <el-image
+            style="width: 100px"
+            :src="item.medicalDevice2"
+            :preview-src-list="[item.medicalDevice2]">
+          </el-image>
+        </el-descriptions-item>
+        <el-descriptions-item label="2类器械备案有效期" >
+          <span v-if="item!=null">{{item.medicalDevice2ExpiryStart}} - {{item.medicalDevice2ExpiryEnd}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="3类器械营业许可证" >
+          <el-image
+            style="width: 100px"
+            :src="item.medicalDevice3"
+            :preview-src-list="[item.medicalDevice3]">
+          </el-image>
+        </el-descriptions-item>
+        <el-descriptions-item label="3类器械营业许可证有效期" >
+          <span v-if="item!=null">{{item.medicalDevice3ExpiryStart}} - {{item.medicalDevice3ExpiryEnd}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="食品许可证" >
+          <el-image
+            style="width: 100px"
+            :src="item.foodLicense"
+            :preview-src-list="[item.foodLicense]">
+          </el-image>
+        </el-descriptions-item>
+        <el-descriptions-item label="食品许可证有效期" >
+          <span v-if="item!=null">{{item.foodLicenseExpiryStart}} - {{item.foodLicenseExpiryEnd}}</span>
+        </el-descriptions-item>
+        <el-descriptions-item label="药品许可证" >
+          <el-image
+            style="width: 100px"
+            :src="item.medicalLicense"
+            :preview-src-list="[item.medicalLicense]">
+          </el-image>
+        </el-descriptions-item>
+        <el-descriptions-item label="药品许可证有效期" >
+          <span v-if="item!=null">{{item.medicalLicenseExpiryStart}} - {{item.medicalLicenseExpiryEnd}}</span>
+        </el-descriptions-item>
+
 
 
       </el-descriptions>

+ 0 - 770
src/views/hisStore/store/index1.vue

@@ -1,770 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="店铺名称" prop="storeName">
-        <el-input
-          v-model="queryParams.storeName"
-          placeholder="请输入店铺名称"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="地址" prop="address">
-        <el-input
-          v-model="queryParams.address"
-          placeholder="请输入地址"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="店铺电话" prop="phone">
-        <el-input
-          v-model="queryParams.phone"
-          placeholder="请输入店铺电话"
-          clearable
-          size="small"
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
-          <el-option
-            v-for="dict in statusOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="审核状态" prop="isAudit">
-        <el-select v-model="queryParams.isAudit" placeholder="请选择审核状态" clearable size="small">
-          <el-option
-            v-for="dict in isAuditOptions"
-            :key="dict.dictValue"
-            :label="dict.dictLabel"
-            :value="dict.dictValue"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="登录帐号" prop="account">
-        <el-input
-          v-model="queryParams.account"
-          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="['his:store: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="['his:store: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="['his:store: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="['his:store:export']"
-        >导出</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" border :data="storeList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="店铺id" align="center" prop="storeId" width="120px"/>
-      <el-table-column label="店铺名称" align="center" prop="storeName" width="120px"/>
-      <el-table-column label="机构全称" align="center" prop="fullName" width="120px"/>
-      <el-table-column label="店铺LOGO" align="center" prop="logoUrl" width="100px">
-          <template slot-scope="scope">
-             <el-popover
-               placement="right"
-               title=""
-               trigger="hover">
-               <img slot="reference" :src="scope.row.logoUrl" width="80px">
-               <img :src="scope.row.logoUrl" style="max-width: 150px;">
-             </el-popover>
-          </template>
-      </el-table-column>
-      <el-table-column label="地址" align="center" prop="address" width="200px"/>
-      <el-table-column label="店铺电话" align="center" prop="phone" width="120px"/>
-<!--      <el-table-column label="资质证书" align="center" prop="licenseImages" width="100px">
-        <template slot-scope="scope">
-          <el-popover
-            placement="right"
-            title=""
-            trigger="hover">
-            <img slot="reference" :src="scope.row.licenseImages" width="80px">
-            <img :src="scope.row.licenseImages" style="max-width: 150px;">
-          </el-popover>
-        </template>
-      </el-table-column>
-      <el-table-column label="营业执照" align="center" prop="bizLicense" width="100px">
-        <template slot-scope="scope">
-          <el-popover
-            placement="right"
-            title=""
-            trigger="hover">
-            <img slot="reference" :src="scope.row.bizLicense" width="80px">
-            <img :src="scope.row.bizLicense" style="max-width: 150px;">
-          </el-popover>
-        </template>
-      </el-table-column>-->
-      <el-table-column label="审核状态" align="center" prop="isAudit">
-        <template slot-scope="scope">
-          <dict-tag :options="isAuditOptions" :value="scope.row.isAudit"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="商品总数" align="center" prop="productCount" />
-      <el-table-column label="状态" align="center" prop="status">
-        <template slot-scope="scope">
-          <dict-tag :options="statusOptions" :value="scope.row.status"/>
-        </template>
-      </el-table-column>
-      <el-table-column label="销量" align="center" prop="salesCount" />
-      <el-table-column label="余额" align="center" prop="balance" />
-      <el-table-column label="累计金额" align="center" prop="totalMoney" />
-      <el-table-column label="登录帐号" align="center" prop="account" width="150px" />
-      <el-table-column label="创建时间" align="center" prop="createTime"  width="150px"/>
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="150px">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-            v-hasPermi="['his:store:edit']"
-          >修改</el-button>
-           <el-button
-             size="mini"
-               type="text"
-               @click="handledetails(scope.row)"
-             >详情
-          </el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-            v-hasPermi="['his:store:remove']"
-          >删除</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-refresh"
-            @click="handleRefresh(scope.row)"
-            v-hasPermi="['his:store:refresh']"
-          >重置密码</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"
-    />
-    <!-- 添加或修改店铺管理对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <el-row>
-          <el-col :span="12">
-              <el-form-item label="店铺名称" prop="storeName">
-                <el-input v-model="form.storeName" placeholder="请输入店铺名称" />
-              </el-form-item>
-          </el-col>
-          <el-col :span="12">
-              <el-form-item label="店铺电话" prop="phone">
-                <el-input v-model="form.phone" placeholder="请输入店铺电话" />
-              </el-form-item>
-          </el-col>
-        </el-row>
-              <el-form-item label="机构全称" prop="fullName">
-                <el-input v-model="form.fullName" placeholder="请输入机构全称" />
-              </el-form-item>
-        <el-row>
-            <el-col :span="12">
-              <el-form-item label="店铺LOGO" prop="logoUrl">
-               <el-upload
-                 v-model="form.logoUrl"
-                 class="avatar-uploader"
-                 :action="uploadUrl"
-                 :show-file-list="false"
-                 :on-success="handleAvatarSuccess"
-                 :before-upload="beforeAvatarUpload">
-                 <img v-if="form.logoUrl" :src="form.logoUrl" class="avatar" width="200px">
-                 <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-               </el-upload>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-        	</el-col>
-        </el-row>
-<!--        <el-form-item label="资质证书" prop="licenseImages">
-          <ImageUpload
-            v-model="form.licenseImages"
-            class="avatar-uploader"
-            :action="licenseuploadUrl"
-            :show-file-list="false"
-            :on-success="licensehandleAvatarSuccess"
-            :before-upload="beforeAvatarUpload">
-            <img v-if="form.licenseImages" :src="form.licenseImages" class="avatar" width="200px">
-            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-          </ImageUpload>
-        </el-form-item>-->
-<!--        <el-row>
-          <el-col :span="12">
-            <el-form-item label="营业执照" prop="bizLicense">
-              <el-upload
-                v-model="form.bizLicense"
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="handleBizLicenseSuccess"
-                :before-upload="beforeBizLicenseUpload">
-                <img v-if="form.bizLicense" :src="form.bizLicense" class="avatar" width="200px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="营业执照失效日期" prop="bizLicenseExpireTime">
-              <el-input v-model="form.bizLicenseExpireTime" placeholder="请输入营业执照失效日期" />
-            </el-form-item>
-          </el-col>
-        </el-row>-->
-        <el-form-item label="店铺介绍" prop="descs" >
-          <el-input v-model="form.descs" placeholder="请输入店铺介绍" type="textarea"/>
-        </el-form-item>
-         <el-row>
-          <el-col :span="12">
-            <el-form-item label="所属城市" prop="cityIds">
-            <el-cascader
-              ref="citySelect"
-              v-model="form.cityIds"
-              :options="citys"
-              @change="handleCityChange">
-              </el-cascader>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-              <el-form-item label="地址" prop="address">
-                <el-input v-model="form.address" placeholder="请输入地址" />
-              </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="退货地址" prop="refundAddress">
-          <el-input v-model="form.refundAddress" placeholder="请输入退货地址" />
-        </el-form-item>
-        <el-row>
-          <el-col :span="12">
-          <el-form-item label="退货电话" prop="refundPhone">
-            <el-input v-model="form.refundPhone" placeholder="请输入退货电话" />
-          </el-form-item>
-          </el-col>
-           <el-col :span="12">
-            <el-form-item label="退货收货人" prop="refundConsignee">
-              <el-input v-model="form.refundConsignee" placeholder="请输入退货收货人" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-form-item label="寄件人电话" prop="sendPhone">
-          <el-input v-model="form.sendPhone" placeholder="请输入寄件人电话" />
-        </el-form-item>
-          <el-row>
-          <el-col :span="12">
-            <el-form-item label="商品总数" prop="productCount">
-               <el-input-number v-model="form.productCount"  :min="0" label="描述文字"></el-input-number>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="销量" prop="salesCount">
-               <el-input-number v-model="form.salesCount"  :min="0" label="描述文字"></el-input-number>
-            </el-form-item>
-          </el-col>
-        </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="累计金额" prop="totalMoney">
-                 <el-input-number v-model="form.totalMoney" :precision="2" :step="0.1"></el-input-number>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-             <!-- <el-form-item label="分佣比例%" prop="shippingType">
-                    <el-input-number v-model="form.brokerageRate" :min="0" :max="100"></el-input-number>
-               </el-form-item> -->
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="状态">
-                <el-radio-group v-model="form.status">
-                  <el-radio
-                    v-for="dict in statusOptions"
-                    :key="dict.dictValue"
-                    :label="parseInt(dict.dictValue)"
-                  >{{dict.dictLabel}}</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="分佣方式" prop="brokerageType" >
-                 <el-radio v-model="form.brokerageType" label="1">每盒</el-radio>
-                 <el-radio v-model="form.brokerageType" label="2">总价</el-radio>
-              </el-form-item>
-            </el-col>
-          </el-row>
-          <el-form-item label="配送方式" prop="shippingType">
-                <el-checkbox-group v-model="form.shippingType" size="medium">
-                 <el-checkbox v-for="(item, index) in shippingTypeOptions" :key="index" :label="item.value"
-                            :disabled="item.disabled">{{item.label}}</el-checkbox>
-                 </el-checkbox-group>
-           </el-form-item>
-
-           <el-form-item label="发货方式" prop="deliveryType">
-                 <el-radio-group v-model="form.deliveryType">
-                          <el-radio :label="item.dictValue" v-for="item in deliveryTypeOptions" >{{item.dictLabel}}</el-radio>
-                 </el-radio-group>
-            </el-form-item>
-
-          <el-form-item label="登录帐号" prop="account" v-if="title != '修改店铺管理'">
-            <el-input v-model="form.account" placeholder="请输入登录帐号" />
-          </el-form-item>
-          <!--        tips-->
-        <span class="tip-text" v-if="title !== '修改店铺管理'">请牢记登录账号,初试密码123456,请及时修改密码</span>
-      </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>
-      <el-drawer
-            :with-header="false"
-            size="75%"
-             :title="show.title" :visible.sync="show.open">
-         <storeDetails  ref="Details" />
-       </el-drawer>
-
-
-  </div>
-</template>
-
-<script>
-import { listStore, getStore, delStore, addStore, updateStore, exportStore, refreshPasWod } from '@/api/hisStore/store'
-import storeDetails from '../../components/his/storeDetails.vue';
-import {getCitys} from "@/api/store/city";
-export default {
-  name: "Store",
-  components: { storeDetails },
-  data() {
-    return {
-      show:{
-              title:"店铺详情",
-              open:false,
-            },
-shippingType:[],
-      citys:[],
-      licenseuploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
-            uploadUrl:process.env.VUE_APP_BASE_API+"/common/uploadOSS",
-            baseUrl: process.env.VUE_APP_BASE_API,
-      shippingTypeOptions: [{
-        "label": "配送",
-        "value": "1"
-      }, {
-        "label": "自提",
-        "value": "2"
-      }, {
-        "label": "配送自提",
-        "value": "3"
-      }],
-      // 遮罩层
-      loading: true,
-      // 导出遮罩层
-      exportLoading: false,
-      // 选中数组
-      ids: [],
-      // 非单个禁用
-      single: true,
-      // 非多个禁用
-      multiple: true,
-      // 显示搜索条件
-      showSearch: true,
-      // 总条数
-      total: 0,
-      // 店铺管理表格数据
-      storeList: [],
-      // 弹出层标题
-      title: "",
-      // 是否显示弹出层
-      open: false,
-      // 状态字典
-      statusOptions: [],
-      // 审核状态字典
-      isAuditOptions: [],
-      deliveryTypeOptions: [],
-      // 查询参数
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        storeName: null,
-        address: null,
-        phone: null,
-        status: null,
-        isAudit: null,
-        account: null,
-      },
-      // 表单参数
-      form: {},
-      // 表单校验
-      rules: {
-        storeName: [
-         { required: true, message: "店铺名称不能为空", trigger: "blur" }
-       ],
-       logoUrl: [
-         { required: true, message: "店铺LOGO不能为空", trigger: "blur" }
-       ],
-       cityIds: [
-         { required: true, message: "所属城市不能为空", trigger: "blur" }
-       ],
-      address: [
-        { required: true, message: "地址不能为空", trigger: "blur" }
-      ],
-      licenseImages: [
-        { required: true, message: "资质证书不能为空", trigger: "blur" }
-      ],
-      shippingType: [
-        { required: true, message: "配送方式不能为空", trigger: "blur" }
-      ],
-      account: [
-        { required: true, message: "登录账号不能为空", trigger: "blur" }
-      ],
-      brokerageType: [
-        { required: true, message: "分佣方式不能为空", trigger: "blur" }
-      ],
-      refundPhone: [
-        { required: true, message: "退货电话不能为空", trigger: "blur" }
-      ],
-      refundAddress: [
-        { required: true, message: "退货地址不能为空", trigger: "blur" }
-      ],
-      refundConsignee: [
-        { required: true, message: "退货收货人不能为空", trigger: "blur" }
-      ],
-      deliveryType: [
-        { required: true, message: "发货方式不能为空", trigger: "blur" }
-      ],
-      sendPhone: [
-        { required: true, message: "寄件人电话不能为空", trigger: "blur" },
-      ],
-      phone:  [
-          {
-            pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
-            message: "请输入正确的手机号码",
-            trigger: "blur"
-          }
-        ],
-
-      password: [
-        { required: true, message: "新密码不能为空", trigger: "blur" },
-        { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }
-      ],
-      }
-    };
-  },
-  created() {
-      this.getCitys();
-    this.getList();
-    this.getDicts("sys_company_status").then(response => {
-      this.statusOptions = response.data;
-    });
-    this.getDicts("sys_company_isaudit").then(response => {
-      this.isAuditOptions = response.data;
-    });
-    this.getDicts("sys_store_delivery_type").then(response => {
-      this.deliveryTypeOptions = response.data;
-    });
-  },
-  methods: {
-
-    handledetails(row){
-            this.show.open=true;
-            setTimeout(() => {
-                 this.$refs.Details.getDetails(row.storeId);
-            }, 1);
-        },
-
-    handleCityChange(value) {
-          var nodes=this.$refs.citySelect.getCheckedNodes();
-          this.form.address=nodes[0].pathLabels[0]+nodes[0].pathLabels[1]+nodes[0].pathLabels[2];
-          this.form.cityIds=value.toString();
-        },
-        getCitys(){
-            getCitys().then(res => {
-              this.loading = false;
-              this.citys=res.data;
-            })
-        },
-
-    licensehandleAvatarSuccess(res, file) {
-        if(res.code===200){
-          this.form.licenseImages=res.url;
-          this.$forceUpdate()
-        }
-        else{
-          this.msgError(res.msg);
-        }
-    },
-        handleAvatarSuccess(res, file) {
-            if(res.code===200){
-              this.form.logoUrl=res.url;
-              this.$forceUpdate()
-            }
-            else{
-              this.msgError(res.msg);
-            }
-        },
-        beforeAvatarUpload(file) {
-          const isLt1M = file.size / 1024 / 1024 < 1;
-          if (!isLt1M) {
-            this.$message.error('上传图片大小不能超过 1MB!');
-          }
-          return   isLt1M;
-        },
-    handleBizLicenseSuccess(res, file) {
-      if(res.code===200){
-        this.form.bizLicense=res.url;
-        this.$forceUpdate()
-      }
-      else{
-        this.msgError(res.msg);
-      }
-    },
-    beforeBizLicenseUpload(file) {
-      const isLt1M = file.size / 1024 / 1024 < 5;
-      if (!isLt1M) {
-        this.$message.error('上传图片大小不能超过 5MB!');
-      }
-      return   isLt1M;
-    },
-
-    /** 查询店铺管理列表 */
-    getList() {
-      this.loading = true;
-      listStore(this.queryParams).then(response => {
-        this.storeList = response.rows;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 取消按钮
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 表单重置
-    reset() {
-      this.form = {
-        storeId: null,
-        cityIds: null,
-        storeName: null,
-        descs: null,
-        logoUrl: null,
-        address: null,
-        lng: null,
-        lat: null,
-        phone: null,
-        licenseImages: null,
-        productCount: null,
-        status: 0,
-        createTime: null,
-        updateTime: null,
-        salesCount: null,
-        balance: null,
-        totalMoney: null,
-        isAudit: 0,
-        account: null,
-        password: null,
-        shippingType: ["1"],
-        brokerageType:"1",
-        brokerageRate:0,
-        fullName: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.storeId)
-      this.single = selection.length!==1
-      this.multiple = !selection.length
-    },
-    /** 新增按钮操作 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "添加店铺管理";
-
-    },
-    /** 修改按钮操作 */
-    handleUpdate(row) {
-      this.reset();
-      const storeId = row.storeId || this.ids
-      getStore(storeId).then(response => {
-        this.form = response.data;
-        this.open = true;
-        this.title = "修改店铺管理";
-        var str=this.form.shippingType
-        this.form.shippingType=str.split(",")
-        this.form.cityIds=((this.form.cityIds).split(",")).map(Number)
-        if(this.form.brokerageType!=null ){
-          this.form.brokerageType=JSON.stringify(this.form.brokerageType)
-        }
-        if(this.form.deliveryType!=null ){
-          this.form.deliveryType=JSON.stringify(this.form.deliveryType)
-        }
-
-
-
-      });
-    },
-    /** 提交按钮 */
-    submitForm() {
-
-
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          this.form.cityIds=(this.form.cityIds).toString()
-          this.form.shippingType=(this.form.shippingType).toString()
-          if (this.form.storeId != null) {
-            updateStore(this.form).then(response => {
-              this.msgSuccess("修改成功");
-              this.open = false;
-              this.getList();
-            });
-          } else {
-            addStore(this.form).then(response => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 删除按钮操作 */
-    handleDelete(row) {
-      const storeIds = row.storeId || this.ids;
-      this.$confirm('是否确认删除店铺管理编号为"' + storeIds + '"的数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(function() {
-          return delStore(storeIds);
-        }).then(() => {
-          this.getList();
-          this.msgSuccess("删除成功");
-        }).catch(() => {});
-    },
-    handleRefresh(row) {
-      const storeIds = row.storeId || this.ids;
-      this.$confirm('是否确认重置店铺管理编号为"' + storeIds + '"的密码为123456?', "警告", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
-      }).then(function() {
-        return refreshPasWod(storeIds);
-      }).then(() => {
-        this.getList();
-        this.msgSuccess("删除成功");
-      }).catch(() => {});
-    },
-    /** 导出按钮操作 */
-    handleExport() {
-      const queryParams = this.queryParams;
-      this.$confirm('是否确认导出所有店铺管理数据项?', "警告", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
-          type: "warning"
-        }).then(() => {
-          this.exportLoading = true;
-          return exportStore(queryParams);
-        }).then(response => {
-          this.download(response.msg);
-          this.exportLoading = false;
-        }).catch(() => {});
-    }
-  }
-};
-</script>
-<style>
-
-    .avatar-uploader .el-upload {
-       border: 1px dashed #d9d9d9;
-       border-radius: 6px;
-       cursor: pointer;
-       position: relative;
-       overflow: hidden;
-     }
-     .avatar-uploader .el-upload:hover {
-       border-color: #409EFF;
-     }
-
-     .avatar-uploader-icon {
-       font-size: 28px;
-       color: #8c939d;
-       width: 150px;
-       height: 150px;
-       line-height: 150px;
-       text-align: center;
-     }
-</style>

+ 401 - 0
src/views/hisStore/store/recommend.vue

@@ -0,0 +1,401 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
+      <el-form-item label="店铺ID" prop="storeId">
+        <el-input
+          v-model="queryParams.storeId"
+          placeholder="请输入店铺ID"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item label="店铺名称" prop="storeId">
+        <el-input
+          v-model="queryParams.storeName"
+          placeholder="请输入推荐店铺名称"
+          clearable
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item label="状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable size="small">
+          <el-option
+            v-for="dict in statusOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </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="['store:recommend: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="['store:recommend: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="['store:recommend:delete']"
+        >删除</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="['store:recommend:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" border :data="recommendScrmList" @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="店铺ID" align="center" prop="storeId" />
+      <el-table-column label="推荐店铺ID" align="center" prop="storeId" />
+      <el-table-column label="推荐店铺名称" align="center" prop="storeName" />
+      <el-table-column label="排序" align="center" prop="sortOrder" />
+      <el-table-column label="开始时间" align="center" prop="beginTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.beginTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="结束时间" align="center" prop="endTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.endTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="statusOptions" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="创建时间" align="center" prop="createTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.createTime) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="更新时间" align="center" prop="updateTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.updateTime) }}</span>
+        </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="['store:recommend:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['store:recommend: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"
+    />
+
+    <!-- 添加或修改推荐店铺对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="推荐店铺Id" prop="storeName">
+          <el-select
+            v-model="form.storeId"
+            filterable
+            remote
+            :remote-method="searchStore"
+            :loading="storeLoading"
+            placeholder="请输入并搜索店铺名称"
+            clearable
+            @change="setStore"
+          >
+            <el-option
+              v-for="item in storeOptions"
+              :key="item.storeId"
+              :label="item.storeId"
+              :value="item.storeId"
+            >
+              <span style="float: left">{{ item.storeName }}</span>
+              <span style="float: right; color: #8492a6; font-size: 13px">ID: {{ item.storeId }}</span>
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <!-- 回显店铺名称,不可编辑 -->
+        <el-form-item label="推荐店铺名称" prop="storeName" >
+          <el-input v-model="form.storeName" placeholder="请输入推荐店铺名称" disabled/>
+        </el-form-item>
+
+        <el-form-item label="排序" prop="sortOrder">
+          <el-input-number v-model="form.sortOrder" controls-position="right" :min="0" />
+        </el-form-item>
+        <el-form-item label="状态" prop="status">
+          <el-radio-group v-model="form.status">
+            <el-radio
+              v-for="dict in statusOptions"
+              :key="dict.dictValue"
+              :label="parseInt(dict.dictValue)"
+            >{{dict.dictLabel}}</el-radio>
+          </el-radio-group>
+        </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 {
+  listRecommendScrm,
+  getRecommendScrm,
+  delRecommendScrm,
+  addRecommendScrm,
+  updateRecommendScrm,
+  exportRecommendScrm
+} from "@/api/hisStore/recommend";
+import { listStore } from '@/api/hisStore/store'
+
+export default {
+  name: "RecommendScrm",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 推荐店铺表格数据
+      recommendScrmList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 状态数据字典
+      statusOptions: [],
+      storeLoading: false,    // 店铺搜索加载状态
+      storeOptions: [],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        storeId: null,
+        storeName: null,
+        status: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        storeId: [
+          { required: true, message: "店铺ID不能为空", trigger: "blur" }
+        ],
+        storeName: [
+          { required: true, message: "推荐店铺名称不能为空", trigger: "blur" }
+        ],
+        sortOrder: [
+          { required: true, message: "排序不能为空", trigger: "blur" }
+        ],
+        status: [
+          { required: true, message: "状态不能为空", trigger: "change" }
+        ]
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getDicts("common_status").then(response => {
+      this.statusOptions = response.data;
+    });
+  },
+  methods: {
+    /** 查询推荐店铺列表 */
+    getList() {
+      this.loading = true;
+      listRecommendScrm(this.queryParams).then(response => {
+        this.recommendScrmList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    //
+    setStore(){
+      let storeId = this.form.storeId;
+      this.form.storeName = this.storeOptions.filter(item => item.storeId === storeId)[0].storeName;
+    },
+    // 搜索店铺
+    searchStore(query) {
+      if (query !== '') {
+        this.storeLoading = true;
+        // 这里应该调用实际的API来搜索店铺
+        // 示例代码,需要根据实际API调整
+        listStore({ storeName: query }).then(response => {
+          this.storeOptions = response.rows;
+          this.storeLoading = false;
+        }).catch(() => {
+          this.storeLoading = false;
+        });
+      } else {
+        this.storeOptions = [];
+      }
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        storeId: null,
+        storeName: null,
+        sortOrder: 0,
+        status: 0
+      };
+      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 = "添加推荐店铺";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getRecommendScrm(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改推荐店铺";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateRecommendScrm(this.form).then(response => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addRecommendScrm(this.form).then(response => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$confirm('是否确认删除推荐店铺编号为"' + ids + '"的数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(function() {
+          return delRecommendScrm(ids);
+        }).then(() => {
+          this.getList();
+          this.msgSuccess("删除成功");
+        }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有推荐店铺数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportRecommendScrm(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>

+ 1 - 1
src/views/hisStore/storeProduct/index.vue

@@ -48,7 +48,7 @@
         </el-select>
       </el-form-item>
       <el-form-item label="所属店铺">
-        <el-select style="width: 240px" v-model="queryParams.storeIds" multiple placeholder="请选择店铺" clearable size="small" >
+        <el-select style="width: 240px" v-model="queryParams.storeIds" placeholder="请选择店铺" clearable size="small" >
           <el-option
             v-for="item in storeOptions"
             :key="item.storeId"