Selaa lähdekoodia

Merge branch 'deploy' of http://git.chelingzhu.com/chelingzhu-web/zxyj-admin-html into deploy

lilei 4 vuotta sitten
vanhempi
commit
183e9527bf

+ 9 - 0
src/api/goods.js

@@ -11,6 +11,15 @@ export const goodsList = (params) => {
     method: 'post'
   })
 }
+// 查分类商品列表  不分页
+export const goodsListQuery = (params) => {
+  const url = `/goods/queryList`
+  return axios.request({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
 // 保存商品
 export const goodsSave = (params) => {
   return axios.request({

+ 38 - 6
src/config/router.config.js

@@ -89,6 +89,7 @@ export const asyncRouterMap = [{
       }
       ]
     },
+	
     {
       path: '/shop/goods',
       redirect: '/shop/goods/list',
@@ -157,6 +158,37 @@ export const asyncRouterMap = [{
     }
     ]
   },
+  {
+    path: '/businessManage',
+    redirect: '/businessManag/userManage',
+    component: PageView,
+    meta: {
+      title: '商户管理',
+      icon: 'appstore'
+      // permission: 'M_appSetting'
+    },
+    children: [{
+      path: '/businessManage/userManage',
+      name: 'userManage',
+      component: () => import(/* webpackChunkName: "tenants" */ '@/views/businessManage/userManage/userManage.vue'),
+      meta: {
+        title: '用户管理',
+        icon: 'folder'
+        // permission: 'M_tenants_list'
+      }
+    },
+    {
+      path: '/businessManage/partnerManage',
+      name: 'partnerManage',
+      component: () => import(/* webpackChunkName: "tenants" */ '@/views/businessManage/partnerManage/partnerManage.vue'),
+      meta: {
+        title: '合作商管理',
+        icon: 'solution'
+        // permission: 'M_tenants_list'
+      }
+    }
+    ]
+  },
   {
     path: '/equipmentManage',
     redirect: '/equipmentManage/network',
@@ -247,8 +279,8 @@ export const asyncRouterMap = [{
     component: PageView,
     meta: {
       title: '商城设置',
-      icon: 'appstore'
-      // permission: 'M_appSetting'
+      icon: 'appstore',
+      permission: 'M_goodsClass_list'
     },
     children: [{
       path: '/shopSetting/goodsClass',
@@ -256,8 +288,8 @@ export const asyncRouterMap = [{
       component: () => import(/* webpackChunkName: "tenants" */ '@/views/shopSetting/goodsClass.vue'),
       meta: {
         title: '商品分类管理',
-        icon: 'folder'
-        // permission: 'M_tenants_list'
+        icon: 'folder',
+        permission: 'M_goodsClass_list'
       }
     },
     {
@@ -266,8 +298,8 @@ export const asyncRouterMap = [{
       component: () => import(/* webpackChunkName: "tenants" */ '@/views/shopSetting/supplier.vue'),
       meta: {
         title: '供货商管理',
-        icon: 'solution'
-        // permission: 'M_tenants_list'
+        icon: 'solution',
+        permission: 'M_supplier_list'
       }
     }
     ]

+ 169 - 0
src/views/businessManage/partnerManage/addPartnerModal.vue

@@ -0,0 +1,169 @@
+<template>
+  <div>
+    <!-- 弹窗 -->
+    <a-modal
+      v-model="isShow"
+      @cancle="isShow=false"
+      :footer="null"
+      width="60%"
+      :centered="true"
+      :title="titleText">
+      <a-form id="components-form-demo-validate-other" ref="form" :form="form" v-bind="formItemLayout" @submit="handleSubmit">
+        <a-form-item label="供应商名称" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
+          <a-input
+            id="addSupplierModal-name"
+            :maxLength="30"
+            v-decorator="['formData.name', { initialValue: formData.name,getValueFromEvent: $filterEmpty, rules: [{ required: true, message: '请输入供应商名称(最多30个字符)!' }] }]"
+            placeholder="请输入供应商名称(最多30个字符)"
+            allowClear />
+        </a-form-item>
+        <a-form-item label="供应商简称" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
+          <a-input
+            id="addSupplierModal-simpleName"
+            :maxLength="30"
+            v-decorator="['formData.simpleName', { initialValue: formData.simpleName,getValueFromEvent: $filterEmpty, rules: [{ required: true, message: '请输入供应商简称(最多30个字符)!' }] }]"
+            placeholder="请输入供应商简称(最多30个字符)"
+            allowClear />
+        </a-form-item>
+        <a-form-item label="联系人" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
+          <a-input
+            id="addSupplierModal-contactName"
+            :maxLength="30"
+            v-decorator="['formData.contactName', { initialValue: formData.contactName,getValueFromEvent: $filterEmpty, rules: [{ required: true, message: '请输入联系人!' }] }]"
+            placeholder="请输入联系人"
+            allowClear />
+        </a-form-item>
+        <a-form-item label="手机号码" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
+          <a-input
+            id="addSupplierModal-contactPhone"
+            :maxLength="11"
+            v-decorator="['formData.contactPhone', { initialValue: formData.contactPhone,getValueFromEvent: $filterEmpty, rules: [{ required: true, message: '请输入手机号码!' }] }]"
+            placeholder="请输入手机号码"
+            allowClear />
+        </a-form-item>
+        <a-form-item label="备注" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
+          <a-textarea
+            :maxLength="500"
+            v-decorator="['formData.remarks', { initialValue: formData.remarks, rules: [{ required: false, message: '请输入备注内容(最多500个字符)!' }] }]"
+            id="addSupplierModal-remarks"
+            placeholder="请输入备注内容(最多500个字符)"
+            allowClear />
+        </a-form-item>
+        <a-form-item :wrapper-col="{ span: 12, offset: 6}" style="text-align: center;">
+          <a-button type="primary" html-type="submit" id="addSupplierModal-submit" style="margin-right: 15px">保存</a-button>
+          <a-button @click="isShow=false" style="margin-left: 15px" id="addSupplierModal-close">取消</a-button>
+        </a-form-item>
+      </a-form>
+    </a-modal>
+  </div>
+</template>
+
+<script>
+import {
+  supplierDetails,
+  saveSupplier
+} from '@/api/shopSetting.js'
+export default {
+  name: 'AddPartnerModal',
+  props: {
+    openSupplierModal: {
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: String,
+      default: ''
+    },
+    itemData: {
+	  type: Object,
+	  default: function () {
+	    return {}
+	  }
+    }
+  },
+  data () {
+    return {
+      formItemLayout: {
+        labelCol: {
+          span: 6
+        },
+        wrapperCol: {
+          span: 14
+        }
+      },
+	  titleText: '新增',
+      isShow: this.openSupplierModal,
+      form: this.$form.createForm(this, { name: 'addSupplierModal' }),
+      formData: {
+        name: '', // 名称
+        simpleName: '', // 简称
+        contactName: '', // 联系人
+        remarks: '', // 备注
+        contactPhone: '' // 手机号码
+      }
+    }
+  },
+  methods: {
+    // 查看详情
+    getPageInfo () {
+      supplierDetails({
+        id: this.itemId
+      }).then(res => {
+        if (res.status == 200) {
+          // this.form.setFieldsValue({ 'formData': res.data })
+          this.form.setFieldsValue({ 'formData.name': res.data.name })
+          this.form.setFieldsValue({ 'formData.contactName': res.data.contactName })
+          this.form.setFieldsValue({ 'formData.simpleName': res.data.simpleName })
+          this.form.setFieldsValue({ 'formData.contactPhone': res.data.contactPhone })
+          this.form.setFieldsValue({ 'formData.remarks': res.data.remarks })
+        }
+      })
+    },
+    // 点击保存;
+    handleSubmit (e) {
+      e.preventDefault()
+      const _this = this
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          const formData = Object.assign({}, this.itemData, this.formData, values.formData)
+          formData.id = _this.itemId
+          saveSupplier(formData).then(res => {
+            console.log(res, 'rrrrrrrrr')
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$emit('refresh')
+              setTimeout(function () {
+                _this.isShow = false
+              }, 300)
+            }
+          })
+        }
+      })
+    }
+  },
+  watch: {
+    openSupplierModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    isShow (val) {
+      if (!val) {
+        this.$emit('close')
+      } else {
+   	  this.form.resetFields()
+      }
+    },
+    itemId (newValue, oldValue) {
+      console.log(newValue, '----------id')
+      if (newValue && this.isShow) {
+        this.titleText = '编辑'
+        this.getPageInfo(newValue)
+      } else {
+   	  this.titleText = '新增'
+      }
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 223 - 0
src/views/businessManage/partnerManage/partnerManage.vue

@@ -0,0 +1,223 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 搜索框 -->
+    <div class="table-page-search-wrapper" style="margin-bottom: 15px;">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="48">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="供应商名称"><a-input allowClear v-model.trim="searchData.name" :maxLength="30" placeholder="请输入" id="OperateJournal-name"/></a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-button style="margin-right: 10px;" type="primary" @click="$refs.table.refresh(true)" id="OperateJournal-refreshTable">查询</a-button>
+            <a-button type="" @click="resetForm" id="OperateJournal-resetForm">重置</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <div class="add"><a-button type="primary" icon="plus" class="addBtn" @click="showModal" id="bannerSetting-showModal">新增</a-button></div>
+    <!-- table列表 -->
+    <s-table
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      bordered>
+      <span slot="action" slot-scope="text, record">
+        <a-icon
+          v-if="record.state==0"
+          type="edit"
+          id="bannerSetting-handleEdit"
+          title="编辑"
+          class="actionBtn icon-blues"
+          @click="handleEdit(record)" />
+        <span v-if="record.state==1">--</span>
+      </span>
+      <span slot="state" slot-scope="text, record">
+        <a-switch
+          checkedChildren="启用"
+          unCheckedChildren="禁用"
+          id="bannerSetting-changeFlagHandle"
+          :checked="record.state == 1 ? true : false"
+          @change="changeFlagHandle(text, record)"
+        />
+      </span>
+    </s-table>
+    <!-- 新增编辑弹窗 -->
+    <add-partner-modal :itemId="itemId" :itemData="itemData" :openSupplierModal="openSupplierModal" @refresh="$refs.table.refresh(true)" @close="cancel"></add-partner-modal>
+  </a-card>
+</template>
+
+<script>
+import { Upload, STable, VSelect } from '@/components'
+import { getSupplierList, changeSupplierStatus } from '@/api/shopSetting.js'
+import addPartnerModal from './addPartnerModal.vue'
+export default {
+  components: {
+    STable,
+    Upload,
+    VSelect,
+    addPartnerModal
+  },
+  data () {
+    return {
+      searchData: { name: '' },
+	  openSupplierModal: false, // 默认关闭弹窗
+	  itemId: null, // 编辑行id
+	  itemData: {}, // 编辑行数据
+      // 表头
+      columns: [
+        {
+          title: '序号',
+          dataIndex: 'no',
+          width: 60,
+          align: 'center'
+        },
+        {
+          title: '供应商名称',
+          width: 200,
+          dataIndex: 'name',
+          align: 'center'
+        },
+        {
+          title: '供应商简称',
+          width: 100,
+          dataIndex: 'simpleName',
+          align: 'center'
+        },
+        {
+		  title: '联系人',
+		  width: 100,
+		  dataIndex: 'contactName',
+		  align: 'center'
+        },
+        {
+		  title: '手机号码',
+		  width: 100,
+		  dataIndex: 'contactPhone',
+		  align: 'center',
+		  scopedSlots: {
+		    customRender: 'position'
+		  }
+        },
+        {
+          title: '状态',
+          width: 100,
+          dataIndex: 'state',
+          align: 'center',
+          scopedSlots: {
+            customRender: 'state'
+          }
+        },
+        {
+		  title: '备注',
+		  width: 200,
+		  dataIndex: 'remarks',
+		  align: 'center',
+		  customRender: (text) => {
+		    return text || '--'
+		  }
+        },
+        {
+          title: '操作',
+          align: 'center',
+          width: 100,
+          scopedSlots: {
+            customRender: 'action'
+          }
+        }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        return getSupplierList(
+          Object.assign(parameter, this.searchData)
+        ).then(res => {
+          const no = (res.data.pageNo - 1) * res.data.pageSize
+		   if (res.status == 200) {
+            for (let i = 0; i < res.data.list.length; i++) {
+			  const _item = res.data.list[i]
+			   _item.no = no + i + 1
+            }
+            return res.data
+		   }
+        })
+      },
+      formLayout: 'horizontal',
+      hideRequiredMark: false, // 是否显示必填的* 默认显示
+      form: this.$form.createForm(this),
+      formItemLayout: {
+        labelCol: {
+          span: 6
+        },
+        wrapperCol: {
+          span: 14
+        }
+      }
+    }
+  },
+  methods: {
+    showModal () {
+      this.itemId = null
+	  this.itemData = {}
+      this.openSupplierModal = true
+    },
+    // 编辑
+    handleEdit (record) {
+	  this.itemId = record.id
+	  this.itemData = record
+	  console.log(this.itemId, '-------编辑')
+	  this.openSupplierModal = true
+    },
+    cancel () {
+	  this.itemId = null
+	  this.openSupplierModal = false
+    },
+    // 重置
+    resetForm () {
+      this.searchData.name = ''
+      this.$refs.table.refresh(true)
+    },
+    // 更改启用禁用状态
+    changeFlagHandle (text, record) {
+      console.log(text)
+      const _this = this
+      const _data = {
+    	  id: record.id,
+    	  flag: record.state == 1 ? '0' : '1'
+      }
+      if (record.state == 1) {
+    	  this.$confirm({
+    		  title: '提示',
+    		  centered: true,
+    		  content: '确定禁用该供货商吗?',
+    		  okText: '确定',
+    		  cancelText: '取消',
+    		  onOk () {
+    	      changeSupplierStatus(_data).then(res => {
+    			 if (res.status == 200) {
+                _this.$message.success(res.message)
+                _this.$refs.table.refresh()
+    			  }
+    	      })
+    	     }
+    	  })
+      } else {
+        changeSupplierStatus(_data).then(res => {
+    	  if (res.status == 200) {
+            _this.$message.success(res.message)
+            _this.$refs.table.refresh()
+    	  } else {
+            record.state = !record.state
+    	  }
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+.addBtn {
+  margin-bottom: 20px;
+}
+</style>

+ 8 - 0
src/views/businessManage/userManage/userManage.vue

@@ -0,0 +1,8 @@
+<template>
+</template>
+
+<script>
+</script>
+
+<style>
+</style>

+ 8 - 44
src/views/equipmentManage/boxSetting/AddBoxModal.vue

@@ -10,7 +10,7 @@
       :centered="true">
       <a-form :form="form" @submit="handleSubmit">
         <!-- 箱体类型名称 -->
-        <a-form-item label="箱体类型" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }">
+        <a-form-item label="箱体类型" :label-col="{ span: 5 }" :wrapper-col="{ span: 14 }">
           <a-input
             placeholder="请输入箱体类型名称(最多30个字符)"
             allowClear
@@ -24,7 +24,7 @@
         <a-form-item
           label="内置箱体数量"
           :label-col="{ span: 5 }"
-          :wrapper-col="{ span: 16 }"
+          :wrapper-col="{ span: 14 }"
         >
           <a-select
             allowClear
@@ -52,8 +52,11 @@
               :label-col=" { span: 10 }"
               :wrapper-col=" { span: 14 }"
             >
-              <a-input
-                type="number"
+              <a-input-number
+                :min="1"
+                :max="1000"
+                precision="2"
+                style="width: 200px;"
                 placeholder="请输入数字(最大1000)"
                 v-decorator="[
                   `formData.settings[${k}].limitNum`,
@@ -63,16 +66,13 @@
                       {
                         required: true, message: '请输入限投数量(最大1000)!'
                       },
-                      {
-                        validator: limitNumChange
-                      },
                     ],
                   },
                 ]"
               />
             </a-form-item>
           </a-col>
-          <a-form-item ><span class="linenums">至</span></a-form-item>
+          <a-col span="1"></a-col>
           <a-col span="9">
             <!-- 请选择分类 -->
             <a-form-item
@@ -166,52 +166,16 @@ export default {
       this.clear()
       this.$emit('close')
     },
-    // 校验
-    limitNumChange (rule, value, callback) {
-	  console.log('value', value, rule)
-	  const times = this.form.getFieldValue('times')
-	  if ((value <= 0 || value > 1000) && value !== '') {
-	    callback(new Error('请输入1到1000以内的数字'))
-	  }
-	  callback()
-    },
-    handleChange (e) {
-      console.log(e, e.target.value, 'eeeeeee')
-	  const value = e.target.value
-	  const ret = this.numberToFixed(value, 2, 1000)
-	  this.$nextTick(() => {
-	    this.formData.settings[num][key] = Number(ret)
-	  })
-	  // this.value = this.numberToFixed(value, 2, this.max)
-	  // this.$emit('change', this.value)
-    },
     // 内置箱体选择修改
     handleNumChange (v) {
       console.log(v, 'vvvvvvvvvv')
 	  const arr = []
-	  const setting = []
 	  for (let x = 0; x < v; x++) {
 		  arr.push(x)
-		  const p = {
-			  limitNum: '',
-			  type: ''
-		  }
-		  setting.push(p)
 	  }
-	  this.formData.settings = setting
 	  this.keys = arr
 	  console.log(this.keys, 'this.keys')
     },
-    // 小数点后两位
-    //  numberToFixed (key, index) {
-    //    console.log(index, key, 'eeeeeeeee')
-	  // const val = this.form.getFieldValue('settings')
-	  // console.log(val, 'val')
-	  // const ret = numberToFixed(val, 2, 1000)
-	  // this.$nextTick(() => {
-    //      this.formData.settings[num][key] = Number(ret)
-	  // })
-    //  },
     // 保存提交
     handleSubmit () {
       const _this = this

+ 4 - 1
src/views/equipmentManage/boxSetting/boxSetting.vue

@@ -32,7 +32,6 @@
       bordered>
       <!-- 操作 -->
       <template slot="action" slot-scope="text, record">
-        <a-icon type="setting" title="设置兑换规则" class="actionBtn icon-orange" @click="openSettingModal(record)" />
         <a-icon type="edit" title="编辑" class="actionBtn icon-blues" @click="handleEdit(record)" />
         <a-icon
           type="delete"
@@ -283,6 +282,10 @@ export default {
       this.openBoxModal = true
       this.itemData = {}
     },
+    // 编辑
+    handleEdit (item) {
+      this.openBoxModal = true
+    },
     // 删除
     delect (row) {
       const _this = this

+ 48 - 100
src/views/equipmentManage/exchangeSetting/AddBoxModal.vue → src/views/equipmentManage/exchangeSetting/AddSetModal.vue

@@ -9,62 +9,57 @@
       :width="800"
       :centered="true">
       <a-form :form="form" @submit="handleSubmit">
-        <!-- 箱体类型名称 -->
-        <a-form-item label="箱体类型" :label-col="{ span: 5 }" :wrapper-col="{ span: 16 }">
+        <!-- 规则名称 -->
+        <a-form-item label="规则名称" :label-col="{ span: 5 }" :wrapper-col="{ span: 14 }">
           <a-input
-            placeholder="请输入箱体类型名称(最多30个字符)"
+            placeholder="请输入规则名称(最多30个字符)"
             allowClear
             :maxLength="30"
-            id="roleModal-name"
+            id="addSetModal-name"
             v-decorator="['formData.name', {
               initialValue: formData.name,getValueFromEvent: $filterEmpty,
-              rules: [{ required: true, message: '请输入箱体类型名称(最多30个字符)!' }] }]" />
+              rules: [{ required: true, message: '请输入规则名称(最多30个字符)!' }] }]" />
         </a-form-item>
-        <!-- 内置箱体数量 -->
-        <a-form-item
-          label="内置箱体数量"
-          :label-col="{ span: 5 }"
-          :wrapper-col="{ span: 16 }"
-        >
-          <a-select
+        <!-- 规则说明 -->
+        <a-form-item label="规则说明" :label-col="{ span: 5 }" :wrapper-col="{ span: 14 }">
+          <a-input
+            placeholder="请输入规则说明(最多500个字符)"
             allowClear
-            @change="handleNumChange"
-            placeholder="请选择"
-            v-decorator="['formData.num', {
-              initialValue: formData.num,
-              rules: [{ required: true, message: '请选择箱体类型!' }] }]">
-            <a-select-option v-for="item in numList" :value="item" :key="item">
-              {{ item }}
-            </a-select-option>
-          </a-select>
+            :autoSize="{minRows: 3}"
+            type="textarea"
+            :maxLength="500"
+            id="addSetModal-remarks"
+            v-decorator="['formData.remarks', {
+              initialValue: formData.remarks,getValueFromEvent: $filterEmpty,
+              rules: [{ required: true, message: '请输入规则说明(最多500个字符)!' }] }]" />
         </a-form-item>
         <!-- 箱体限投 -->
         <a-row
           type="flex"
           align="middle"
-          v-for="(k, index) in keys"
-          :key="k">
+          v-for="(item, index) in keys"
+          :key="index">
           <a-col span="12">
-            <!-- 投放开始时间 -->
+            <!-- 请输入投放重量 -->
             <a-form-item
-              :label=" '内置'+(index+1)+'号箱限投(kg)'"
+              :label="item.dispName"
               :required="true"
               :label-col=" { span: 10 }"
               :wrapper-col=" { span: 14 }"
             >
-              <a-input
-                type="number"
-                placeholder="请输入数字(最大1000)"
+              <a-input-number
+                :min="1"
+                :max="999999"
+                precision="2"
+                style="width: 200px;"
+                placeholder="请输入投放重量(g)(最大999999)"
                 v-decorator="[
-                  `formData.settings[${k}].limitNum`,
+                  `formData.settings[${index}].weight`,
                   {
                     validateTrigger: ['change', 'blur'],
                     rules: [
                       {
-                        required: true, message: '请输入限投数量(最大1000)!'
-                      },
-                      {
-                        validator: limitNumChange
+                        required: true, message: '请输入投放重量(g)(最大999999)!'
                       },
                     ],
                   },
@@ -72,30 +67,31 @@
               />
             </a-form-item>
           </a-col>
-          <a-form-item ><span class="linenums">至</span></a-form-item>
+          <a-col span="1"></a-col>
           <a-col span="9">
-            <!-- 请选择分类 -->
+            <!-- 请输入可兑乐豆数 -->
             <a-form-item
               :label="''"
               :required="false"
               :wrapper-col="{ span: 18 }">
-              <v-select
-                ref="orderStatus"
-                id="addBoxModal-status"
-                code="SETTLE_STATUS_ALL"
-                placeholder="请选择分类"
-                allowClear
+              <a-input-number
+                :min="1"
+                :max="999999"
+                precision="0"
+                style="width: 200px;"
+                placeholder="请输入可兑乐豆数(最大999999)"
                 v-decorator="[
-                  `formData.settings[${k}].type`,
+                  `formData.settings[${index}].num`,
                   {
                     validateTrigger: ['change', 'blur'],
                     rules: [
                       {
-                        required: true, message: '请选择分类!'
+                        required: true, message: '请输入可兑乐豆数(最大999999)!'
                       },
                     ],
                   },
-                ]">
+                ]"
+              />
               </v-select>
             </a-form-item>
           </a-col>
@@ -122,8 +118,6 @@ import {
 import {
   saveRolePower
 } from '@/api/power-role.js'
-import moment from 'moment'
-import numberToFixed from '@/utils/util.js'
 export default {
   name: 'RoleModal',
   components: {
@@ -151,67 +145,19 @@ export default {
       form: this.$form.createForm(this, {
         name: 'AddBoxModal'
       }),
-	  numList: [2, 4, 5], // 内置箱体数量选择
       formData: {
         name: '',
-        num: '',
+        remarks: '',
         settings: []
       },
       keys: []
     }
   },
   methods: {
-    numberToFixed,
     cancel (e) {
       this.clear()
       this.$emit('close')
     },
-    // 校验
-    limitNumChange (rule, value, callback) {
-	  console.log('value', value, rule)
-	  const times = this.form.getFieldValue('times')
-	  if ((value <= 0 || value > 1000) && value !== '') {
-	    callback(new Error('请输入1到1000以内的数字'))
-	  }
-	  callback()
-    },
-    handleChange (e) {
-      console.log(e, e.target.value, 'eeeeeee')
-	  const value = e.target.value
-	  const ret = this.numberToFixed(value, 2, 1000)
-	  this.$nextTick(() => {
-	    this.formData.settings[num][key] = Number(ret)
-	  })
-	  // this.value = this.numberToFixed(value, 2, this.max)
-	  // this.$emit('change', this.value)
-    },
-    // 内置箱体选择修改
-    handleNumChange (v) {
-      console.log(v, 'vvvvvvvvvv')
-	  const arr = []
-	  const setting = []
-	  for (let x = 0; x < v; x++) {
-		  arr.push(x)
-		  const p = {
-			  limitNum: '',
-			  type: ''
-		  }
-		  setting.push(p)
-	  }
-	  this.formData.settings = setting
-	  this.keys = arr
-	  console.log(this.keys, 'this.keys')
-    },
-    // 小数点后两位
-    //  numberToFixed (key, index) {
-    //    console.log(index, key, 'eeeeeeeee')
-	  // const val = this.form.getFieldValue('settings')
-	  // console.log(val, 'val')
-	  // const ret = numberToFixed(val, 2, 1000)
-	  // this.$nextTick(() => {
-    //      this.formData.settings[num][key] = Number(ret)
-	  // })
-    //  },
     // 保存提交
     handleSubmit () {
       const _this = this
@@ -258,11 +204,13 @@ export default {
     },
     isshow (newValue, oldValue) {
       if (newValue) {
-        this.form.getFieldDecorator('keys', {
-          initialValue: [],
-          preserve: true
-        })
-        this.id = 0
+		  this.keys = [
+			  { dispName: '废旧衣物', code: 'fjyw', id: 11 },
+			  { dispName: '废旧衣物', code: 'fjyw', id: 12 },
+			  { dispName: '废旧衣物', code: 'fjyw', id: 13 },
+			  { dispName: '废旧衣物', code: 'fjyw', id: 14 },
+			  { dispName: '废旧衣物', code: 'fjyw', id: 15 }
+		  ]
         if (this.data.id) { // 编辑
           this.titleText = '编辑'
           this.formData = Object.assign({}, this.data)

+ 15 - 12
src/views/equipmentManage/exchangeSetting/ExchangeSetting.vue

@@ -32,7 +32,6 @@
       bordered>
       <!-- 操作 -->
       <template slot="action" slot-scope="text, record">
-        <a-icon type="setting" title="设置兑换规则" class="actionBtn icon-orange" @click="openSettingModal(record)" />
         <a-icon type="edit" title="编辑" class="actionBtn icon-blues" @click="handleEdit(record)" />
         <a-icon
           type="delete"
@@ -43,7 +42,7 @@
       </template>
     </s-table>
     <!-- 新增/编辑 弹窗 -->
-    <add-box-modal :visible="openBoxModal" :data="itemData" @refresh="refreshTable" @close="openBoxModal = false"></add-box-modal>
+    <add-set-modal :visible="openBoxModal" :data="itemData" @refresh="refreshTable" @close="openBoxModal = false"></add-set-modal>
   </a-card>
 </template>
 
@@ -52,13 +51,13 @@ import {
   STable,
   VSelect
 } from '@/components'
-import AddBoxModal from './AddBoxModal.vue'
+import AddSetModal from './AddSetModal.vue'
 export default {
   name: 'Equipment',
   components: {
     STable,
     VSelect,
-    AddBoxModal
+    AddSetModal
   },
   data () {
     return {
@@ -91,33 +90,33 @@ export default {
         align: 'center'
       },
       {
-        title: '箱体类型',
+        title: '兑换规则名称',
         dataIndex: 'address',
         width: 200,
         align: 'center'
       },
       {
-        title: '内置箱体数量(个)',
+        title: '兑换规则说明',
         dataIndex: 'equipmentNo',
         width: 200,
         align: 'center'
       },
       {
-        title: '内置箱体投放限重(kg)',
+        title: '兑换规则(投放重量(g)/可兑换乐豆数(个))',
         children: [{
-          title: '1号箱',
+          title: '废旧衣物',
           dataIndex: 'oProportion',
           width: 100,
           align: 'center'
         },
         {
-          title: '2号箱',
+          title: '废旧衣物',
           dataIndex: 'tProportion',
           width: 100,
           align: 'center'
         },
         {
-		  title: '3号箱',
+		  title: '废旧衣物',
 		  dataIndex: 'tProportion',
 		  width: 100,
 		  align: 'center',
@@ -126,7 +125,7 @@ export default {
 		  }
         },
         {
-		  title: '4号箱',
+		  title: '废旧衣物',
 		  dataIndex: 'tProportion',
 		  width: 100,
 		  align: 'center',
@@ -135,7 +134,7 @@ export default {
 		  }
         },
         {
-		  title: '5号箱',
+		  title: '有害垃圾',
 		  dataIndex: 'tProportion',
 		  width: 100,
 		  align: 'center',
@@ -283,6 +282,10 @@ export default {
       this.openBoxModal = true
       this.itemData = {}
     },
+    // 编辑
+    handleEdit (item) {
+	  this.openBoxModal = true
+    },
     // 删除
     delect (row) {
       const _this = this

+ 1 - 0
src/views/equipmentManage/openTimeSetting/AddTimeModal.vue

@@ -4,6 +4,7 @@
       class="modalBox"
       :title="titleText"
       v-model="isshow"
+      :footer="null"
       @cancle="cancel"
       :width="800"
       :centered="true">

+ 51 - 12
src/views/shop/goodsEdit.vue

@@ -6,19 +6,27 @@
       ref="form"
       v-bind="formItemLayout"
       @submit="handleSubmit">
+      <a-form-item label="首页图" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
+        <Upload
+          class="upload"
+          id="goodsEdit-homeImage"
+          v-decorator="[ 'formData.homeImage', { initialValue: formData.homeImage, rules: [{ required: true, message: '请上传首页图' }] } ]"
+          ref="homeImage"
+          :fileSize="0.25"
+          @change="changeHomeImage"
+          listType="picture-card" ></Upload>
+        <span class="upload-desc">请上传200*150尺寸的图片,大小不超过0.25MB,png、jpg、jpeg格式。</span>
+      </a-form-item>
       <a-form-item label="商品图片" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
         <Upload
+          class="upload"
           id="goodsEdit-images"
-          v-decorator="[
-            'formData.images',
-            { initialValue: formData.images, rules: [{ required: true, message: '请上传商品图片' }] }
-          ]"
+          v-decorator="[ 'formData.images', { initialValue: formData.images, rules: [{ required: true, message: '请上传商品图片' }] } ]"
           ref="goodsImage"
           :maxNums="6"
           :fileSize="0.25"
           @change="changeImage"
-          listType="picture-card"
-        ></Upload>
+          listType="picture-card" ></Upload>
         <span class="upload-desc">请上传200*150尺寸的图片,大小不超过0.25MB,png、jpg、jpeg格式。(最多可上传6张)</span>
       </a-form-item>
       <a-form-item label="商品名称" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
@@ -51,7 +59,7 @@
           class="inpNumber-unit"
           :min="0"
           :max="999999"
-          :precision="2"
+          :precision="0"
           v-decorator="[ 'formData.sellGold', { initialValue: formData.sellGold, rules: [{ required: true, message: '请输入商品价格(0~999999)' }] } ]"
           placeholder="请输入商品价格(0~999999)。10个乐豆等值于1元"
           allowClear />
@@ -64,7 +72,10 @@
           allowClear
           id="goodsEdit-state"
           placeholder="请选择商品状态"
-          v-decorator="['formData.state', { initialValue: formData.state, rules: [{ required: true, message: '请选择商品状态' }] }]"
+          v-decorator="['formData.state', { initialValue: formData.state, rules: [
+            { required: true, message: '请选择商品状态' },
+            { validator: stateValidator }
+          ] }]"
         ></v-select>
       </a-form-item>
       <a-form-item label="库存数量" :label-col="formItemLayout.labelCol" :wrapper-col="formItemLayout.wrapperCol">
@@ -73,8 +84,11 @@
           class="inpNumber"
           :min="0"
           :max="999999"
-          :precision="2"
-          v-decorator="['formData.inventoryQty', { initialValue: formData.inventoryQty, rules: [{ required: true, message: '请输入库存数量(0~999999)' }] }]"
+          :precision="0"
+          v-decorator="['formData.inventoryQty', { initialValue: formData.inventoryQty, rules: [
+            { required: true, message: '请输入库存数量' },
+            { validator: inventoryQtyValidator }
+          ] }]"
           placeholder="请输入库存数量(0~999999)。当库存数量为0时显示为已售罄且无法下单"
           allowClear />
       </a-form-item>
@@ -120,6 +134,7 @@ export default {
         wrapperCol: { span: 16 }
       },
       formData: {
+        homeImage: '', //  首页图
         images: '', //  商品图
         name: '', // 商品名称
         goodsTypeNo: undefined, // 商品分类
@@ -135,16 +150,32 @@ export default {
   },
   computed: {
     isEdit () {
-      console.log(this.$route)
       return this.$route.name === 'goodsListEdit'
     }
   },
   methods: {
+    //  商品状态自定义校验
+    stateValidator (rule, value, callback) {
+      if (value == 1 && String(this.form.getFieldValue('formData.inventoryQty')) && this.form.getFieldValue('formData.inventoryQty') == 0) {
+        callback(new Error('库存为0的商品不能上架'))
+      } else {
+        callback()
+      }
+    },
+    //  输入库存数量调起商品状态校验
+    inventoryQtyValidator (rule, value, callback) {
+      this.form.validateFields(['formData.state'], (errors, values) => {
+        if (!errors) {
+          callback()
+        }
+      })
+    },
     //  获取商品详情
     getGoodsDetail () {
       goodsFind({ id: this.$route.params.id }).then(res => {
         if (res.status == 200) {
           this.formData = Object.assign(this.formData, res.data)
+          this.$refs.homeImage.setFileList(res.data.homeImage)
           this.$refs.goodsImage.setFileList(res.data.images)
           this.$refs.editor.setHtml(this.formData.desc)
         }
@@ -176,6 +207,7 @@ export default {
       const _this = this
       console.log(this.formData, '----表单上传')
       this.form.validateFields((err, values) => {
+        console.log(err, values, '-上传')
         if (!err) {
           const formData = values.formData
           formData.desc = _this.formData.desc
@@ -195,10 +227,14 @@ export default {
     close () {
       this.$router.push({ path: '/shop/goods/list' })
     },
-    //  图上传
+    //  商品图上传
     changeImage (file) {
       this.formData.images = file
     },
+    //  首页图上传
+    changeHomeImage (file) {
+      this.formData.homeImage = file
+    },
     //  商品详情  文本编辑器
     editorChange (html, text) {
       this.formData.desc = html
@@ -219,6 +255,9 @@ export default {
 
 <style lang="less">
   .goodsEdit-table-page-wrapper{
+    .upload{
+      width: 100%!important;
+    }
     //  商品图片描述
     .upload-desc{
       font-size: 12px;

+ 3 - 3
src/views/shop/goodsList.vue

@@ -53,13 +53,13 @@
       bordered>
       <!-- 商品状态 -->
       <template slot="state" slot-scope="text, record">
-        <span :class="record.state==0 ? 'red' : record.state==1 ? 'green' : ''">{{ record.state==0 ? '未上架' : record.state==1 ? '已上架' : '--' }}</span>
+        <span :class="record.state==0 ? 'red' : record.state==1 ? 'green' : ''">{{ record.state==0 ? '下架' : record.state==1 ? '上架' : '--' }}</span>
       </template>
       <!-- 操作 -->
       <template slot="action" slot-scope="text, record">
         <a-button id="goodsList-btn-edit" class="icon-blues" type="link" @click="handleGoods('edit', record)">编辑</a-button>
         <a-button v-if="record.state" id="goodsList-btn-shelves" class="icon-orange" type="link" @click="handleShelves(record)">{{ record.state == 0 ? '上架' : record.state == 1 ? '下架' : '' }}</a-button>
-        <a-button id="goodsList-btn-delect" class="icon-red" type="link" @click="handleDel(record)">删除</a-button>
+        <a-button v-if="record.state==0" id="goodsList-btn-delect" class="icon-red" type="link" @click="handleDel(record)">删除</a-button>
       </template>
     </s-table>
   </a-card>
@@ -130,7 +130,7 @@ export default {
     },
     //  供应商下拉数据
     getPartnerQueryList () {
-      supplierQueryList({ state: 1 }).then(res => {
+      supplierQueryList({}).then(res => {
         if (res.status == 200) {
           this.partnerList = res.data
         } else {

+ 11 - 9
src/views/shop/goodsShelves.vue

@@ -14,6 +14,8 @@
         <s-table
           ref="table"
           size="default"
+          :showPagination="false"
+          :scroll="{y:600}"
           :rowKey="(record) => record.id"
           :columns="columns"
           :data="loadData"
@@ -32,6 +34,7 @@
               :style="{ fontSize: '18px', color: '#e29b29',cursor: 'pointer', padding:'0 10px' }"
               @click="changeSort(index,record,1)"
               type="arrow-up" />
+            <span v-if="list.length===1">--</span>
           </template>
         </s-table>
       </a-col>
@@ -46,7 +49,7 @@ import {
   VSelect
 } from '@/components'
 import {
-  goodsUpdateSort, goodsType, goodsList
+  goodsUpdateSort, goodsType, goodsListQuery
 } from '@/api/goods.js'
 export default {
   name: 'GoodsList',
@@ -105,15 +108,14 @@ export default {
         if (this.selectedKeys.length) {
           const queryParams = {
             goodsTypeNo: this.selectedKeys[0],
-            state: 1
+            state: 1,
+            orderBy: 'goods.SORT DESC'
           }
-          return goodsList(Object.assign(parameter, queryParams)).then(res => {
-			  const no = (res.data.pageNo - 1) * res.data.pageSize
-			  this.list = res.data.list || []
-			  for (let i = 0; i < res.data.list.length; i++) {
-			    const _item = res.data.list[i]
-			    _item.no = no + i + 1
-			    _item.isEnable = _item.isEnable + '' === '1'
+          return goodsListQuery(queryParams).then(res => {
+			  this.list = res.data || []
+			  for (let i = 0; i < res.data.length; i++) {
+			    const _item = res.data[i]
+			    _item.no = i + 1
 			  }
 			  return res.data
           })

+ 10 - 3
src/views/shopSetting/goodsClass.vue

@@ -17,7 +17,13 @@
       </a-form>
     </div>
     <div class="add">
-      <a-button type="primary" icon="plus" class="addBtn" @click="showModal" id="goodsClass-showModal">新增</a-button>
+      <a-button
+        type="primary"
+        icon="plus"
+        class="addBtn"
+        @click="showModal"
+        id="goodsClass-showModal"
+        v-hasPermission="'B_goodsClass_add'">新增</a-button>
     </div>
     <!-- table列表 -->
     <s-table
@@ -29,16 +35,17 @@
       bordered>
       <span slot="action" slot-scope="text, record">
         <a-icon
-          v-if="record.state==0"
+          v-if="$hasPermissions('B_goodsClass_edit') && record.state==0"
           type="edit"
           id="bannerSetting-handleEdit"
           title="编辑"
           class="actionBtn icon-blues"
           @click="handleEdit(record)" />
-        <span v-if="record.state==1">--</span>
+        <span v-else>--</span>
       </span>
       <span slot="state" slot-scope="text, record">
         <a-switch
+          v-hasPermission="'B_goodsClass_enable'"
           checkedChildren="启用"
           unCheckedChildren="禁用"
           id="bannerSetting-changeFlagHandle"

+ 10 - 3
src/views/shopSetting/supplier.vue

@@ -14,7 +14,13 @@
         </a-row>
       </a-form>
     </div>
-    <div class="add"><a-button type="primary" icon="plus" class="addBtn" @click="showModal" id="bannerSetting-showModal">新增</a-button></div>
+    <div class="add"><a-button
+      type="primary"
+      icon="plus"
+      class="addBtn"
+      @click="showModal"
+      id="bannerSetting-showModal"
+      v-hasPermission="'B_supplier_add'">新增</a-button></div>
     <!-- table列表 -->
     <s-table
       ref="table"
@@ -25,16 +31,17 @@
       bordered>
       <span slot="action" slot-scope="text, record">
         <a-icon
-          v-if="record.state==0"
+          v-if="$hasPermissions('B_supplier_edit') && record.state==0"
           type="edit"
           id="bannerSetting-handleEdit"
           title="编辑"
           class="actionBtn icon-blues"
           @click="handleEdit(record)" />
-        <span v-if="record.state==1">--</span>
+        <span v-else>--</span>
       </span>
       <span slot="state" slot-scope="text, record">
         <a-switch
+          v-hasPermission="'B_supplier_enable'"
           checkedChildren="启用"
           unCheckedChildren="禁用"
           id="bannerSetting-changeFlagHandle"