订单
This commit is contained in:
		
							
								
								
									
										104
									
								
								project/fengdu/app/AppIntegratingOrder/AppIntegratingOrder.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								project/fengdu/app/AppIntegratingOrder/AppIntegratingOrder.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <ai-list v-if="!isShowDetail">
 | 
				
			||||||
 | 
					    <template slot="title">
 | 
				
			||||||
 | 
					      <ai-title title="订单管理" :isShowBottomBorder="false" :isShowArea="currIndex === '0'" :fullname.sync="areaName" v-model="areaId" :instance="instance" @change="onAreaChange"></ai-title>
 | 
				
			||||||
 | 
					    </template>
 | 
				
			||||||
 | 
					    <template slot="tabs">
 | 
				
			||||||
 | 
					      <el-tabs v-model="currIndex">
 | 
				
			||||||
 | 
					        <el-tab-pane v-for="(tab,i) in tabs" :key="i" :label="tab.label">
 | 
				
			||||||
 | 
					          <component :areaId="areaId" :ref="String(i)" v-if="currIndex == i" :is="tab.comp" @change="onChange" lazy :instance="instance" :dict="dict" :permissions="permissions"/>
 | 
				
			||||||
 | 
					        </el-tab-pane>
 | 
				
			||||||
 | 
					      </el-tabs>
 | 
				
			||||||
 | 
					    </template>
 | 
				
			||||||
 | 
					  </ai-list>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					  import GirdOrderList from './components/GirdOrderList.vue'
 | 
				
			||||||
 | 
					  import ResidentOrderList from './components/ResidentOrderList'
 | 
				
			||||||
 | 
					  import { mapState } from 'vuex'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export default {
 | 
				
			||||||
 | 
					    name: 'AppIntegratingOrder',
 | 
				
			||||||
 | 
					    label: '订单管理',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    components: {
 | 
				
			||||||
 | 
					      ResidentOrderList,
 | 
				
			||||||
 | 
					      GirdOrderList
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    props: {
 | 
				
			||||||
 | 
					      instance: Function,
 | 
				
			||||||
 | 
					      dict: Object,
 | 
				
			||||||
 | 
					      permissions: Function
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    computed: {
 | 
				
			||||||
 | 
					      ...mapState(['user']),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      tabs () {
 | 
				
			||||||
 | 
					        const tabList = [
 | 
				
			||||||
 | 
					          {label: '网格积分订单', name: 'GirdOrderList', comp: GirdOrderList, permission: ''},
 | 
				
			||||||
 | 
					          {label: '居民积分订单', name: 'ResidentOrderList', comp: ResidentOrderList, permission: ''}
 | 
				
			||||||
 | 
					        ].filter(item => {
 | 
				
			||||||
 | 
					          return true
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return tabList
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    data () {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        activeName: 'GirdOrderList',
 | 
				
			||||||
 | 
					        currIndex: '0',
 | 
				
			||||||
 | 
					        componentName: '',
 | 
				
			||||||
 | 
					        params: {},
 | 
				
			||||||
 | 
					        areaName: '',
 | 
				
			||||||
 | 
					        areaId: '',
 | 
				
			||||||
 | 
					        isShowDetail: false
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    created () {
 | 
				
			||||||
 | 
					      this.areaId = this.user.info.areaId
 | 
				
			||||||
 | 
					      if (this.$route.query.id) {
 | 
				
			||||||
 | 
					        this.componentName = this.$route.query?.type
 | 
				
			||||||
 | 
					        this.params = {id: this.$route.query?.id}
 | 
				
			||||||
 | 
					        this.isShowDetail = true
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    methods: {
 | 
				
			||||||
 | 
					      onAreaChange () {
 | 
				
			||||||
 | 
					        if (this.currIndex === '0') {
 | 
				
			||||||
 | 
					          this.$nextTick(() => {
 | 
				
			||||||
 | 
					            this.$refs[this.currIndex][0].getList()
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      onChange (data) {
 | 
				
			||||||
 | 
					        if (data.type === 'GirdOrderList') {
 | 
				
			||||||
 | 
					          this.componentName = 'GirdOrderList'
 | 
				
			||||||
 | 
					          this.isShowDetail = false
 | 
				
			||||||
 | 
					          this.params = data.params
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (data.type === 'ResidentOrderList') {
 | 
				
			||||||
 | 
					          this.componentName = 'ResidentOrderList'
 | 
				
			||||||
 | 
					          this.isShowDetail = false
 | 
				
			||||||
 | 
					          this.params = data.params
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (data.type === 'Detail') {
 | 
				
			||||||
 | 
					          this.componentName = 'Detail'
 | 
				
			||||||
 | 
					          this.isShowDetail = true
 | 
				
			||||||
 | 
					          this.params = data.params
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -0,0 +1,143 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <ai-list class="notice" isTabs>
 | 
				
			||||||
 | 
					    <template slot="content">
 | 
				
			||||||
 | 
					      <ai-search-bar class="search-bar">
 | 
				
			||||||
 | 
					        <template #left>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <template #right>
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					            v-model="search.title"
 | 
				
			||||||
 | 
					            class="search-input"
 | 
				
			||||||
 | 
					            size="small"
 | 
				
			||||||
 | 
					            v-throttle="() => {search.current = 1, getList()}"
 | 
				
			||||||
 | 
					            placeholder="姓名、推送人"
 | 
				
			||||||
 | 
					            clearable
 | 
				
			||||||
 | 
					            @clear="search.current = 1, search.title = '', getList()"
 | 
				
			||||||
 | 
					            suffix-icon="iconfont iconSearch">
 | 
				
			||||||
 | 
					          </el-input>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					      </ai-search-bar>
 | 
				
			||||||
 | 
					      <ai-table
 | 
				
			||||||
 | 
					        :tableData="tableData"
 | 
				
			||||||
 | 
					        :col-configs="colConfigs"
 | 
				
			||||||
 | 
					        :total="total"
 | 
				
			||||||
 | 
					        style="margin-top: 6px;"
 | 
				
			||||||
 | 
					        :current.sync="search.current"
 | 
				
			||||||
 | 
					        :size.sync="search.size"
 | 
				
			||||||
 | 
					        @getList="getList">
 | 
				
			||||||
 | 
					        <el-table-column slot="options" width="120px" fixed="right" label="操作" align="center">
 | 
				
			||||||
 | 
					          <template slot-scope="{ row }">
 | 
				
			||||||
 | 
					            <div class="table-options">
 | 
				
			||||||
 | 
					              <el-button type="text" @click="remove(row.id)">下架</el-button>
 | 
				
			||||||
 | 
					              <el-button type="text" @click="toDetail(row.id)">详情</el-button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </el-table-column>
 | 
				
			||||||
 | 
					      </ai-table>
 | 
				
			||||||
 | 
					    </template>
 | 
				
			||||||
 | 
					  </ai-list>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					  import { mapState } from 'vuex'
 | 
				
			||||||
 | 
					  export default {
 | 
				
			||||||
 | 
					    name: 'GirdOrderList',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    props: {
 | 
				
			||||||
 | 
					      instance: Function,
 | 
				
			||||||
 | 
					      dict: Object
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    data() {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        search: {
 | 
				
			||||||
 | 
					          current: 1,
 | 
				
			||||||
 | 
					          size: 10,
 | 
				
			||||||
 | 
					          title: '',
 | 
				
			||||||
 | 
					          areaId: ''
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        total: 0,
 | 
				
			||||||
 | 
					        colConfigs: [
 | 
				
			||||||
 | 
					          { prop: 'title',  label: '标题', align: 'left', width: '200px' },
 | 
				
			||||||
 | 
					          { prop: 'createUserName',  label: '姓名', align: 'center' },
 | 
				
			||||||
 | 
					          { prop: 'areaName', label: '所属地区', align: 'center' },
 | 
				
			||||||
 | 
					          { prop: 'examineUserName', label: '推送人', align: 'center' },
 | 
				
			||||||
 | 
					          { prop: 'createTime', label: '推送时间', align: 'center' }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        tableData: [],
 | 
				
			||||||
 | 
					        moduleId: ''
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    computed: {
 | 
				
			||||||
 | 
					      ...mapState(['user']),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      hideLevel () {
 | 
				
			||||||
 | 
					        return this.user.info.areaList.length || 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      params () {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          ...this.search
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    created() {
 | 
				
			||||||
 | 
					      this.search.areaId = this.user.info.areaId
 | 
				
			||||||
 | 
					      this.getInfo()
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    methods: {
 | 
				
			||||||
 | 
					      getInfo () {
 | 
				
			||||||
 | 
					        this.instance.post(`/app/appintegraluserapply/queryModuleByName`).then(res => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.moduleId = res.data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.$nextTick(() => {
 | 
				
			||||||
 | 
					              this.getList()
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      getList () {
 | 
				
			||||||
 | 
					        this.instance.post(`/app/appcontentinfo/list-web`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            moduleId: this.moduleId,
 | 
				
			||||||
 | 
					            ...this.search,
 | 
				
			||||||
 | 
					            areaId: this.search.areaId
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }).then(res => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.tableData = res.data.records
 | 
				
			||||||
 | 
					            this.total = res.data.total
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      remove(id) {
 | 
				
			||||||
 | 
					        this.$confirm('确定删除该数据?').then(() => {
 | 
				
			||||||
 | 
					          this.instance.post(`/app/appcontentinfo/deleteIntegralApply?ids=${id}`).then(res => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.$message.success('下架成功!')
 | 
				
			||||||
 | 
					              this.getList()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      toDetail(id) {
 | 
				
			||||||
 | 
					        this.$emit('change', {
 | 
				
			||||||
 | 
					          type: 'Detail',
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            id: id || ''
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -0,0 +1,143 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <ai-list class="notice" isTabs>
 | 
				
			||||||
 | 
					    <template slot="content">
 | 
				
			||||||
 | 
					      <ai-search-bar class="search-bar">
 | 
				
			||||||
 | 
					        <template #left>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <template #right>
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					            v-model="search.title"
 | 
				
			||||||
 | 
					            class="search-input"
 | 
				
			||||||
 | 
					            size="small"
 | 
				
			||||||
 | 
					            v-throttle="() => {search.current = 1, getList()}"
 | 
				
			||||||
 | 
					            placeholder="姓名、推送人"
 | 
				
			||||||
 | 
					            clearable
 | 
				
			||||||
 | 
					            @clear="search.current = 1, search.title = '', getList()"
 | 
				
			||||||
 | 
					            suffix-icon="iconfont iconSearch">
 | 
				
			||||||
 | 
					          </el-input>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					      </ai-search-bar>
 | 
				
			||||||
 | 
					      <ai-table
 | 
				
			||||||
 | 
					        :tableData="tableData"
 | 
				
			||||||
 | 
					        :col-configs="colConfigs"
 | 
				
			||||||
 | 
					        :total="total"
 | 
				
			||||||
 | 
					        style="margin-top: 6px;"
 | 
				
			||||||
 | 
					        :current.sync="search.current"
 | 
				
			||||||
 | 
					        :size.sync="search.size"
 | 
				
			||||||
 | 
					        @getList="getList">
 | 
				
			||||||
 | 
					        <el-table-column slot="options" width="120px" fixed="right" label="操作" align="center">
 | 
				
			||||||
 | 
					          <template slot-scope="{ row }">
 | 
				
			||||||
 | 
					            <div class="table-options">
 | 
				
			||||||
 | 
					              <el-button type="text" @click="remove(row.id)">下架</el-button>
 | 
				
			||||||
 | 
					              <el-button type="text" @click="toDetail(row.id)">详情</el-button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </el-table-column>
 | 
				
			||||||
 | 
					      </ai-table>
 | 
				
			||||||
 | 
					    </template>
 | 
				
			||||||
 | 
					  </ai-list>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					  import { mapState } from 'vuex'
 | 
				
			||||||
 | 
					  export default {
 | 
				
			||||||
 | 
					    name: 'ResidentOrderList',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    props: {
 | 
				
			||||||
 | 
					      instance: Function,
 | 
				
			||||||
 | 
					      dict: Object
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    data() {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        search: {
 | 
				
			||||||
 | 
					          current: 1,
 | 
				
			||||||
 | 
					          size: 10,
 | 
				
			||||||
 | 
					          title: '',
 | 
				
			||||||
 | 
					          areaId: ''
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        total: 0,
 | 
				
			||||||
 | 
					        colConfigs: [
 | 
				
			||||||
 | 
					          { prop: 'title',  label: '标题', align: 'left', width: '200px' },
 | 
				
			||||||
 | 
					          { prop: 'createUserName',  label: '姓名', align: 'center' },
 | 
				
			||||||
 | 
					          { prop: 'areaName', label: '所属地区', align: 'center' },
 | 
				
			||||||
 | 
					          { prop: 'examineUserName', label: '推送人', align: 'center' },
 | 
				
			||||||
 | 
					          { prop: 'createTime', label: '推送时间', align: 'center' }
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        tableData: [],
 | 
				
			||||||
 | 
					        moduleId: ''
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    computed: {
 | 
				
			||||||
 | 
					      ...mapState(['user']),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      hideLevel () {
 | 
				
			||||||
 | 
					        return this.user.info.areaList.length || 0
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      params () {
 | 
				
			||||||
 | 
					        return {
 | 
				
			||||||
 | 
					          ...this.search
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    created() {
 | 
				
			||||||
 | 
					      this.search.areaId = this.user.info.areaId
 | 
				
			||||||
 | 
					      this.getInfo()
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    methods: {
 | 
				
			||||||
 | 
					      getInfo () {
 | 
				
			||||||
 | 
					        this.instance.post(`/app/appintegraluserapply/queryModuleByName`).then(res => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.moduleId = res.data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            this.$nextTick(() => {
 | 
				
			||||||
 | 
					              this.getList()
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      getList () {
 | 
				
			||||||
 | 
					        this.instance.post(`/app/appcontentinfo/list-web`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            moduleId: this.moduleId,
 | 
				
			||||||
 | 
					            ...this.search,
 | 
				
			||||||
 | 
					            areaId: this.search.areaId
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }).then(res => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.tableData = res.data.records
 | 
				
			||||||
 | 
					            this.total = res.data.total
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      remove(id) {
 | 
				
			||||||
 | 
					        this.$confirm('确定删除该数据?').then(() => {
 | 
				
			||||||
 | 
					          this.instance.post(`/app/appcontentinfo/deleteIntegralApply?ids=${id}`).then(res => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.$message.success('下架成功!')
 | 
				
			||||||
 | 
					              this.getList()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      toDetail(id) {
 | 
				
			||||||
 | 
					        this.$emit('change', {
 | 
				
			||||||
 | 
					          type: 'Detail',
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            id: id || ''
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										357
									
								
								project/fengdu/app/AppIntegratingOrder/components/addGoods.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								project/fengdu/app/AppIntegratingOrder/components/addGoods.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,357 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="add_order">
 | 
				
			||||||
 | 
					    <ai-detail>
 | 
				
			||||||
 | 
					      <template slot="title">
 | 
				
			||||||
 | 
					        <ai-title :title="title" isShowBack :isShowBottomBorder="true" @onBackClick="$emit('goBack')"></ai-title>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="!isEdit">
 | 
				
			||||||
 | 
					        <ai-card title="商品信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="form_div">
 | 
				
			||||||
 | 
					              <el-form
 | 
				
			||||||
 | 
					                  ref="rules"
 | 
				
			||||||
 | 
					                  :model="forms"
 | 
				
			||||||
 | 
					                  :rules="formRules"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  label-suffix=":"
 | 
				
			||||||
 | 
					                  label-width="100px">
 | 
				
			||||||
 | 
					                <el-form-item label="店铺名称" prop="shopId">
 | 
				
			||||||
 | 
					                  <el-select
 | 
				
			||||||
 | 
					                      v-model="forms.shopId"
 | 
				
			||||||
 | 
					                      placeholder="请选择..."
 | 
				
			||||||
 | 
					                      clearable>
 | 
				
			||||||
 | 
					                    <el-option
 | 
				
			||||||
 | 
					                        v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                        :key="i"
 | 
				
			||||||
 | 
					                        :label="item.shopName"
 | 
				
			||||||
 | 
					                        :value="item.id">
 | 
				
			||||||
 | 
					                    </el-option>
 | 
				
			||||||
 | 
					                  </el-select>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品类型" prop="merchandiseType">
 | 
				
			||||||
 | 
					                  <el-select
 | 
				
			||||||
 | 
					                      v-model="forms.merchandiseType"
 | 
				
			||||||
 | 
					                      placeholder="请选择..."
 | 
				
			||||||
 | 
					                      clearable>
 | 
				
			||||||
 | 
					                    <el-option
 | 
				
			||||||
 | 
					                        v-for="(item, i) in dict.getDict('integralMerchandiseType')"
 | 
				
			||||||
 | 
					                        :key="i"
 | 
				
			||||||
 | 
					                        :label="item.dictName"
 | 
				
			||||||
 | 
					                        :value="item.dictValue">
 | 
				
			||||||
 | 
					                    </el-option>
 | 
				
			||||||
 | 
					                  </el-select>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品名称" prop="merchandiseName">
 | 
				
			||||||
 | 
					                  <el-input
 | 
				
			||||||
 | 
					                      v-model="forms.merchandiseName"
 | 
				
			||||||
 | 
					                      placeholder="请输入..."
 | 
				
			||||||
 | 
					                      maxlength="100"
 | 
				
			||||||
 | 
					                      show-word-limit>
 | 
				
			||||||
 | 
					                  </el-input>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <div class="above">
 | 
				
			||||||
 | 
					                  <div class="left">
 | 
				
			||||||
 | 
					                    <el-form-item label="单价" prop="costIntegral">
 | 
				
			||||||
 | 
					                      <el-input v-model="forms.costIntegral" placeholder="请输入..."/>
 | 
				
			||||||
 | 
					                    </el-form-item>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <div class="right">
 | 
				
			||||||
 | 
					                    <el-form-item label="库存" prop="inventoryNumber">
 | 
				
			||||||
 | 
					                      <el-input
 | 
				
			||||||
 | 
					                          v-model="forms.inventoryNumber"
 | 
				
			||||||
 | 
					                          placeholder="请输入...">
 | 
				
			||||||
 | 
					                      </el-input>
 | 
				
			||||||
 | 
					                    </el-form-item>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <el-form-item label="状态" prop="status">
 | 
				
			||||||
 | 
					                  <el-radio-group v-model="forms.status">
 | 
				
			||||||
 | 
					                    <el-radio label="1">上架中</el-radio>
 | 
				
			||||||
 | 
					                    <el-radio label="0">已下架</el-radio>
 | 
				
			||||||
 | 
					                  </el-radio-group>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品图片" prop="fileList" ref="fileList">
 | 
				
			||||||
 | 
					                  <div class="upload">
 | 
				
			||||||
 | 
					                    <ai-uploader
 | 
				
			||||||
 | 
					                        :instance="instance"
 | 
				
			||||||
 | 
					                        @change="changeFile"
 | 
				
			||||||
 | 
					                        v-model="forms.fileList"
 | 
				
			||||||
 | 
					                        :limit="9">
 | 
				
			||||||
 | 
					                    </ai-uploader>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品详情" prop="description">
 | 
				
			||||||
 | 
					                  <el-input
 | 
				
			||||||
 | 
					                      v-model="forms.description"
 | 
				
			||||||
 | 
					                      type="textarea"
 | 
				
			||||||
 | 
					                      :rows="5"
 | 
				
			||||||
 | 
					                      maxlength="100"
 | 
				
			||||||
 | 
					                      show-word-limit
 | 
				
			||||||
 | 
					                      placeholder="请输入...">
 | 
				
			||||||
 | 
					                  </el-input>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					              </el-form>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="isEdit">
 | 
				
			||||||
 | 
					        <ai-card title="商品信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="店铺名称"><span>{{ forms.shopName }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="商品类型"
 | 
				
			||||||
 | 
					                ><span>{{
 | 
				
			||||||
 | 
					                    dict.getLabel("integralMerchandiseType", forms.merchandiseType)
 | 
				
			||||||
 | 
					                  }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <ai-info-item label="商品名称"
 | 
				
			||||||
 | 
					                ><span>{{ forms.merchandiseName }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="2">
 | 
				
			||||||
 | 
					                <ai-info-item label="单价"><span>{{ forms.costIntegral + "积分" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="库存"
 | 
				
			||||||
 | 
					                ><span>{{ forms.inventoryNumber }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <ai-info-item label="销量"
 | 
				
			||||||
 | 
					                ><span>{{ forms.saleNumber || "0" }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="状态"
 | 
				
			||||||
 | 
					                ><span
 | 
				
			||||||
 | 
					                    :style="{
 | 
				
			||||||
 | 
					                      color: dict.getColor(
 | 
				
			||||||
 | 
					                        'integralMerchandiseStatus',
 | 
				
			||||||
 | 
					                        forms.status
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    }"
 | 
				
			||||||
 | 
					                >{{
 | 
				
			||||||
 | 
					                    dict.getLabel("integralMerchandiseStatus", forms.status)
 | 
				
			||||||
 | 
					                  }}</span
 | 
				
			||||||
 | 
					                ></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <ai-info-item label="商品图片">
 | 
				
			||||||
 | 
					                  <ai-uploader
 | 
				
			||||||
 | 
					                      :disabled="true"
 | 
				
			||||||
 | 
					                      :instance="instance"
 | 
				
			||||||
 | 
					                      v-model="forms.fileList"
 | 
				
			||||||
 | 
					                      :limit="9"
 | 
				
			||||||
 | 
					                  ></ai-uploader>
 | 
				
			||||||
 | 
					                </ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="商品详情"
 | 
				
			||||||
 | 
					                ><span>{{ forms.description }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="footer" v-if="!isEdit">
 | 
				
			||||||
 | 
					        <el-button @click="$emit('goBack')" style="width: 120px">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button type="primary" @click="save('rules')" style="width: 120px">提 交</el-button>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-detail>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import {mapState} from "vuex";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "addGoods",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    info: Object,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      forms: {
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					        merchandiseType: "",
 | 
				
			||||||
 | 
					        merchandiseName: "",
 | 
				
			||||||
 | 
					        costIntegral: "",
 | 
				
			||||||
 | 
					        inventoryNumber: "",
 | 
				
			||||||
 | 
					        status: "",
 | 
				
			||||||
 | 
					        fileList: [],
 | 
				
			||||||
 | 
					        description: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					      title: "添加商品",
 | 
				
			||||||
 | 
					      showEdit: false,
 | 
				
			||||||
 | 
					      isEdit: false,
 | 
				
			||||||
 | 
					      detailInfo: {},
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    ...mapState(["user"]),
 | 
				
			||||||
 | 
					    formRules() {
 | 
				
			||||||
 | 
					      var integral = (rule, value, callback) => {
 | 
				
			||||||
 | 
					        if (value) {
 | 
				
			||||||
 | 
					          if (/^[1-9]\d*$/.test(value)) {
 | 
				
			||||||
 | 
					            callback();
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            callback(new Error("请输入正整数"));
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          callback(new Error("请输入单价"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        shopId: [{required: true, message: "请选择店铺", trigger: "change"}],
 | 
				
			||||||
 | 
					        merchandiseType: [
 | 
				
			||||||
 | 
					          {required: true, message: "请选择商品类型", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        merchandiseName: [
 | 
				
			||||||
 | 
					          {required: true, message: "请输入商品名称", trigger: "blur"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        inventoryNumber: [
 | 
				
			||||||
 | 
					          {required: true, validator: integral, trigger: "blur"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        costIntegral: [
 | 
				
			||||||
 | 
					          {required: true, pattern: /^\d*[.\d]\d?$/, message: "请输入正数,最多保留一位小数", trigger: "blur"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        status: [{required: true, message: "请选择状态", trigger: "change"}],
 | 
				
			||||||
 | 
					        fileList: [
 | 
				
			||||||
 | 
					          {required: true, message: "请上传商品图片", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    let l = Object.keys(this.info).length;
 | 
				
			||||||
 | 
					    if (this.info.isAdd) {
 | 
				
			||||||
 | 
					      this.showEdit = false;
 | 
				
			||||||
 | 
					      if (l > 1) {
 | 
				
			||||||
 | 
					        this.title = "修改商品";
 | 
				
			||||||
 | 
					        this.getShopList().then(() => {
 | 
				
			||||||
 | 
					          this.searchDetail(this.info.id);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.title = "添加商品";
 | 
				
			||||||
 | 
					        this.getShopList();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      this.title = "商品详情";
 | 
				
			||||||
 | 
					      this.isEdit = true;
 | 
				
			||||||
 | 
					      this.showEdit = true;
 | 
				
			||||||
 | 
					      this.getShopList().then(() => {
 | 
				
			||||||
 | 
					        this.searchDetail(this.info.id);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/listForOperator`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            size: 100000,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.shopList = res.data.records;
 | 
				
			||||||
 | 
					            reslove();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    changeFile() {
 | 
				
			||||||
 | 
					      this.$refs.fileList.$emit("el.form.change");
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    searchDetail(id) {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralmerchandise/queryDetailById`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          id,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.forms = {...res.data};
 | 
				
			||||||
 | 
					          let i = this.shopList.findIndex(
 | 
				
			||||||
 | 
					              (item) => item.id == this.forms.shopId
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					          if (i > -1) {
 | 
				
			||||||
 | 
					            this.forms.shopName = this.shopList[i].shopName;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    edit() {
 | 
				
			||||||
 | 
					      this.isEdit = false;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    save(formName, type) {
 | 
				
			||||||
 | 
					      this.$refs[formName].validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					          .post(
 | 
				
			||||||
 | 
					              `/app/appvillagerintegralmerchandise/addOrUpdate`,
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                ...this.forms,
 | 
				
			||||||
 | 
					                areaId: this.user.info.areaId,
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              null
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					          .then((res) => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.$message.success("提交成功");
 | 
				
			||||||
 | 
					              if (type == "detail") {
 | 
				
			||||||
 | 
					                this.isEdit = true;
 | 
				
			||||||
 | 
					              } else {
 | 
				
			||||||
 | 
					                this.$emit("goBack");
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.add_order {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .form_div {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .above {
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .left {
 | 
				
			||||||
 | 
					      width: 50%;
 | 
				
			||||||
 | 
					      float: left;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .right {
 | 
				
			||||||
 | 
					      width: 50%;
 | 
				
			||||||
 | 
					      float: right;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconEdit,
 | 
				
			||||||
 | 
					  .Edit {
 | 
				
			||||||
 | 
					    color: #5088ff;
 | 
				
			||||||
 | 
					    font-size: 12px;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    padding-left: 8px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .info {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										625
									
								
								project/fengdu/app/AppIntegratingOrder/components/addOrder.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										625
									
								
								project/fengdu/app/AppIntegratingOrder/components/addOrder.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,625 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="add_order">
 | 
				
			||||||
 | 
					    <ai-detail>
 | 
				
			||||||
 | 
					      <template slot="title">
 | 
				
			||||||
 | 
					        <ai-title :title="title" :isShowBack="true" :isShowBottomBorder="true" @onBackClick="$emit('goBack')"></ai-title>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="info.isAdd">
 | 
				
			||||||
 | 
					        <ai-card title="订单信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="form_div">
 | 
				
			||||||
 | 
					              <el-form
 | 
				
			||||||
 | 
					                  ref="rules"
 | 
				
			||||||
 | 
					                  :model="forms"
 | 
				
			||||||
 | 
					                  :rules="formRules"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  label-suffix=":"
 | 
				
			||||||
 | 
					                  label-width="100px">
 | 
				
			||||||
 | 
					                <el-form-item label="店铺名称" prop="shopId">
 | 
				
			||||||
 | 
					                  <el-select
 | 
				
			||||||
 | 
					                      v-model="forms.shopId"
 | 
				
			||||||
 | 
					                      placeholder="请选择..."
 | 
				
			||||||
 | 
					                      @change="(forms.merchandiseList = []), (goodIntegral = {})"
 | 
				
			||||||
 | 
					                      clearable>
 | 
				
			||||||
 | 
					                    <el-option
 | 
				
			||||||
 | 
					                        v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                        :key="i"
 | 
				
			||||||
 | 
					                        :label="item.shopName"
 | 
				
			||||||
 | 
					                        :value="item.id">
 | 
				
			||||||
 | 
					                    </el-option>
 | 
				
			||||||
 | 
					                  </el-select>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="兑换家庭" prop="name">
 | 
				
			||||||
 | 
					                  <el-row type="flex" :gutter="8">
 | 
				
			||||||
 | 
					                    <el-col
 | 
				
			||||||
 | 
					                    >
 | 
				
			||||||
 | 
					                      <el-input v-model="forms.name" disabled clearable
 | 
				
			||||||
 | 
					                      />
 | 
				
			||||||
 | 
					                    </el-col>
 | 
				
			||||||
 | 
					                    <el-col>
 | 
				
			||||||
 | 
					                      <ai-person-select
 | 
				
			||||||
 | 
					                          :instance="instance"
 | 
				
			||||||
 | 
					                          url="/app/appvillagerintegralfamilymember/list"
 | 
				
			||||||
 | 
					                          headerTitle="家庭列表"
 | 
				
			||||||
 | 
					                          dialogTitle="选择家庭"
 | 
				
			||||||
 | 
					                          @selectPerson="getSelect"
 | 
				
			||||||
 | 
					                      >
 | 
				
			||||||
 | 
					                        <template name="option" v-slot:option="{ item }">
 | 
				
			||||||
 | 
					                          <span class="iconfont iconProlife">{{ item.name }}</span>
 | 
				
			||||||
 | 
					                          <ai-id
 | 
				
			||||||
 | 
					                              mode="show"
 | 
				
			||||||
 | 
					                              :show-eyes="false"
 | 
				
			||||||
 | 
					                              :value="item.idNumber"
 | 
				
			||||||
 | 
					                          />
 | 
				
			||||||
 | 
					                          <span>{{ item.phone }}</span>
 | 
				
			||||||
 | 
					                        </template>
 | 
				
			||||||
 | 
					                      </ai-person-select>
 | 
				
			||||||
 | 
					                    </el-col>
 | 
				
			||||||
 | 
					                  </el-row>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="积分余额">
 | 
				
			||||||
 | 
					                  <p>
 | 
				
			||||||
 | 
					                    <span style="color: #2266ff">{{ integral || "0" }}</span
 | 
				
			||||||
 | 
					                    >分
 | 
				
			||||||
 | 
					                  </p>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="兑换商品" prop="merchandiseList">
 | 
				
			||||||
 | 
					                  <el-button @click="showGoodsList()" :disabled="!forms.shopId || !forms.name">选择商品</el-button>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <ai-table
 | 
				
			||||||
 | 
					                    :tableData="forms.merchandiseList"
 | 
				
			||||||
 | 
					                    :col-configs="colConfigs"
 | 
				
			||||||
 | 
					                    :isShowPagination="false">
 | 
				
			||||||
 | 
					                  <el-table-column
 | 
				
			||||||
 | 
					                      label="商品图"
 | 
				
			||||||
 | 
					                      slot="photo"
 | 
				
			||||||
 | 
					                      align="center"
 | 
				
			||||||
 | 
					                      width="150">
 | 
				
			||||||
 | 
					                    <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                      <ai-uploader
 | 
				
			||||||
 | 
					                          :disabled="true"
 | 
				
			||||||
 | 
					                          :instance="instance"
 | 
				
			||||||
 | 
					                          v-model="row.photo"
 | 
				
			||||||
 | 
					                          :limit="9">
 | 
				
			||||||
 | 
					                      </ai-uploader>
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                  <el-table-column
 | 
				
			||||||
 | 
					                      label="兑换数量"
 | 
				
			||||||
 | 
					                      width="180"
 | 
				
			||||||
 | 
					                      slot="merchandiseNumber"
 | 
				
			||||||
 | 
					                      align="center">
 | 
				
			||||||
 | 
					                    <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                      <el-input-number
 | 
				
			||||||
 | 
					                          :min="1"
 | 
				
			||||||
 | 
					                          :max="row.inventoryNumber"
 | 
				
			||||||
 | 
					                          size="mini"
 | 
				
			||||||
 | 
					                          v-model="merchandiseNumbers[row.id]"
 | 
				
			||||||
 | 
					                          @change="
 | 
				
			||||||
 | 
					                          (currentValue, oldValue) =>
 | 
				
			||||||
 | 
					                            changeNumber(currentValue, oldValue, row)
 | 
				
			||||||
 | 
					                        "
 | 
				
			||||||
 | 
					                          :step="1"
 | 
				
			||||||
 | 
					                          step-strictly
 | 
				
			||||||
 | 
					                      ></el-input-number>
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                  <el-table-column label="消耗积分" slot="integral" align="center">
 | 
				
			||||||
 | 
					                    <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                      <span>{{ goodIntegral[row.id] }}</span>
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                  <el-table-column
 | 
				
			||||||
 | 
					                      slot="options"
 | 
				
			||||||
 | 
					                      label="操作"
 | 
				
			||||||
 | 
					                      align="center"
 | 
				
			||||||
 | 
					                      width="60"
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                    <template slot-scope="row">
 | 
				
			||||||
 | 
					                      <el-button
 | 
				
			||||||
 | 
					                          type="text"
 | 
				
			||||||
 | 
					                          class="icon-color89B"
 | 
				
			||||||
 | 
					                          icon="iconfont iconDelete"
 | 
				
			||||||
 | 
					                          title="删除"
 | 
				
			||||||
 | 
					                          @click="deleteGood(row)"
 | 
				
			||||||
 | 
					                      />
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                </ai-table>
 | 
				
			||||||
 | 
					                <div class="total">
 | 
				
			||||||
 | 
					                  <p class="num">
 | 
				
			||||||
 | 
					                    <span>合计积分:</span>
 | 
				
			||||||
 | 
					                    <span>{{ allIntegral }}</span>
 | 
				
			||||||
 | 
					                    <span>分</span>
 | 
				
			||||||
 | 
					                  </p>
 | 
				
			||||||
 | 
					                  <p class="tip" v-if="allIntegral > Number(integral)">
 | 
				
			||||||
 | 
					                    (积分不足,请删减商品)
 | 
				
			||||||
 | 
					                  </p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </el-form>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="!info.isAdd">
 | 
				
			||||||
 | 
					        <ai-card title="订单信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="订单号"><span>{{ detailInfo.orderCode }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="创建时间"><span>{{ detailInfo.createTime }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="店铺名"><span>{{ detailInfo.shopName }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="状态">
 | 
				
			||||||
 | 
					                  <span :style="{ color: dict.getColor('integralOrderStatus', detailInfo.orderStatus)}">
 | 
				
			||||||
 | 
					                    {{ dict.getLabel("integralOrderStatus", detailInfo.orderStatus) }}
 | 
				
			||||||
 | 
					                  </span>
 | 
				
			||||||
 | 
					                </ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-table
 | 
				
			||||||
 | 
					                  :tableData="detailInfo.merchandiseList"
 | 
				
			||||||
 | 
					                  :col-configs="colConfigs"
 | 
				
			||||||
 | 
					                  :isShowPagination="false">
 | 
				
			||||||
 | 
					                <el-table-column
 | 
				
			||||||
 | 
					                    label="商品图"
 | 
				
			||||||
 | 
					                    slot="photo"
 | 
				
			||||||
 | 
					                    align="center"
 | 
				
			||||||
 | 
					                    width="150">
 | 
				
			||||||
 | 
					                  <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                    <ai-uploader
 | 
				
			||||||
 | 
					                        :disabled="true"
 | 
				
			||||||
 | 
					                        :instance="instance"
 | 
				
			||||||
 | 
					                        v-model="row.merchandisePhoto"
 | 
				
			||||||
 | 
					                        :limit="9">
 | 
				
			||||||
 | 
					                    </ai-uploader>
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </el-table-column>
 | 
				
			||||||
 | 
					                <el-table-column
 | 
				
			||||||
 | 
					                    label="兑换数量"
 | 
				
			||||||
 | 
					                    width="200"
 | 
				
			||||||
 | 
					                    slot="merchandiseNumber"
 | 
				
			||||||
 | 
					                    align="center">
 | 
				
			||||||
 | 
					                  <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                    {{ row.merchandiseNumber }}
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </el-table-column>
 | 
				
			||||||
 | 
					                <el-table-column label="消耗积分" slot="integral" align="center">
 | 
				
			||||||
 | 
					                  <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                    <span>{{ Number(row.merchandiseNumber) * Number(row.costIntegral) }}</span>
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </el-table-column>
 | 
				
			||||||
 | 
					              </ai-table>
 | 
				
			||||||
 | 
					              <div class="total">
 | 
				
			||||||
 | 
					                <p class="num">
 | 
				
			||||||
 | 
					                  <span>合计积分:</span>
 | 
				
			||||||
 | 
					                  <span>{{ detailInfo.orderIntegral }}</span>
 | 
				
			||||||
 | 
					                  <span>分</span>
 | 
				
			||||||
 | 
					                </p>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					        <ai-card title="兑换家庭信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="2">
 | 
				
			||||||
 | 
					                <ai-info-item label="户主"><span>{{ detailInfo.familyName }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="联系方式"><span>{{ detailInfo.familyPhone || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="备注"><span>{{ detailInfo.remark || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					        <ai-card title="操作人信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px">
 | 
				
			||||||
 | 
					                <ai-info-item label="操作人"><span>{{ detailInfo.createUserName || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="联系方式"><span>{{ detailInfo.createUserPhone || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="完成时间"><span>{{ detailInfo.finishTime || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="footer" v-if="info.isAdd">
 | 
				
			||||||
 | 
					        <el-button @click="$emit('goBack')" style="width: 120px">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button type="primary" @click="save('rules')" style="width: 120px" :disabled="allIntegral > Number(integral)">确认兑换</el-button>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-detail>
 | 
				
			||||||
 | 
					    <ai-dialog
 | 
				
			||||||
 | 
					        title="选择商品"
 | 
				
			||||||
 | 
					        :visible.sync="showGoods"
 | 
				
			||||||
 | 
					        :customFooter="true"
 | 
				
			||||||
 | 
					        :destroyOnClose="true"
 | 
				
			||||||
 | 
					        class="goods"
 | 
				
			||||||
 | 
					        @close="init"
 | 
				
			||||||
 | 
					        border
 | 
				
			||||||
 | 
					        width="780px">
 | 
				
			||||||
 | 
					      <div class="border_div">
 | 
				
			||||||
 | 
					        <header>
 | 
				
			||||||
 | 
					          <span>商品列表</span>
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					              v-model="keyWord"
 | 
				
			||||||
 | 
					              size="mini"
 | 
				
			||||||
 | 
					              placeholder="商品关键字"
 | 
				
			||||||
 | 
					              @keyup.enter.native="showGoodsList()"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              style="width: 220px"
 | 
				
			||||||
 | 
					              suffix-icon="iconfont iconSearch"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </header>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					            :tableData="goodList"
 | 
				
			||||||
 | 
					            :col-configs="goodsConfig"
 | 
				
			||||||
 | 
					            :isShowPagination="false"
 | 
				
			||||||
 | 
					            @selection-change="handleSelectionChange"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <el-table-column slot="selection" type="selection" width="55" :selectable="(row)=>Number(row.inventoryNumber)>0"/>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="dialog-footer" slot="footer">
 | 
				
			||||||
 | 
					        <el-button @click="showGoods = false" size="medium">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button @click="onConfirm()" type="primary" size="medium">确认</el-button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </ai-dialog>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import {mapState} from "vuex";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "addOrder",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    info: Object,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      forms: {
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					        familyId: "",
 | 
				
			||||||
 | 
					        familyName: "",
 | 
				
			||||||
 | 
					        name: "",
 | 
				
			||||||
 | 
					        memberId: "",
 | 
				
			||||||
 | 
					        merchandiseList: [],
 | 
				
			||||||
 | 
					        phone: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      integral: "",
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					      goodList: [],
 | 
				
			||||||
 | 
					      goodIntegral: {},
 | 
				
			||||||
 | 
					      merchandiseNumbers: {},
 | 
				
			||||||
 | 
					      showGoods: false,
 | 
				
			||||||
 | 
					      selectGoodList: [],
 | 
				
			||||||
 | 
					      keyWord: "",
 | 
				
			||||||
 | 
					      title: "",
 | 
				
			||||||
 | 
					      detailInfo: {},
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    ...mapState(["user"]),
 | 
				
			||||||
 | 
					    formRules() {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        shopId: [{required: true, message: "请选择店铺", trigger: "change"}],
 | 
				
			||||||
 | 
					        name: [
 | 
				
			||||||
 | 
					          {required: true, message: "请选择兑换家庭", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        merchandiseList: [
 | 
				
			||||||
 | 
					          {required: true, message: "请选择商品", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    colConfigs() {
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {slot: "photo", prop: "photo", label: "商品图", align: "center"},
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseName",
 | 
				
			||||||
 | 
					          label: "商品名",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          width: 160,
 | 
				
			||||||
 | 
					          "show-overflow-tooltip": false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "costIntegral",
 | 
				
			||||||
 | 
					          label: "单价",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          width: 60,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          slot: "merchandiseNumber",
 | 
				
			||||||
 | 
					          prop: "merchandiseNumber",
 | 
				
			||||||
 | 
					          label: "兑换数量",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "inventoryNumber",
 | 
				
			||||||
 | 
					          label: "库存",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          width: 60,
 | 
				
			||||||
 | 
					          hide: this.title == "兑换订单详情",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          slot: "integral",
 | 
				
			||||||
 | 
					          prop: "integral",
 | 
				
			||||||
 | 
					          label: "消耗积分",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {slot: "options", label: "操作", align: "center"},
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    goodsConfig() {
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {slot: "selection", label: "", align: "center"},
 | 
				
			||||||
 | 
					        {prop: "merchandiseName", label: "商品名", align: "left", width: 350},
 | 
				
			||||||
 | 
					        {prop: "costIntegral", label: "单价", align: "left"},
 | 
				
			||||||
 | 
					        {prop: "inventoryNumber", align: "center", label: "库存"},
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    allIntegral() {
 | 
				
			||||||
 | 
					      let arr = Object.keys(this.goodIntegral);
 | 
				
			||||||
 | 
					      let all = 0;
 | 
				
			||||||
 | 
					      arr.forEach((e) => {
 | 
				
			||||||
 | 
					        all += this.goodIntegral[e];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      return all;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    if (this.info.isAdd) {
 | 
				
			||||||
 | 
					      this.title = "添加兑换订单";
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      this.title = "兑换订单详情";
 | 
				
			||||||
 | 
					      this.searchDetail(this.info.id);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    this.getShopList();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getSelect(val) {
 | 
				
			||||||
 | 
					      if (val) {
 | 
				
			||||||
 | 
					        this.forms.familyName = val.familyName;
 | 
				
			||||||
 | 
					        this.forms.familyId = val.familyId;
 | 
				
			||||||
 | 
					        this.forms.name = val.name;
 | 
				
			||||||
 | 
					        this.forms.memberId = val.id;
 | 
				
			||||||
 | 
					        this.forms.phone = val.phone;
 | 
				
			||||||
 | 
					        this.integral = val.integral;
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.forms.familyName = "";
 | 
				
			||||||
 | 
					        this.forms.familyId = "";
 | 
				
			||||||
 | 
					        this.forms.name = "";
 | 
				
			||||||
 | 
					        this.forms.memberId = "";
 | 
				
			||||||
 | 
					        this.forms.phone = "";
 | 
				
			||||||
 | 
					        this.integral = 0;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    handleSelectionChange(val) {
 | 
				
			||||||
 | 
					      this.selectGoodList = [...val];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    onConfirm() {
 | 
				
			||||||
 | 
					      this.selectGoodsInit(this.selectGoodList).then(() => {
 | 
				
			||||||
 | 
					        this.showGoods = false;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    init() {
 | 
				
			||||||
 | 
					      this.selectGoodList = [];
 | 
				
			||||||
 | 
					      this.goodList = [];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    deleteGood(row) {
 | 
				
			||||||
 | 
					      console.log(row);
 | 
				
			||||||
 | 
					      this.$confirm("是否删除该商品?", {
 | 
				
			||||||
 | 
					        type: "error",
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then(() => {
 | 
				
			||||||
 | 
					        this.forms.merchandiseList.splice(row.$index, 1);
 | 
				
			||||||
 | 
					        this.$delete(this.goodIntegral, row.row.id);
 | 
				
			||||||
 | 
					        this.$delete(this.merchandiseNumbers, row.row.id);
 | 
				
			||||||
 | 
					        return this.$message.success("删除成功");
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    selectGoodsInit(val) {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        val.map((e, index) => {
 | 
				
			||||||
 | 
					          e.merchandiseNumber = 1;
 | 
				
			||||||
 | 
					          e.merchandiseId = e.id;
 | 
				
			||||||
 | 
					          this.$set(this.merchandiseNumbers, e.id, 1);
 | 
				
			||||||
 | 
					          this.$set(this.goodIntegral, e.id, Number(e.costIntegral));
 | 
				
			||||||
 | 
					          if (e.photo) {
 | 
				
			||||||
 | 
					            e.merchandisePhoto = e.photo;
 | 
				
			||||||
 | 
					            e.photo = [{...JSON.parse(e.photo)[0]}];
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            e.photo = [];
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        this.forms.merchandiseList = this.forms.merchandiseList.concat([
 | 
				
			||||||
 | 
					          ...val,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					        reslove();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    showGoodsList() {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralmerchandise/list`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          size: 100000,
 | 
				
			||||||
 | 
					          shopId: this.forms.shopId,
 | 
				
			||||||
 | 
					          merchandiseName: this.keyWord,
 | 
				
			||||||
 | 
					          status: "1",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          if (this.forms.merchandiseList.length > 0) {
 | 
				
			||||||
 | 
					            this.forms.merchandiseList.forEach((e1, index1) => {
 | 
				
			||||||
 | 
					              res.data.records.forEach((e2, index2) => {
 | 
				
			||||||
 | 
					                if (e1.id == e2.id) {
 | 
				
			||||||
 | 
					                  res.data.records.splice(index2, 1);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          this.goodList = res.data.records;
 | 
				
			||||||
 | 
					          this.showGoods = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    changeNumber(currentValue, oldValue, row) {
 | 
				
			||||||
 | 
					      console.log(currentValue, oldValue, row);
 | 
				
			||||||
 | 
					      this.$set(
 | 
				
			||||||
 | 
					          this.goodIntegral,
 | 
				
			||||||
 | 
					          row.id,
 | 
				
			||||||
 | 
					          Number(currentValue) * Number(row.costIntegral)
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralshop/listForOperator`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          size: 100000,
 | 
				
			||||||
 | 
					          areaId: this.areaId,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.shopList = res.data.records;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    save(formName) {
 | 
				
			||||||
 | 
					      this.$refs[formName].validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.forms.merchandiseList.forEach((e1, index1) => {
 | 
				
			||||||
 | 
					            Object.keys(this.merchandiseNumbers).forEach((e2, index2) => {
 | 
				
			||||||
 | 
					              if (e1.id == e2) {
 | 
				
			||||||
 | 
					                this.forms.merchandiseList[
 | 
				
			||||||
 | 
					                    index1
 | 
				
			||||||
 | 
					                    ].merchandiseNumber = this.merchandiseNumbers[e2];
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					          .post(
 | 
				
			||||||
 | 
					              `/app/appvillagerintegralshoporder/addOrder`,
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                ...this.forms,
 | 
				
			||||||
 | 
					                areaId: this.user.info.areaId,
 | 
				
			||||||
 | 
					                orderIntegral: this.allIntegral,
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              null
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					          .then((res) => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.$message.success("提交成功");
 | 
				
			||||||
 | 
					              this.$emit("goBack");
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              return this.$message.error(res.msg);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    searchDetail(id) {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralshoporder/queryDetailById`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          id,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.detailInfo = {...res.data};
 | 
				
			||||||
 | 
					          this.detailInfo.merchandiseList.map((e) => {
 | 
				
			||||||
 | 
					            let arr = JSON.parse(e.merchandisePhoto);
 | 
				
			||||||
 | 
					            e.merchandisePhoto = [{...arr[0]}];
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.add_order {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .form_div {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .goods {
 | 
				
			||||||
 | 
					    :deep( .el-table td ){
 | 
				
			||||||
 | 
					      border-bottom: none;
 | 
				
			||||||
 | 
					      padding: 2px 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    :deep( .el-table th ){
 | 
				
			||||||
 | 
					      padding: 2px 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .total {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    padding: 32px 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    p {
 | 
				
			||||||
 | 
					      text-align: right;
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .num {
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					      color: #333333;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      span:nth-child(1) {
 | 
				
			||||||
 | 
					        color: #999999;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      span:nth-child(2) {
 | 
				
			||||||
 | 
					        color: #999999;
 | 
				
			||||||
 | 
					        color: #2266ff;
 | 
				
			||||||
 | 
					        font-size: 20px;
 | 
				
			||||||
 | 
					        font-weight: bold;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .tip {
 | 
				
			||||||
 | 
					      color: #ff4466;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .border_div {
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					    border: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    header {
 | 
				
			||||||
 | 
					      height: 40px;
 | 
				
			||||||
 | 
					      background: #f5f5f5;
 | 
				
			||||||
 | 
					      padding: 0 8px;
 | 
				
			||||||
 | 
					      box-sizing: border-box;
 | 
				
			||||||
 | 
					      display: flex;
 | 
				
			||||||
 | 
					      justify-content: space-between;
 | 
				
			||||||
 | 
					      align-items: center;
 | 
				
			||||||
 | 
					      border-bottom: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      span {
 | 
				
			||||||
 | 
					        color: #333333;
 | 
				
			||||||
 | 
					        font-size: 12px;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .info {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										336
									
								
								project/fengdu/app/AppIntegratingOrder/goodsManagement.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										336
									
								
								project/fengdu/app/AppIntegratingOrder/goodsManagement.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,336 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="order_management">
 | 
				
			||||||
 | 
					    <ai-list isTabs>
 | 
				
			||||||
 | 
					      <template slot="content">
 | 
				
			||||||
 | 
					        <ai-search-bar bottomBorder>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              v-model="searchObj.shopId"
 | 
				
			||||||
 | 
					              placeholder="请选择店铺"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                :key="i"
 | 
				
			||||||
 | 
					                :label="item.shopName"
 | 
				
			||||||
 | 
					                :value="item.id">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              v-model="searchObj.merchandiseType"
 | 
				
			||||||
 | 
					              placeholder="请选择商品类型"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                v-for="(item, i) in dict.getDict('integralMerchandiseType')"
 | 
				
			||||||
 | 
					                :key="i"
 | 
				
			||||||
 | 
					                :label="item.dictName"
 | 
				
			||||||
 | 
					                :value="item.dictValue">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              v-model="searchObj.status"
 | 
				
			||||||
 | 
					              placeholder="请选择状态"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                v-for="(item, i) in dict.getDict('integralMerchandiseStatus')"
 | 
				
			||||||
 | 
					                :key="i"
 | 
				
			||||||
 | 
					                :label="item.dictName"
 | 
				
			||||||
 | 
					                :value="item.dictValue">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template slot="right">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              v-model="searchObj.merchandiseName"
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              placeholder="商品名"
 | 
				
			||||||
 | 
					              @keyup.enter.native="(page.current = 1), getList()"
 | 
				
			||||||
 | 
					              @clear="(page.current = 1), searchObj.merchandiseName = '', getList()"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              suffix-icon="iconfont iconSearch" />
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-search-bar class="mt10">
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              icon="iconfont iconAdd"
 | 
				
			||||||
 | 
					              @click="add()"
 | 
				
			||||||
 | 
					              v-if="$permissions('app_appvillagerintegralmerchandise_edit')">
 | 
				
			||||||
 | 
					              添加
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					            <ai-download
 | 
				
			||||||
 | 
					              :instance="instance"
 | 
				
			||||||
 | 
					              :fileName="'商品列表'"
 | 
				
			||||||
 | 
					              url="/app/appvillagerintegralmerchandise/export"
 | 
				
			||||||
 | 
					              v-if="$permissions('app_appvillagerintegralmerchandise_export')"
 | 
				
			||||||
 | 
					              :params="{ ...searchObj, areaId: areaId }">
 | 
				
			||||||
 | 
					            </ai-download>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template slot="right"> </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					          :tableData="tableData"
 | 
				
			||||||
 | 
					          :col-configs="colConfigs"
 | 
				
			||||||
 | 
					          :total="page.total"
 | 
				
			||||||
 | 
					          :current.sync="page.current"
 | 
				
			||||||
 | 
					          :size.sync="page.size"
 | 
				
			||||||
 | 
					          @getList="getList">
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					            label="商品图"
 | 
				
			||||||
 | 
					            slot="photo"
 | 
				
			||||||
 | 
					            align="center"
 | 
				
			||||||
 | 
					            width="150">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <ai-uploader
 | 
				
			||||||
 | 
					                :disabled="true"
 | 
				
			||||||
 | 
					                :instance="instance"
 | 
				
			||||||
 | 
					                v-model="row.photo"
 | 
				
			||||||
 | 
					                :limit="9">
 | 
				
			||||||
 | 
					              </ai-uploader>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column label="操作" slot="options" align="center" width="200" fixed="right">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <div class="table-options">
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="编辑"
 | 
				
			||||||
 | 
					                  :disabled="!$permissions('app_appvillagerintegralmerchandise_edit') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="edit(row)">
 | 
				
			||||||
 | 
					                  编辑
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="详情"
 | 
				
			||||||
 | 
					                  :disabled="!$permissions('app_appvillagerintegralmerchandise_detail') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="goDetail(row)">
 | 
				
			||||||
 | 
					                  详情
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="上架"
 | 
				
			||||||
 | 
					                  :disabled="row.status != 0 || !$permissions('app_appvillagerintegralmerchandise_edit') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="changeStatus(row)">
 | 
				
			||||||
 | 
					                  上架
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="下架"
 | 
				
			||||||
 | 
					                  :disabled="row.status != 1 || !$permissions('app_appvillagerintegralmerchandise_edit') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="changeStatus(row)">
 | 
				
			||||||
 | 
					                  下架
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-list>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "goodsManagement",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      searchObj: {
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					        status: "",
 | 
				
			||||||
 | 
					        merchandiseName: "",
 | 
				
			||||||
 | 
					        merchandiseType: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      page: {
 | 
				
			||||||
 | 
					        size: 10,
 | 
				
			||||||
 | 
					        current: 1,
 | 
				
			||||||
 | 
					        total: 0,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      tableData: [],
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    colConfigs() {
 | 
				
			||||||
 | 
					      let _ = this;
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "shopId",
 | 
				
			||||||
 | 
					          label: "店铺名称",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          slot: "photo",
 | 
				
			||||||
 | 
					          prop: "photo",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "商品图",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseName",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          label: "商品名",
 | 
				
			||||||
 | 
					          width: 180,
 | 
				
			||||||
 | 
					          "show-overflow-tooltip": false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "costIntegral",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "单价",
 | 
				
			||||||
 | 
					          width: 100,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "inventoryNumber",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "库存",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "saleNumber",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "销量",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "status",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "状态",
 | 
				
			||||||
 | 
					          render(h, { row }) {
 | 
				
			||||||
 | 
					            return h(
 | 
				
			||||||
 | 
					              "span",
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                style: {
 | 
				
			||||||
 | 
					                  color: _.$dict.getColor(
 | 
				
			||||||
 | 
					                    "integralMerchandiseStatus",
 | 
				
			||||||
 | 
					                    row.status
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              _.$dict.getLabel("integralMerchandiseStatus", row.status)
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.dict.load("integralMerchandiseType", "integralMerchandiseStatus");
 | 
				
			||||||
 | 
					    this.getShopList().then(() => {
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getList() {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralmerchandise/list`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            ...this.searchObj,
 | 
				
			||||||
 | 
					            ...this.page,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.tableData = res.data.records;
 | 
				
			||||||
 | 
					            this.tableData.map((e, index) => {
 | 
				
			||||||
 | 
					              let i = this.shopList.findIndex((item) => item.id == e.shopId);
 | 
				
			||||||
 | 
					              if (i > -1) {
 | 
				
			||||||
 | 
					                e.shopId = this.shopList[i].shopName;
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					              if (e.photo) {
 | 
				
			||||||
 | 
					                e.allPhoto = [...JSON.parse(e.photo)];
 | 
				
			||||||
 | 
					                e.photo = [{ ...e.allPhoto[0] }];
 | 
				
			||||||
 | 
					              } else {
 | 
				
			||||||
 | 
					                e.photo = [];
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            this.page.total = res.data.total;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    updateList() {
 | 
				
			||||||
 | 
					      this.getShopList().then(() => {
 | 
				
			||||||
 | 
					        this.getList();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    reset() {
 | 
				
			||||||
 | 
					      Object.keys(this.searchObj).forEach((e) => {
 | 
				
			||||||
 | 
					        this.searchObj[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    add() {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", { isAdd: true });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    edit(row) {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", { isAdd: true, ...row });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    goDetail(row) {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", { isAdd: false, ...row });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    changeStatus(row) {
 | 
				
			||||||
 | 
					      let status =
 | 
				
			||||||
 | 
					        row.status == 0
 | 
				
			||||||
 | 
					          ? `上架 ${row.shopId}-${row.merchandiseName}`
 | 
				
			||||||
 | 
					          : `下架 ${row.shopId}-${row.merchandiseName}`;
 | 
				
			||||||
 | 
					      this.$confirm(
 | 
				
			||||||
 | 
					        `<p>是否要<span style='color:#2266FF;'>${status}</span>?</p>`,
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          type: "error",
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					        .then(() => {
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					            .post("/app/appvillagerintegralmerchandise/enableOrDisable", null, {
 | 
				
			||||||
 | 
					              params: { id: row.id },
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .then((res) => {
 | 
				
			||||||
 | 
					              if (res?.code == 0) {
 | 
				
			||||||
 | 
					                this.$message.success("操作成功!");
 | 
				
			||||||
 | 
					                this.getList();
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .catch(() => {});
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					          .post(`/app/appvillagerintegralshop/list`, null, {
 | 
				
			||||||
 | 
					            params: {
 | 
				
			||||||
 | 
					              size: 100000,
 | 
				
			||||||
 | 
					              areaId: this.areaId,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					          .then((res) => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.shopList = res.data.records;
 | 
				
			||||||
 | 
					              reslove();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.order_management {
 | 
				
			||||||
 | 
					  background: #f3f6f9;
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  .iconShow {
 | 
				
			||||||
 | 
					    padding: 0 8px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .iconfont {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										501
									
								
								project/fengdu/app/AppIntegratingOrder/orderManagement.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										501
									
								
								project/fengdu/app/AppIntegratingOrder/orderManagement.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,501 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="order_management">
 | 
				
			||||||
 | 
					    <ai-list isTabs>
 | 
				
			||||||
 | 
					      <template slot="content">
 | 
				
			||||||
 | 
					        <ai-search-bar>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					                size="small"
 | 
				
			||||||
 | 
					                v-model="searchObj.shopId"
 | 
				
			||||||
 | 
					                placeholder="请选择店铺"
 | 
				
			||||||
 | 
					                clearable
 | 
				
			||||||
 | 
					                @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                  v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                  :key="i"
 | 
				
			||||||
 | 
					                  :label="item.shopName"
 | 
				
			||||||
 | 
					                  :value="item.id">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					                size="small"
 | 
				
			||||||
 | 
					                v-model="searchObj.orderStatus"
 | 
				
			||||||
 | 
					                placeholder="请选择状态"
 | 
				
			||||||
 | 
					                clearable
 | 
				
			||||||
 | 
					                @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                  v-for="(item, i) in dict.getDict('integralOrderStatus')"
 | 
				
			||||||
 | 
					                  :key="i"
 | 
				
			||||||
 | 
					                  :label="item.dictName"
 | 
				
			||||||
 | 
					                  :value="item.dictValue">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <ai-search label="创建时间">
 | 
				
			||||||
 | 
					              <el-date-picker
 | 
				
			||||||
 | 
					                  v-model="searchObj.createTimeStart"
 | 
				
			||||||
 | 
					                  type="date"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  @change="(page.current = 1), getList()"
 | 
				
			||||||
 | 
					                  value-format="yyyy-MM-dd HH:mm:ss"
 | 
				
			||||||
 | 
					                  placeholder="开始日期">
 | 
				
			||||||
 | 
					              </el-date-picker>
 | 
				
			||||||
 | 
					              <el-date-picker
 | 
				
			||||||
 | 
					                  v-model="searchObj.createTimeEnd"
 | 
				
			||||||
 | 
					                  type="date"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  @change="(page.current = 1), getList()"
 | 
				
			||||||
 | 
					                  value-format="yyyy-MM-dd HH:mm:ss"
 | 
				
			||||||
 | 
					                  placeholder="结束日期">
 | 
				
			||||||
 | 
					              </el-date-picker>
 | 
				
			||||||
 | 
					            </ai-search>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <template slot="right">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					                v-model="searchObj.name"
 | 
				
			||||||
 | 
					                size="small"
 | 
				
			||||||
 | 
					                placeholder="订单号/商品名/兑换家庭"
 | 
				
			||||||
 | 
					                v-throttle="() => {page.current = 1, getList()}"
 | 
				
			||||||
 | 
					                @clear="page.current = 1, searchObj.name = '', getList()"
 | 
				
			||||||
 | 
					                clearable
 | 
				
			||||||
 | 
					                suffix-icon="iconfont iconSearch"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-search-bar>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <!-- <el-button type="primary" icon="iconfont iconAdd" @click="add()">添加</el-button> -->
 | 
				
			||||||
 | 
					            <ai-download
 | 
				
			||||||
 | 
					                :instance="instance"
 | 
				
			||||||
 | 
					                url="/app/appvillagerintegralshoporder/listExport"
 | 
				
			||||||
 | 
					                :params="{ ...searchObj, areaId: areaId, ids: ids.join(',') }"
 | 
				
			||||||
 | 
					                fileName="订单管理"
 | 
				
			||||||
 | 
					                v-if="$permissions('app_appvillagerintegralshoporder_export')">
 | 
				
			||||||
 | 
					            </ai-download>
 | 
				
			||||||
 | 
					            <el-dropdown @command="handleCommand">
 | 
				
			||||||
 | 
					              <el-button type="primary">
 | 
				
			||||||
 | 
					                变更状态<i class="el-icon-arrow-down el-icon--right"></i>
 | 
				
			||||||
 | 
					              </el-button>
 | 
				
			||||||
 | 
					              <el-dropdown-menu slot="dropdown">
 | 
				
			||||||
 | 
					                <el-dropdown-item command="1">批量兑换</el-dropdown-item>
 | 
				
			||||||
 | 
					                <el-dropdown-item command="2">批量取消</el-dropdown-item>
 | 
				
			||||||
 | 
					              </el-dropdown-menu>
 | 
				
			||||||
 | 
					            </el-dropdown>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template slot="right"></template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					            :tableData="tableData"
 | 
				
			||||||
 | 
					            :col-configs="colConfigs"
 | 
				
			||||||
 | 
					            :total="page.total"
 | 
				
			||||||
 | 
					            :current.sync="page.current"
 | 
				
			||||||
 | 
					            @select="onRowClick"
 | 
				
			||||||
 | 
					            @select-all="onRowClick"
 | 
				
			||||||
 | 
					            row-key="id"
 | 
				
			||||||
 | 
					            :default-expand-all="false"
 | 
				
			||||||
 | 
					            :tree-props="{ children: 'merchandiseList' }"
 | 
				
			||||||
 | 
					            :size.sync="page.size"
 | 
				
			||||||
 | 
					            @getList="getList">
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              type="selection"
 | 
				
			||||||
 | 
					              :selectable="(row,index)=>row.orderStatus==0"
 | 
				
			||||||
 | 
					              width="55"
 | 
				
			||||||
 | 
					              slot="selection">
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="订单号/创建时间"
 | 
				
			||||||
 | 
					              slot="orderCode"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="150">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row>
 | 
				
			||||||
 | 
					                <el-col>{{ row.orderCode }}</el-col>
 | 
				
			||||||
 | 
					                <el-col style="color: #999999">{{ row.createTime }}</el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="商品图"
 | 
				
			||||||
 | 
					              slot="merchandisePhoto"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="130">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <ai-uploader
 | 
				
			||||||
 | 
					                  :disabled="true"
 | 
				
			||||||
 | 
					                  :instance="instance"
 | 
				
			||||||
 | 
					                  v-model="row.merchandisePhoto"
 | 
				
			||||||
 | 
					                  :limit="9">
 | 
				
			||||||
 | 
					              </ai-uploader>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column label="兑换家庭" slot="familyName" align="left">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row>
 | 
				
			||||||
 | 
					                <el-col style="width: 100%">{{ row.familyName }}</el-col>
 | 
				
			||||||
 | 
					                <el-col style="color: #999999">{{ row.familyPhone }}</el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column label="操作人" slot="createUserName" align="left">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row>
 | 
				
			||||||
 | 
					                <el-col style="width: 100%">{{ row.createUserName }}</el-col>
 | 
				
			||||||
 | 
					                <el-col style="color: #999999">{{
 | 
				
			||||||
 | 
					                    row.createUserPhone
 | 
				
			||||||
 | 
					                  }}
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="订单状态"
 | 
				
			||||||
 | 
					              slot="orderStatus"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="130"
 | 
				
			||||||
 | 
					              fixed="right">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row v-if="row.isParent">
 | 
				
			||||||
 | 
					                <el-col
 | 
				
			||||||
 | 
					                    style="width: 100%"
 | 
				
			||||||
 | 
					                    :style="{
 | 
				
			||||||
 | 
					                    color: dict.getColor(
 | 
				
			||||||
 | 
					                      'integralOrderStatus',
 | 
				
			||||||
 | 
					                      row.orderStatus
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  }"
 | 
				
			||||||
 | 
					                >{{
 | 
				
			||||||
 | 
					                    dict.getLabel("integralOrderStatus", row.orderStatus)
 | 
				
			||||||
 | 
					                  }}
 | 
				
			||||||
 | 
					                </el-col
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <el-col style="width: 100%" v-if="row.orderStatus == 0"
 | 
				
			||||||
 | 
					                >{{ row.reserveDate }} {{ row.reserveTime }}
 | 
				
			||||||
 | 
					                </el-col
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <el-col style="color: #2266ff; width: 100%" v-if="row.remark">
 | 
				
			||||||
 | 
					                  <el-tooltip
 | 
				
			||||||
 | 
					                      :disabled="!row.remark"
 | 
				
			||||||
 | 
					                      class="item"
 | 
				
			||||||
 | 
					                      effect="light"
 | 
				
			||||||
 | 
					                      :content="row.remark"
 | 
				
			||||||
 | 
					                      placement="left-end"
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                    <el-link type="primary">备注</el-link>
 | 
				
			||||||
 | 
					                  </el-tooltip>
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="操作"
 | 
				
			||||||
 | 
					              slot="options"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="120"
 | 
				
			||||||
 | 
					              fixed="right">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <div class="table-options">
 | 
				
			||||||
 | 
					                <el-button v-if="row.orderCode" type="text" @click="goDetail(row)" title="详情"
 | 
				
			||||||
 | 
					                           :disabled="!$permissions('app_appvillagerintegralshoporder_detail')">详情
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <template v-if="row.orderStatus==0 || row.orderStatus==3">
 | 
				
			||||||
 | 
					                  <el-button type="text" v-if="row.orderStatus==0" @click="handlePendingOrder(row.id,1)">确认兑换</el-button>
 | 
				
			||||||
 | 
					                  <el-button type="text" v-if="row.orderStatus==0 || row.orderStatus==3" @click="handlePendingOrder(row.id,2)">取消订单</el-button>
 | 
				
			||||||
 | 
					                </template>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-list>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "orderManagement",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      searchObj: {
 | 
				
			||||||
 | 
					        name: "",
 | 
				
			||||||
 | 
					        orderStatus: "",
 | 
				
			||||||
 | 
					        createTimeStart: null,
 | 
				
			||||||
 | 
					        createTimeEnd: null,
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      page: {
 | 
				
			||||||
 | 
					        size: 10,
 | 
				
			||||||
 | 
					        current: 1,
 | 
				
			||||||
 | 
					        total: 0,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      tableData: [],
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					      ids: [],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    colConfigs() {
 | 
				
			||||||
 | 
					      let _ = this;
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {slot: "selection"},
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "orderCode",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          slot: "orderCode",
 | 
				
			||||||
 | 
					          label: "订单号/创建时间",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandisePhoto",
 | 
				
			||||||
 | 
					          slot: "merchandisePhoto",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "商品图",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseName",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          label: "商品名",
 | 
				
			||||||
 | 
					          width: 180,
 | 
				
			||||||
 | 
					          "show-overflow-tooltip": false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "costIntegral",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "单价",
 | 
				
			||||||
 | 
					          width: 100,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseNumber",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "数量",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "allCostIntegral",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "消耗积分",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "familyName",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "兑换家庭",
 | 
				
			||||||
 | 
					          slot: "familyName",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "createUserName",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "操作人",
 | 
				
			||||||
 | 
					          slot: "createUserName",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "orderStatus",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "订单状态",
 | 
				
			||||||
 | 
					          fixed: "right",
 | 
				
			||||||
 | 
					          slot: "orderStatus",
 | 
				
			||||||
 | 
					          // render(h, {row}) {
 | 
				
			||||||
 | 
					          //     return h('span', {style: {color: _.dict.getColor('integralOrderStatus', row.orderStatus)}}, _.dict.getLabel('integralOrderStatus', row.orderStatus))
 | 
				
			||||||
 | 
					          // }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.getList();
 | 
				
			||||||
 | 
					    this.dict.load("integralOrderStatus");
 | 
				
			||||||
 | 
					    this.getShopList();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    onRowClick(row) {
 | 
				
			||||||
 | 
					      this.ids = row.map(e => e.id)
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    handleCommand(val) {
 | 
				
			||||||
 | 
					      if (this.ids.length == 0) {
 | 
				
			||||||
 | 
					        return this.$message.error("请选择商品")
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.instance.post(`/app/appvillagerintegralshoporder/changeOrderStatus`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          ids: this.ids.join(","),
 | 
				
			||||||
 | 
					          status: val
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }).then(res => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.$message.success(`批量${val == 1 ? '兑换' : '取消'}成功`)
 | 
				
			||||||
 | 
					          this.getList()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    handlePendingOrder(ids, status) {
 | 
				
			||||||
 | 
					      let text = status == 1 ? "确认兑换" : "取消订单"
 | 
				
			||||||
 | 
					      this.$confirm(`是否${text}?`).then(() => {
 | 
				
			||||||
 | 
					        this.instance.post(`/app/appvillagerintegralshoporder/changeOrderStatus`, null, {
 | 
				
			||||||
 | 
					          params: {ids, status}
 | 
				
			||||||
 | 
					        }).then(res => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.$message.success(`${text}成功`)
 | 
				
			||||||
 | 
					            this.getList()
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      }).catch(() => 0)
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getList() {
 | 
				
			||||||
 | 
					      this.instance.post(`/app/appvillagerintegralshoporder/list`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          ...this.searchObj,
 | 
				
			||||||
 | 
					          ...this.page,
 | 
				
			||||||
 | 
					          areaId: this.areaId,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.tableData = res.data.records;
 | 
				
			||||||
 | 
					          this.tableData.map((e) => {
 | 
				
			||||||
 | 
					            e.merchandiseName = e.merchandiseList[0].merchandiseName;
 | 
				
			||||||
 | 
					            e.merchandiseNumber = e.merchandiseList[0].merchandiseNumber;
 | 
				
			||||||
 | 
					            e.merchandisePhoto = [
 | 
				
			||||||
 | 
					              {...JSON.parse(e.merchandiseList[0].merchandisePhoto)[0]},
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					            e.idForWeb = e.merchandiseList[0].idForWeb;
 | 
				
			||||||
 | 
					            e.costIntegral = e.merchandiseList[0].costIntegral;
 | 
				
			||||||
 | 
					            e.allCostIntegral =
 | 
				
			||||||
 | 
					                Number(e.merchandiseList[0].costIntegral) *
 | 
				
			||||||
 | 
					                Number(e.merchandiseNumber);
 | 
				
			||||||
 | 
					            e.merchandiseList.splice(0, 1);
 | 
				
			||||||
 | 
					            e.isParent = true;
 | 
				
			||||||
 | 
					            if (e.merchandiseList.length > 0) {
 | 
				
			||||||
 | 
					              e.merchandiseList.map((e2) => {
 | 
				
			||||||
 | 
					                e2.createTime = "";
 | 
				
			||||||
 | 
					                let arr = JSON.parse(e2.merchandisePhoto);
 | 
				
			||||||
 | 
					                e2.merchandisePhoto = [{...arr[0]}];
 | 
				
			||||||
 | 
					                e2.allCostIntegral =
 | 
				
			||||||
 | 
					                    Number(e2.costIntegral) * Number(e2.merchandiseNumber);
 | 
				
			||||||
 | 
					                e2.isParent = false;
 | 
				
			||||||
 | 
					                // e2.id = e2.orderId
 | 
				
			||||||
 | 
					              });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          this.page.total = res.data.total;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/list`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            size: 100000,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.shopList = res.data.records;
 | 
				
			||||||
 | 
					            reslove();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    reset() {
 | 
				
			||||||
 | 
					      Object.keys(this.searchObj).forEach((e) => {
 | 
				
			||||||
 | 
					        this.searchObj[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.searchObj.createTimeStart = null;
 | 
				
			||||||
 | 
					      this.searchObj.createTimeEnd = null;
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    add() {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", {isAdd: true});
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    goDetail(row) {
 | 
				
			||||||
 | 
					      console.log(row);
 | 
				
			||||||
 | 
					      this.$emit("showDetail", {isAdd: false, ...row});
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    finishOrder(row) {
 | 
				
			||||||
 | 
					      this.$confirm(`是否完成此订单?`, {
 | 
				
			||||||
 | 
					        type: "error",
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then(() => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshoporder/FinishOrder`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            orderId: row.id,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.$message.success("已完成!");
 | 
				
			||||||
 | 
					            this.getList();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    overOrder(row) {
 | 
				
			||||||
 | 
					      this.$confirm(`是否结束此订单?`, {
 | 
				
			||||||
 | 
					        type: "error",
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then(() => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshoporder/overOrder`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            orderId: row.id,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.$message.success("已结束!");
 | 
				
			||||||
 | 
					            this.getList();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.order_management {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  background: #f3f6f9;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .times_div {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .times {
 | 
				
			||||||
 | 
					      display: block;
 | 
				
			||||||
 | 
					      width: 72px;
 | 
				
			||||||
 | 
					      height: 30px;
 | 
				
			||||||
 | 
					      line-height: 30px;
 | 
				
			||||||
 | 
					      margin: 0;
 | 
				
			||||||
 | 
					      text-align: center;
 | 
				
			||||||
 | 
					      background: #f5f5f5;
 | 
				
			||||||
 | 
					      border-radius: 2px 0px 0px 2px;
 | 
				
			||||||
 | 
					      border: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					      color: #666666;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconfont {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconCorrect {
 | 
				
			||||||
 | 
					    color: #53b43b;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconReject {
 | 
				
			||||||
 | 
					    color: #e75555;
 | 
				
			||||||
 | 
					    padding: 0 8px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										474
									
								
								project/fengdu/app/AppIntegratingOrder/storeManagement.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										474
									
								
								project/fengdu/app/AppIntegratingOrder/storeManagement.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,474 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="storeManagement">
 | 
				
			||||||
 | 
					    <ai-list isTabs>
 | 
				
			||||||
 | 
					      <template slot="content">
 | 
				
			||||||
 | 
					        <ai-search-bar bottomBorder>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              :disabled="!isLevel5"
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              icon="iconfont iconAdd"
 | 
				
			||||||
 | 
					              @click="onAdd">
 | 
				
			||||||
 | 
					              添加
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					          :tableData="tableData"
 | 
				
			||||||
 | 
					          :col-configs="colConfigs"
 | 
				
			||||||
 | 
					          :total="total"
 | 
				
			||||||
 | 
					          ref="aitableex"
 | 
				
			||||||
 | 
					          :current.sync="search.current"
 | 
				
			||||||
 | 
					          :size.sync="search.size"
 | 
				
			||||||
 | 
					          @getList="getList">
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					            slot="changeIntegral"
 | 
				
			||||||
 | 
					            label="积分"
 | 
				
			||||||
 | 
					            align="center">
 | 
				
			||||||
 | 
					            <template slot-scope="{ row }">
 | 
				
			||||||
 | 
					              <span>{{ row.doType > 0 ? "+" : ""}}{{ row.changeIntegral }}</span>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column slot="options" label="操作" align="center" width="120" fixed="right">
 | 
				
			||||||
 | 
					            <template slot-scope="{ row }">
 | 
				
			||||||
 | 
					              <div class="table-options">
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="编辑"
 | 
				
			||||||
 | 
					                  style="margin-right: 8px;"
 | 
				
			||||||
 | 
					                  :disabled="!$permissions('app_appvillagerintegralshop_edit')"
 | 
				
			||||||
 | 
					                  @click="editItem(row)">
 | 
				
			||||||
 | 
					                  编辑
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <ai-wechat-selecter :instance="instance" v-model="dialogInfo.operators" @change="getSelect">
 | 
				
			||||||
 | 
					                  <el-button
 | 
				
			||||||
 | 
					                    type="text"
 | 
				
			||||||
 | 
					                    @click="statusChage(row)"
 | 
				
			||||||
 | 
					                    title="授权"
 | 
				
			||||||
 | 
					                    v-if="$permissions('app_appvillagerintegralshop_edit')">
 | 
				
			||||||
 | 
					                    授权
 | 
				
			||||||
 | 
					                  </el-button>
 | 
				
			||||||
 | 
					                </ai-wechat-selecter>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-list>
 | 
				
			||||||
 | 
					    <ai-dialog
 | 
				
			||||||
 | 
					      :title="dialog.title"
 | 
				
			||||||
 | 
					      :visible.sync="dialog.visible"
 | 
				
			||||||
 | 
					      :customFooter="true"
 | 
				
			||||||
 | 
					      :destroyOnClose="true"
 | 
				
			||||||
 | 
					      @close="init('ruleForm')"
 | 
				
			||||||
 | 
					      width="520px"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <div class="form_div">
 | 
				
			||||||
 | 
					        <el-form
 | 
				
			||||||
 | 
					          ref="ruleForm"
 | 
				
			||||||
 | 
					          :model="dialogInfo"
 | 
				
			||||||
 | 
					          :rules="formRules"
 | 
				
			||||||
 | 
					          size="small"
 | 
				
			||||||
 | 
					          label-suffix=":"
 | 
				
			||||||
 | 
					          label-width="100px"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <el-form-item label="店铺名称" prop="shopName">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.shopName"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="店主" prop="shopkeeper">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.shopkeeper"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="联系电话" prop="phone">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.phone"
 | 
				
			||||||
 | 
					              maxlength="11"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="店铺地址" prop="shopAddress">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.shopAddress"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="状态" prop="status">
 | 
				
			||||||
 | 
					            <el-radio-group v-model="dialogInfo.status">
 | 
				
			||||||
 | 
					              <el-radio label="1">启用</el-radio>
 | 
				
			||||||
 | 
					              <el-radio label="0">停用</el-radio>
 | 
				
			||||||
 | 
					            </el-radio-group>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					        </el-form>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="dialog-footer" slot="footer">
 | 
				
			||||||
 | 
					        <el-button @click="dialog.visible = false" size="medium"
 | 
				
			||||||
 | 
					          >取消</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					        <el-button @click="onConfirm('ruleForm')" type="primary" size="medium"
 | 
				
			||||||
 | 
					          >确认</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </ai-dialog>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <ai-dialog
 | 
				
			||||||
 | 
					      title="操作人授权"
 | 
				
			||||||
 | 
					      :visible.sync="dialog.visibleStatus"
 | 
				
			||||||
 | 
					      :customFooter="true"
 | 
				
			||||||
 | 
					      :destroyOnClose="true"
 | 
				
			||||||
 | 
					      @close="init('ruleStatus')"
 | 
				
			||||||
 | 
					      width="720px"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <div class="form_div">
 | 
				
			||||||
 | 
					        <el-form
 | 
				
			||||||
 | 
					          ref="ruleStatus"
 | 
				
			||||||
 | 
					          :model="dialogInfo"
 | 
				
			||||||
 | 
					          :rules="formRules"
 | 
				
			||||||
 | 
					          size="small"
 | 
				
			||||||
 | 
					          label-suffix=":"
 | 
				
			||||||
 | 
					          label-width="100px"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <el-form-item label="事件区域" prop="areaId">
 | 
				
			||||||
 | 
					            <ai-area-select
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              always-show
 | 
				
			||||||
 | 
					              :instance="instance"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.areaId"
 | 
				
			||||||
 | 
					              :hide-level="2"
 | 
				
			||||||
 | 
					              :disabled-level="user.info.areaList.length"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="操作员" required>
 | 
				
			||||||
 | 
					            <el-col :span="14" style="width: 60%; margin-right: 8px">
 | 
				
			||||||
 | 
					              <el-form-item prop="operators">
 | 
				
			||||||
 | 
					                <div class="organ">
 | 
				
			||||||
 | 
					                  <span v-if="dialogInfo.operators.length">
 | 
				
			||||||
 | 
					                    <span
 | 
				
			||||||
 | 
					                      v-for="(item, i) in dialogInfo.operators"
 | 
				
			||||||
 | 
					                      :key="i"
 | 
				
			||||||
 | 
					                      class="organzation"
 | 
				
			||||||
 | 
					                      >{{ item.userName }}
 | 
				
			||||||
 | 
					                      <span
 | 
				
			||||||
 | 
					                        class="iconfont iconOverrule"
 | 
				
			||||||
 | 
					                        @click.stop="delate(i)"
 | 
				
			||||||
 | 
					                      ></span>
 | 
				
			||||||
 | 
					                    </span>
 | 
				
			||||||
 | 
					                  </span>
 | 
				
			||||||
 | 
					                  <span v-else style="color: #999">请选择</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					            </el-col>
 | 
				
			||||||
 | 
					            <el-col :span="7" style="width: 30%">
 | 
				
			||||||
 | 
					              <ai-person-select
 | 
				
			||||||
 | 
					                :instance="instance"
 | 
				
			||||||
 | 
					                :url="peopleAjaxUrl"
 | 
				
			||||||
 | 
					                :isMultiple="true"
 | 
				
			||||||
 | 
					                v-if="$permissions('app_appvillagerintegralshopoperator_edit')"
 | 
				
			||||||
 | 
					                @selectPerson="getSelect"
 | 
				
			||||||
 | 
					                :chooseUserList="dialogInfo.operators"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <template name="option" v-slot:option="{ item }">
 | 
				
			||||||
 | 
					                  <span class="iconfont iconProlife">{{ item.userName }}</span>
 | 
				
			||||||
 | 
					                </template>
 | 
				
			||||||
 | 
					              </ai-person-select>
 | 
				
			||||||
 | 
					            </el-col>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					        </el-form>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="dialog-footer" slot="footer">
 | 
				
			||||||
 | 
					        <el-button @click="dialog.visibleStatus = false" size="medium"
 | 
				
			||||||
 | 
					          >取消</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					        <el-button @click="onConfirm('ruleStatus')" type="primary" size="medium"
 | 
				
			||||||
 | 
					          >确认</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </ai-dialog>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import { mapState } from "vuex";
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "storeManagement",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      searchDotime: [],
 | 
				
			||||||
 | 
					      search: {
 | 
				
			||||||
 | 
					        current: 1,
 | 
				
			||||||
 | 
					        size: 10,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      unitId: "",
 | 
				
			||||||
 | 
					      total: 10,
 | 
				
			||||||
 | 
					      colConfigs: [
 | 
				
			||||||
 | 
					        { prop: "shopName", label: "店铺名称", align: "left" },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "shopkeeper",
 | 
				
			||||||
 | 
					          label: "店主",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "phone",
 | 
				
			||||||
 | 
					          label: "联系电话",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "shopAddress",
 | 
				
			||||||
 | 
					          label: "店铺地址",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          width: 280,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "names",
 | 
				
			||||||
 | 
					          label: "店铺操作员",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "status",
 | 
				
			||||||
 | 
					          label: "状态",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          render: (h, params) => {
 | 
				
			||||||
 | 
					            return h(
 | 
				
			||||||
 | 
					              "span",
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                class: "status-" + params.row.status,
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              this.$dict.getLabel("assessmentStartStatus", params.row.status)
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        { slot: "options", label: "操作", align: "center" },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      tableData: [],
 | 
				
			||||||
 | 
					      dialog: {
 | 
				
			||||||
 | 
					        title: "",
 | 
				
			||||||
 | 
					        visible: false,
 | 
				
			||||||
 | 
					        visibleStatus: false,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      dialogInfo: {
 | 
				
			||||||
 | 
					        shopName: "",
 | 
				
			||||||
 | 
					        shopkeeper: "",
 | 
				
			||||||
 | 
					        phone: "",
 | 
				
			||||||
 | 
					        shopAddress: "",
 | 
				
			||||||
 | 
					        status: "1",
 | 
				
			||||||
 | 
					        areaId: "",
 | 
				
			||||||
 | 
					        operators: [],
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      formRules: {
 | 
				
			||||||
 | 
					        shopName: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入店铺名称", trigger: "change" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        shopkeeper: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入店主", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        phone: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
 | 
				
			||||||
 | 
					        shopAddress: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入店铺地址", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        status: [{ required: true, message: "请选择状态", trigger: "blur" }],
 | 
				
			||||||
 | 
					        areaId: [
 | 
				
			||||||
 | 
					          { required: true, message: "请选择事件区域", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        operators: [
 | 
				
			||||||
 | 
					          { required: true, message: "请选择操作员", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      peopleAjaxUrl: "/admin/user/page",
 | 
				
			||||||
 | 
					      isLevel5: false,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    ...mapState(["user"]),
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mounted() {
 | 
				
			||||||
 | 
					    this.unitId = this.user.info.unitId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.$dict.load(["assessmentStartStatus"]).then(() => {
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getList() {
 | 
				
			||||||
 | 
					      this.isLevel5 = this.areaId.substring(this.areaId.length - 3) != "000";
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/list`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            ...this.search,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.tableData = res.data.records;
 | 
				
			||||||
 | 
					            this.total = res.data.total;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    timeChange() {
 | 
				
			||||||
 | 
					      if (this.searchDotime) {
 | 
				
			||||||
 | 
					        this.search.doTimeStart = this.searchDotime[0];
 | 
				
			||||||
 | 
					        this.search.doTimeEnd = this.searchDotime[1];
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.search.doTimeStart = null;
 | 
				
			||||||
 | 
					        this.search.doTimeEnd = null;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.search.current = 1;
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    editItem(row) {
 | 
				
			||||||
 | 
					      this.dialogInfo = { ...row };
 | 
				
			||||||
 | 
					      this.dialog.visible = true;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    statusChage(row) {
 | 
				
			||||||
 | 
					      this.dialogInfo = { ...row };
 | 
				
			||||||
 | 
					      if (this.dialogInfo.operators.length) {
 | 
				
			||||||
 | 
					        this.dialogInfo.operators.map((item) => {
 | 
				
			||||||
 | 
					          item.userName = item.name;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.dialogInfo.operators = [];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onReset() {
 | 
				
			||||||
 | 
					      this.search.current = 1;
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onConfirm(formName) {
 | 
				
			||||||
 | 
					      if (this.dialogInfo.operators.length) {
 | 
				
			||||||
 | 
					        this.dialogInfo.operators.map((item) => {
 | 
				
			||||||
 | 
					          if (!item.name) {
 | 
				
			||||||
 | 
					            item.name = item.userName;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.$refs[formName].validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					            .post(`/app/appvillagerintegralshop/addOrUpdate`, this.dialogInfo)
 | 
				
			||||||
 | 
					            .then((res) => {
 | 
				
			||||||
 | 
					              if (res.code == 0) {
 | 
				
			||||||
 | 
					                this.onReset();
 | 
				
			||||||
 | 
					                this.onCancel();
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onCancel() {
 | 
				
			||||||
 | 
					      this.dialog.visible = false;
 | 
				
			||||||
 | 
					      this.dialog.visibleStatus = false;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init(formName) {
 | 
				
			||||||
 | 
					      this.$refs[formName].clearValidate();
 | 
				
			||||||
 | 
					      Object.keys(this.dialogInfo).forEach((e) => {
 | 
				
			||||||
 | 
					        this.dialogInfo[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.dialogInfo.status = "1";
 | 
				
			||||||
 | 
					      this.dialogInfo.operators = [];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getSelect(e) {
 | 
				
			||||||
 | 
					      this.dialogInfo.operators = e;
 | 
				
			||||||
 | 
					      this.dialogInfo.operators.map((item) => {
 | 
				
			||||||
 | 
					        if (!item.name) {
 | 
				
			||||||
 | 
					          item.name = item.userName;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/addOrUpdate`, this.dialogInfo)
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          this.dialogInfo.operators = []
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.onReset();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }).catch(() => {
 | 
				
			||||||
 | 
					          this.dialogInfo.operators = []
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    delate(index) {
 | 
				
			||||||
 | 
					      this.dialogInfo.operators.splice(index, 1);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onAdd() {
 | 
				
			||||||
 | 
					      Object.keys(this.dialogInfo).forEach((e) => {
 | 
				
			||||||
 | 
					        this.dialogInfo[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.dialogInfo.status = "1";
 | 
				
			||||||
 | 
					      this.dialogInfo.operators = [];
 | 
				
			||||||
 | 
					      this.dialog.visible = true;
 | 
				
			||||||
 | 
					      this.dialogInfo.areaId = this.areaId;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss">
 | 
				
			||||||
 | 
					.storeManagement {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  background: #f3f6f9;
 | 
				
			||||||
 | 
					  .status-0 {
 | 
				
			||||||
 | 
					    color: #ff4466;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .table-options {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .status-1 {
 | 
				
			||||||
 | 
					    color: #2ea222;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .status-2 {
 | 
				
			||||||
 | 
					    color: #999999;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .ai-dialog__content--wrapper {
 | 
				
			||||||
 | 
					    overflow-x: hidden;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .organ {
 | 
				
			||||||
 | 
					    width: auto;
 | 
				
			||||||
 | 
					    height: auto;
 | 
				
			||||||
 | 
					    padding: 0px 10px;
 | 
				
			||||||
 | 
					    line-height: 32px;
 | 
				
			||||||
 | 
					    border: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					    color: #666;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .organzation {
 | 
				
			||||||
 | 
					      background-color: #eee;
 | 
				
			||||||
 | 
					      margin-right: 4px;
 | 
				
			||||||
 | 
					      padding: 4px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -0,0 +1,111 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <div class="AppScoreSupermarket">
 | 
				
			||||||
 | 
					    <ai-list v-show="!detailShow">
 | 
				
			||||||
 | 
					      <template slot="title">
 | 
				
			||||||
 | 
					        <ai-title title="积分超市" :isShowBottomBorder="false" :instance="instance" :isShowArea="true" v-model="areaId" @change="changeArea"></ai-title>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="tabs">
 | 
				
			||||||
 | 
					        <el-tabs v-model="currIndex">
 | 
				
			||||||
 | 
					          <el-tab-pane v-for="(tab,i) in tabs" :key="i" :name="String(i)" :label="tab.label">
 | 
				
			||||||
 | 
					            <component
 | 
				
			||||||
 | 
					              :is="tab.comp"
 | 
				
			||||||
 | 
					              v-if="currIndex === String(i)"
 | 
				
			||||||
 | 
					              :areaId="areaId"
 | 
				
			||||||
 | 
					              :ref="tab.name"
 | 
				
			||||||
 | 
					              @showDetail="showDetail"
 | 
				
			||||||
 | 
					              :instance="instance"
 | 
				
			||||||
 | 
					              :dict="dict"
 | 
				
			||||||
 | 
					              :permissions="permissions" />
 | 
				
			||||||
 | 
					          </el-tab-pane>
 | 
				
			||||||
 | 
					        </el-tabs>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-list>
 | 
				
			||||||
 | 
					    <component v-if="detailShow" :is="currDet" :areaId="areaId" :info="info" @goBack="goBack" :instance="instance" :dict="dict" :permissions="permissions"/>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import orderManagement from './orderManagement'
 | 
				
			||||||
 | 
					import goodsManagement from './goodsManagement'
 | 
				
			||||||
 | 
					import storeManagement from './storeManagement'
 | 
				
			||||||
 | 
					import addOrderDetail from './components/addOrder'
 | 
				
			||||||
 | 
					import addGoods from './components/addGoods'
 | 
				
			||||||
 | 
					import {mapState} from 'vuex'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "AppIntegratingSupermarket",
 | 
				
			||||||
 | 
					  label: "积分超市",
 | 
				
			||||||
 | 
					  components: {orderManagement, goodsManagement, storeManagement, addOrderDetail, addGoods},
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    tabs() {
 | 
				
			||||||
 | 
					      // .filter(item => {
 | 
				
			||||||
 | 
					      //   return this.$permissions(item.permission)
 | 
				
			||||||
 | 
					      // })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          label: "商品信息",
 | 
				
			||||||
 | 
					          name: "goodsManagement",
 | 
				
			||||||
 | 
					          comp: goodsManagement,
 | 
				
			||||||
 | 
					          detail: addGoods,
 | 
				
			||||||
 | 
					          permission: "app_apppartyfee_config"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          label: "店铺管理",
 | 
				
			||||||
 | 
					          name: "storeManagement",
 | 
				
			||||||
 | 
					          comp: storeManagement,
 | 
				
			||||||
 | 
					          detail: '',
 | 
				
			||||||
 | 
					          permission: "app_apppartyfee_statistics"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    ...mapState(['user']),
 | 
				
			||||||
 | 
					    currDet() {
 | 
				
			||||||
 | 
					      return this.tabs[Number(this.currIndex)].detail;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.areaId = this.user.info.areaId;
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      activeName: "orderManagement",
 | 
				
			||||||
 | 
					      currIndex: 0,
 | 
				
			||||||
 | 
					      areaId: '',
 | 
				
			||||||
 | 
					      detailShow: false,
 | 
				
			||||||
 | 
					      info: {}
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    goBack() {
 | 
				
			||||||
 | 
					      this.detailShow = false;
 | 
				
			||||||
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
 | 
					        this.$refs[this.tabs[Number(this.currIndex)].name][0].getList();
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    showDetail(obj) {
 | 
				
			||||||
 | 
					      this.info = {...obj};
 | 
				
			||||||
 | 
					      this.detailShow = true;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    changeArea() {
 | 
				
			||||||
 | 
					      this.$nextTick(() => {
 | 
				
			||||||
 | 
					        if (this.currIndex == 0) this.$refs[this.tabs[Number(this.currIndex)].name][0].getShopList();
 | 
				
			||||||
 | 
					        if (this.currIndex == 1) this.$refs[this.tabs[Number(this.currIndex)].name][0].updateList();
 | 
				
			||||||
 | 
					        this.$refs[this.tabs[Number(this.currIndex)].name][0].getList();
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.AppScoreSupermarket {
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -0,0 +1,357 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="add_order">
 | 
				
			||||||
 | 
					    <ai-detail>
 | 
				
			||||||
 | 
					      <template slot="title">
 | 
				
			||||||
 | 
					        <ai-title :title="title" isShowBack :isShowBottomBorder="true" @onBackClick="$emit('goBack')"></ai-title>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="!isEdit">
 | 
				
			||||||
 | 
					        <ai-card title="商品信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="form_div">
 | 
				
			||||||
 | 
					              <el-form
 | 
				
			||||||
 | 
					                  ref="rules"
 | 
				
			||||||
 | 
					                  :model="forms"
 | 
				
			||||||
 | 
					                  :rules="formRules"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  label-suffix=":"
 | 
				
			||||||
 | 
					                  label-width="100px">
 | 
				
			||||||
 | 
					                <el-form-item label="店铺名称" prop="shopId">
 | 
				
			||||||
 | 
					                  <el-select
 | 
				
			||||||
 | 
					                      v-model="forms.shopId"
 | 
				
			||||||
 | 
					                      placeholder="请选择..."
 | 
				
			||||||
 | 
					                      clearable>
 | 
				
			||||||
 | 
					                    <el-option
 | 
				
			||||||
 | 
					                        v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                        :key="i"
 | 
				
			||||||
 | 
					                        :label="item.shopName"
 | 
				
			||||||
 | 
					                        :value="item.id">
 | 
				
			||||||
 | 
					                    </el-option>
 | 
				
			||||||
 | 
					                  </el-select>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品类型" prop="merchandiseType">
 | 
				
			||||||
 | 
					                  <el-select
 | 
				
			||||||
 | 
					                      v-model="forms.merchandiseType"
 | 
				
			||||||
 | 
					                      placeholder="请选择..."
 | 
				
			||||||
 | 
					                      clearable>
 | 
				
			||||||
 | 
					                    <el-option
 | 
				
			||||||
 | 
					                        v-for="(item, i) in dict.getDict('integralMerchandiseType')"
 | 
				
			||||||
 | 
					                        :key="i"
 | 
				
			||||||
 | 
					                        :label="item.dictName"
 | 
				
			||||||
 | 
					                        :value="item.dictValue">
 | 
				
			||||||
 | 
					                    </el-option>
 | 
				
			||||||
 | 
					                  </el-select>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品名称" prop="merchandiseName">
 | 
				
			||||||
 | 
					                  <el-input
 | 
				
			||||||
 | 
					                      v-model="forms.merchandiseName"
 | 
				
			||||||
 | 
					                      placeholder="请输入..."
 | 
				
			||||||
 | 
					                      maxlength="100"
 | 
				
			||||||
 | 
					                      show-word-limit>
 | 
				
			||||||
 | 
					                  </el-input>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <div class="above">
 | 
				
			||||||
 | 
					                  <div class="left">
 | 
				
			||||||
 | 
					                    <el-form-item label="单价" prop="costIntegral">
 | 
				
			||||||
 | 
					                      <el-input v-model="forms.costIntegral" placeholder="请输入..."/>
 | 
				
			||||||
 | 
					                    </el-form-item>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <div class="right">
 | 
				
			||||||
 | 
					                    <el-form-item label="库存" prop="inventoryNumber">
 | 
				
			||||||
 | 
					                      <el-input
 | 
				
			||||||
 | 
					                          v-model="forms.inventoryNumber"
 | 
				
			||||||
 | 
					                          placeholder="请输入...">
 | 
				
			||||||
 | 
					                      </el-input>
 | 
				
			||||||
 | 
					                    </el-form-item>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <el-form-item label="状态" prop="status">
 | 
				
			||||||
 | 
					                  <el-radio-group v-model="forms.status">
 | 
				
			||||||
 | 
					                    <el-radio label="1">上架中</el-radio>
 | 
				
			||||||
 | 
					                    <el-radio label="0">已下架</el-radio>
 | 
				
			||||||
 | 
					                  </el-radio-group>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品图片" prop="fileList" ref="fileList">
 | 
				
			||||||
 | 
					                  <div class="upload">
 | 
				
			||||||
 | 
					                    <ai-uploader
 | 
				
			||||||
 | 
					                        :instance="instance"
 | 
				
			||||||
 | 
					                        @change="changeFile"
 | 
				
			||||||
 | 
					                        v-model="forms.fileList"
 | 
				
			||||||
 | 
					                        :limit="9">
 | 
				
			||||||
 | 
					                    </ai-uploader>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="商品详情" prop="description">
 | 
				
			||||||
 | 
					                  <el-input
 | 
				
			||||||
 | 
					                      v-model="forms.description"
 | 
				
			||||||
 | 
					                      type="textarea"
 | 
				
			||||||
 | 
					                      :rows="5"
 | 
				
			||||||
 | 
					                      maxlength="100"
 | 
				
			||||||
 | 
					                      show-word-limit
 | 
				
			||||||
 | 
					                      placeholder="请输入...">
 | 
				
			||||||
 | 
					                  </el-input>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					              </el-form>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="isEdit">
 | 
				
			||||||
 | 
					        <ai-card title="商品信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="店铺名称"><span>{{ forms.shopName }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="商品类型"
 | 
				
			||||||
 | 
					                ><span>{{
 | 
				
			||||||
 | 
					                    dict.getLabel("integralMerchandiseType", forms.merchandiseType)
 | 
				
			||||||
 | 
					                  }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <ai-info-item label="商品名称"
 | 
				
			||||||
 | 
					                ><span>{{ forms.merchandiseName }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="2">
 | 
				
			||||||
 | 
					                <ai-info-item label="单价"><span>{{ forms.costIntegral + "积分" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="库存"
 | 
				
			||||||
 | 
					                ><span>{{ forms.inventoryNumber }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <ai-info-item label="销量"
 | 
				
			||||||
 | 
					                ><span>{{ forms.saleNumber || "0" }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="状态"
 | 
				
			||||||
 | 
					                ><span
 | 
				
			||||||
 | 
					                    :style="{
 | 
				
			||||||
 | 
					                      color: dict.getColor(
 | 
				
			||||||
 | 
					                        'integralMerchandiseStatus',
 | 
				
			||||||
 | 
					                        forms.status
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    }"
 | 
				
			||||||
 | 
					                >{{
 | 
				
			||||||
 | 
					                    dict.getLabel("integralMerchandiseStatus", forms.status)
 | 
				
			||||||
 | 
					                  }}</span
 | 
				
			||||||
 | 
					                ></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <ai-info-item label="商品图片">
 | 
				
			||||||
 | 
					                  <ai-uploader
 | 
				
			||||||
 | 
					                      :disabled="true"
 | 
				
			||||||
 | 
					                      :instance="instance"
 | 
				
			||||||
 | 
					                      v-model="forms.fileList"
 | 
				
			||||||
 | 
					                      :limit="9"
 | 
				
			||||||
 | 
					                  ></ai-uploader>
 | 
				
			||||||
 | 
					                </ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="商品详情"
 | 
				
			||||||
 | 
					                ><span>{{ forms.description }}</span></ai-info-item
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="footer" v-if="!isEdit">
 | 
				
			||||||
 | 
					        <el-button @click="$emit('goBack')" style="width: 120px">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button type="primary" @click="save('rules')" style="width: 120px">提 交</el-button>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-detail>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import {mapState} from "vuex";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "addGoods",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    info: Object,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      forms: {
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					        merchandiseType: "",
 | 
				
			||||||
 | 
					        merchandiseName: "",
 | 
				
			||||||
 | 
					        costIntegral: "",
 | 
				
			||||||
 | 
					        inventoryNumber: "",
 | 
				
			||||||
 | 
					        status: "",
 | 
				
			||||||
 | 
					        fileList: [],
 | 
				
			||||||
 | 
					        description: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					      title: "添加商品",
 | 
				
			||||||
 | 
					      showEdit: false,
 | 
				
			||||||
 | 
					      isEdit: false,
 | 
				
			||||||
 | 
					      detailInfo: {},
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    ...mapState(["user"]),
 | 
				
			||||||
 | 
					    formRules() {
 | 
				
			||||||
 | 
					      var integral = (rule, value, callback) => {
 | 
				
			||||||
 | 
					        if (value) {
 | 
				
			||||||
 | 
					          if (/^[1-9]\d*$/.test(value)) {
 | 
				
			||||||
 | 
					            callback();
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            callback(new Error("请输入正整数"));
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          callback(new Error("请输入单价"));
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        shopId: [{required: true, message: "请选择店铺", trigger: "change"}],
 | 
				
			||||||
 | 
					        merchandiseType: [
 | 
				
			||||||
 | 
					          {required: true, message: "请选择商品类型", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        merchandiseName: [
 | 
				
			||||||
 | 
					          {required: true, message: "请输入商品名称", trigger: "blur"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        inventoryNumber: [
 | 
				
			||||||
 | 
					          {required: true, validator: integral, trigger: "blur"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        costIntegral: [
 | 
				
			||||||
 | 
					          {required: true, pattern: /^\d*[.\d]\d?$/, message: "请输入正数,最多保留一位小数", trigger: "blur"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        status: [{required: true, message: "请选择状态", trigger: "change"}],
 | 
				
			||||||
 | 
					        fileList: [
 | 
				
			||||||
 | 
					          {required: true, message: "请上传商品图片", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    let l = Object.keys(this.info).length;
 | 
				
			||||||
 | 
					    if (this.info.isAdd) {
 | 
				
			||||||
 | 
					      this.showEdit = false;
 | 
				
			||||||
 | 
					      if (l > 1) {
 | 
				
			||||||
 | 
					        this.title = "修改商品";
 | 
				
			||||||
 | 
					        this.getShopList().then(() => {
 | 
				
			||||||
 | 
					          this.searchDetail(this.info.id);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.title = "添加商品";
 | 
				
			||||||
 | 
					        this.getShopList();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      this.title = "商品详情";
 | 
				
			||||||
 | 
					      this.isEdit = true;
 | 
				
			||||||
 | 
					      this.showEdit = true;
 | 
				
			||||||
 | 
					      this.getShopList().then(() => {
 | 
				
			||||||
 | 
					        this.searchDetail(this.info.id);
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/listForOperator`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            size: 100000,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.shopList = res.data.records;
 | 
				
			||||||
 | 
					            reslove();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    changeFile() {
 | 
				
			||||||
 | 
					      this.$refs.fileList.$emit("el.form.change");
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    searchDetail(id) {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralmerchandise/queryDetailById`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          id,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.forms = {...res.data};
 | 
				
			||||||
 | 
					          let i = this.shopList.findIndex(
 | 
				
			||||||
 | 
					              (item) => item.id == this.forms.shopId
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					          if (i > -1) {
 | 
				
			||||||
 | 
					            this.forms.shopName = this.shopList[i].shopName;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    edit() {
 | 
				
			||||||
 | 
					      this.isEdit = false;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    save(formName, type) {
 | 
				
			||||||
 | 
					      this.$refs[formName].validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					          .post(
 | 
				
			||||||
 | 
					              `/app/appvillagerintegralmerchandise/addOrUpdate`,
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                ...this.forms,
 | 
				
			||||||
 | 
					                areaId: this.user.info.areaId,
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              null
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					          .then((res) => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.$message.success("提交成功");
 | 
				
			||||||
 | 
					              if (type == "detail") {
 | 
				
			||||||
 | 
					                this.isEdit = true;
 | 
				
			||||||
 | 
					              } else {
 | 
				
			||||||
 | 
					                this.$emit("goBack");
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.add_order {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .form_div {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .above {
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .left {
 | 
				
			||||||
 | 
					      width: 50%;
 | 
				
			||||||
 | 
					      float: left;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .right {
 | 
				
			||||||
 | 
					      width: 50%;
 | 
				
			||||||
 | 
					      float: right;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconEdit,
 | 
				
			||||||
 | 
					  .Edit {
 | 
				
			||||||
 | 
					    color: #5088ff;
 | 
				
			||||||
 | 
					    font-size: 12px;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    padding-left: 8px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .info {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -0,0 +1,625 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="add_order">
 | 
				
			||||||
 | 
					    <ai-detail>
 | 
				
			||||||
 | 
					      <template slot="title">
 | 
				
			||||||
 | 
					        <ai-title :title="title" :isShowBack="true" :isShowBottomBorder="true" @onBackClick="$emit('goBack')"></ai-title>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="info.isAdd">
 | 
				
			||||||
 | 
					        <ai-card title="订单信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="form_div">
 | 
				
			||||||
 | 
					              <el-form
 | 
				
			||||||
 | 
					                  ref="rules"
 | 
				
			||||||
 | 
					                  :model="forms"
 | 
				
			||||||
 | 
					                  :rules="formRules"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  label-suffix=":"
 | 
				
			||||||
 | 
					                  label-width="100px">
 | 
				
			||||||
 | 
					                <el-form-item label="店铺名称" prop="shopId">
 | 
				
			||||||
 | 
					                  <el-select
 | 
				
			||||||
 | 
					                      v-model="forms.shopId"
 | 
				
			||||||
 | 
					                      placeholder="请选择..."
 | 
				
			||||||
 | 
					                      @change="(forms.merchandiseList = []), (goodIntegral = {})"
 | 
				
			||||||
 | 
					                      clearable>
 | 
				
			||||||
 | 
					                    <el-option
 | 
				
			||||||
 | 
					                        v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                        :key="i"
 | 
				
			||||||
 | 
					                        :label="item.shopName"
 | 
				
			||||||
 | 
					                        :value="item.id">
 | 
				
			||||||
 | 
					                    </el-option>
 | 
				
			||||||
 | 
					                  </el-select>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="兑换家庭" prop="name">
 | 
				
			||||||
 | 
					                  <el-row type="flex" :gutter="8">
 | 
				
			||||||
 | 
					                    <el-col
 | 
				
			||||||
 | 
					                    >
 | 
				
			||||||
 | 
					                      <el-input v-model="forms.name" disabled clearable
 | 
				
			||||||
 | 
					                      />
 | 
				
			||||||
 | 
					                    </el-col>
 | 
				
			||||||
 | 
					                    <el-col>
 | 
				
			||||||
 | 
					                      <ai-person-select
 | 
				
			||||||
 | 
					                          :instance="instance"
 | 
				
			||||||
 | 
					                          url="/app/appvillagerintegralfamilymember/list"
 | 
				
			||||||
 | 
					                          headerTitle="家庭列表"
 | 
				
			||||||
 | 
					                          dialogTitle="选择家庭"
 | 
				
			||||||
 | 
					                          @selectPerson="getSelect"
 | 
				
			||||||
 | 
					                      >
 | 
				
			||||||
 | 
					                        <template name="option" v-slot:option="{ item }">
 | 
				
			||||||
 | 
					                          <span class="iconfont iconProlife">{{ item.name }}</span>
 | 
				
			||||||
 | 
					                          <ai-id
 | 
				
			||||||
 | 
					                              mode="show"
 | 
				
			||||||
 | 
					                              :show-eyes="false"
 | 
				
			||||||
 | 
					                              :value="item.idNumber"
 | 
				
			||||||
 | 
					                          />
 | 
				
			||||||
 | 
					                          <span>{{ item.phone }}</span>
 | 
				
			||||||
 | 
					                        </template>
 | 
				
			||||||
 | 
					                      </ai-person-select>
 | 
				
			||||||
 | 
					                    </el-col>
 | 
				
			||||||
 | 
					                  </el-row>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="积分余额">
 | 
				
			||||||
 | 
					                  <p>
 | 
				
			||||||
 | 
					                    <span style="color: #2266ff">{{ integral || "0" }}</span
 | 
				
			||||||
 | 
					                    >分
 | 
				
			||||||
 | 
					                  </p>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <el-form-item label="兑换商品" prop="merchandiseList">
 | 
				
			||||||
 | 
					                  <el-button @click="showGoodsList()" :disabled="!forms.shopId || !forms.name">选择商品</el-button>
 | 
				
			||||||
 | 
					                </el-form-item>
 | 
				
			||||||
 | 
					                <ai-table
 | 
				
			||||||
 | 
					                    :tableData="forms.merchandiseList"
 | 
				
			||||||
 | 
					                    :col-configs="colConfigs"
 | 
				
			||||||
 | 
					                    :isShowPagination="false">
 | 
				
			||||||
 | 
					                  <el-table-column
 | 
				
			||||||
 | 
					                      label="商品图"
 | 
				
			||||||
 | 
					                      slot="photo"
 | 
				
			||||||
 | 
					                      align="center"
 | 
				
			||||||
 | 
					                      width="150">
 | 
				
			||||||
 | 
					                    <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                      <ai-uploader
 | 
				
			||||||
 | 
					                          :disabled="true"
 | 
				
			||||||
 | 
					                          :instance="instance"
 | 
				
			||||||
 | 
					                          v-model="row.photo"
 | 
				
			||||||
 | 
					                          :limit="9">
 | 
				
			||||||
 | 
					                      </ai-uploader>
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                  <el-table-column
 | 
				
			||||||
 | 
					                      label="兑换数量"
 | 
				
			||||||
 | 
					                      width="180"
 | 
				
			||||||
 | 
					                      slot="merchandiseNumber"
 | 
				
			||||||
 | 
					                      align="center">
 | 
				
			||||||
 | 
					                    <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                      <el-input-number
 | 
				
			||||||
 | 
					                          :min="1"
 | 
				
			||||||
 | 
					                          :max="row.inventoryNumber"
 | 
				
			||||||
 | 
					                          size="mini"
 | 
				
			||||||
 | 
					                          v-model="merchandiseNumbers[row.id]"
 | 
				
			||||||
 | 
					                          @change="
 | 
				
			||||||
 | 
					                          (currentValue, oldValue) =>
 | 
				
			||||||
 | 
					                            changeNumber(currentValue, oldValue, row)
 | 
				
			||||||
 | 
					                        "
 | 
				
			||||||
 | 
					                          :step="1"
 | 
				
			||||||
 | 
					                          step-strictly
 | 
				
			||||||
 | 
					                      ></el-input-number>
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                  <el-table-column label="消耗积分" slot="integral" align="center">
 | 
				
			||||||
 | 
					                    <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                      <span>{{ goodIntegral[row.id] }}</span>
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                  <el-table-column
 | 
				
			||||||
 | 
					                      slot="options"
 | 
				
			||||||
 | 
					                      label="操作"
 | 
				
			||||||
 | 
					                      align="center"
 | 
				
			||||||
 | 
					                      width="60"
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                    <template slot-scope="row">
 | 
				
			||||||
 | 
					                      <el-button
 | 
				
			||||||
 | 
					                          type="text"
 | 
				
			||||||
 | 
					                          class="icon-color89B"
 | 
				
			||||||
 | 
					                          icon="iconfont iconDelete"
 | 
				
			||||||
 | 
					                          title="删除"
 | 
				
			||||||
 | 
					                          @click="deleteGood(row)"
 | 
				
			||||||
 | 
					                      />
 | 
				
			||||||
 | 
					                    </template>
 | 
				
			||||||
 | 
					                  </el-table-column>
 | 
				
			||||||
 | 
					                </ai-table>
 | 
				
			||||||
 | 
					                <div class="total">
 | 
				
			||||||
 | 
					                  <p class="num">
 | 
				
			||||||
 | 
					                    <span>合计积分:</span>
 | 
				
			||||||
 | 
					                    <span>{{ allIntegral }}</span>
 | 
				
			||||||
 | 
					                    <span>分</span>
 | 
				
			||||||
 | 
					                  </p>
 | 
				
			||||||
 | 
					                  <p class="tip" v-if="allIntegral > Number(integral)">
 | 
				
			||||||
 | 
					                    (积分不足,请删减商品)
 | 
				
			||||||
 | 
					                  </p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </el-form>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="content" v-if="!info.isAdd">
 | 
				
			||||||
 | 
					        <ai-card title="订单信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="订单号"><span>{{ detailInfo.orderCode }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="创建时间"><span>{{ detailInfo.createTime }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="店铺名"><span>{{ detailInfo.shopName }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="状态">
 | 
				
			||||||
 | 
					                  <span :style="{ color: dict.getColor('integralOrderStatus', detailInfo.orderStatus)}">
 | 
				
			||||||
 | 
					                    {{ dict.getLabel("integralOrderStatus", detailInfo.orderStatus) }}
 | 
				
			||||||
 | 
					                  </span>
 | 
				
			||||||
 | 
					                </ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-table
 | 
				
			||||||
 | 
					                  :tableData="detailInfo.merchandiseList"
 | 
				
			||||||
 | 
					                  :col-configs="colConfigs"
 | 
				
			||||||
 | 
					                  :isShowPagination="false">
 | 
				
			||||||
 | 
					                <el-table-column
 | 
				
			||||||
 | 
					                    label="商品图"
 | 
				
			||||||
 | 
					                    slot="photo"
 | 
				
			||||||
 | 
					                    align="center"
 | 
				
			||||||
 | 
					                    width="150">
 | 
				
			||||||
 | 
					                  <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                    <ai-uploader
 | 
				
			||||||
 | 
					                        :disabled="true"
 | 
				
			||||||
 | 
					                        :instance="instance"
 | 
				
			||||||
 | 
					                        v-model="row.merchandisePhoto"
 | 
				
			||||||
 | 
					                        :limit="9">
 | 
				
			||||||
 | 
					                    </ai-uploader>
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </el-table-column>
 | 
				
			||||||
 | 
					                <el-table-column
 | 
				
			||||||
 | 
					                    label="兑换数量"
 | 
				
			||||||
 | 
					                    width="200"
 | 
				
			||||||
 | 
					                    slot="merchandiseNumber"
 | 
				
			||||||
 | 
					                    align="center">
 | 
				
			||||||
 | 
					                  <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                    {{ row.merchandiseNumber }}
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </el-table-column>
 | 
				
			||||||
 | 
					                <el-table-column label="消耗积分" slot="integral" align="center">
 | 
				
			||||||
 | 
					                  <template v-slot="{ row }">
 | 
				
			||||||
 | 
					                    <span>{{ Number(row.merchandiseNumber) * Number(row.costIntegral) }}</span>
 | 
				
			||||||
 | 
					                  </template>
 | 
				
			||||||
 | 
					                </el-table-column>
 | 
				
			||||||
 | 
					              </ai-table>
 | 
				
			||||||
 | 
					              <div class="total">
 | 
				
			||||||
 | 
					                <p class="num">
 | 
				
			||||||
 | 
					                  <span>合计积分:</span>
 | 
				
			||||||
 | 
					                  <span>{{ detailInfo.orderIntegral }}</span>
 | 
				
			||||||
 | 
					                  <span>分</span>
 | 
				
			||||||
 | 
					                </p>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					        <ai-card title="兑换家庭信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="2">
 | 
				
			||||||
 | 
					                <ai-info-item label="户主"><span>{{ detailInfo.familyName }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="联系方式"><span>{{ detailInfo.familyPhone || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px" :columnsNumber="1">
 | 
				
			||||||
 | 
					                <ai-info-item label="备注"><span>{{ detailInfo.remark || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					        <ai-card title="操作人信息">
 | 
				
			||||||
 | 
					          <template #content>
 | 
				
			||||||
 | 
					            <div class="info">
 | 
				
			||||||
 | 
					              <ai-wrapper label-width="70px">
 | 
				
			||||||
 | 
					                <ai-info-item label="操作人"><span>{{ detailInfo.createUserName || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="联系方式"><span>{{ detailInfo.createUserPhone || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					                <ai-info-item label="完成时间"><span>{{ detailInfo.finishTime || "-" }}</span></ai-info-item>
 | 
				
			||||||
 | 
					              </ai-wrapper>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-card>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					      <template slot="footer" v-if="info.isAdd">
 | 
				
			||||||
 | 
					        <el-button @click="$emit('goBack')" style="width: 120px">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button type="primary" @click="save('rules')" style="width: 120px" :disabled="allIntegral > Number(integral)">确认兑换</el-button>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-detail>
 | 
				
			||||||
 | 
					    <ai-dialog
 | 
				
			||||||
 | 
					        title="选择商品"
 | 
				
			||||||
 | 
					        :visible.sync="showGoods"
 | 
				
			||||||
 | 
					        :customFooter="true"
 | 
				
			||||||
 | 
					        :destroyOnClose="true"
 | 
				
			||||||
 | 
					        class="goods"
 | 
				
			||||||
 | 
					        @close="init"
 | 
				
			||||||
 | 
					        border
 | 
				
			||||||
 | 
					        width="780px">
 | 
				
			||||||
 | 
					      <div class="border_div">
 | 
				
			||||||
 | 
					        <header>
 | 
				
			||||||
 | 
					          <span>商品列表</span>
 | 
				
			||||||
 | 
					          <el-input
 | 
				
			||||||
 | 
					              v-model="keyWord"
 | 
				
			||||||
 | 
					              size="mini"
 | 
				
			||||||
 | 
					              placeholder="商品关键字"
 | 
				
			||||||
 | 
					              @keyup.enter.native="showGoodsList()"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              style="width: 220px"
 | 
				
			||||||
 | 
					              suffix-icon="iconfont iconSearch"
 | 
				
			||||||
 | 
					          />
 | 
				
			||||||
 | 
					        </header>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					            :tableData="goodList"
 | 
				
			||||||
 | 
					            :col-configs="goodsConfig"
 | 
				
			||||||
 | 
					            :isShowPagination="false"
 | 
				
			||||||
 | 
					            @selection-change="handleSelectionChange"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <el-table-column slot="selection" type="selection" width="55" :selectable="(row)=>Number(row.inventoryNumber)>0"/>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="dialog-footer" slot="footer">
 | 
				
			||||||
 | 
					        <el-button @click="showGoods = false" size="medium">取消</el-button>
 | 
				
			||||||
 | 
					        <el-button @click="onConfirm()" type="primary" size="medium">确认</el-button>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </ai-dialog>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import {mapState} from "vuex";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "addOrder",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    info: Object,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      forms: {
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					        familyId: "",
 | 
				
			||||||
 | 
					        familyName: "",
 | 
				
			||||||
 | 
					        name: "",
 | 
				
			||||||
 | 
					        memberId: "",
 | 
				
			||||||
 | 
					        merchandiseList: [],
 | 
				
			||||||
 | 
					        phone: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      integral: "",
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					      goodList: [],
 | 
				
			||||||
 | 
					      goodIntegral: {},
 | 
				
			||||||
 | 
					      merchandiseNumbers: {},
 | 
				
			||||||
 | 
					      showGoods: false,
 | 
				
			||||||
 | 
					      selectGoodList: [],
 | 
				
			||||||
 | 
					      keyWord: "",
 | 
				
			||||||
 | 
					      title: "",
 | 
				
			||||||
 | 
					      detailInfo: {},
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    ...mapState(["user"]),
 | 
				
			||||||
 | 
					    formRules() {
 | 
				
			||||||
 | 
					      return {
 | 
				
			||||||
 | 
					        shopId: [{required: true, message: "请选择店铺", trigger: "change"}],
 | 
				
			||||||
 | 
					        name: [
 | 
				
			||||||
 | 
					          {required: true, message: "请选择兑换家庭", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        merchandiseList: [
 | 
				
			||||||
 | 
					          {required: true, message: "请选择商品", trigger: "change"},
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    colConfigs() {
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {slot: "photo", prop: "photo", label: "商品图", align: "center"},
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseName",
 | 
				
			||||||
 | 
					          label: "商品名",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          width: 160,
 | 
				
			||||||
 | 
					          "show-overflow-tooltip": false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "costIntegral",
 | 
				
			||||||
 | 
					          label: "单价",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          width: 60,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          slot: "merchandiseNumber",
 | 
				
			||||||
 | 
					          prop: "merchandiseNumber",
 | 
				
			||||||
 | 
					          label: "兑换数量",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "inventoryNumber",
 | 
				
			||||||
 | 
					          label: "库存",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          width: 60,
 | 
				
			||||||
 | 
					          hide: this.title == "兑换订单详情",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          slot: "integral",
 | 
				
			||||||
 | 
					          prop: "integral",
 | 
				
			||||||
 | 
					          label: "消耗积分",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {slot: "options", label: "操作", align: "center"},
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    goodsConfig() {
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {slot: "selection", label: "", align: "center"},
 | 
				
			||||||
 | 
					        {prop: "merchandiseName", label: "商品名", align: "left", width: 350},
 | 
				
			||||||
 | 
					        {prop: "costIntegral", label: "单价", align: "left"},
 | 
				
			||||||
 | 
					        {prop: "inventoryNumber", align: "center", label: "库存"},
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    allIntegral() {
 | 
				
			||||||
 | 
					      let arr = Object.keys(this.goodIntegral);
 | 
				
			||||||
 | 
					      let all = 0;
 | 
				
			||||||
 | 
					      arr.forEach((e) => {
 | 
				
			||||||
 | 
					        all += this.goodIntegral[e];
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      return all;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    if (this.info.isAdd) {
 | 
				
			||||||
 | 
					      this.title = "添加兑换订单";
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      this.title = "兑换订单详情";
 | 
				
			||||||
 | 
					      this.searchDetail(this.info.id);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    this.getShopList();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getSelect(val) {
 | 
				
			||||||
 | 
					      if (val) {
 | 
				
			||||||
 | 
					        this.forms.familyName = val.familyName;
 | 
				
			||||||
 | 
					        this.forms.familyId = val.familyId;
 | 
				
			||||||
 | 
					        this.forms.name = val.name;
 | 
				
			||||||
 | 
					        this.forms.memberId = val.id;
 | 
				
			||||||
 | 
					        this.forms.phone = val.phone;
 | 
				
			||||||
 | 
					        this.integral = val.integral;
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.forms.familyName = "";
 | 
				
			||||||
 | 
					        this.forms.familyId = "";
 | 
				
			||||||
 | 
					        this.forms.name = "";
 | 
				
			||||||
 | 
					        this.forms.memberId = "";
 | 
				
			||||||
 | 
					        this.forms.phone = "";
 | 
				
			||||||
 | 
					        this.integral = 0;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    handleSelectionChange(val) {
 | 
				
			||||||
 | 
					      this.selectGoodList = [...val];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    onConfirm() {
 | 
				
			||||||
 | 
					      this.selectGoodsInit(this.selectGoodList).then(() => {
 | 
				
			||||||
 | 
					        this.showGoods = false;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    init() {
 | 
				
			||||||
 | 
					      this.selectGoodList = [];
 | 
				
			||||||
 | 
					      this.goodList = [];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    deleteGood(row) {
 | 
				
			||||||
 | 
					      console.log(row);
 | 
				
			||||||
 | 
					      this.$confirm("是否删除该商品?", {
 | 
				
			||||||
 | 
					        type: "error",
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then(() => {
 | 
				
			||||||
 | 
					        this.forms.merchandiseList.splice(row.$index, 1);
 | 
				
			||||||
 | 
					        this.$delete(this.goodIntegral, row.row.id);
 | 
				
			||||||
 | 
					        this.$delete(this.merchandiseNumbers, row.row.id);
 | 
				
			||||||
 | 
					        return this.$message.success("删除成功");
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    selectGoodsInit(val) {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        val.map((e, index) => {
 | 
				
			||||||
 | 
					          e.merchandiseNumber = 1;
 | 
				
			||||||
 | 
					          e.merchandiseId = e.id;
 | 
				
			||||||
 | 
					          this.$set(this.merchandiseNumbers, e.id, 1);
 | 
				
			||||||
 | 
					          this.$set(this.goodIntegral, e.id, Number(e.costIntegral));
 | 
				
			||||||
 | 
					          if (e.photo) {
 | 
				
			||||||
 | 
					            e.merchandisePhoto = e.photo;
 | 
				
			||||||
 | 
					            e.photo = [{...JSON.parse(e.photo)[0]}];
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            e.photo = [];
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        this.forms.merchandiseList = this.forms.merchandiseList.concat([
 | 
				
			||||||
 | 
					          ...val,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					        reslove();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    showGoodsList() {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralmerchandise/list`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          size: 100000,
 | 
				
			||||||
 | 
					          shopId: this.forms.shopId,
 | 
				
			||||||
 | 
					          merchandiseName: this.keyWord,
 | 
				
			||||||
 | 
					          status: "1",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          if (this.forms.merchandiseList.length > 0) {
 | 
				
			||||||
 | 
					            this.forms.merchandiseList.forEach((e1, index1) => {
 | 
				
			||||||
 | 
					              res.data.records.forEach((e2, index2) => {
 | 
				
			||||||
 | 
					                if (e1.id == e2.id) {
 | 
				
			||||||
 | 
					                  res.data.records.splice(index2, 1);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					              });
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          this.goodList = res.data.records;
 | 
				
			||||||
 | 
					          this.showGoods = true;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    changeNumber(currentValue, oldValue, row) {
 | 
				
			||||||
 | 
					      console.log(currentValue, oldValue, row);
 | 
				
			||||||
 | 
					      this.$set(
 | 
				
			||||||
 | 
					          this.goodIntegral,
 | 
				
			||||||
 | 
					          row.id,
 | 
				
			||||||
 | 
					          Number(currentValue) * Number(row.costIntegral)
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralshop/listForOperator`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          size: 100000,
 | 
				
			||||||
 | 
					          areaId: this.areaId,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.shopList = res.data.records;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    save(formName) {
 | 
				
			||||||
 | 
					      this.$refs[formName].validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.forms.merchandiseList.forEach((e1, index1) => {
 | 
				
			||||||
 | 
					            Object.keys(this.merchandiseNumbers).forEach((e2, index2) => {
 | 
				
			||||||
 | 
					              if (e1.id == e2) {
 | 
				
			||||||
 | 
					                this.forms.merchandiseList[
 | 
				
			||||||
 | 
					                    index1
 | 
				
			||||||
 | 
					                    ].merchandiseNumber = this.merchandiseNumbers[e2];
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					          .post(
 | 
				
			||||||
 | 
					              `/app/appvillagerintegralshoporder/addOrder`,
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                ...this.forms,
 | 
				
			||||||
 | 
					                areaId: this.user.info.areaId,
 | 
				
			||||||
 | 
					                orderIntegral: this.allIntegral,
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              null
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					          .then((res) => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.$message.success("提交成功");
 | 
				
			||||||
 | 
					              this.$emit("goBack");
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              return this.$message.error(res.msg);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    searchDetail(id) {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					      .post(`/app/appvillagerintegralshoporder/queryDetailById`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          id,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.detailInfo = {...res.data};
 | 
				
			||||||
 | 
					          this.detailInfo.merchandiseList.map((e) => {
 | 
				
			||||||
 | 
					            let arr = JSON.parse(e.merchandisePhoto);
 | 
				
			||||||
 | 
					            e.merchandisePhoto = [{...arr[0]}];
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.add_order {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .form_div {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .goods {
 | 
				
			||||||
 | 
					    :deep( .el-table td ){
 | 
				
			||||||
 | 
					      border-bottom: none;
 | 
				
			||||||
 | 
					      padding: 2px 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    :deep( .el-table th ){
 | 
				
			||||||
 | 
					      padding: 2px 0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .total {
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    padding: 32px 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    p {
 | 
				
			||||||
 | 
					      text-align: right;
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .num {
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					      color: #333333;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      span:nth-child(1) {
 | 
				
			||||||
 | 
					        color: #999999;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      span:nth-child(2) {
 | 
				
			||||||
 | 
					        color: #999999;
 | 
				
			||||||
 | 
					        color: #2266ff;
 | 
				
			||||||
 | 
					        font-size: 20px;
 | 
				
			||||||
 | 
					        font-weight: bold;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .tip {
 | 
				
			||||||
 | 
					      color: #ff4466;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .border_div {
 | 
				
			||||||
 | 
					    overflow: hidden;
 | 
				
			||||||
 | 
					    border-radius: 2px;
 | 
				
			||||||
 | 
					    border: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    header {
 | 
				
			||||||
 | 
					      height: 40px;
 | 
				
			||||||
 | 
					      background: #f5f5f5;
 | 
				
			||||||
 | 
					      padding: 0 8px;
 | 
				
			||||||
 | 
					      box-sizing: border-box;
 | 
				
			||||||
 | 
					      display: flex;
 | 
				
			||||||
 | 
					      justify-content: space-between;
 | 
				
			||||||
 | 
					      align-items: center;
 | 
				
			||||||
 | 
					      border-bottom: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      span {
 | 
				
			||||||
 | 
					        color: #333333;
 | 
				
			||||||
 | 
					        font-size: 12px;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .info {
 | 
				
			||||||
 | 
					    padding: 16px 0;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										336
									
								
								project/fengdu/app/AppIntegratingSupermarket/goodsManagement.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										336
									
								
								project/fengdu/app/AppIntegratingSupermarket/goodsManagement.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,336 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="order_management">
 | 
				
			||||||
 | 
					    <ai-list isTabs>
 | 
				
			||||||
 | 
					      <template slot="content">
 | 
				
			||||||
 | 
					        <ai-search-bar bottomBorder>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              v-model="searchObj.shopId"
 | 
				
			||||||
 | 
					              placeholder="请选择店铺"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                :key="i"
 | 
				
			||||||
 | 
					                :label="item.shopName"
 | 
				
			||||||
 | 
					                :value="item.id">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              v-model="searchObj.merchandiseType"
 | 
				
			||||||
 | 
					              placeholder="请选择商品类型"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                v-for="(item, i) in dict.getDict('integralMerchandiseType')"
 | 
				
			||||||
 | 
					                :key="i"
 | 
				
			||||||
 | 
					                :label="item.dictName"
 | 
				
			||||||
 | 
					                :value="item.dictValue">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              v-model="searchObj.status"
 | 
				
			||||||
 | 
					              placeholder="请选择状态"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                v-for="(item, i) in dict.getDict('integralMerchandiseStatus')"
 | 
				
			||||||
 | 
					                :key="i"
 | 
				
			||||||
 | 
					                :label="item.dictName"
 | 
				
			||||||
 | 
					                :value="item.dictValue">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template slot="right">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              v-model="searchObj.merchandiseName"
 | 
				
			||||||
 | 
					              size="small"
 | 
				
			||||||
 | 
					              placeholder="商品名"
 | 
				
			||||||
 | 
					              @keyup.enter.native="(page.current = 1), getList()"
 | 
				
			||||||
 | 
					              @clear="(page.current = 1), searchObj.merchandiseName = '', getList()"
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              suffix-icon="iconfont iconSearch" />
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-search-bar class="mt10">
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              icon="iconfont iconAdd"
 | 
				
			||||||
 | 
					              @click="add()"
 | 
				
			||||||
 | 
					              v-if="$permissions('app_appvillagerintegralmerchandise_edit')">
 | 
				
			||||||
 | 
					              添加
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					            <ai-download
 | 
				
			||||||
 | 
					              :instance="instance"
 | 
				
			||||||
 | 
					              :fileName="'商品列表'"
 | 
				
			||||||
 | 
					              url="/app/appvillagerintegralmerchandise/export"
 | 
				
			||||||
 | 
					              v-if="$permissions('app_appvillagerintegralmerchandise_export')"
 | 
				
			||||||
 | 
					              :params="{ ...searchObj, areaId: areaId }">
 | 
				
			||||||
 | 
					            </ai-download>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template slot="right"> </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					          :tableData="tableData"
 | 
				
			||||||
 | 
					          :col-configs="colConfigs"
 | 
				
			||||||
 | 
					          :total="page.total"
 | 
				
			||||||
 | 
					          :current.sync="page.current"
 | 
				
			||||||
 | 
					          :size.sync="page.size"
 | 
				
			||||||
 | 
					          @getList="getList">
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					            label="商品图"
 | 
				
			||||||
 | 
					            slot="photo"
 | 
				
			||||||
 | 
					            align="center"
 | 
				
			||||||
 | 
					            width="150">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <ai-uploader
 | 
				
			||||||
 | 
					                :disabled="true"
 | 
				
			||||||
 | 
					                :instance="instance"
 | 
				
			||||||
 | 
					                v-model="row.photo"
 | 
				
			||||||
 | 
					                :limit="9">
 | 
				
			||||||
 | 
					              </ai-uploader>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column label="操作" slot="options" align="center" width="200" fixed="right">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <div class="table-options">
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="编辑"
 | 
				
			||||||
 | 
					                  :disabled="!$permissions('app_appvillagerintegralmerchandise_edit') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="edit(row)">
 | 
				
			||||||
 | 
					                  编辑
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="详情"
 | 
				
			||||||
 | 
					                  :disabled="!$permissions('app_appvillagerintegralmerchandise_detail') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="goDetail(row)">
 | 
				
			||||||
 | 
					                  详情
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="上架"
 | 
				
			||||||
 | 
					                  :disabled="row.status != 0 || !$permissions('app_appvillagerintegralmerchandise_edit') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="changeStatus(row)">
 | 
				
			||||||
 | 
					                  上架
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="下架"
 | 
				
			||||||
 | 
					                  :disabled="row.status != 1 || !$permissions('app_appvillagerintegralmerchandise_edit') || row.enable != 1"
 | 
				
			||||||
 | 
					                  @click="changeStatus(row)">
 | 
				
			||||||
 | 
					                  下架
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-list>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "goodsManagement",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      searchObj: {
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					        status: "",
 | 
				
			||||||
 | 
					        merchandiseName: "",
 | 
				
			||||||
 | 
					        merchandiseType: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      page: {
 | 
				
			||||||
 | 
					        size: 10,
 | 
				
			||||||
 | 
					        current: 1,
 | 
				
			||||||
 | 
					        total: 0,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      tableData: [],
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    colConfigs() {
 | 
				
			||||||
 | 
					      let _ = this;
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "shopId",
 | 
				
			||||||
 | 
					          label: "店铺名称",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          slot: "photo",
 | 
				
			||||||
 | 
					          prop: "photo",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "商品图",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseName",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          label: "商品名",
 | 
				
			||||||
 | 
					          width: 180,
 | 
				
			||||||
 | 
					          "show-overflow-tooltip": false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "costIntegral",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "单价",
 | 
				
			||||||
 | 
					          width: 100,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "inventoryNumber",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "库存",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "saleNumber",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "销量",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "status",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "状态",
 | 
				
			||||||
 | 
					          render(h, { row }) {
 | 
				
			||||||
 | 
					            return h(
 | 
				
			||||||
 | 
					              "span",
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                style: {
 | 
				
			||||||
 | 
					                  color: _.$dict.getColor(
 | 
				
			||||||
 | 
					                    "integralMerchandiseStatus",
 | 
				
			||||||
 | 
					                    row.status
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              _.$dict.getLabel("integralMerchandiseStatus", row.status)
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.dict.load("integralMerchandiseType", "integralMerchandiseStatus");
 | 
				
			||||||
 | 
					    this.getShopList().then(() => {
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getList() {
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralmerchandise/list`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            ...this.searchObj,
 | 
				
			||||||
 | 
					            ...this.page,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.tableData = res.data.records;
 | 
				
			||||||
 | 
					            this.tableData.map((e, index) => {
 | 
				
			||||||
 | 
					              let i = this.shopList.findIndex((item) => item.id == e.shopId);
 | 
				
			||||||
 | 
					              if (i > -1) {
 | 
				
			||||||
 | 
					                e.shopId = this.shopList[i].shopName;
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					              if (e.photo) {
 | 
				
			||||||
 | 
					                e.allPhoto = [...JSON.parse(e.photo)];
 | 
				
			||||||
 | 
					                e.photo = [{ ...e.allPhoto[0] }];
 | 
				
			||||||
 | 
					              } else {
 | 
				
			||||||
 | 
					                e.photo = [];
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            this.page.total = res.data.total;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    updateList() {
 | 
				
			||||||
 | 
					      this.getShopList().then(() => {
 | 
				
			||||||
 | 
					        this.getList();
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    reset() {
 | 
				
			||||||
 | 
					      Object.keys(this.searchObj).forEach((e) => {
 | 
				
			||||||
 | 
					        this.searchObj[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    add() {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", { isAdd: true });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    edit(row) {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", { isAdd: true, ...row });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    goDetail(row) {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", { isAdd: false, ...row });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    changeStatus(row) {
 | 
				
			||||||
 | 
					      let status =
 | 
				
			||||||
 | 
					        row.status == 0
 | 
				
			||||||
 | 
					          ? `上架 ${row.shopId}-${row.merchandiseName}`
 | 
				
			||||||
 | 
					          : `下架 ${row.shopId}-${row.merchandiseName}`;
 | 
				
			||||||
 | 
					      this.$confirm(
 | 
				
			||||||
 | 
					        `<p>是否要<span style='color:#2266FF;'>${status}</span>?</p>`,
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          type: "error",
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      )
 | 
				
			||||||
 | 
					        .then(() => {
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					            .post("/app/appvillagerintegralmerchandise/enableOrDisable", null, {
 | 
				
			||||||
 | 
					              params: { id: row.id },
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            .then((res) => {
 | 
				
			||||||
 | 
					              if (res?.code == 0) {
 | 
				
			||||||
 | 
					                this.$message.success("操作成功!");
 | 
				
			||||||
 | 
					                this.getList();
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .catch(() => {});
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					          .post(`/app/appvillagerintegralshop/list`, null, {
 | 
				
			||||||
 | 
					            params: {
 | 
				
			||||||
 | 
					              size: 100000,
 | 
				
			||||||
 | 
					              areaId: this.areaId,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					          .then((res) => {
 | 
				
			||||||
 | 
					            if (res.code == 0) {
 | 
				
			||||||
 | 
					              this.shopList = res.data.records;
 | 
				
			||||||
 | 
					              reslove();
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.order_management {
 | 
				
			||||||
 | 
					  background: #f3f6f9;
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  .iconShow {
 | 
				
			||||||
 | 
					    padding: 0 8px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .iconfont {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										501
									
								
								project/fengdu/app/AppIntegratingSupermarket/orderManagement.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										501
									
								
								project/fengdu/app/AppIntegratingSupermarket/orderManagement.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,501 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="order_management">
 | 
				
			||||||
 | 
					    <ai-list isTabs>
 | 
				
			||||||
 | 
					      <template slot="content">
 | 
				
			||||||
 | 
					        <ai-search-bar>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					                size="small"
 | 
				
			||||||
 | 
					                v-model="searchObj.shopId"
 | 
				
			||||||
 | 
					                placeholder="请选择店铺"
 | 
				
			||||||
 | 
					                clearable
 | 
				
			||||||
 | 
					                @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                  v-for="(item, i) in shopList"
 | 
				
			||||||
 | 
					                  :key="i"
 | 
				
			||||||
 | 
					                  :label="item.shopName"
 | 
				
			||||||
 | 
					                  :value="item.id">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <el-select
 | 
				
			||||||
 | 
					                size="small"
 | 
				
			||||||
 | 
					                v-model="searchObj.orderStatus"
 | 
				
			||||||
 | 
					                placeholder="请选择状态"
 | 
				
			||||||
 | 
					                clearable
 | 
				
			||||||
 | 
					                @change="(page.current = 1), getList()">
 | 
				
			||||||
 | 
					              <el-option
 | 
				
			||||||
 | 
					                  v-for="(item, i) in dict.getDict('integralOrderStatus')"
 | 
				
			||||||
 | 
					                  :key="i"
 | 
				
			||||||
 | 
					                  :label="item.dictName"
 | 
				
			||||||
 | 
					                  :value="item.dictValue">
 | 
				
			||||||
 | 
					              </el-option>
 | 
				
			||||||
 | 
					            </el-select>
 | 
				
			||||||
 | 
					            <ai-search label="创建时间">
 | 
				
			||||||
 | 
					              <el-date-picker
 | 
				
			||||||
 | 
					                  v-model="searchObj.createTimeStart"
 | 
				
			||||||
 | 
					                  type="date"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  @change="(page.current = 1), getList()"
 | 
				
			||||||
 | 
					                  value-format="yyyy-MM-dd HH:mm:ss"
 | 
				
			||||||
 | 
					                  placeholder="开始日期">
 | 
				
			||||||
 | 
					              </el-date-picker>
 | 
				
			||||||
 | 
					              <el-date-picker
 | 
				
			||||||
 | 
					                  v-model="searchObj.createTimeEnd"
 | 
				
			||||||
 | 
					                  type="date"
 | 
				
			||||||
 | 
					                  size="small"
 | 
				
			||||||
 | 
					                  @change="(page.current = 1), getList()"
 | 
				
			||||||
 | 
					                  value-format="yyyy-MM-dd HH:mm:ss"
 | 
				
			||||||
 | 
					                  placeholder="结束日期">
 | 
				
			||||||
 | 
					              </el-date-picker>
 | 
				
			||||||
 | 
					            </ai-search>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          <template slot="right">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					                v-model="searchObj.name"
 | 
				
			||||||
 | 
					                size="small"
 | 
				
			||||||
 | 
					                placeholder="订单号/商品名/兑换家庭"
 | 
				
			||||||
 | 
					                v-throttle="() => {page.current = 1, getList()}"
 | 
				
			||||||
 | 
					                @clear="page.current = 1, searchObj.name = '', getList()"
 | 
				
			||||||
 | 
					                clearable
 | 
				
			||||||
 | 
					                suffix-icon="iconfont iconSearch"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-search-bar>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <!-- <el-button type="primary" icon="iconfont iconAdd" @click="add()">添加</el-button> -->
 | 
				
			||||||
 | 
					            <ai-download
 | 
				
			||||||
 | 
					                :instance="instance"
 | 
				
			||||||
 | 
					                url="/app/appvillagerintegralshoporder/listExport"
 | 
				
			||||||
 | 
					                :params="{ ...searchObj, areaId: areaId, ids: ids.join(',') }"
 | 
				
			||||||
 | 
					                fileName="订单管理"
 | 
				
			||||||
 | 
					                v-if="$permissions('app_appvillagerintegralshoporder_export')">
 | 
				
			||||||
 | 
					            </ai-download>
 | 
				
			||||||
 | 
					            <el-dropdown @command="handleCommand">
 | 
				
			||||||
 | 
					              <el-button type="primary">
 | 
				
			||||||
 | 
					                变更状态<i class="el-icon-arrow-down el-icon--right"></i>
 | 
				
			||||||
 | 
					              </el-button>
 | 
				
			||||||
 | 
					              <el-dropdown-menu slot="dropdown">
 | 
				
			||||||
 | 
					                <el-dropdown-item command="1">批量兑换</el-dropdown-item>
 | 
				
			||||||
 | 
					                <el-dropdown-item command="2">批量取消</el-dropdown-item>
 | 
				
			||||||
 | 
					              </el-dropdown-menu>
 | 
				
			||||||
 | 
					            </el-dropdown>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					          <template slot="right"></template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					            :tableData="tableData"
 | 
				
			||||||
 | 
					            :col-configs="colConfigs"
 | 
				
			||||||
 | 
					            :total="page.total"
 | 
				
			||||||
 | 
					            :current.sync="page.current"
 | 
				
			||||||
 | 
					            @select="onRowClick"
 | 
				
			||||||
 | 
					            @select-all="onRowClick"
 | 
				
			||||||
 | 
					            row-key="id"
 | 
				
			||||||
 | 
					            :default-expand-all="false"
 | 
				
			||||||
 | 
					            :tree-props="{ children: 'merchandiseList' }"
 | 
				
			||||||
 | 
					            :size.sync="page.size"
 | 
				
			||||||
 | 
					            @getList="getList">
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              type="selection"
 | 
				
			||||||
 | 
					              :selectable="(row,index)=>row.orderStatus==0"
 | 
				
			||||||
 | 
					              width="55"
 | 
				
			||||||
 | 
					              slot="selection">
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="订单号/创建时间"
 | 
				
			||||||
 | 
					              slot="orderCode"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="150">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row>
 | 
				
			||||||
 | 
					                <el-col>{{ row.orderCode }}</el-col>
 | 
				
			||||||
 | 
					                <el-col style="color: #999999">{{ row.createTime }}</el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="商品图"
 | 
				
			||||||
 | 
					              slot="merchandisePhoto"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="130">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <ai-uploader
 | 
				
			||||||
 | 
					                  :disabled="true"
 | 
				
			||||||
 | 
					                  :instance="instance"
 | 
				
			||||||
 | 
					                  v-model="row.merchandisePhoto"
 | 
				
			||||||
 | 
					                  :limit="9">
 | 
				
			||||||
 | 
					              </ai-uploader>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column label="兑换家庭" slot="familyName" align="left">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row>
 | 
				
			||||||
 | 
					                <el-col style="width: 100%">{{ row.familyName }}</el-col>
 | 
				
			||||||
 | 
					                <el-col style="color: #999999">{{ row.familyPhone }}</el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column label="操作人" slot="createUserName" align="left">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row>
 | 
				
			||||||
 | 
					                <el-col style="width: 100%">{{ row.createUserName }}</el-col>
 | 
				
			||||||
 | 
					                <el-col style="color: #999999">{{
 | 
				
			||||||
 | 
					                    row.createUserPhone
 | 
				
			||||||
 | 
					                  }}
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="订单状态"
 | 
				
			||||||
 | 
					              slot="orderStatus"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="130"
 | 
				
			||||||
 | 
					              fixed="right">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <el-row v-if="row.isParent">
 | 
				
			||||||
 | 
					                <el-col
 | 
				
			||||||
 | 
					                    style="width: 100%"
 | 
				
			||||||
 | 
					                    :style="{
 | 
				
			||||||
 | 
					                    color: dict.getColor(
 | 
				
			||||||
 | 
					                      'integralOrderStatus',
 | 
				
			||||||
 | 
					                      row.orderStatus
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  }"
 | 
				
			||||||
 | 
					                >{{
 | 
				
			||||||
 | 
					                    dict.getLabel("integralOrderStatus", row.orderStatus)
 | 
				
			||||||
 | 
					                  }}
 | 
				
			||||||
 | 
					                </el-col
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <el-col style="width: 100%" v-if="row.orderStatus == 0"
 | 
				
			||||||
 | 
					                >{{ row.reserveDate }} {{ row.reserveTime }}
 | 
				
			||||||
 | 
					                </el-col
 | 
				
			||||||
 | 
					                >
 | 
				
			||||||
 | 
					                <el-col style="color: #2266ff; width: 100%" v-if="row.remark">
 | 
				
			||||||
 | 
					                  <el-tooltip
 | 
				
			||||||
 | 
					                      :disabled="!row.remark"
 | 
				
			||||||
 | 
					                      class="item"
 | 
				
			||||||
 | 
					                      effect="light"
 | 
				
			||||||
 | 
					                      :content="row.remark"
 | 
				
			||||||
 | 
					                      placement="left-end"
 | 
				
			||||||
 | 
					                  >
 | 
				
			||||||
 | 
					                    <el-link type="primary">备注</el-link>
 | 
				
			||||||
 | 
					                  </el-tooltip>
 | 
				
			||||||
 | 
					                </el-col>
 | 
				
			||||||
 | 
					              </el-row>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					              label="操作"
 | 
				
			||||||
 | 
					              slot="options"
 | 
				
			||||||
 | 
					              align="center"
 | 
				
			||||||
 | 
					              width="120"
 | 
				
			||||||
 | 
					              fixed="right">
 | 
				
			||||||
 | 
					            <template v-slot="{ row }">
 | 
				
			||||||
 | 
					              <div class="table-options">
 | 
				
			||||||
 | 
					                <el-button v-if="row.orderCode" type="text" @click="goDetail(row)" title="详情"
 | 
				
			||||||
 | 
					                           :disabled="!$permissions('app_appvillagerintegralshoporder_detail')">详情
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <template v-if="row.orderStatus==0 || row.orderStatus==3">
 | 
				
			||||||
 | 
					                  <el-button type="text" v-if="row.orderStatus==0" @click="handlePendingOrder(row.id,1)">确认兑换</el-button>
 | 
				
			||||||
 | 
					                  <el-button type="text" v-if="row.orderStatus==0 || row.orderStatus==3" @click="handlePendingOrder(row.id,2)">取消订单</el-button>
 | 
				
			||||||
 | 
					                </template>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-list>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "orderManagement",
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    permissions: Function,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      searchObj: {
 | 
				
			||||||
 | 
					        name: "",
 | 
				
			||||||
 | 
					        orderStatus: "",
 | 
				
			||||||
 | 
					        createTimeStart: null,
 | 
				
			||||||
 | 
					        createTimeEnd: null,
 | 
				
			||||||
 | 
					        shopId: "",
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      page: {
 | 
				
			||||||
 | 
					        size: 10,
 | 
				
			||||||
 | 
					        current: 1,
 | 
				
			||||||
 | 
					        total: 0,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      tableData: [],
 | 
				
			||||||
 | 
					      shopList: [],
 | 
				
			||||||
 | 
					      ids: [],
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    colConfigs() {
 | 
				
			||||||
 | 
					      let _ = this;
 | 
				
			||||||
 | 
					      return [
 | 
				
			||||||
 | 
					        {slot: "selection"},
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "orderCode",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          slot: "orderCode",
 | 
				
			||||||
 | 
					          label: "订单号/创建时间",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandisePhoto",
 | 
				
			||||||
 | 
					          slot: "merchandisePhoto",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "商品图",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseName",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          label: "商品名",
 | 
				
			||||||
 | 
					          width: 180,
 | 
				
			||||||
 | 
					          "show-overflow-tooltip": false,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "costIntegral",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "单价",
 | 
				
			||||||
 | 
					          width: 100,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "merchandiseNumber",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "数量",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "allCostIntegral",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "消耗积分",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "familyName",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "兑换家庭",
 | 
				
			||||||
 | 
					          slot: "familyName",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "createUserName",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "操作人",
 | 
				
			||||||
 | 
					          slot: "createUserName",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "orderStatus",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          label: "订单状态",
 | 
				
			||||||
 | 
					          fixed: "right",
 | 
				
			||||||
 | 
					          slot: "orderStatus",
 | 
				
			||||||
 | 
					          // render(h, {row}) {
 | 
				
			||||||
 | 
					          //     return h('span', {style: {color: _.dict.getColor('integralOrderStatus', row.orderStatus)}}, _.dict.getLabel('integralOrderStatus', row.orderStatus))
 | 
				
			||||||
 | 
					          // }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  created() {
 | 
				
			||||||
 | 
					    this.getList();
 | 
				
			||||||
 | 
					    this.dict.load("integralOrderStatus");
 | 
				
			||||||
 | 
					    this.getShopList();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    onRowClick(row) {
 | 
				
			||||||
 | 
					      this.ids = row.map(e => e.id)
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    handleCommand(val) {
 | 
				
			||||||
 | 
					      if (this.ids.length == 0) {
 | 
				
			||||||
 | 
					        return this.$message.error("请选择商品")
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.instance.post(`/app/appvillagerintegralshoporder/changeOrderStatus`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          ids: this.ids.join(","),
 | 
				
			||||||
 | 
					          status: val
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      }).then(res => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.$message.success(`批量${val == 1 ? '兑换' : '取消'}成功`)
 | 
				
			||||||
 | 
					          this.getList()
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    handlePendingOrder(ids, status) {
 | 
				
			||||||
 | 
					      let text = status == 1 ? "确认兑换" : "取消订单"
 | 
				
			||||||
 | 
					      this.$confirm(`是否${text}?`).then(() => {
 | 
				
			||||||
 | 
					        this.instance.post(`/app/appvillagerintegralshoporder/changeOrderStatus`, null, {
 | 
				
			||||||
 | 
					          params: {ids, status}
 | 
				
			||||||
 | 
					        }).then(res => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.$message.success(`${text}成功`)
 | 
				
			||||||
 | 
					            this.getList()
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					      }).catch(() => 0)
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getList() {
 | 
				
			||||||
 | 
					      this.instance.post(`/app/appvillagerintegralshoporder/list`, null, {
 | 
				
			||||||
 | 
					        params: {
 | 
				
			||||||
 | 
					          ...this.searchObj,
 | 
				
			||||||
 | 
					          ...this.page,
 | 
				
			||||||
 | 
					          areaId: this.areaId,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then((res) => {
 | 
				
			||||||
 | 
					        if (res.code == 0) {
 | 
				
			||||||
 | 
					          this.tableData = res.data.records;
 | 
				
			||||||
 | 
					          this.tableData.map((e) => {
 | 
				
			||||||
 | 
					            e.merchandiseName = e.merchandiseList[0].merchandiseName;
 | 
				
			||||||
 | 
					            e.merchandiseNumber = e.merchandiseList[0].merchandiseNumber;
 | 
				
			||||||
 | 
					            e.merchandisePhoto = [
 | 
				
			||||||
 | 
					              {...JSON.parse(e.merchandiseList[0].merchandisePhoto)[0]},
 | 
				
			||||||
 | 
					            ];
 | 
				
			||||||
 | 
					            e.idForWeb = e.merchandiseList[0].idForWeb;
 | 
				
			||||||
 | 
					            e.costIntegral = e.merchandiseList[0].costIntegral;
 | 
				
			||||||
 | 
					            e.allCostIntegral =
 | 
				
			||||||
 | 
					                Number(e.merchandiseList[0].costIntegral) *
 | 
				
			||||||
 | 
					                Number(e.merchandiseNumber);
 | 
				
			||||||
 | 
					            e.merchandiseList.splice(0, 1);
 | 
				
			||||||
 | 
					            e.isParent = true;
 | 
				
			||||||
 | 
					            if (e.merchandiseList.length > 0) {
 | 
				
			||||||
 | 
					              e.merchandiseList.map((e2) => {
 | 
				
			||||||
 | 
					                e2.createTime = "";
 | 
				
			||||||
 | 
					                let arr = JSON.parse(e2.merchandisePhoto);
 | 
				
			||||||
 | 
					                e2.merchandisePhoto = [{...arr[0]}];
 | 
				
			||||||
 | 
					                e2.allCostIntegral =
 | 
				
			||||||
 | 
					                    Number(e2.costIntegral) * Number(e2.merchandiseNumber);
 | 
				
			||||||
 | 
					                e2.isParent = false;
 | 
				
			||||||
 | 
					                // e2.id = e2.orderId
 | 
				
			||||||
 | 
					              });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          this.page.total = res.data.total;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    getShopList() {
 | 
				
			||||||
 | 
					      return new Promise((reslove) => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/list`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            size: 100000,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.shopList = res.data.records;
 | 
				
			||||||
 | 
					            reslove();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    reset() {
 | 
				
			||||||
 | 
					      Object.keys(this.searchObj).forEach((e) => {
 | 
				
			||||||
 | 
					        this.searchObj[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.searchObj.createTimeStart = null;
 | 
				
			||||||
 | 
					      this.searchObj.createTimeEnd = null;
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    add() {
 | 
				
			||||||
 | 
					      this.$emit("showDetail", {isAdd: true});
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    goDetail(row) {
 | 
				
			||||||
 | 
					      console.log(row);
 | 
				
			||||||
 | 
					      this.$emit("showDetail", {isAdd: false, ...row});
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    finishOrder(row) {
 | 
				
			||||||
 | 
					      this.$confirm(`是否完成此订单?`, {
 | 
				
			||||||
 | 
					        type: "error",
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then(() => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshoporder/FinishOrder`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            orderId: row.id,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.$message.success("已完成!");
 | 
				
			||||||
 | 
					            this.getList();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    overOrder(row) {
 | 
				
			||||||
 | 
					      this.$confirm(`是否结束此订单?`, {
 | 
				
			||||||
 | 
					        type: "error",
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .then(() => {
 | 
				
			||||||
 | 
					        this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshoporder/overOrder`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            orderId: row.id,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.$message.success("已结束!");
 | 
				
			||||||
 | 
					            this.getList();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					      .catch(() => {
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss" scoped>
 | 
				
			||||||
 | 
					.order_management {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  background: #f3f6f9;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .times_div {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .times {
 | 
				
			||||||
 | 
					      display: block;
 | 
				
			||||||
 | 
					      width: 72px;
 | 
				
			||||||
 | 
					      height: 30px;
 | 
				
			||||||
 | 
					      line-height: 30px;
 | 
				
			||||||
 | 
					      margin: 0;
 | 
				
			||||||
 | 
					      text-align: center;
 | 
				
			||||||
 | 
					      background: #f5f5f5;
 | 
				
			||||||
 | 
					      border-radius: 2px 0px 0px 2px;
 | 
				
			||||||
 | 
					      border: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					      font-size: 14px;
 | 
				
			||||||
 | 
					      color: #666666;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconfont {
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconCorrect {
 | 
				
			||||||
 | 
					    color: #53b43b;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .iconReject {
 | 
				
			||||||
 | 
					    color: #e75555;
 | 
				
			||||||
 | 
					    padding: 0 8px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
							
								
								
									
										474
									
								
								project/fengdu/app/AppIntegratingSupermarket/storeManagement.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										474
									
								
								project/fengdu/app/AppIntegratingSupermarket/storeManagement.vue
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,474 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <section class="storeManagement">
 | 
				
			||||||
 | 
					    <ai-list isTabs>
 | 
				
			||||||
 | 
					      <template slot="content">
 | 
				
			||||||
 | 
					        <ai-search-bar bottomBorder>
 | 
				
			||||||
 | 
					          <template slot="left">
 | 
				
			||||||
 | 
					            <el-button
 | 
				
			||||||
 | 
					              :disabled="!isLevel5"
 | 
				
			||||||
 | 
					              type="primary"
 | 
				
			||||||
 | 
					              icon="iconfont iconAdd"
 | 
				
			||||||
 | 
					              @click="onAdd">
 | 
				
			||||||
 | 
					              添加
 | 
				
			||||||
 | 
					            </el-button>
 | 
				
			||||||
 | 
					          </template>
 | 
				
			||||||
 | 
					        </ai-search-bar>
 | 
				
			||||||
 | 
					        <ai-table
 | 
				
			||||||
 | 
					          :tableData="tableData"
 | 
				
			||||||
 | 
					          :col-configs="colConfigs"
 | 
				
			||||||
 | 
					          :total="total"
 | 
				
			||||||
 | 
					          ref="aitableex"
 | 
				
			||||||
 | 
					          :current.sync="search.current"
 | 
				
			||||||
 | 
					          :size.sync="search.size"
 | 
				
			||||||
 | 
					          @getList="getList">
 | 
				
			||||||
 | 
					          <el-table-column
 | 
				
			||||||
 | 
					            slot="changeIntegral"
 | 
				
			||||||
 | 
					            label="积分"
 | 
				
			||||||
 | 
					            align="center">
 | 
				
			||||||
 | 
					            <template slot-scope="{ row }">
 | 
				
			||||||
 | 
					              <span>{{ row.doType > 0 ? "+" : ""}}{{ row.changeIntegral }}</span>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					          <el-table-column slot="options" label="操作" align="center" width="120" fixed="right">
 | 
				
			||||||
 | 
					            <template slot-scope="{ row }">
 | 
				
			||||||
 | 
					              <div class="table-options">
 | 
				
			||||||
 | 
					                <el-button
 | 
				
			||||||
 | 
					                  type="text"
 | 
				
			||||||
 | 
					                  title="编辑"
 | 
				
			||||||
 | 
					                  style="margin-right: 8px;"
 | 
				
			||||||
 | 
					                  :disabled="!$permissions('app_appvillagerintegralshop_edit')"
 | 
				
			||||||
 | 
					                  @click="editItem(row)">
 | 
				
			||||||
 | 
					                  编辑
 | 
				
			||||||
 | 
					                </el-button>
 | 
				
			||||||
 | 
					                <ai-wechat-selecter :instance="instance" v-model="dialogInfo.operators" @change="getSelect">
 | 
				
			||||||
 | 
					                  <el-button
 | 
				
			||||||
 | 
					                    type="text"
 | 
				
			||||||
 | 
					                    @click="statusChage(row)"
 | 
				
			||||||
 | 
					                    title="授权"
 | 
				
			||||||
 | 
					                    v-if="$permissions('app_appvillagerintegralshop_edit')">
 | 
				
			||||||
 | 
					                    授权
 | 
				
			||||||
 | 
					                  </el-button>
 | 
				
			||||||
 | 
					                </ai-wechat-selecter>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					            </template>
 | 
				
			||||||
 | 
					          </el-table-column>
 | 
				
			||||||
 | 
					        </ai-table>
 | 
				
			||||||
 | 
					      </template>
 | 
				
			||||||
 | 
					    </ai-list>
 | 
				
			||||||
 | 
					    <ai-dialog
 | 
				
			||||||
 | 
					      :title="dialog.title"
 | 
				
			||||||
 | 
					      :visible.sync="dialog.visible"
 | 
				
			||||||
 | 
					      :customFooter="true"
 | 
				
			||||||
 | 
					      :destroyOnClose="true"
 | 
				
			||||||
 | 
					      @close="init('ruleForm')"
 | 
				
			||||||
 | 
					      width="520px"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <div class="form_div">
 | 
				
			||||||
 | 
					        <el-form
 | 
				
			||||||
 | 
					          ref="ruleForm"
 | 
				
			||||||
 | 
					          :model="dialogInfo"
 | 
				
			||||||
 | 
					          :rules="formRules"
 | 
				
			||||||
 | 
					          size="small"
 | 
				
			||||||
 | 
					          label-suffix=":"
 | 
				
			||||||
 | 
					          label-width="100px"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <el-form-item label="店铺名称" prop="shopName">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.shopName"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="店主" prop="shopkeeper">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.shopkeeper"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="联系电话" prop="phone">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.phone"
 | 
				
			||||||
 | 
					              maxlength="11"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="店铺地址" prop="shopAddress">
 | 
				
			||||||
 | 
					            <el-input
 | 
				
			||||||
 | 
					              placeholder="请输入…"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.shopAddress"
 | 
				
			||||||
 | 
					            ></el-input>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="状态" prop="status">
 | 
				
			||||||
 | 
					            <el-radio-group v-model="dialogInfo.status">
 | 
				
			||||||
 | 
					              <el-radio label="1">启用</el-radio>
 | 
				
			||||||
 | 
					              <el-radio label="0">停用</el-radio>
 | 
				
			||||||
 | 
					            </el-radio-group>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					        </el-form>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="dialog-footer" slot="footer">
 | 
				
			||||||
 | 
					        <el-button @click="dialog.visible = false" size="medium"
 | 
				
			||||||
 | 
					          >取消</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					        <el-button @click="onConfirm('ruleForm')" type="primary" size="medium"
 | 
				
			||||||
 | 
					          >确认</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </ai-dialog>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <ai-dialog
 | 
				
			||||||
 | 
					      title="操作人授权"
 | 
				
			||||||
 | 
					      :visible.sync="dialog.visibleStatus"
 | 
				
			||||||
 | 
					      :customFooter="true"
 | 
				
			||||||
 | 
					      :destroyOnClose="true"
 | 
				
			||||||
 | 
					      @close="init('ruleStatus')"
 | 
				
			||||||
 | 
					      width="720px"
 | 
				
			||||||
 | 
					    >
 | 
				
			||||||
 | 
					      <div class="form_div">
 | 
				
			||||||
 | 
					        <el-form
 | 
				
			||||||
 | 
					          ref="ruleStatus"
 | 
				
			||||||
 | 
					          :model="dialogInfo"
 | 
				
			||||||
 | 
					          :rules="formRules"
 | 
				
			||||||
 | 
					          size="small"
 | 
				
			||||||
 | 
					          label-suffix=":"
 | 
				
			||||||
 | 
					          label-width="100px"
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					          <el-form-item label="事件区域" prop="areaId">
 | 
				
			||||||
 | 
					            <ai-area-select
 | 
				
			||||||
 | 
					              clearable
 | 
				
			||||||
 | 
					              always-show
 | 
				
			||||||
 | 
					              :instance="instance"
 | 
				
			||||||
 | 
					              v-model="dialogInfo.areaId"
 | 
				
			||||||
 | 
					              :hide-level="2"
 | 
				
			||||||
 | 
					              :disabled-level="user.info.areaList.length"
 | 
				
			||||||
 | 
					            />
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					          <el-form-item label="操作员" required>
 | 
				
			||||||
 | 
					            <el-col :span="14" style="width: 60%; margin-right: 8px">
 | 
				
			||||||
 | 
					              <el-form-item prop="operators">
 | 
				
			||||||
 | 
					                <div class="organ">
 | 
				
			||||||
 | 
					                  <span v-if="dialogInfo.operators.length">
 | 
				
			||||||
 | 
					                    <span
 | 
				
			||||||
 | 
					                      v-for="(item, i) in dialogInfo.operators"
 | 
				
			||||||
 | 
					                      :key="i"
 | 
				
			||||||
 | 
					                      class="organzation"
 | 
				
			||||||
 | 
					                      >{{ item.userName }}
 | 
				
			||||||
 | 
					                      <span
 | 
				
			||||||
 | 
					                        class="iconfont iconOverrule"
 | 
				
			||||||
 | 
					                        @click.stop="delate(i)"
 | 
				
			||||||
 | 
					                      ></span>
 | 
				
			||||||
 | 
					                    </span>
 | 
				
			||||||
 | 
					                  </span>
 | 
				
			||||||
 | 
					                  <span v-else style="color: #999">请选择</span>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              </el-form-item>
 | 
				
			||||||
 | 
					            </el-col>
 | 
				
			||||||
 | 
					            <el-col :span="7" style="width: 30%">
 | 
				
			||||||
 | 
					              <ai-person-select
 | 
				
			||||||
 | 
					                :instance="instance"
 | 
				
			||||||
 | 
					                :url="peopleAjaxUrl"
 | 
				
			||||||
 | 
					                :isMultiple="true"
 | 
				
			||||||
 | 
					                v-if="$permissions('app_appvillagerintegralshopoperator_edit')"
 | 
				
			||||||
 | 
					                @selectPerson="getSelect"
 | 
				
			||||||
 | 
					                :chooseUserList="dialogInfo.operators"
 | 
				
			||||||
 | 
					              >
 | 
				
			||||||
 | 
					                <template name="option" v-slot:option="{ item }">
 | 
				
			||||||
 | 
					                  <span class="iconfont iconProlife">{{ item.userName }}</span>
 | 
				
			||||||
 | 
					                </template>
 | 
				
			||||||
 | 
					              </ai-person-select>
 | 
				
			||||||
 | 
					            </el-col>
 | 
				
			||||||
 | 
					          </el-form-item>
 | 
				
			||||||
 | 
					        </el-form>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					      <div class="dialog-footer" slot="footer">
 | 
				
			||||||
 | 
					        <el-button @click="dialog.visibleStatus = false" size="medium"
 | 
				
			||||||
 | 
					          >取消</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					        <el-button @click="onConfirm('ruleStatus')" type="primary" size="medium"
 | 
				
			||||||
 | 
					          >确认</el-button
 | 
				
			||||||
 | 
					        >
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </ai-dialog>
 | 
				
			||||||
 | 
					  </section>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					import { mapState } from "vuex";
 | 
				
			||||||
 | 
					export default {
 | 
				
			||||||
 | 
					  name: "storeManagement",
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  props: {
 | 
				
			||||||
 | 
					    instance: Function,
 | 
				
			||||||
 | 
					    dict: Object,
 | 
				
			||||||
 | 
					    areaId: String,
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  data() {
 | 
				
			||||||
 | 
					    return {
 | 
				
			||||||
 | 
					      searchDotime: [],
 | 
				
			||||||
 | 
					      search: {
 | 
				
			||||||
 | 
					        current: 1,
 | 
				
			||||||
 | 
					        size: 10,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      unitId: "",
 | 
				
			||||||
 | 
					      total: 10,
 | 
				
			||||||
 | 
					      colConfigs: [
 | 
				
			||||||
 | 
					        { prop: "shopName", label: "店铺名称", align: "left" },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "shopkeeper",
 | 
				
			||||||
 | 
					          label: "店主",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "phone",
 | 
				
			||||||
 | 
					          label: "联系电话",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "shopAddress",
 | 
				
			||||||
 | 
					          label: "店铺地址",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					          width: 280,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "names",
 | 
				
			||||||
 | 
					          label: "店铺操作员",
 | 
				
			||||||
 | 
					          align: "left",
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          prop: "status",
 | 
				
			||||||
 | 
					          label: "状态",
 | 
				
			||||||
 | 
					          align: "center",
 | 
				
			||||||
 | 
					          render: (h, params) => {
 | 
				
			||||||
 | 
					            return h(
 | 
				
			||||||
 | 
					              "span",
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                class: "status-" + params.row.status,
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              this.$dict.getLabel("assessmentStartStatus", params.row.status)
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        { slot: "options", label: "操作", align: "center" },
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      tableData: [],
 | 
				
			||||||
 | 
					      dialog: {
 | 
				
			||||||
 | 
					        title: "",
 | 
				
			||||||
 | 
					        visible: false,
 | 
				
			||||||
 | 
					        visibleStatus: false,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      dialogInfo: {
 | 
				
			||||||
 | 
					        shopName: "",
 | 
				
			||||||
 | 
					        shopkeeper: "",
 | 
				
			||||||
 | 
					        phone: "",
 | 
				
			||||||
 | 
					        shopAddress: "",
 | 
				
			||||||
 | 
					        status: "1",
 | 
				
			||||||
 | 
					        areaId: "",
 | 
				
			||||||
 | 
					        operators: [],
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      formRules: {
 | 
				
			||||||
 | 
					        shopName: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入店铺名称", trigger: "change" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        shopkeeper: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入店主", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        phone: [{ required: true, message: "请输入联系电话", trigger: "blur" }],
 | 
				
			||||||
 | 
					        shopAddress: [
 | 
				
			||||||
 | 
					          { required: true, message: "请输入店铺地址", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        status: [{ required: true, message: "请选择状态", trigger: "blur" }],
 | 
				
			||||||
 | 
					        areaId: [
 | 
				
			||||||
 | 
					          { required: true, message: "请选择事件区域", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        operators: [
 | 
				
			||||||
 | 
					          { required: true, message: "请选择操作员", trigger: "blur" },
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      peopleAjaxUrl: "/admin/user/page",
 | 
				
			||||||
 | 
					      isLevel5: false,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  computed: {
 | 
				
			||||||
 | 
					    ...mapState(["user"]),
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mounted() {
 | 
				
			||||||
 | 
					    this.unitId = this.user.info.unitId;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.$dict.load(["assessmentStartStatus"]).then(() => {
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  methods: {
 | 
				
			||||||
 | 
					    getList() {
 | 
				
			||||||
 | 
					      this.isLevel5 = this.areaId.substring(this.areaId.length - 3) != "000";
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/list`, null, {
 | 
				
			||||||
 | 
					          params: {
 | 
				
			||||||
 | 
					            ...this.search,
 | 
				
			||||||
 | 
					            areaId: this.areaId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.tableData = res.data.records;
 | 
				
			||||||
 | 
					            this.total = res.data.total;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    timeChange() {
 | 
				
			||||||
 | 
					      if (this.searchDotime) {
 | 
				
			||||||
 | 
					        this.search.doTimeStart = this.searchDotime[0];
 | 
				
			||||||
 | 
					        this.search.doTimeEnd = this.searchDotime[1];
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.search.doTimeStart = null;
 | 
				
			||||||
 | 
					        this.search.doTimeEnd = null;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.search.current = 1;
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    editItem(row) {
 | 
				
			||||||
 | 
					      this.dialogInfo = { ...row };
 | 
				
			||||||
 | 
					      this.dialog.visible = true;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    statusChage(row) {
 | 
				
			||||||
 | 
					      this.dialogInfo = { ...row };
 | 
				
			||||||
 | 
					      if (this.dialogInfo.operators.length) {
 | 
				
			||||||
 | 
					        this.dialogInfo.operators.map((item) => {
 | 
				
			||||||
 | 
					          item.userName = item.name;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        this.dialogInfo.operators = [];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onReset() {
 | 
				
			||||||
 | 
					      this.search.current = 1;
 | 
				
			||||||
 | 
					      this.getList();
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onConfirm(formName) {
 | 
				
			||||||
 | 
					      if (this.dialogInfo.operators.length) {
 | 
				
			||||||
 | 
					        this.dialogInfo.operators.map((item) => {
 | 
				
			||||||
 | 
					          if (!item.name) {
 | 
				
			||||||
 | 
					            item.name = item.userName;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      this.$refs[formName].validate((valid) => {
 | 
				
			||||||
 | 
					        if (valid) {
 | 
				
			||||||
 | 
					          this.instance
 | 
				
			||||||
 | 
					            .post(`/app/appvillagerintegralshop/addOrUpdate`, this.dialogInfo)
 | 
				
			||||||
 | 
					            .then((res) => {
 | 
				
			||||||
 | 
					              if (res.code == 0) {
 | 
				
			||||||
 | 
					                this.onReset();
 | 
				
			||||||
 | 
					                this.onCancel();
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          return false;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onCancel() {
 | 
				
			||||||
 | 
					      this.dialog.visible = false;
 | 
				
			||||||
 | 
					      this.dialog.visibleStatus = false;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    init(formName) {
 | 
				
			||||||
 | 
					      this.$refs[formName].clearValidate();
 | 
				
			||||||
 | 
					      Object.keys(this.dialogInfo).forEach((e) => {
 | 
				
			||||||
 | 
					        this.dialogInfo[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.dialogInfo.status = "1";
 | 
				
			||||||
 | 
					      this.dialogInfo.operators = [];
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    getSelect(e) {
 | 
				
			||||||
 | 
					      this.dialogInfo.operators = e;
 | 
				
			||||||
 | 
					      this.dialogInfo.operators.map((item) => {
 | 
				
			||||||
 | 
					        if (!item.name) {
 | 
				
			||||||
 | 
					          item.name = item.userName;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.instance
 | 
				
			||||||
 | 
					        .post(`/app/appvillagerintegralshop/addOrUpdate`, this.dialogInfo)
 | 
				
			||||||
 | 
					        .then((res) => {
 | 
				
			||||||
 | 
					          this.dialogInfo.operators = []
 | 
				
			||||||
 | 
					          if (res.code == 0) {
 | 
				
			||||||
 | 
					            this.onReset();
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }).catch(() => {
 | 
				
			||||||
 | 
					          this.dialogInfo.operators = []
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    delate(index) {
 | 
				
			||||||
 | 
					      this.dialogInfo.operators.splice(index, 1);
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    onAdd() {
 | 
				
			||||||
 | 
					      Object.keys(this.dialogInfo).forEach((e) => {
 | 
				
			||||||
 | 
					        this.dialogInfo[e] = "";
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					      this.dialogInfo.status = "1";
 | 
				
			||||||
 | 
					      this.dialogInfo.operators = [];
 | 
				
			||||||
 | 
					      this.dialog.visible = true;
 | 
				
			||||||
 | 
					      this.dialogInfo.areaId = this.areaId;
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style lang="scss">
 | 
				
			||||||
 | 
					.storeManagement {
 | 
				
			||||||
 | 
					  height: 100%;
 | 
				
			||||||
 | 
					  overflow: auto;
 | 
				
			||||||
 | 
					  background: #f3f6f9;
 | 
				
			||||||
 | 
					  .status-0 {
 | 
				
			||||||
 | 
					    color: #ff4466;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .table-options {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .status-1 {
 | 
				
			||||||
 | 
					    color: #2ea222;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .status-2 {
 | 
				
			||||||
 | 
					    color: #999999;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .ai-dialog__content--wrapper {
 | 
				
			||||||
 | 
					    overflow-x: hidden;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .organ {
 | 
				
			||||||
 | 
					    width: auto;
 | 
				
			||||||
 | 
					    height: auto;
 | 
				
			||||||
 | 
					    padding: 0px 10px;
 | 
				
			||||||
 | 
					    line-height: 32px;
 | 
				
			||||||
 | 
					    border: 1px solid #d0d4dc;
 | 
				
			||||||
 | 
					    border-radius: 5px;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    box-sizing: border-box;
 | 
				
			||||||
 | 
					    color: #666;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .organzation {
 | 
				
			||||||
 | 
					      background-color: #eee;
 | 
				
			||||||
 | 
					      margin-right: 4px;
 | 
				
			||||||
 | 
					      padding: 4px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
@@ -26,10 +26,11 @@
 | 
				
			|||||||
            </el-form>
 | 
					            </el-form>
 | 
				
			||||||
            <div class="view-img">
 | 
					            <div class="view-img">
 | 
				
			||||||
              <h1>{{ form.certificateTitle }}</h1>
 | 
					              <h1>{{ form.certificateTitle }}</h1>
 | 
				
			||||||
              <h2>全巧丽</h2>
 | 
					              <h2>XXX</h2>
 | 
				
			||||||
              <div class="view-img__content">
 | 
					              <div class="view-img__content">
 | 
				
			||||||
                <div class="top">
 | 
					                <div class="top">
 | 
				
			||||||
                  <span v-html="certificateContent"></span>
 | 
					                  <span v-html="certificateContent"></span>
 | 
				
			||||||
 | 
					                  <p>特颁此证,以资鼓励!</p>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
              </div>
 | 
					              </div>
 | 
				
			||||||
              <div class="bottom">
 | 
					              <div class="bottom">
 | 
				
			||||||
@@ -65,9 +66,7 @@
 | 
				
			|||||||
          certificateName: '',
 | 
					          certificateName: '',
 | 
				
			||||||
          certificateIssueUnit: '曲靖市政法委',
 | 
					          certificateIssueUnit: '曲靖市政法委',
 | 
				
			||||||
          certificateTitle: '知法明理人证书',
 | 
					          certificateTitle: '知法明理人证书',
 | 
				
			||||||
          certificateContent: `恭喜您成为曲靖市第 「#获得证书序号」位知法明理人
 | 
					          certificateContent: `恭喜您成为曲靖市第 「#获得证书序号」位知法明理人`
 | 
				
			||||||
 | 
					 | 
				
			||||||
          特颁此证,以资鼓励!`
 | 
					 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        id: '',
 | 
					        id: '',
 | 
				
			||||||
        date: ''
 | 
					        date: ''
 | 
				
			||||||
@@ -211,11 +210,12 @@
 | 
				
			|||||||
        .bottom {
 | 
					        .bottom {
 | 
				
			||||||
          position: absolute;
 | 
					          position: absolute;
 | 
				
			||||||
          bottom: 80px;
 | 
					          bottom: 80px;
 | 
				
			||||||
          right: 78px;
 | 
					          left: 50%;
 | 
				
			||||||
          line-height: 40px;
 | 
					          line-height: 40px;
 | 
				
			||||||
          font-size: 24px;
 | 
					          font-size: 24px;
 | 
				
			||||||
          text-align: right;
 | 
					          text-align: center;
 | 
				
			||||||
          color: #3D5C8F;
 | 
					          color: #3D5C8F;
 | 
				
			||||||
 | 
					          transform: translateX(-50%);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        h1 {
 | 
					        h1 {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user