Bläddra i källkod

多店铺店铺端修改

chenguo 1 vecka sedan
förälder
incheckning
535913b990

+ 3 - 0
.env.development

@@ -7,5 +7,8 @@ ENV = 'development'
 # 互联网医院管理系统/开发环境
 VUE_APP_BASE_API = '/dev-api'
 
+#新商城SCRM表
+VUE_APP_NEW_STORE = '1'
+
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 109 - 0
src/api/company/company.js

@@ -0,0 +1,109 @@
+import request from '@/utils/request'
+
+// 查询企业列表
+export function listCompany(query) {
+  return request({
+    url: '/company/company/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function allList(query) {
+  return request({
+    url: '/company/company/allList',
+    method: 'get',
+    params: query
+  })
+}
+// 查询企业详细
+export function getCompany(companyId) {
+  return request({
+    url: '/company/company/' + companyId,
+    method: 'get'
+  })
+}
+
+// 新增企业
+export function addCompany(data) {
+  return request({
+    url: '/company/company',
+    method: 'post',
+    data: data
+  })
+}
+export function resetPwd(companyId) {
+  return request({
+    url: '/company/company/resetPwd/'+companyId,
+    method: 'post'
+  })
+}
+
+
+
+// 修改企业
+export function updateCompany(data) {
+  return request({
+    url: '/company/company',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除企业
+export function delCompany(companyId) {
+  return request({
+    url: '/company/company/' + companyId,
+    method: 'delete'
+  })
+}
+
+// 导出企业
+export function exportCompany(query) {
+  return request({
+    url: '/company/company/export',
+    method: 'get',
+    params: query
+  })
+}
+
+export function getCompanyList() {
+  return request({
+    url: '/company/company/getCompanyList',
+    method: 'get'
+  })
+}
+export function recharge(data) {
+  return request({
+    url: '/company/company/recharge',
+    method: 'post',
+    data: data
+  })
+}
+export function deduct(data) {
+  return request({
+    url: '/company/company/deduct',
+    method: 'post',
+    data: data
+  })
+}
+
+
+
+// 查询企业列表
+export function crmDayCountlist(query) {
+  return request({
+    url: '/company/company/crmDayCountlist',
+    method: 'get',
+    params: query
+  })
+}
+
+//查询区域
+export function getCitysArea(query) {
+  return request({
+    url: '/his/city/getCitysArea',
+    method: 'get',
+    params: query
+  })
+}

+ 0 - 0
src/api/store/doctorextract.js → src/api/store/doctorExtract.js


+ 19 - 0
src/api/store/operlog.js

@@ -0,0 +1,19 @@
+import request from '@/utils/request'
+
+// 查询操作日志列表
+export function list(query) {
+  return request({
+    url: '/operlogScrm/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 导出操作日志
+export function exportOperlog(query) {
+  return request({
+    url: '/operlogScrm/export',
+    method: 'get',
+    params: query
+  })
+}

+ 59 - 0
src/api/store/shippingTemplates.js

@@ -0,0 +1,59 @@
+import request from '@/utils/request'
+
+// 查询运费模板列表
+export function listShippingTemplates(query) {
+  return request({
+    url: '/store/shippingTemplates/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询运费模板详细
+export function getShippingTemplates(shippingId) {
+  return request({
+    url: '/store/shippingTemplates/' + shippingId,
+    method: 'get'
+  })
+}
+
+// 新增运费模板
+export function addShippingTemplates(data) {
+  return request({
+    url: '/store/shippingTemplates',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改运费模板
+export function updateShippingTemplates(data) {
+  return request({
+    url: '/store/shippingTemplates',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除运费模板
+export function delShippingTemplates(shippingId) {
+  return request({
+    url: '/store/shippingTemplates/' + shippingId,
+    method: 'delete'
+  })
+}
+
+// 导出运费模板
+export function exportShippingTemplates(query) {
+  return request({
+    url: '/store/shippingTemplates/export',
+    method: 'get',
+    params: query
+  })
+}
+export function getAllShippingTemplates() {
+  return request({
+    url: '/store/shippingTemplates/getAllList',
+    method: 'get'
+  })
+}

+ 0 - 0
src/api/store/storebill.js → src/api/store/storeBill.js


+ 0 - 0
src/api/store/storeextract.js → src/api/store/storeExtract.js


+ 81 - 0
src/api/store/storeProduct.js

@@ -92,3 +92,84 @@ export function exportProduct(query) {
     params: query
   })
 }
+
+// 查询商品列表
+export function listStoreProduct(query) {
+  return request({
+    url: '/store/storeProduct/list',
+    method: 'get',
+    params: query
+  })
+}
+
+export function batchModify(param) {
+  return request({
+    url: '/store/storeProduct/batchModify',
+    method: 'post',
+    data: param
+  })
+}
+
+export function batchAudit(param) {
+  return request({
+    url: '/store/storeProduct/batchAudit',
+    method: 'post',
+    data: param
+  })
+}
+
+// 查询商品详细
+export function getStoreProduct(productId) {
+  return request({
+    url: '/store/storeProduct/' + productId,
+    method: 'get'
+  })
+}
+
+
+
+// 删除商品
+export function delStoreProduct(productId) {
+  return request({
+    url: '/store/storeProduct/' + productId,
+    method: 'delete'
+  })
+}
+
+// 导出商品
+export function exportStoreProduct(query) {
+  return request({
+    url: '/store/storeProduct/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function getStoreProductAttrValueList(query) {
+  return request({
+    url: '/store/storeProduct/getStoreProductAttrValueList',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function getStoreTuiProductAttrValueList(query) {
+  return request({
+    url: '/store/storeProduct/getStoreTuiProductAttrValueList',
+    method: 'get',
+    params: query
+  })
+}
+
+export function productBySearCh(query) {
+  return request({
+    url: '/store/storeProduct/listBySearch',
+    method: 'get',
+    params: query
+  })
+}
+
+
+

+ 61 - 0
src/api/store/storeProductRule.js

@@ -0,0 +1,61 @@
+import request from '@/utils/request'
+
+// 查询商品规则值(规格)列表
+export function listStoreProductRule(query) {
+  return request({
+    url: '/store/storeProductRule/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询商品规则值(规格)详细
+export function getStoreProductRule(id) {
+  return request({
+    url: '/store/storeProductRule/' + id,
+    method: 'get'
+  })
+}
+
+// 新增商品规则值(规格)
+export function addStoreProductRule(data) {
+  return request({
+    url: '/store/storeProductRule',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改商品规则值(规格)
+export function updateStoreProductRule(data) {
+  return request({
+    url: '/store/storeProductRule',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除商品规则值(规格)
+export function delStoreProductRule(id) {
+  return request({
+    url: '/store/storeProductRule/' + id,
+    method: 'delete'
+  })
+}
+
+// 导出商品规则值(规格)
+export function exportStoreProductRule(query) {
+  return request({
+    url: '/store/storeProductRule/export',
+    method: 'get',
+    params: query
+  })
+}
+
+
+export function getAllStoreProductRule() {
+  return request({
+    url: '/store/storeProductRule/getAllList',
+    method: 'get'
+  })
+}

+ 15 - 2
src/router/index.js

@@ -95,7 +95,7 @@ export const constantRoutes = [
     children: [
       {
         path: 'DrugList',
-        component: (resolve) => require(['@/views/store/storeProduct/index'], resolve),
+        component: (resolve) => require(['@/views/store/storeProduct/index.vue'], resolve),
         name: '药品列表',
         meta: { title: '药品列表', icon: 'list', noCache: true, affix: false }
       },
@@ -172,7 +172,20 @@ export const constantRoutes = [
           meta: { title: '药品销售统计', icon: 'textarea', noCache: true, affix: false }
         }
       ]
-    },
+   }/* ,
+    {
+      path: '/storeLog',
+      component: Layout,
+      redirect: 'noredirect',
+      children: [
+        {
+          path: 'StoreLog',
+          component: (resolve) => require(['@/views/store/storeLog/storeLog'], resolve),
+          name: '日志查询',
+          meta: { title: '日志查询', icon: 'log', noCache: true, affix: false }
+        },
+      ]
+    } */
 
 
 ]

+ 2 - 2
src/store/modules/user.js

@@ -63,10 +63,10 @@ const user = {
           } else {
             commit('SET_ROLES', ['ROLE_DEFAULT'])
           }
-          commit('SET_NAME', user.userName)
+          commit('SET_NAME', user.storeName)
           commit('SET_AVATAR', avatar)
           commit('SET_STOREID', user.storeId)
-      
+
           resolve(res)
         }).catch(error => {
           reject(error)

+ 10 - 0
src/utils/request.js

@@ -14,6 +14,16 @@ const service = axios.create({
 })
 // request拦截器
 service.interceptors.request.use(config => {
+
+  const isNewStore = process.env.VUE_APP_NEW_STORE;
+  if (isNewStore === '1' && (config.url.startsWith('/store')
+    || config.url.startsWith('/system/user/profile')
+    || config.url.startsWith('/login')
+    || config.url.startsWith('/operlogScrm')
+    || config.url.startsWith('/getInfo'))) {
+    config.url = '/store'+ config.url ;
+    config.headers['isNewStore']= isNewStore;
+  }
   // 是否需要设置 token
   const isToken = (config.headers || {}).isToken === false
   if (getToken() && !isToken) {

+ 0 - 0
src/views/components/store/storebillDetails.vue → src/views/components/store/storeBillDetails.vue


+ 300 - 0
src/views/store/storeLog/storeLog.vue

@@ -0,0 +1,300 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="系统模块" prop="title">
+        <el-input
+          v-model="queryParams.title"
+          placeholder="请输入系统模块"
+          clearable
+          style="width: 240px;"
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="操作人员" prop="operName">
+        <el-input
+          v-model="queryParams.operName"
+          placeholder="请输入操作人员"
+          clearable
+          style="width: 240px;"
+          size="small"
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="类型" prop="businessType">
+        <el-select
+          v-model="queryParams.businessType"
+          placeholder="操作类型"
+          clearable
+          size="small"
+          style="width: 240px"
+        >
+          <el-option
+            v-for="dict in typeOptions"
+            :key="dict.dictValue"
+            :label="dict.dictLabel"
+            :value="dict.dictValue"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="状态" prop="status">
+        <el-select
+          v-model="queryParams.status"
+          placeholder="操作状态"
+          clearable
+          size="small"
+          style="width: 240px"
+        >
+          <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="mainType">
+        <el-radio-group v-model="queryParams.mainType">
+          <el-radio-button label="0" >店铺</el-radio-button>
+          <el-radio-button label="1" >商品</el-radio-button>
+        </el-radio-group>
+      </el-form-item>
+      <el-form-item label="操作时间">
+        <el-date-picker
+          v-model="dateRange"
+          size="small"
+          style="width: 240px"
+          value-format="yyyy-MM-dd"
+          type="daterange"
+          range-separator="-"
+          start-placeholder="开始日期"
+          end-placeholder="结束日期"
+        ></el-date-picker>
+      </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="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          :loading="exportLoading"
+          @click="handleExport"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table ref="tables" v-loading="loading" :data="list" @selection-change="handleSelectionChange" :default-sort="defaultSort" @sort-change="handleSortChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="日志编号" align="center" prop="operId" />
+      <el-table-column label="系统模块" align="center" prop="title" />
+      <el-table-column label="操作类型" align="center" prop="businessType">
+        <template slot-scope="scope">
+          <dict-tag :options="typeOptions" :value="scope.row.businessType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="请求方式" align="center" prop="requestMethod" />
+      <el-table-column label="操作人员" align="center" prop="operName" width="100" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
+      <el-table-column label="操作地址" align="center" prop="operIp" width="130" :show-overflow-tooltip="true" />
+      <el-table-column label="操作地点" align="center" prop="operLocation" :show-overflow-tooltip="true" />
+      <el-table-column label="日志主体" align="center" prop="mainType" :show-overflow-tooltip="true" :formatter="mainTypeFormatter"/>
+      <el-table-column label="描述" align="center" prop="des" :show-overflow-tooltip="true" />
+      <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="operTime" sortable="custom" :sort-orders="['descending', 'ascending']" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.operTime) }}</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-view"
+            @click="handleView(scope.row,scope.index)"
+          >详细</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="操作日志详细" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" label-width="100px" size="mini">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="操作模块:">{{ form.title }} / {{ typeFormat(form) }}</el-form-item>
+            <el-form-item
+              label="登录信息:"
+            >{{ form.operName }} / {{ form.operIp }} / {{ form.operLocation }}</el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="请求地址:">{{ form.operUrl }}</el-form-item>
+            <el-form-item label="请求方式:">{{ form.requestMethod }}</el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="操作方法:">{{ form.method }}</el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="请求参数:">{{ form.operParam }}</el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="返回参数:">{{ form.jsonResult }}</el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="操作状态:">
+              <div v-if="form.status === 0">正常</div>
+              <div v-else-if="form.status === 1">失败</div>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="操作时间:">{{ parseTime(form.operTime) }}</el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="异常信息:" v-if="form.status === 1">{{ form.errorMsg }}</el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="open = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { list,exportOperlog } from "@/api/store/operlog";
+
+export default {
+  name: "Operlog",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 导出遮罩层
+      exportLoading: false,
+      // 选中数组
+      ids: [],
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 表格数据
+      list: [],
+      // 是否显示弹出层
+      open: false,
+      // 类型数据字典
+      typeOptions: [],
+      // 类型数据字典
+      statusOptions: [],
+      // 日期范围
+      dateRange: [],
+      // 默认排序
+      defaultSort: {prop: 'operTime', order: 'descending'},
+      // 表单参数
+      form: {},
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        title: undefined,
+        operName: undefined,
+        businessType: undefined,
+        status: undefined
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getDicts("sys_oper_type").then(response => {
+      this.typeOptions = response.data;
+    });
+    this.getDicts("sys_common_status").then(response => {
+      this.statusOptions = response.data;
+    });
+  },
+  methods: {
+    /** 查询登录日志 */
+    getList() {
+      this.loading = true;
+      list(this.addDateRange(this.queryParams, this.dateRange)).then( response => {
+          this.list = response.rows;
+          this.total = response.total;
+          this.loading = false;
+        }
+      );
+    },
+    mainTypeFormatter(row, column, cellValue){
+      return cellValue === 0 ? '店铺' : '商品';
+    },
+    // 操作日志类型字典翻译
+    typeFormat(row, column) {
+      return this.selectDictLabel(this.typeOptions, row.businessType);
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.dateRange = [];
+      this.resetForm("queryForm");
+      this.$refs.tables.sort(this.defaultSort.prop, this.defaultSort.order)
+      this.handleQuery();
+    },
+    /** 多选框选中数据 */
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.operId)
+      this.multiple = !selection.length
+    },
+    /** 排序触发事件 */
+    handleSortChange(column, prop, order) {
+      this.queryParams.orderByColumn = column.prop;
+      this.queryParams.isAsc = column.order;
+      this.getList();
+    },
+    /** 详细按钮操作 */
+    handleView(row) {
+      this.open = true;
+      this.form = row;
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有操作日志数据项?', "警告", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        }).then(() => {
+          this.exportLoading = true;
+          return exportOperlog(queryParams);
+        }).then(response => {
+          this.download(response.msg);
+          this.exportLoading = false;
+        }).catch(() => {});
+    }
+  }
+};
+</script>
+

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 655 - 388
src/views/store/storeProduct/index.vue


Vissa filer visades inte eftersom för många filer har ändrats