Browse Source

Merge remote-tracking branch 'origin/ScrmStore' into ScrmStore

# Conflicts:
#	src/views/hisStore/storeProduct/index.vue
chenguo 1 tuần trước cách đây
mục cha
commit
93f0a0354f

+ 9 - 17
src/api/hisStore/store.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 查询店铺管理列表
 export function listStore(query) {
   return request({
-    url: '/store/his/store/list',
+    url: '/store/store/list',
     method: 'get',
     params: query
   })
@@ -12,7 +12,7 @@ export function listStore(query) {
 // 查询店铺管理详细
 export function getStore(storeId) {
   return request({
-    url: '/store/his/store/' + storeId,
+    url: '/store/store/' + storeId,
     method: 'get'
   })
 }
@@ -21,7 +21,7 @@ export function getStore(storeId) {
 // 新增店铺管理
 export function addStore(data) {
   return request({
-    url: '/store/his/store',
+    url: '/his/store',
     method: 'post',
     data: data
   })
@@ -30,7 +30,7 @@ export function addStore(data) {
 // 修改店铺管理
 export function updateStore(data) {
   return request({
-    url: '/store/his/store',
+    url: '/his/store',
     method: 'put',
     data: data
   })
@@ -38,7 +38,7 @@ export function updateStore(data) {
 // 修改店铺管理
 export function audit(data) {
   return request({
-    url: '/store/his/store/audit',
+    url: '/store/store/audit',
     method: 'put',
     data: data
   })
@@ -46,31 +46,23 @@ export function audit(data) {
 // 删除店铺管理
 export function delStore(storeId) {
   return request({
-    url: '/store/his/store/' + storeId,
+    url: '/store/store/' + storeId,
     method: 'delete'
   })
 }
 
-export function refreshPasWod(storeId) {
-  return request({
-    url: '/store/his/store/refresh'+ storeId,
-    method: 'get'
-  })
-}
-
 // 导出店铺管理
 export function exportStore(query) {
   return request({
-    url: '/store/his/store/export',
+    url: '/store/store/export',
     method: 'get',
     params: query
   })
 }
 
-//getStoreAuditLog
-export function getStoreAuditLog(storeId) {
+export function getAllStore() {
   return request({
-    url: '/store/his/store/auditLog/'+ storeId,
+    url: '/store/store/storeList',
     method: 'get'
   })
 }

+ 37 - 0
src/api/hisStore/storeOrder.js

@@ -130,6 +130,16 @@ export function exportStoreOrder(query) {
   })
 }
 
+// 导出订单
+export function exportStoreOrderDetails(query) {
+  return request({
+    url: '/store/store/storeOrder/exportDetails',
+    method: 'get',
+    params: query
+  })
+}
+
+
 // 导出订单
 export function exportHealthStoreOrder(query) {
   return request({
@@ -139,6 +149,15 @@ export function exportHealthStoreOrder(query) {
   })
 }
 
+// 导出订单
+export function exportHealthStoreOrderDetails(query) {
+  return request({
+    url: '/store/store/storeOrder/healthExportDetails',
+    method: 'get',
+    params: query
+  })
+}
+
 // 导出订单
 export function exportPromotionOrder(query) {
   return request({
@@ -166,6 +185,15 @@ export function exportStoreOrderItems(query) {
   })
 }
 
+// 导出订单
+export function exportStoreOrderItemsDetails(query) {
+  return request({
+    url: '/store/store/storeOrder/exportItemsDetails',
+    method: 'get',
+    params: query
+  })
+}
+
 // 导出订单
 export function exportHealthStoreOrderItems(query) {
   return request({
@@ -175,6 +203,15 @@ export function exportHealthStoreOrderItems(query) {
   })
 }
 
+// 导出订单
+export function exportHealthStoreOrderItemsDetails(query) {
+  return request({
+    url: '/store/store/storeOrder/healthExportItemsDetails',
+    method: 'get',
+    params: query
+  })
+}
+
 export function createUserOrder(data) {
   return request({
     url: '/store/store/storeOrder/createUserOrder',

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

@@ -17,14 +17,6 @@ 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({

+ 2 - 2
src/views/components/course/userCourseCatalogDetails.vue

@@ -620,9 +620,9 @@ export default {
       }
     },
     beforeAvatarUpload(file) {
-      const isLt1M = file.size / 1024 / 1024 < 1;
+      const isLt1M = file.size / 1024 / 1024 < 5;
       if (!isLt1M) {
-        this.$message.error('上传图片大小不能超过 1MB!');
+        this.$message.error('上传图片大小不能超过 5MB!');
       }
       return isLt1M;
     },

+ 15 - 11
src/views/hisStore/store/audit.vue

@@ -118,13 +118,18 @@
         <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="130px">
         <template slot-scope="scope">
+          <el-button v-if="scope.row.isAudit==0"
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['his:store:audit']"
+          >审核</el-button>
            <el-button
                       size="mini"
                       type="text"
                       @click="handledetails(scope.row)"
-           >
-             <span v-if="scope.row.isAudit===0">审核</span>
-             <span v-else>详情</span>
+           >详情
           </el-button>
         </template>
       </el-table-column>
@@ -142,18 +147,17 @@
       <el-drawer
             :with-header="false"
             size="75%"
-             :title="show.title" :visible.sync="show.open" >
-         <storeDetails  ref="Details" @fresh="getList" @showClose="this.show.open = false"/>
+             :title="show.title" :visible.sync="show.open">
+         <storeDetails  ref="Details" />
        </el-drawer>
 
-  </div>
-
 
+  </div>
 </template>
 
 <script>
-import { audit,listStore, exportStore } from "@/api/hisStore/store";
-import storeDetails from '../components/storeDetails.vue';
+import { audit,listStore, getStore, delStore, addStore, updateStore, exportStore } from "@/api/hisStore/store";
+import storeDetails from '../../components/his/storeDetails.vue';
 import {getCitys} from "@/api/store/city";
 export default {
   name: "adutstore",
@@ -214,8 +218,6 @@ export default {
         isAudit: 0,
         account: null,
       },
-
-
       // 表单参数
       form: {},
       // 表单校验
@@ -255,6 +257,8 @@ export default {
     });
   },
   methods: {
+
+
     handleUpdate(row){
         var that=this;
         var the=null;

+ 63 - 468
src/views/hisStore/store/index.vue

@@ -1,4 +1,4 @@
-<template xmlns:el-col="http://www.w3.org/1999/html">
+<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">
@@ -128,7 +128,7 @@
       </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">
+      <el-table-column label="资质证书" align="center" prop="licenseImages" width="100px">
         <template slot-scope="scope">
           <el-popover
             placement="right"
@@ -139,17 +139,6 @@
           </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"/>
@@ -188,13 +177,6 @@
             @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>
@@ -207,9 +189,7 @@
     />
     <!-- 添加或修改店铺管理对话框 -->
     <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="120px" label-position="top">
-
-        <el-divider content-position="left">基础信息</el-divider>
+      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
         <el-row>
           <el-col :span="12">
               <el-form-item label="店铺名称" prop="storeName">
@@ -217,13 +197,13 @@
               </el-form-item>
           </el-col>
           <el-col :span="12">
-              <el-form-item label="电话" prop="phone">
+              <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 label="机构全称" prop="fullName">
+                <el-input v-model="form.fullName" placeholder="请输入机构全称" />
               </el-form-item>
         <el-row>
             <el-col :span="12">
@@ -239,244 +219,42 @@
                  <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-row>
-          <el-col :span="24">
-            <el-form-item label="店铺介绍" prop="descs" >
-              <el-input v-model="form.descs" placeholder="请输入店铺介绍" type="textarea"/>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <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-row>
-          <el-col :span="12">
-            <el-form-item label="法人姓名" prop="legalPersonName">
-              <el-input v-model="form.legalPersonName" placeholder="请输入法人姓名" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="统一社会信用代码" prop="unifiedSocialCreditCode">
-              <el-input v-model="form.unifiedSocialCreditCode" placeholder="请输入统一社会信用代码" />
-            </el-form-item>
-          </el-col>
+            </el-col>
+            <el-col :span="12">
+        	</el-col>
         </el-row>
-        <el-form-item label="营业范围" prop="businessScope">
-          <el-input v-model="form.businessScope" placeholder="请输入营业范围" type="textarea" />
+        <el-form-item label="资质证书" prop="licenseImages">
+          <el-upload
+            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>          
+          </el-upload>
         </el-form-item>
-
-        <!-- 证书上传相关字段 -->
-        <el-divider content-position="left">资质证书信息</el-divider>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="营业执照上传" prop="businessLicense">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'businessLicense')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.businessLicense" :src="form.businessLicense" class="avatar" width="100px">
-                <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="businessLicenseExpire">
-              <el-date-picker
-                v-model="form.businessLicenseExpire"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-          <el-form-item label="药品经营许可证上传" prop="drugLicense">
-            <el-upload
-              class="avatar-uploader"
-              :action="uploadUrl"
-              :show-file-list="false"
-              :on-success="(response, file) => handleFileSuccess(response, file, 'drugLicense')"
-              :before-upload="beforeAvatarUpload">
-              <img v-if="form.drugLicense" :src="form.drugLicense" class="avatar" width="100px">
-              <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="drugLicenseExpiry">
-            <el-date-picker
-              v-model="form.drugLicenseExpiry"
-              type="daterange"
-              value-format="yyyy-MM-dd"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期">
-            </el-date-picker>
-          </el-form-item>
-        </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="1类器械生产备案上传" prop="medicalDevice1">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice1')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalDevice1" :src="form.medicalDevice1" class="avatar" width="100px">
-                <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="1类生产备案有效期" prop="medicalDevice1Expiry">
-              <el-date-picker
-                v-model="form.medicalDevice1Expiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="2类医疗器械备案证书上传" prop="medicalDevice2">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice2')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalDevice2" :src="form.medicalDevice2" class="avatar" width="100px">
-                <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="2类医疗器械备案有效期" prop="medicalDevice2Expiry">
-              <el-date-picker
-                v-model="form.medicalDevice2Expiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="3类器械经营许可证上传" prop="medicalDevice3">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalDevice3')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalDevice3" :src="form.medicalDevice3" class="avatar" width="100px">
-                <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="3类器械经营许可证有效期" prop="medicalDevice3Expiry">
-              <el-date-picker
-                v-model="form.medicalDevice3Expiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="食品经营许可证上传" prop="foodLicense">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'foodLicense')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.foodLicense" :src="form.foodLicense" class="avatar" width="100px">
-                <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="foodLicenseExpiry">
-              <el-date-picker
-                v-model="form.foodLicenseExpiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
+        <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="medicalLicense">
-              <el-upload
-                class="avatar-uploader"
-                :action="uploadUrl"
-                :show-file-list="false"
-                :on-success="(response, file) => handleFileSuccess(response, file, 'medicalLicense')"
-                :before-upload="beforeAvatarUpload">
-                <img v-if="form.medicalLicense" :src="form.medicalLicense" class="avatar" width="100px">
-                <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
+            <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="medicalLicenseExpiry">
-              <el-date-picker
-                v-model="form.medicalLicenseExpiry"
-                type="daterange"
-                value-format="yyyy-MM-dd"
-                range-separator="至"
-                start-placeholder="开始日期"
-                end-placeholder="结束日期">
-              </el-date-picker>
-            </el-form-item>
+              <el-form-item label="地址" prop="address">
+                <el-input v-model="form.address" placeholder="请输入地址" />
+              </el-form-item>
           </el-col>
         </el-row>
-
-
-        <el-divider content-position="left">店铺配置信息</el-divider>
         <el-form-item label="退货地址" prop="refundAddress">
           <el-input v-model="form.refundAddress" placeholder="请输入退货地址" />
         </el-form-item>
@@ -545,12 +323,15 @@
                  </el-checkbox-group>
            </el-form-item>
 
-        <el-divider content-position="left">登录信息</el-divider>
+           <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>
@@ -569,8 +350,8 @@
 </template>
 
 <script>
-import { listStore, getStore, delStore, addStore, updateStore, exportStore, refreshPasWod } from '@/api/hisStore/store'
-import storeDetails from '../components/storeDetails.vue';
+import { listStore, getStore, delStore, addStore, updateStore, exportStore } from "@/api/hisStore/store";
+import storeDetails from '../../components/his/storeDetails.vue';
 import {getCitys} from "@/api/store/city";
 export default {
   name: "Store",
@@ -638,15 +419,6 @@ shippingType:[],
       rules: {
         storeName: [
          { required: true, message: "店铺名称不能为空", trigger: "blur" }
-       ],
-        fullName: [
-         { required: true, message: "店铺名称不能为空", trigger: "blur" }
-       ],
-        businessLicenseExpire: [
-         { required: true, message: "营业执照失效日期不能为空", trigger: "blur" }
-       ],
-        businessLicense: [
-         { required: true, message: "营业执照不能为空", trigger: "blur" }
        ],
        logoUrl: [
          { required: true, message: "店铺LOGO不能为空", trigger: "blur" }
@@ -678,6 +450,9 @@ shippingType:[],
       refundConsignee: [
         { required: true, message: "退货收货人不能为空", trigger: "blur" }
       ],
+      deliveryType: [
+        { required: true, message: "发货方式不能为空", trigger: "blur" }
+      ],
       sendPhone: [
         { required: true, message: "寄件人电话不能为空", trigger: "blur" },
       ],
@@ -685,36 +460,14 @@ shippingType:[],
           {
             pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/,
             message: "请输入正确的手机号码",
-            trigger: "blur",
-            required: true
+            trigger: "blur"
           }
         ],
-        // 新增字段校验规则
-        enterpriseShortName: [
-          { required: true, message: "企业简称不能为空", trigger: "blur" }
-        ],
-        enterpriseFullName: [
-          { required: true, message: "企业全称不能为空", trigger: "blur" }
-        ],
-        contactPhone: [
-          { required: true, message: "电话号码不能为空", trigger: "blur" }
-        ],
-        enterpriseAddress: [
-          { required: true, message: "企业地址不能为空", trigger: "blur" }
-        ],
-        legalPersonName: [
-          { required: true, message: "法人姓名不能为空", trigger: "blur" }
-        ],
-        unifiedSocialCreditCode: [
-          { required: true, message: "统一社会信用代码不能为空", trigger: "blur" }
-        ],
-        businessScope: [
-          { required: true, message: "营业范围不能为空", trigger: "blur" }
-        ],
-        password: [
-          { required: true, message: "新密码不能为空", trigger: "blur" },
-          { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }
-        ],
+
+      password: [
+        { required: true, message: "新密码不能为空", trigger: "blur" },
+        { min: 6, max: 20, message: "长度在 6 到 20 个字符", trigger: "blur" }
+      ],
       }
     };
   },
@@ -753,7 +506,7 @@ shippingType:[],
         },
 
     licensehandleAvatarSuccess(res, file) {
-        if(res.code===200){
+        if(res.code==200){
           this.form.licenseImages=res.url;
           this.$forceUpdate()
         }
@@ -762,7 +515,7 @@ shippingType:[],
         }
     },
         handleAvatarSuccess(res, file) {
-            if(res.code===200){
+            if(res.code==200){
               this.form.logoUrl=res.url;
               this.$forceUpdate()
             }
@@ -777,32 +530,7 @@ shippingType:[],
           }
           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;
-    },
 
-    // 通用文件上传成功处理函数
-    handleFileSuccess(response, file, field) {
-      if(response.code === 200) {
-        this.$set(this.form, field, response.url);
-        this.$forceUpdate();
-      } else {
-        this.msgError(response.msg);
-      }
-    },
 
     /** 查询店铺管理列表 */
     getList() {
@@ -845,31 +573,6 @@ shippingType:[],
         brokerageType:"1",
         brokerageRate:0,
         fullName:null,
-        // 重置新增字段
-        enterpriseShortName: null,        // 企业简称
-        enterpriseFullName: null,         // 企业全称
-        contactPhone: null,               // 联系电话
-        enterpriseAddress: null,          // 企业地址
-        legalPersonName: null,            // 法人姓名
-        unifiedSocialCreditCode: null,    // 统一社会信用代码
-        businessScope: null,              // 营业范围
-        // 重置证书相关字段
-        businessLicense: null,                    // 营业执照文件
-        businessLicenseExpire: null,              // 营业执照失效日期
-        drugLicense: null,             // 药品经营许可证有效期
-        drugLicenseExpiry: null,               // 药品经营许可证文件
-        // 医疗器械相关证书
-        medicalDevice1: null,          // 一类医疗器械备案证书
-        medicalDevice1Expiry: null,        // 二类医疗器械备案有效期
-        medicalDevice2: null,          // 二类器械生产备案文件
-        medicalDevice2Expiry: null,        // 一类生产备案有效期
-        medicalDevice3: null,         // 三类器械经营许可证文件
-        medicalDevice3Expiry: null,       // 三类器械经营许可证有效期
-        // 其他许可证相关字段
-        foodLicense: null,               // 食品经营许可证文件
-        foodLicenseExpiry: null,             // 食品经营许可证有效期
-        medicalLicense: null,  // 医疗机构执业许可证文件
-        medicalLicenseExpiry: null // 医疗机构执业许可证有效期
       };
       this.resetForm("form");
     },
@@ -893,7 +596,7 @@ shippingType:[],
     handleAdd() {
       this.reset();
       this.open = true;
-      this.title = "添加店铺";
+      this.title = "添加店铺管理";
 
     },
     /** 修改按钮操作 */
@@ -903,8 +606,8 @@ shippingType:[],
       getStore(storeId).then(response => {
         this.form = response.data;
         this.open = true;
-        this.title = "修改店铺";
-        let str=this.form.shippingType
+        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 ){
@@ -914,116 +617,26 @@ shippingType:[],
           this.form.deliveryType=JSON.stringify(this.form.deliveryType)
         }
 
-        // 处理日期范围字段
-        if(this.form.drugLicenseExpiryStart && this.form.drugLicenseExpiryEnd) {
-          this.form.drugLicenseExpiry = [
-            this.form.drugLicenseExpiryStart,
-            this.form.drugLicenseExpiryEnd
-          ];
-        }
-
-        if(this.form.medicalDevice1ExpiryStart && this.form.medicalDevice1ExpiryEnd) {
-          this.form.medicalDevice1Expiry = [
-            this.form.medicalDevice1ExpiryStart,
-            this.form.medicalDevice1ExpiryEnd
-          ];
-        }
-        if(this.form.medicalDevice2ExpiryStart && this.form.medicalDevice2ExpiryEnd) {
-          this.form.medicalDevice2Expiry = [
-            this.form.medicalDevice2ExpiryStart,
-            this.form.medicalDevice2ExpiryEnd
-          ];
-        }
-        if(this.form.medicalDevice3ExpiryStart && this.form.medicalDevice3ExpiryEnd) {
-          this.form.medicalDevice3Expiry = [
-            this.form.medicalDevice3ExpiryStart,
-            this.form.medicalDevice3ExpiryEnd
-          ];
-        }
-
-        if(this.form.foodLicenseExpiryStart && this.form.foodLicenseExpiryEnd) {
-          this.form.foodLicenseExpiry = [
-            this.form.foodLicenseExpiryStart,
-            this.form.foodLicenseExpiryEnd
-          ];
-        }
-
-        if(this.form.medicalLicenseExpiryStart && this.form.medicalLicenseExpiryEnd) {
-          this.form.medicalLicenseExpiry = [
-            this.form.medicalLicenseExpiryStart,
-            this.form.medicalLicenseExpiryEnd
-          ];
-        }
-        if(this.form.businessLicenseExpireStart && this.form.businessLicenseExpireEnd) {
-          this.form.businessLicenseExpire = [
-            this.form.businessLicenseExpireStart,
-            this.form.businessLicenseExpireEnd
-          ];
-        }
 
 
       });
     },
     /** 提交按钮 */
     submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          // 处理表单数据
-          const formData = Object.assign({}, this.form);
-
-          // 处理城市ID
-          if(formData.cityIds) {
-            formData.cityIds = formData.cityIds.toString();
-          }
-
-          // 处理配送方式
-          if(formData.shippingType) {
-            formData.shippingType = formData.shippingType.toString();
-          }
 
-          // 处理日期范围字段
-          if(formData.drugLicenseExpiry && formData.drugLicenseExpiry.length === 2) {
-            formData.drugLicenseExpiryStart = formData.drugLicenseExpiry[0];
-            formData.drugLicenseExpiryEnd = formData.drugLicenseExpiry[1];
-          }
-
-          if(formData.medicalDevice2Expiry && formData.medicalDevice2Expiry.length === 2) {
-            formData.medicalDevice2ExpiryStart = formData.medicalDevice2Expiry[0];
-            formData.medicalDevice2ExpiryEnd = formData.medicalDevice2Expiry[1];
-          }
-
-          if(formData.medicalDevice1Expiry && formData.medicalDevice1Expiry.length === 2) {
-            formData.medicalDevice1ExpiryStart = formData.medicalDevice1Expiry[0];
-            formData.medicalDevice1ExpiryEnd = formData.medicalDevice1Expiry[1];
-          }
-
-          if(formData.medicalDevice3Expiry && formData.medicalDevice3Expiry.length === 2) {
-            formData.medicalDevice3ExpiryStart = formData.medicalDevice3Expiry[0];
-            formData.medicalDevice3ExpiryEnd = formData.medicalDevice3Expiry[1];
-          }
-
-          if(formData.foodLicenseExpiry && formData.foodLicenseExpiry.length === 2) {
-            formData.foodLicenseExpiryStart = formData.foodLicenseExpiry[0];
-            formData.foodLicenseExpiryEnd = formData.foodLicenseExpiry[1];
-          }
 
-          if(formData.medicalLicenseExpiry && formData.medicalLicenseExpiry.length === 2) {
-            formData.medicalLicenseExpiryStart = formData.medicalLicenseExpiry[0];
-            formData.medicalLicenseExpiryEnd = formData.medicalLicenseExpiry[1];
-          }
-          if(formData.businessLicenseExpire && formData.businessLicenseExpire.length === 2) {
-            formData.businessLicenseExpireStart = formData.businessLicenseExpire[0];
-            formData.businessLicenseExpireEnd = formData.businessLicenseExpire[1];
-          }
-
-          if (formData.storeId != null) {
-            updateStore(formData).then(response => {
+      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(formData).then(response => {
+            addStore(this.form).then(response => {
               this.msgSuccess("新增成功");
               this.open = false;
               this.getList();
@@ -1046,19 +659,6 @@ shippingType:[],
           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;
@@ -1098,9 +698,4 @@ shippingType:[],
        line-height: 150px;
        text-align: center;
      }
-
-     .el-divider__text {
-       font-size: 16px;
-       font-weight: bold;
-     }
 </style>

+ 94 - 1
src/views/hisStore/storeOrder/healthStoreList.vue

@@ -191,6 +191,26 @@
         >导出订单明细
         </el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-hasPermi="['store:healthStoreOrder:export:details']"
+          icon="el-icon-download"
+          size="mini"
+          type="warning"
+          @click="handleExportDetails"
+        >导出订单(明文)
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          v-hasPermi="['store:healthStoreOrder:exportItems:details']"
+          icon="el-icon-download"
+          size="mini"
+          type="warning"
+          @click="handleExportItemsDetails"
+        >导出订单明细(明文)
+        </el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           icon="el-icon-s-order"
@@ -564,7 +584,7 @@ import {
   delStoreOrder,
   addStoreOrder,
   updateStoreOrder,
-  exportHealthStoreOrder
+  exportHealthStoreOrder, exportHealthStoreOrderDetails, exportHealthStoreOrderItemsDetails
 } from '@/api/hisStore/storeOrder'
 import { getUserList } from '@/api/hisStore/user'
 import { getAddressList } from '@/api/hisStore/userAddress'
@@ -1081,6 +1101,79 @@ export default {
       }).catch(function() {
       })
     },
+    /** 导出按钮操作 */
+    handleExportDetails() {
+      if (this.queryParams.status == '00') {
+        this.queryParams.status = null
+      }
+      if (this.createTimeRange != null && this.createTimeRange.length == 2) {
+        this.queryParams.createTimeRange = this.createTimeRange[0] + '--' + this.createTimeRange[1]
+      } else {
+        this.queryParams.createTimeRange = null
+      }
+      if (this.payTimeRange != null && this.payTimeRange.length == 2) {
+        this.queryParams.payTimeRange = this.payTimeRange[0] + '--' + this.payTimeRange[1]
+      } else {
+        this.queryParams.payTimeRange = null
+      }
+      if (this.deliveryImportTimeRange != null && this.deliveryImportTimeRange.length == 2) {
+        this.queryParams.deliveryImportTimeRange = this.deliveryImportTimeRange[0] + '--' + this.deliveryImportTimeRange[1]
+      } else {
+        this.queryParams.deliveryImportTimeRange = null
+      }
+      if (this.deliverySendTimeRange != null && this.deliverySendTimeRange.length == 2) {
+        this.queryParams.deliverySendTimeRange = this.deliverySendTimeRange[0] + '--' + this.deliverySendTimeRange[1]
+      } else {
+        this.queryParams.deliverySendTimeRange = null
+      }
+      const queryParams = this.addDateRange(this.queryParams, this.dateRange)
+      this.$confirm('是否确认导出所有订单数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportHealthStoreOrderDetails(queryParams)
+      }).then(response => {
+        this.download(response.msg)
+      }).catch(function() {
+      })
+    },
+    handleExportItemsDetails() {
+      if (this.queryParams.status == '00') {
+        this.queryParams.status = null
+      }
+      if (this.createTimeRange != null && this.createTimeRange.length == 2) {
+        this.queryParams.createTimeRange = this.createTimeRange[0] + '--' + this.createTimeRange[1]
+      } else {
+        this.queryParams.createTimeRange = null
+      }
+      if (this.payTimeRange != null && this.payTimeRange.length == 2) {
+        this.queryParams.payTimeRange = this.payTimeRange[0] + '--' + this.payTimeRange[1]
+      } else {
+        this.queryParams.payTimeRange = null
+      }
+      if (this.deliveryImportTimeRange != null && this.deliveryImportTimeRange.length == 2) {
+        this.queryParams.deliveryImportTimeRange = this.deliveryImportTimeRange[0] + '--' + this.deliveryImportTimeRange[1]
+      } else {
+        this.queryParams.deliveryImportTimeRange = null
+      }
+      if (this.deliverySendTimeRange != null && this.deliverySendTimeRange.length == 2) {
+        this.queryParams.deliverySendTimeRange = this.deliverySendTimeRange[0] + '--' + this.deliverySendTimeRange[1]
+      } else {
+        this.queryParams.deliverySendTimeRange = null
+      }
+      const queryParams = this.addDateRange(this.queryParams, this.dateRange)
+      this.$confirm('是否确认导出所有订单明细数据项?', '警告', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(function() {
+        return exportHealthStoreOrderItemsDetails(queryParams)
+      }).then(response => {
+        this.download(response.msg)
+      }).catch(function() {
+      })
+    },
     handleImport() {
       this.upload.title = '导入银行回单'
       this.upload.open = true

+ 100 - 3
src/views/hisStore/storeOrder/index.vue

@@ -210,6 +210,24 @@
           @click="openDeliveryNote"
         >批量导入物流单号</el-button>
       </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExportDetails"
+          v-hasPermi="['store:storeOrder:export:details']"
+        >导出订单(明文)</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExportItemsDetails"
+          v-hasPermi="['store:storeOrder:exportItems:details']"
+        >导出订单明细(明文)</el-button>
+      </el-col>
       <el-col :span="1.5">
         <el-button
           type="danger"
@@ -591,7 +609,7 @@ import {
   updateStoreOrder,
   exportStoreOrder,
   getOrderItemsNum,
-  importDeliveryNoteExpressTemplate
+  importDeliveryNoteExpressTemplate, exportStoreOrderDetails, exportStoreOrderItemsDetails
 } from '@/api/hisStore/storeOrder'
 import { getUserList } from "@/api/hisStore/user";
 import { getAddressList } from "@/api/hisStore/userAddress";
@@ -1126,7 +1144,7 @@ export default {
           this.download(response.msg);
         }).catch(function() {});
     },
-    handleExportItems() {
+    handleExportItemsDetails() {
       if(this.queryParams.status=='00'){
         this.queryParams.status=null;
       }
@@ -1160,11 +1178,90 @@ export default {
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
-          return exportStoreOrderItems(queryParams);
+          return exportStoreOrderItemsDetails(queryParams);
         }).then(response => {
           this.download(response.msg);
         }).catch(function() {});
     },
+    /** 导出按钮操作 */
+    handleExportDetails() {
+      if(this.queryParams.status=='00'){
+        this.queryParams.status=null;
+      }
+      if(this.createTimeRange!=null&&this.createTimeRange.length==2){
+        this.queryParams.createTimeRange=this.createTimeRange[0]+"--"+this.createTimeRange[1]
+      }
+      else{
+        this.queryParams.createTimeRange=null;
+      }
+      if(this.payTimeRange!=null&&this.payTimeRange.length==2){
+        this.queryParams.payTimeRange=this.payTimeRange[0]+"--"+this.payTimeRange[1]
+      }
+      else{
+        this.queryParams.payTimeRange=null;
+      }
+      if(this.deliveryImportTimeRange!=null&&this.deliveryImportTimeRange.length==2){
+        this.queryParams.deliveryImportTimeRange=this.deliveryImportTimeRange[0]+"--"+this.deliveryImportTimeRange[1]
+      }
+      else{
+        this.queryParams.deliveryImportTimeRange=null;
+      }
+      if(this.deliverySendTimeRange!=null&&this.deliverySendTimeRange.length==2){
+        this.queryParams.deliverySendTimeRange=this.deliverySendTimeRange[0]+"--"+this.deliverySendTimeRange[1]
+      }
+      else{
+        this.queryParams.deliverySendTimeRange=null;
+      }
+      const queryParams = this.addDateRange(this.queryParams, this.dateRange);
+      this.$confirm('是否确认导出所有订单数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return exportStoreOrderDetails(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      }).catch(function() {});
+    },
+    handleExportItems() {
+      if(this.queryParams.status=='00'){
+        this.queryParams.status=null;
+      }
+      if(this.createTimeRange!=null&&this.createTimeRange.length==2){
+        this.queryParams.createTimeRange=this.createTimeRange[0]+"--"+this.createTimeRange[1]
+      }
+      else{
+        this.queryParams.createTimeRange=null;
+      }
+      if(this.payTimeRange!=null&&this.payTimeRange.length==2){
+        this.queryParams.payTimeRange=this.payTimeRange[0]+"--"+this.payTimeRange[1]
+      }
+      else{
+        this.queryParams.payTimeRange=null;
+      }
+      if(this.deliveryImportTimeRange!=null&&this.deliveryImportTimeRange.length==2){
+        this.queryParams.deliveryImportTimeRange=this.deliveryImportTimeRange[0]+"--"+this.deliveryImportTimeRange[1]
+      }
+      else{
+        this.queryParams.deliveryImportTimeRange=null;
+      }
+      if(this.deliverySendTimeRange!=null&&this.deliverySendTimeRange.length==2){
+        this.queryParams.deliverySendTimeRange=this.deliverySendTimeRange[0]+"--"+this.deliverySendTimeRange[1]
+      }
+      else{
+        this.queryParams.deliverySendTimeRange=null;
+      }
+      const queryParams = this.addDateRange(this.queryParams, this.dateRange);
+      this.$confirm('是否确认导出所有订单明细数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return exportStoreOrderItems(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      }).catch(function() {});
+    },
     handleImport() {
       this.upload.title = "导入银行回单";
       this.upload.open = true;

+ 425 - 109
src/views/hisStore/storeProduct/index.vue

@@ -6,6 +6,16 @@
          <treeselect  v-model="queryParams.cateId"  style="width:205.4px" :options="categoryOptions" :normalizer="normalizer" placeholder="请选择分类" />
       </el-form-item>
 
+      <el-form-item label="所属店铺" prop="storeId" >
+       <el-select v-model="queryParams.storeId"  placeholder="所属店铺" clearable size="small" filterable>
+          <el-option
+            v-for="dict in storeOptions"
+            :key="dict.storeId"
+            :label="dict.storeName"
+            :value="dict.storeId"
+          />
+        </el-select>
+      </el-form-item>
       <el-form-item label="商品名称" prop="productName">
         <el-input
           v-model="queryParams.productName"
@@ -212,7 +222,6 @@
               />
         </el-select>
       </el-form-item> -->
-
       <el-form-item>
         <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
         <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
@@ -234,7 +243,7 @@
           type="success"
           icon="el-icon-edit"
           size="mini"
-          :disabled="multiple"
+          :disabled="single"
           @click="handleUpdate"
           v-hasPermi="['store:storeProduct:edit']"
         >修改</el-button>
@@ -291,6 +300,7 @@
           </el-popover>
         </template>
       </el-table-column>
+      <el-table-column label="店铺名称" show-overflow-tooltip align="center" prop="storeName" />
       <el-table-column label="商品名称" show-overflow-tooltip align="center" prop="productName" />
       <el-table-column label="分类" align="center" prop="cateName" />
       <el-table-column label="所属公司" align="center" prop="companyName" />
@@ -382,22 +392,7 @@
     </el-dialog>
 
     <!-- 添加或修改商品对话框 -->
-    <el-dialog :title="title" v-if="open" :fullscreen="isFullscreen" :visible.sync="open" width="1000px" append-to-body :show-close="false">
-      <template v-slot:title>
-        <div style="display: flex; justify-content: space-between; align-items: center;">
-          <span>{{ title }}</span>
-          <div>
-            <!-- 全屏按钮 -->
-            <el-button type="text" @click="handleFullScreen" size="middle">
-              <i class="el-icon-full-screen"></i>
-            </el-button>
-            <!--关闭按钮-->
-            <el-button type="text" @click="open = false">
-              <i class="el-icon-close"></i>
-            </el-button>
-          </div>
-        </div>
-      </template>
+    <el-dialog :title="title" v-if="open" :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
         <el-row >
           <el-col :span="12">
@@ -422,7 +417,6 @@
               <el-input v-model="form.unitName" placeholder="请输入单位名" />
             </el-form-item>
           </el-col>
-
         </el-row>
         <el-row :gutter="10">
           <el-col :span="12">
@@ -537,22 +531,6 @@
         <el-form-item label="商品图片" prop="image">
           <Material v-model="imageArr" type="image" :num="1" :width="150" :height="150" />
         </el-form-item>
-<!--        <el-form-item label="商品视频" prop="video">
-          <div>
-            <el-upload
-              ref="upload"
-              class="upload-demo"
-              :action="uploadUrl"
-              :on-success="handleSuccess"
-              :before-upload="beforeUpload"
-              :limit="1"
-              :accept="videoAccept"
-            >
-              <el-button size="small" type="primary">点击上传视频</el-button>
-            </el-upload>
-            <video v-if="form.video" :src="form.video" controls style="max-width: 300px; max-height: 300px; margin-top: 10px"></video>
-          </div>
-        </el-form-item>-->
         <el-form-item label="轮播图" prop="sliderImage">
           <Material v-model="photoArr" type="image" :num="10" :width="150" :height="150" />
         </el-form-item>
@@ -566,7 +544,7 @@
             </el-form-item>
           </el-col>
            <!-- 多规格添加-->
-          <el-col :span="24" v-if="form.specType === 1" class="noForm" >
+          <el-col :span="24" v-if="form.specType === 1" class="noForm">
            <el-col :span="24">
               <el-form-item label="选择规格:" prop="">
                 <div  class="acea-row row-middle">
@@ -577,7 +555,6 @@
                 </div>
               </el-form-item>
             </el-col>
-
             <el-col :span="24">
               <el-form-item v-if="attrs!=null&&attrs.length!==0">
                 <div  v-for="(item, index) in attrs" :key="index">
@@ -594,8 +571,7 @@
                 </div>
               </el-form-item>
             </el-col>
-
-             <el-col :span="24" v-if="createBnt">
+            <el-col :span="24" v-if="createBnt">
               <el-form-item>
                 <el-button type="primary" size="small" icon="md-add" @click="addBtn" class="mr15">添加新规格</el-button>
                 <el-button type="success" size="small"  @click="generate">立即生成</el-button>
@@ -622,40 +598,71 @@
               <!-- 多规格表格-->
               <el-col :span="24">
                 <el-form-item label="商品属性:" class="labeltop">
-
-                  <el-table :data="manyFormValidate" size="small" style="width: 90%;" border>
+                  <el-table :data="manyFormValidate" size="small" style="width: 90%;">
                     <el-table-column type="myindex" v-for="(item,index) in form.header" :key="index"  :width="item.minWidth" :label="item.title" :property="item.slot" align="center">
                       <template slot-scope="scope">
                         <div v-if="scope.column.property == 'image'" align="center">
                           <single-img v-model="scope.row[scope.column.property]" type="image" :num="1" :width="60" :height="60" />
                         </div>
+                        <div v-else-if="scope.column.property == 'storeId'" align="center">
+                          <el-tag prop="storeId" v-for="(item, index) in storeOptions"    v-if="scope.row[scope.column.property]==item.storeId">{{item.storeName}}</el-tag>
+                        </div>
                         <div v-else-if="scope.column.property.indexOf('value') != -1" align="center">
                          {{ scope.row[scope.column.property] }}
                         </div>
                         <div v-else-if="scope.column.property == 'action'" align="center" >
                           <a @click="delAttrTable(scope.$index)" align="center">删除</a>
                         </div>
+
+                        <!-- <div v-else-if="scope.column.property == 'storeId'" align="center" >
+                         <el-select v-model="scope.row.storeId" disabled clearable size="small" filterable>
+                            <el-option
+                              v-for="dict in storeOptions"
+                              :key="dict.dictValue"
+                              :label="dict.dictLabel"
+                              :value="dict.dictValue"
+                            />
+                          </el-select>
+                        </div> -->
+
                         <div v-else align="center">
                           <el-input  v-model="scope.row[scope.column.property]" align="center" />
                         </div>
                       </template>
                     </el-table-column>
                   </el-table>
-
                 </el-form-item>
               </el-col>
             </el-col>
           </el-col>
 
           <!-- 单规格表格-->
-          <el-col :xl="23" :lg="24" :md="24" :sm="24" :xs="24" v-if="form.specType === 0" style="">
+          <el-col :xl="23" :lg="24" :md="24" :sm="24" :xs="24" v-if="form.specType === 0">
             <el-form-item >
-              <el-table :data="oneFormValidate"  size="small" border>
+              <el-table border :data="oneFormValidate"  size="mini">
                 <el-table-column prop="image" label="图片" align="center">
                   <template slot-scope="scope">
                     <single-img v-model="scope.row.image" type="image" :num="1" :width="60" :height="60" />
                   </template>
                 </el-table-column>
+
+                <el-table-column prop="storeId" label="所属店铺" align="center" width="120">
+                  <template slot-scope="scope">
+                    <el-tag prop="storeId" v-for="(item, index) in storeOptions"    v-if="scope.row.storeId==item.storeId">{{item.storeName}}</el-tag>
+                  </template>
+                </el-table-column>
+
+                <!-- <el-table-column prop="erpSkuName" label="erp-sku名称" width="150px" align="center">
+                  <template slot-scope="scope">
+                    <el-input type="text" v-model="scope.row.erpSkuName"/>
+                  </template>
+                </el-table-column> -->
+                <el-table-column prop="erpCode" label="erp编号" width="130px" align="center">
+                  <template slot-scope="scope">
+                    <el-input type="text" v-model="scope.row.erpCode"/>
+                  </template>
+                </el-table-column>
+
                 <el-table-column prop="price" label="售价" align="center">
                   <template slot-scope="scope">
                     <el-input type="text" v-model="scope.row.price"/>
@@ -735,6 +742,16 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-form-item label="所属店铺" prop="storeId">
+          <el-select v-model="storeIds"  multiple placeholder="请选择" clearable size="small" style="width: 100%;">
+            <el-option
+              v-for="dict in storeOptions"
+              :key="dict.storeId"
+              :label="dict.storeName"
+              :value="dict.storeId"
+            />
+          </el-select>
+        </el-form-item>
         <el-form-item label="商品详情" prop="description">
            <editor ref="myeditor"   @on-text-change="updateText" />
         </el-form-item>
@@ -814,7 +831,7 @@
             </el-select>
         </el-form-item>
         <el-form-item label="商品类型" prop="productType">
-          <el-select style="width: 240px" v-model="form.productType" placeholder="请选择商品类型" clearable size="small">
+          <el-select style="width: 240px" v-model="form.productType" placeholder="请选择商品类型" clearable size="small" >
             <el-option
                     v-for="item in productTypeOptions"
                     :key="item.dictValue"
@@ -907,6 +924,7 @@ import {
 import { getAllStoreProductCategory } from "@/api/hisStore/storeProductCategory";
 import { getAllStoreProductRule } from "@/api/hisStore/storeProductRule";
 import { getAllShippingTemplates } from "@/api/hisStore/shippingTemplates";
+import { getAllStore } from "@/api/hisStore/store";
 import { getToken } from "@/utils/auth";
 import Treeselect from "@riophae/vue-treeselect";
 import "@riophae/vue-treeselect/dist/vue-treeselect.css";
@@ -930,9 +948,56 @@ export default {
     photoArr: function(val) {
       this.form.sliderImage = val.join(',')
     },
-    drugImageArr: function(val) {
-      this.form.drugImage = val.join(',');
+    storeIds(newVal) {
+      if (newVal.length > 0&&this.form.specType===0) {
+        // 如果oneFormValidate的第一行没有绑定storeId,且已有数据
+        if (this.hasData(this.oneFormValidate[0])) {
+          // 将第一行的storeId绑定为第一个选择的storeId
+          this.oneFormValidate[0].storeId = newVal[0];
+        }
+
+        // 处理其他选中的storeId
+        for (let i = 1; i < newVal.length; i++) {
+          if (this.oneFormValidate[i]) {
+            // 如果有对应的行,更新storeId
+            this.oneFormValidate[i].storeId = newVal[i];
+          } else {
+            // 如果没有对应的行,复制第一行并替换storeId
+            this.oneFormValidate.push({
+              ...this.oneFormValidate[0],  // 复制第一行的所有数据
+              storeId: newVal[i]  // 更换storeId
+            });
+          }
+        }
+        // 如果storeIds减少了,删除多余的行
+        if (newVal.length < this.oneFormValidate.length) {
+          this.oneFormValidate.splice(newVal.length);
+        }
+      }
+      if (newVal.length > 0 && this.form.specType === 1) {
+        if (this.originalElements.length === 0) {
+          // 在第一次操作时,保存初始的manyFormValidate内容
+          this.originalElements = [...this.manyFormValidate];
+        }
+
+        // 清空manyFormValidate,以便重新填充
+        this.manyFormValidate = [];
+
+        // 根据当前storeIds重新生成manyFormValidate
+        newVal.forEach(storeId => {
+          this.originalElements.forEach(element => {
+            this.manyFormValidate.push({
+              ...element,
+              storeId,  // 为每个复制的元素绑定不同的storeId
+            });
+          });
+        });
+      } else if (newVal.length === 0) {
+        // 如果没有选择任何storeId,则重置manyFormValidate为原始内容
+        this.manyFormValidate = [...this.originalElements];
+      }
     }
+
   },
   data() {
     return {
@@ -955,16 +1020,24 @@ export default {
         // 上传的地址
         url: process.env.VUE_APP_BASE_API + "/store/storeProduct/importData"
       },
-      // 添加药品相关字段
-      isDrugOptions: [
-        { dictValue: "0", dictLabel: "否" },
-        { dictValue: "1", dictLabel: "是" }
-      ],
-
-      // 药品展示图
-      drugImageArr: [],
-
+      originalElements: [], // 用于存储原始的元素
+      //根据名字或者单号搜索获取erpSku列表
+      erpSkuList: [],
+      erpSkuStockList: [],
+      // 是否显示Erp-sku弹出层
+      erpSkuOpen:false,
+      // 是否显示Erp-库存弹出层
+      erpSkuStockOpen:false,
+      // 用于存储当前选中的部分数据
+      selectedErpSkuRow:null,
+      storeIds:[],
+      proData:null,
+      //用于存储选择的多规格的那个行数
+      selectedErpSkuRowManyForm:{
+        indexId:null,
+      },
       productTuiCateOptions:[],
+      erpSkuStatusOptions:[],
       showIput: false,
       createBnt:true,
       // 规格数据
@@ -984,7 +1057,11 @@ export default {
       // 单规格表格data
       oneFormValidate: [
         {
+          storeId:null,
+          id:'',
           image: '',
+          erpCode:'',
+          erpSkuName:'',
           price: 0,
           cost: 0,
           agentPrice: 0,
@@ -1012,10 +1089,12 @@ export default {
       storeOptions:[],
       // 遮罩层
       loading: true,
+      erpSkuLoading: true,
+      erpSkuStockLoading: true,
       // 选中数组
       ids: [],
       // 非单个禁用
-      single: false,
+      single: true,
       // 非多个禁用
       multiple: true,
       // 显示搜索条件
@@ -1023,13 +1102,19 @@ export default {
       isFullscreen: false,
       // 总条数
       total: 0,
+      //erpSku总条数
+      erpSkuTotal:0,
+
+      //erpSkuStock总条数
+      erpSkuStockTotal:0,
+
       // 商品表格数据
       storeProductList: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
       open: false,
-
+      pageSizes: [10, 20, 30, 50,100,500 ],
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -1055,6 +1140,21 @@ export default {
         contraindications: null,
         precautions: null
       },
+
+      // 查询参数
+      queryParamsErpSku: {
+        pageNum: 1,
+        pageSize: 10,
+        erpCode: null,
+        erpSkuName: null,
+      },
+          // 查询参数
+      queryParamsErpStockSku: {
+        pageNum: 1,
+        pageSize: 10,
+        erpCode: null,
+        erpSkuName: null,
+      },
       // 表单参数
       form: {},
       // 表单校验
@@ -1098,36 +1198,18 @@ export default {
         companyIds: [
           { required: true, message: "销售公司不能为空", trigger: "blur" }
         ],
-        // 药品相关字段校验(仅在是药品时必填)
-        drugImage: [
-          { required: true, message: "药品展示图不能为空", trigger: "blur" }
-        ],
-        drugRegCertNo: [
-          { required: true, message: "药品注册证书编号不能为空", trigger: "blur" }
-        ],
-        commonName: [
-          { required: true, message: "通用名称不能为空", trigger: "blur" }
-        ],
-        dosageForm: [
-          { required: true, message: "剂型不能为空", trigger: "blur" }
-        ],
-        unitPrice: [
-          { required: true, message: "单价不能为空", trigger: "blur" }
-        ],
-        batchNumber: [
-          { required: true, message: "批号不能为空", trigger: "blur" }
-        ],
-        mah: [
-          { required: true, message: "上市许可持有人不能为空", trigger: "blur" }
+
+        usageMethod: [
+          { required: true, message: "使用方法不能为空", trigger: "blur" }
         ],
-        mahAddress: [
-          { required: true, message: "上市许可持有人地址不能为空", trigger: "blur" }
+        dosaNum: [
+          { required: true, message: "每次用药数量不能为空", trigger: "blur" }
         ],
-        manufacturer: [
-          { required: true, message: "生产企业不能为空", trigger: "blur" }
+        dosaUnit: [
+          { required: true, message: "每次用药单位不能为空", trigger: "blur" }
         ],
-        manufacturerAddress: [
-          { required: true, message: "生产企业地址不能为空", trigger: "blur" }
+        frequency: [
+          { required: true, message: "用药频次不能为空", trigger: "blur" }
         ],
         indications: [
           { required: true, message: "功能主治不能为空", trigger: "blur" }
@@ -1147,6 +1229,8 @@ export default {
         storeId :[
           { required: true, message: "所属店铺不能为空", trigger: "blur"}
         ]
+
+
       }
     };
   },
@@ -1160,7 +1244,6 @@ export default {
       this.isHotOptions = response.data;
       this.isGoodOptions=response.data;
       this.isDisplayOptions=response.data;
-      console.log(response.data)
     });
     this.getDicts("store_product_type").then((response) => {
       this.productTypeOptions = response.data;
@@ -1168,6 +1251,9 @@ export default {
     this.getDicts("store_product_is_show").then((response) => {
       this.isShowOptions = response.data;
     });
+    this.getDicts("sys_erp_sku_status").then((response) => {
+      this.erpSkuStatusOptions = response.data;
+    });
     getAllShippingTemplates().then(response => {
       this.templateList =response.data;
     });
@@ -1182,6 +1268,7 @@ export default {
     });
     this.getTreeselect();
     this.getList();
+    this.getStoreList();
   },
   methods: {
     cancel1(){
@@ -1257,6 +1344,15 @@ export default {
         this.download(response.msg);
       });
     },
+    hasData(row) {
+      // 判断某行是否有数据(除了storeId以外的字段)
+      return Object.keys(row).some(key => key !== 'storeId' && row[key] !== '' && row[key] !== 0);
+    },
+    getStoreList() {
+      getAllStore().then(response => {
+        this.storeOptions = response.data;
+      });
+    },
     // 删除表格中的属性
     delAttrTable (index) {
       this.manyFormValidate.splice(index, 1);
@@ -1268,7 +1364,7 @@ export default {
     },
     //生成SKU
     generate () {
-      genFormatAttr(this.form.productId, { attrs: this.attrs }).then(res => {
+      genFormatAttr(this.form.productId, { attrs: JSON.stringify(this.attrs) ,stores:this.storeIds }).then(res => {
         if(this.form.specType === 0){
             this.oneFormValidate = res.value;
             this.form.header = res.header;
@@ -1406,15 +1502,140 @@ export default {
         this.loading = false;
       });
     },
+
+     /** 查询erpSku库存列表 */
+    getErpSkuStock(){
+      this.erpSkuStockLoading=true;
+      getERPSkuStockList(this.queryParamsErpStockSku).then(response => {
+         this.erpSkuStockList = response.data.Rows;
+         this.erpSkuStockTotal = response.data.Total;
+         this.erpSkuStockLoading = false;
+      })
+    },
+
+    //搜索Erp-Sku商品库存信息
+    searchFormErpSkuStock(){
+      this.queryParamsErpStockSku.pageNum=1;
+      this.getErpSkuStock();
+    },
+
+
+    /** 查询erpSku列表 */
+    getErpSku(){
+      this.erpSkuLoading=true;
+      getERPSkuList(this.queryParamsErpSku).then(response => {
+        this.erpSkuList = response.data.Rows;
+        this.erpSkuTotal = response.data.Total;
+        this.erpSkuLoading = false;
+      })
+    },
+
+    //搜索Erp-Sku商品信息
+    searchFormErpSku(){
+      this.queryParamsErpSku.pageNum=1;
+      this.getErpSku();
+    },
+
+     //换绑
+    changeErpSku(erpCode,index){
+      this.queryParamsErpSku.erpCode=erpCode;
+      if (this.form.specType==0){
+        this.erpSkuOpen = true;
+        this.title="绑定Erp-Sku商品编码";
+        this.getErpSku();
+      }else {
+        this.selectedErpSkuRowManyForm.indexId=index;
+        this.erpSkuOpen = true;
+        this.title="绑定Erp-Sku商品编码";
+        this.getErpSku();
+      }
+
+    },
+
+     //同步库存
+    changeErpSkuStock(erpCode){
+        //this.queryParamsErpSku.pageNum=1;
+        this.erpSkuStockOpen=true;
+        this.title="绑定Erp-Sku商品库存";
+        this.queryParamsErpStockSku.erpCode=erpCode;
+        this.getErpSkuStock();
+    },
+
+
+
     // 取消按钮
     cancel() {
       this.open = false;
       this.reset();
     },
+    // 取消Erp-Sku按钮
+    erpSkuCancel(){
+      this.erpSkuOpen = false;
+    },
+    //换绑操作
+    erpSkuConfirmBind() {
+      if(this.selectedErpSkuRow==null){
+          this.$message({
+            type: 'error',
+            message: '请选择erp商品'
+          });
+         return;
+      }
+      //延时一点点,防止第一次点击过快时 选择未赋值上
+      setTimeout(() => {
+        this.$confirm(`确定要将\n\r商品编码/货号:${this.selectedErpSkuRow.wareid}\n\r品名:${this.selectedErpSkuRow.warename}\n\r绑定到当前商品吗?`, '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning',
+          center: true  // 居中显示
+        }).then(() => {
+          // 用户点击确定后的逻辑
+          this.erpSkuHandleBind();
+        }).catch(() => {
+          // 用户点击取消后的逻辑
+          this.$message({
+            type: 'info',
+            message: '已取消换绑操作'
+          });
+        });
+
+      }, 200);
+
+    },
+
+    erpSkuHandleBind() {
+      if (this.form.specType==0){
+        this.oneFormValidate[0].erpCode=this.selectedErpSkuRow.wareid
+        this.oneFormValidate[0].erpSkuName=this.selectedErpSkuRow.warename
+        this.oneFormValidate[0].stock=this.selectedErpSkuRow.ku
+        // 操作完成后,可以给用户一个提示
+        this.$message.success('当前已替换,请在修改页面确认后生效!');
+        this.erpSkuOpen=false
+      }else if (this.form.specType==1) {
+        this.manyFormValidate[this.selectedErpSkuRowManyForm.indexId].erpCode=this.selectedErpSkuRow.wareid
+        this.manyFormValidate[this.selectedErpSkuRowManyForm.indexId].erpSkuName=this.selectedErpSkuRow.warename
+        this.manyFormValidate[this.selectedErpSkuRowManyForm.indexId].stock=this.selectedErpSkuRow.ku
+        this.$message.success('当前已替换,请在修改页面确认后生效!');
+        this.erpSkuOpen=false
+      }
+
+    },
+
+    //取消Erp-Sku搜索
+    erpSkuCancelSearch(){
+      this.queryParamsErpSku.pageNum=1;
+      this.queryParamsErpSku.pageSize=10;
+      this.queryParamsErpSku.erpCode=null;
+      this.queryParamsErpSku.erpSkuName=null;
+      this.selectedErpSkuRow.wareid=null;
+      this.selectedErpSkuRow.warename=null;
+      this.getErpSku();
+    },
     // 表单重置
     reset() {
       this.form = {
-        productId: null,
+        productId: 0,
+        storeId:null,
         image: null,
         video: null,
         sliderImage: null,
@@ -1472,13 +1693,18 @@ export default {
         dosage: null, // 用法用量
         adverseReactions: null, // 不良反应
         contraindications: null, // 禁忌
-        precautions: null // 注意事项
+        precautions: null, // 注意事项
+        isShowDetails:"1",
+        usageMethod:"",
+        dosaNum:null,
+        dosaUnit:"",
+        frequency:"",
+        icdName:""
       };
-      // 重置药品展示图
-      this.drugImageArr = [];
       this.resetForm("form");
       this.oneFormValidate = [
         {
+          id:'',
           image: '',
           price: 0,
           agentPrice: 0,
@@ -1486,6 +1712,8 @@ export default {
           otPrice: 0,
           stock: 0,
           barCode: '',
+          erpCode:'',
+          erpSkuName:'',
           weight: 0,
           volume: 0,
           integral: 0,
@@ -1514,6 +1742,35 @@ export default {
       this.single = selection.length!==1
       this.multiple = !selection.length
     },
+
+    getRowKeys(row) {
+      // 返回每行的唯一键,通常是ID
+      return row.wareid;
+    },
+    handleSelect(selection, row) {
+      // 当用户选择一行时,取消选择其他行
+      if (selection.length > 0 && this.selectedErpSkuRow !== row) {
+          this.$refs.erpTable.clearSelection();
+          this.$refs.erpTable.toggleRowSelection(row, true);
+          this.selectedErpSkuRow = row;
+      }
+    },
+
+    //Erp-sku绑定选择
+    handleSelectionChangeErpSku(selection){
+      console.log("qxj handleSelectionChangeErpSku:"+JSON.stringify(selection));
+      if (selection.length > 0) {
+         const row=selection[0];
+         this.selectedErpSkuRow = row;
+         //选择的数据存起来
+        //  this.selectedErpSkuRow.wareid=row.wareid
+        //  this.selectedErpSkuRow.warename=row.warename
+        //  this.selectedErpSkuRow.ku=row.ku
+      } else {
+          this.selectedErpSkuRow = null;
+      }
+    },
+
     /** 新增按钮操作 */
     handleAdd() {
       this.reset();
@@ -1536,14 +1793,49 @@ export default {
       this.reset();
       const productId = row.productId || this.ids
       getStoreProduct(productId).then(response => {
+        this.proData=response;
         this.form = response.data;
-        this.form.isShow = response.data.isShow.toString();
-        this.form.isHot = response.data.isHot.toString();
-        this.form.isGood = response.data.isGood.toString();
-        this.form.isBest = response.data.isBest.toString();
-        this.form.isNew = response.data.isNew.toString();
-        this.form.productType = response.data.productType.toString();
-        this.form.isDisplay = response.data.isDisplay.toString();
+        if( response.data.isShow){
+          this.form.isShow = response.data.isShow.toString();
+        } else {
+          this.form.isShow = null
+        }
+        if( response.data.isHot){
+          this.form.isHot = response.data.isHot.toString();
+        } else {
+          this.form.isHot = null
+        }
+        if( response.data.isGood){
+          this.form.isGood = response.data.isGood.toString();
+        } else {
+          this.form.isGood = null
+        }
+        if( response.data.isBest){
+          this.form.isBest = response.data.isBest.toString();
+        } else {
+          this.form.isBest = null
+        }
+        if( response.data.isNew){
+          this.form.isNew = response.data.isNew.toString();
+        } else {
+          this.form.isNew = null
+        }
+        if( response.data.productType){
+          this.form.productType = response.data.productType.toString();
+        } else {
+          this.form.productType = null
+        }
+        if( response.data.isDisplay){
+          this.form.isDisplay = response.data.isDisplay.toString();
+        } else {
+          this.form.isDisplay = null
+        }
+        if( response.data.isShowDetails){
+          this.form.isShowDetails = response.data.isShowDetails.toString();
+        } else {
+          this.form.isShowDetails = null
+        }
+
         if(this.form.tuiCateId!=null){
           this.form.tuiCateId = response.data.tuiCateId.toString();
         }
@@ -1551,20 +1843,24 @@ export default {
         this.form.isDrug = response.data.isDrug ? response.data.isDrug.toString() : "1";
         if (this.form.drugImage != null) {
           this.drugImageArr = this.form.drugImage.split(",");
+        this.storeIds=[];
+        if(this.form.storeId!=null){
+           let storeIds=this.form.storeId.split(",");
+           console.log("qxj storeIds:"+storeIds);
+           storeIds.forEach(item => {
+               this.storeIds.push(parseInt(item));
+           });
         }
-
+       this.attrs=[];
         //组装attrs数据
-        if(response.attrs!=null){
-          this.attrs=[];
-          response.attrs.forEach(function (item, index) {
-             var data={value:item.attrName,detail:item.attrValues.split(',')}
-             that.attrs.push(data);
-          });
-        }
-        // 组装companyIds
-        if (response.data.companyIds != null && response.data.companyIds != undefined && response.data.companyIds.length > 0) {
-          this.form.companyIds = response.data.companyIds.split(',').map(Number);
+        if(this.proData.attrs!=null){
+            this.proData.attrs.forEach(function (item, index) {
+              var data={value:item.attrName,detail:item.attrValues.split(',')}
+              that.attrs.push(data);
+            });
+
         }
+
         setTimeout(() => {
           that.generate();
         }, 200);
@@ -1574,13 +1870,17 @@ export default {
           that.createBnt = true;
           that.oneFormValidate = [
             {
+              id:'',
               image: '',
               price: 0,
+              productId:'',
               agentPrice: 0,
               cost: 0,
               otPrice: 0,
               stock: 0,
               barCode: '',
+              erpCode:'',
+              erpSkuName:'',
               weight: 0,
               volume: 0,
               integral: 0,
@@ -1622,6 +1922,9 @@ export default {
           if(this.form.specType === 1 && this.manyFormValidate.length===0){
             return this.$message.warning('请点击生成规格!');
           }
+          if(this.storeIds.length>0){
+            this.form.storeId=this.storeIds.join(",");
+          }
           // 组装companyIds
           if (this.form.companyIds != null && this.form.companyIds != undefined) {
             this.form.companyIds = this.form.companyIds.join(',');
@@ -1636,6 +1939,7 @@ export default {
         }
       });
     },
+
     /** 删除按钮操作 */
     handleDelete(row) {
       const productIds = row.productId || this.ids;
@@ -1666,3 +1970,15 @@ export default {
   }
 };
 </script>
+
+<style lang="scss" scoped>
+  /deep/.pagination-container{
+       margin-bottom: 30px;
+       margin-top: 15px;
+  }
+  ::v-deep {
+    .el-dialog:not(.is-fullscreen) {
+      margin-top:0 !important;
+    }
+  }
+</style>