shish 1 год назад
Родитель
Сommit
e02484af88

+ 172 - 0
ghs/src/components/item/cost-change.vue

@@ -0,0 +1,172 @@
+<template>
+	<div>
+		<el-drawer :visible.sync="showArea" size="55vw" :before-close="closeFn" @close="closeTrigger" custom-class="drawer-class" direction="ltr">
+			<div>
+				<div style="margin-left:2px;font-weight:bold;">
+					<el-date-picker v-model="currentDateList" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" @change="getSearchDate" value-format="yyyy-MM-dd"
+							end-placeholder="结束日期" :picker-options="pickerOptions" size="mini" style="margin-right:10px;">
+					</el-date-picker>
+
+					<el-select v-model="typeValue" placeholder="请选事项" size="mini" style="width:150px" :clearable="true" @change="changeType" @clear="clearType">
+						<el-option
+						v-for="item in options"
+						:key="item.value"
+						:label="item.label"
+						:value="item.value">
+						</el-option>
+					</el-select>
+
+					【{{ costData.name?costData.name:'' }}】成本变动
+				</div>
+                <x-crud @load="onLoad">
+					<template #table-column-bigNumOrder="{scope}">
+						{{ scope.row.io == 1 ? '+' : '-' }}<span>{{ scope.row.bigNumOrder }}</span>
+					</template>
+                </x-crud>
+			</div>
+		</el-drawer>
+	</div>
+</template>
+<script>
+export default {
+	name: 'stock-detail',
+	props: {
+		costData: {
+			type: Object,
+			default: () => {}
+		}
+	},
+	data() {
+		return {
+			options: [],
+			typeValue:'',
+			currentDateList:[],
+			showArea: false,
+			pickerOptions: {
+				shortcuts: [{
+					text: '最近一周',
+					onClick(picker) {
+					const end = new Date();
+					const start = new Date();
+					start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+					picker.$emit('pick', [start, end]);
+					}
+				}, {
+					text: '最近一个月',
+					onClick(picker) {
+					const end = new Date();
+					const start = new Date();
+					start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+					picker.$emit('pick', [start, end]);
+					}
+				}, {
+					text: '最近三个月',
+					onClick(picker) {
+					const end = new Date();
+					const start = new Date();
+					start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+					picker.$emit('pick', [start, end]);
+					}
+				}]
+      		},
+			startTime:'',
+			endTime:'',
+			searchTime:'',
+		};
+	},
+	methods: {
+		clearType(){
+			this.typeValue = ''
+			this.goRefresh()
+		},
+		changeType(e){
+			this.goRefresh()
+		},
+		goRefresh(){
+			this.app.refresh({id:this.costData.id,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,recordType:this.typeValue})
+		},
+		closeTrigger(){
+			this.$emit('searchFocus')
+		},
+		getSearchDate(){
+			if (this.$util.isEmpty(this.currentDateList)) {
+				this.searchTime = ''
+				this.startTime = ''
+				this.endTime = ''
+			}else{
+				this.searchTime = 'custom'
+				this.startTime = this.currentDateList[0]
+				this.endTime = this.currentDateList[1]
+			}
+			this.app.refresh({id:this.costData.id,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,recordType:this.typeValue})
+		},
+		init() {
+			this.showArea = true
+			if(this.app){
+				this.app.refresh({id:this.costData.id})
+			}
+		},
+		closeFn() {
+			this.showArea = false;
+		},
+		onLoad({ ctx, app }) {
+			this.app = app;
+			ctx.service(this.$service.costChange)
+			.set('table', {
+				columns: [
+					{
+						label: '日期',
+						prop: 'addTime',
+						align: 'center',
+					},
+					{
+						label: '名称',
+						prop: 'relateName',
+						align: 'center',
+					},
+					{
+						label: '事项',
+						prop: 'typeName',
+						align: 'center',
+					},
+					{
+						label: '变动',
+						prop: 'bigNumOrder',
+						align: 'center',
+					},
+					{
+						label: '剩余',
+						prop: 'bigNumStock',
+						align: 'center',
+					}
+				],
+				op: {
+					visible: true,
+					props: {
+						width: 160,
+						align: 'center',
+						fixed: 'right',
+						label: '操作'
+					},
+					layout: []
+				}
+			})
+			.set('layout', [
+				[ 'data-table' ],
+				['flex1', 'pagination']
+			])
+			.on('refresh', async (params, { next }) => {
+				let res = await next(params)
+				this.options = res.typeList
+			})
+			.done()
+			app.refresh({id:this.costData.id,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,recordType:this.typeValue})
+		}
+	}
+};
+</script>
+<style lang="scss" scoped>
+.drawer-class{
+	height:100vh;
+}
+</style>

+ 0 - 0
ghs/src/views/item/components/stock-detail.vue → ghs/src/components/item/stock-detail.vue


+ 0 - 0
ghs/src/components/select-staff.vue → ghs/src/components/staff/select-staff.vue


+ 2 - 0
ghs/src/cool/request/index.js

@@ -71,12 +71,14 @@ import orderItem from '@/service/order-item/index';
 import cgRefund from '@/service/cg-refund/index';
 import cgRefund from '@/service/cg-refund/index';
 import clear from '@/service/clear/index';
 import clear from '@/service/clear/index';
 import refund from '@/service/refund/index';
 import refund from '@/service/refund/index';
+import costChange from '@/service/refund/index';
 
 
 export function SET_SERVICE({ store }) {
 export function SET_SERVICE({ store }) {
 	// const files = require.context('@/service/', true, /\.js$/);
 	// const files = require.context('@/service/', true, /\.js$/);
 	// const ignore = ['./request.js'];
 	// const ignore = ['./request.js'];
 
 
 	let modules = {
 	let modules = {
+		costChange,
 		refund,
 		refund,
 		clear,
 		clear,
 		cgRefund,
 		cgRefund,

+ 7 - 0
ghs/src/service/cost-change/index.js

@@ -0,0 +1,7 @@
+import { BaseService, Service } from '@/cool';
+
+@Service('cost-change')
+export class CostChangeService extends BaseService {
+
+}
+export default new CostChangeService();

+ 17 - 5
ghs/src/views/item/list.vue

@@ -94,6 +94,7 @@
         <el-dropdown @command="doMore($event,scope.row)" style="margin-left:10px;">
         <el-dropdown @command="doMore($event,scope.row)" style="margin-left:10px;">
           <el-button type="primary" size="small">更多<i class="el-icon-arrow-down el-icon--right"></i></el-button>
           <el-button type="primary" size="small">更多<i class="el-icon-arrow-down el-icon--right"></i></el-button>
           <el-dropdown-menu slot="dropdown">
           <el-dropdown-menu slot="dropdown">
+			<el-dropdown-item command="costChange">成本变动记录</el-dropdown-item>
             <el-dropdown-item command="downCode">下载商品码</el-dropdown-item>
             <el-dropdown-item command="downCode">下载商品码</el-dropdown-item>
           </el-dropdown-menu>
           </el-dropdown-menu>
         </el-dropdown>
         </el-dropdown>
@@ -271,7 +272,9 @@
 		  </div>
 		  </div>
 	  </el-dialog>
 	  </el-dialog>
 
 
-	  <stock-detail ref="stockDetail" :itemData="itemData" @searchFocus="searchFocus" />
+	  <stock-detail ref="stockDetailRef" :itemData="itemData" @searchFocus="searchFocus" />
+
+	  <cost-change ref="costChangeRef" :costData="costData" @searchFocus="searchFocus" />
 
 
 	  <select-staff ref="selectStaffRef" @getStaff="getStaff" :staffData="staffData" />
 	  <select-staff ref="selectStaffRef" @getStaff="getStaff" :staffData="staffData" />
 
 
@@ -279,14 +282,16 @@
 </template>
 </template>
 <script>
 <script>
 import itemListLayer from '@/components/module/item-list-layer';
 import itemListLayer from '@/components/module/item-list-layer';
-import stockDetail from './components/stock-detail';
-import selectStaff from '@/components/select-staff';
+import costChange from '@/components/item/cost-change';
+import stockDetail from '@/components/item/stock-detail';
+import selectStaff from '@/components/staff/select-staff';
 export default {
 export default {
   name: 'list',
   name: 'list',
   components: {
   components: {
     itemListLayer,
     itemListLayer,
 	stockDetail,
 	stockDetail,
-	selectStaff
+	selectStaff,
+	costChange
   },
   },
   data () {
   data () {
     return {
     return {
@@ -426,6 +431,7 @@ export default {
 		unitList: [],
 		unitList: [],
 		currentItemId: 0,
 		currentItemId: 0,
 		itemData:{},
 		itemData:{},
+		costData:{},
 		search:'',
 		search:'',
 		currentCgStaffName:'',
 		currentCgStaffName:'',
 		currentCgStaffId:0,
 		currentCgStaffId:0,
@@ -507,6 +513,12 @@ export default {
 		let p = this.$service.item.downMiniCode(id)
 		let p = this.$service.item.downMiniCode(id)
 		location.href = p
 		location.href = p
       }
       }
+	  if(cmd == 'costChange'){
+		this.costData = {id:data.id,name:data.name}
+		setTimeout(() => {
+			this.$refs.costChangeRef.init()
+		})
+	  }
     },
     },
 	searchFocus(){
 	searchFocus(){
 		let that = this
 		let that = this
@@ -540,7 +552,7 @@ export default {
 	getStockList(item){
 	getStockList(item){
 		this.itemData = {id:item.id,name:item.name}
 		this.itemData = {id:item.id,name:item.name}
 		setTimeout(() => {
 		setTimeout(() => {
-			this.$refs.stockDetail.init()
+			this.$refs.stockDetailRef.init()
 		})
 		})
 	},
 	},
 	  downloadPrice(level){
 	  downloadPrice(level){

+ 23 - 3
ghs/src/views/order/components/arrival.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
 	<div class="order-detail">
 	<div class="order-detail">
-		<el-drawer :visible.sync="showDtail" size="750px" :before-close="closeFn" custom-class="order-draw-wrap" direction="ltr">
+		<el-drawer :visible.sync="showDtail" size="850px" :before-close="closeFn" custom-class="order-draw-wrap" direction="ltr">
 			<div class="order-manage-wrap" v-if="!$util.isEmpty(detailInfo)">
 			<div class="order-manage-wrap" v-if="!$util.isEmpty(detailInfo)">
 				<div class="card-wrap">
 				<div class="card-wrap">
 					<div class="card-tit">
 					<div class="card-tit">
@@ -24,8 +24,22 @@
 								</template>
 								</template>
 							</el-table-column>
 							</el-table-column>
 							<el-table-column property="name" label="名称"></el-table-column>
 							<el-table-column property="name" label="名称"></el-table-column>
-							<el-table-column property="cost" label="成本"></el-table-column>
-							<el-table-column property="stock" label="剩余"></el-table-column>
+							<el-table-column label="成本">
+								<template slot-scope="scope">
+									<span style="cursor:pointer;" @click="getCostChange(scope.row)"></span>
+									<i class="el-icon-s-order" style="color:#409eff;font-size:17px;cursor:pointer;" slot="reference"></i>
+									{{ scope.row.cost?parseFloat(scope.row.cost):0 }}
+									</span>
+								</template>
+							</el-table-column>
+							<el-table-column label="剩余">
+								<template slot-scope="scope">
+									<span style="cursor:pointer;" @click="getStockDetail(scope.row)">
+									<i class="el-icon-s-order" style="color:#409eff;font-size:17px;" slot="reference"></i>
+									{{ scope.row.stock?parseFloat(scope.row.stock):0 }}
+									</span>
+								</template>
+							</el-table-column>
 							<el-table-column label="单价">
 							<el-table-column label="单价">
 								<template slot-scope="scope">
 								<template slot-scope="scope">
 									<el-input v-model="scope.row.currentHdPrice" @focus="scope.row.currentHdPrice=''" placeholder="数量" style="width:50px;margin-right:2px;" 
 									<el-input v-model="scope.row.currentHdPrice" @focus="scope.row.currentHdPrice=''" placeholder="数量" style="width:50px;margin-right:2px;" 
@@ -152,6 +166,12 @@ export default {
 		}
 		}
 	},
 	},
 	methods: {
 	methods: {
+		getCostChange(info){
+			this.$emit('getCostChange',info)
+		},
+		getStockDetail(info){
+			this.$emit('getStockDetail',info)
+		},
 		usePrice(info,flag){
 		usePrice(info,flag){
 			if(info.product && !this.$util.isEmpty(info.product)){
 			if(info.product && !this.$util.isEmpty(info.product)){
 				info.product.forEach((item,idx,array) => {
 				info.product.forEach((item,idx,array) => {

+ 11 - 1
ghs/src/views/order/components/order-detail.vue

@@ -22,7 +22,14 @@
 							</el-table-column>
 							</el-table-column>
 							<el-table-column property="name" label="名称"></el-table-column>
 							<el-table-column property="name" label="名称"></el-table-column>
 							<el-table-column property="xhUnitPrice" label="单价"></el-table-column>
 							<el-table-column property="xhUnitPrice" label="单价"></el-table-column>
-							<el-table-column property="num" label="数量"></el-table-column>
+							<el-table-column label="数量">
+								<template slot-scope="scope">
+									<span style="cursor:pointer;" @click="getStockDetail(scope.row)">
+									<i class="el-icon-s-order" style="color:#409eff;font-size:17px;" slot="reference"></i>
+									{{ scope.row.num?parseFloat(scope.row.num):0 }}
+									</span>
+								</template>								
+							</el-table-column>
 							<el-table-column property="refundNum" label="已退数"></el-table-column>
 							<el-table-column property="refundNum" label="已退数"></el-table-column>
 							<el-table-column label="备注">
 							<el-table-column label="备注">
 								<template slot-scope="scope">
 								<template slot-scope="scope">
@@ -54,6 +61,9 @@ export default {
 		};
 		};
 	},
 	},
 	methods: {
 	methods: {
+		getStockDetail(info){
+			this.$emit('getStockDetail',info)
+		},
 		modifyItemRemark(info){
 		modifyItemRemark(info){
 			this.$prompt('请输入备注','提示',{confirmButtonText:'确定',cancelButtonText:'取消',inputPattern:/\S/,inputErrorMessage:'请写备注',inputValue:info.remark}).then(({value}) => {
 			this.$prompt('请输入备注','提示',{confirmButtonText:'确定',cancelButtonText:'取消',inputPattern:/\S/,inputErrorMessage:'请写备注',inputValue:info.remark}).then(({value}) => {
 				this.$service.orderItem.updateItemRemark({ remark: value,id:info.id}).then(data => {
 				this.$service.orderItem.updateItemRemark({ remark: value,id:info.id}).then(data => {

+ 5 - 1
ghs/src/views/order/components/stock-detail.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
 	<div>
 	<div>
-		<el-drawer :visible.sync="showArea" size="55vw" :before-close="closeFn" @close="closeTrigger" custom-class="drawer-class" direction="ltr">
+		<el-drawer :visible.sync="showArea" size="55vw" :before-close="closeFn" @close="closeTrigger" custom-class="drawer-class" :direction="direction">
 			<div>
 			<div>
 				<div style="margin-left:2px;font-weight:bold;">
 				<div style="margin-left:2px;font-weight:bold;">
 					<el-date-picker v-model="currentDateList" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" @change="getSearchDate" value-format="yyyy-MM-dd"
 					<el-date-picker v-model="currentDateList" type="daterange" align="right" unlink-panels range-separator="至" start-placeholder="开始日期" @change="getSearchDate" value-format="yyyy-MM-dd"
@@ -38,6 +38,7 @@ export default {
 	},
 	},
 	data() {
 	data() {
 		return {
 		return {
+			direction:'ltr',
 			options: [],
 			options: [],
 			typeValue:'',
 			typeValue:'',
 			currentDateList:[],
 			currentDateList:[],
@@ -101,6 +102,9 @@ export default {
 			this.app.refresh({id:this.itemData.id,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,recordType:this.typeValue})
 			this.app.refresh({id:this.itemData.id,searchTime:this.searchTime,startTime:this.startTime,endTime:this.endTime,recordType:this.typeValue})
 		},
 		},
 		init() {
 		init() {
+			if (!this.$util.isEmpty(this.itemData.direction)) {
+				this.direction = this.itemData.direction
+			}
 			this.showArea = true
 			this.showArea = true
 			if(this.app){
 			if(this.app){
 				this.app.refresh({id:this.itemData.id})
 				this.app.refresh({id:this.itemData.id})

+ 19 - 5
ghs/src/views/order/list.vue

@@ -183,14 +183,16 @@
 
 
     <select-staff ref="selectStaffRef" @getStaff="getStaff" :staffData="staffData" />
     <select-staff ref="selectStaffRef" @getStaff="getStaff" :staffData="staffData" />
 
 
-    <arrival ref="arrivalRef" :arrivalData="arrivalData" @addNewItem="addNewItem" @refreshData="refreshData" />
+    <arrival ref="arrivalRef" :arrivalData="arrivalData" @addNewItem="addNewItem" @refreshData="refreshData" @getStockDetail="getStockDetail" @getCostChange="getCostChange" />
 
 
     <simple-item ref="simpleItemRef" :simpleData="simpleData" @renewArrival="renewArrival" />
     <simple-item ref="simpleItemRef" :simpleData="simpleData" @renewArrival="renewArrival" />
 
 
-    <order-detail ref="orderDetail" :orderOperate="optionData" />
+    <order-detail ref="orderDetail" :orderOperate="optionData" @getStockDetail="getStockDetail" />
 
 
     <sel-order ref="selOrder" :id="optionData.id" @song-success="onSongSuccess" />
     <sel-order ref="selOrder" :id="optionData.id" @song-success="onSongSuccess" />
 
 
+    <stock-detail ref="stockDetail" :itemData="itemData" />
+
     <div class="print-html-box">
     <div class="print-html-box">
       <table border="0" width="730" style="border:solid 1px #fff;border-collapse:collapse">
       <table border="0" width="730" style="border:solid 1px #fff;border-collapse:collapse">
         <tr>
         <tr>
@@ -251,7 +253,8 @@
 </template>
 </template>
 
 
 <script>
 <script>
-import selectStaff from '@/components/select-staff';
+import selectStaff from '@/components/staff/select-staff';
+import stockDetail from './components/stock-detail';
 import SelOrder from './components/sel-order';
 import SelOrder from './components/sel-order';
 import OrderDetail from './components/order-detail';
 import OrderDetail from './components/order-detail';
 import arrival from './components/arrival';
 import arrival from './components/arrival';
@@ -267,7 +270,8 @@ export default {
     simpleItem,
     simpleItem,
     beginRefund,
     beginRefund,
     refundRecord,
     refundRecord,
-    selectStaff
+    selectStaff,
+    stockDetail
   },
   },
   data() {
   data() {
     return {
     return {
@@ -344,7 +348,8 @@ export default {
       currentKdStaffName:'',
       currentKdStaffName:'',
       currentKdStaffId:0,
       currentKdStaffId:0,
       staffList:[],
       staffList:[],
-      selectedData:[]
+      selectedData:[],
+      itemData:{id:0}
     };
     };
   },
   },
   created() {
   created() {
@@ -418,6 +423,15 @@ export default {
     },
     },
     renewArrival(info){
     renewArrival(info){
       this.confirmArrival(info)
       this.confirmArrival(info)
+    },
+    getStockDetail(info){
+      this.itemData = {id:info.productId,name:info.name,direction:'rtl'}
+      setTimeout(() => {
+        this.$refs.stockDetail.init()
+      })
+    },
+    getCostChange(info){
+
     },
     },
     addNewItem(data){
     addNewItem(data){
       this.simpleData = data
       this.simpleData = data