desc: 新增创建权限流程

This commit is contained in:
zyy 2019-09-18 18:39:55 +08:00
parent 815c2e6db4
commit 1d26a9f1fb
13 changed files with 653 additions and 506 deletions

View File

@ -117,3 +117,12 @@ export function getPermissionGoods(id) {
method: 'get' method: 'get'
}); });
} }
// 创建商品
export function postsPermissionGoods(data) {
return request({
url: `/api/goods`,
method: 'post',
data: data
});
}

View File

@ -103,3 +103,23 @@ export function cancalOrder(orderId) {
method: 'put' method: 'put'
}); });
} }
// 快速创建权限
export function createPermission(data) {
return request({
url: `/api/order/quicklyGenerateOrder`,
method: 'post',
data: data
});
}
// 校验是否存在所选择权限对应的权限包
export function postFindPermission(ids) {
return request({
url: `/api/permission/findPermission`,
method: 'post',
data: {
relPermissions: ids
}
});
}

View File

@ -86,6 +86,7 @@ export default {
select: '选择', select: '选择',
chooseGoods: '选择商品', chooseGoods: '选择商品',
permissionName: '权限名称', permissionName: '权限名称',
permissionGoodName: '权限商品名称',
receivingPermission: '领取权限', receivingPermission: '领取权限',
isPackage: '是否权限包', isPackage: '是否权限包',
modifyPermissionContent: '修改权限内容', modifyPermissionContent: '修改权限内容',
@ -101,5 +102,7 @@ export default {
orderSelectionItem: '订单选择商品', orderSelectionItem: '订单选择商品',
orderDetails: '订单详情', orderDetails: '订单详情',
statusType: '状态类型', statusType: '状态类型',
createPackage: '创建权限' createPackage: '创建权限',
package: '权限包',
basePackage: '基础权限'
}; };

View File

@ -29,5 +29,12 @@ export default {
pleaseSelectTransferPermission: '选择转赠权限', pleaseSelectTransferPermission: '选择转赠权限',
permissionName: '权限名称', permissionName: '权限名称',
private: '专用', private: '专用',
public: '公用' public: '公用',
selectPermission: '选择权限',
createOrder: '创建订单',
checkCode: '查看二维码',
goodsName: '商品名称',
price: '价格',
permissionList: '查看权限列表',
lastShep: '上一步'
}; };

View File

@ -49,13 +49,16 @@ export default {
type: 'text', type: 'text',
label: this.$t('orderAuthor.name') label: this.$t('orderAuthor.name')
}, },
// productType: { isPackage: {
// type: 'select', type: 'select',
// label: this.$t('orderAuthor.productType'), label: this.$t('orderAuthor.package'),
// config: { config: {
// data: [] data: [
// } { value: true, label: this.$t('orderAuthor.package') },
// }, { value: false, label: this.$t('orderAuthor.basePackage') }
]
}
},
mapId: { mapId: {
type: 'select', type: 'select',
label: this.$t('orderAuthor.map'), label: this.$t('orderAuthor.map'),

View File

@ -1,151 +0,0 @@
<template>
<el-dialog
title="新增商品"
:visible.sync="show"
top="20px"
width="600px"
:before-do-close="close"
:close-on-click-modal="false"
>
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
<span slot="footer" class="dialog-footer">
<el-button @click="close"> </el-button>
<el-button type="primary" @click="create"> </el-button>
</span>
</el-dialog>
</template>
<script>
import { saveCommodityList } from '@/api/management/goods';
export default {
name: 'DictionaryDetailEdit',
components: {
},
data() {
return {
show: false,
TimeStyleList: [],
TimeStyleDict: {},
formModel: {
name: '',
permissionName: '',
permissionId: '',
forever: false,
tryUseTime: 0,
tryUseTimeUnit: '05',
price: 0,
remarks: ''
}
};
},
computed: {
form() {
return {
labelWidth: '135px',
items: [
{ prop: 'name', label: this.$t('orderAuthor.commodityName'), type: 'text', required: false },
{ prop: 'permissionName', label: this.$t('orderAuthor.permission'), type: 'text', required: false, disabled: true },
{ prop: 'forever', label: this.$t('orderAuthor.whetherTrial'), type: 'radio', required: false, options: this.$ConstSelect.Whether, disabled: false },
{ prop: 'tryUseTimeUnit', label: this.$t('orderAuthor.unitOfTime'), type: 'select', required: false, disabled: false, show: this.isShowForever, options: this.TimeStyleList },
{ prop: 'tryUseTime', label: this.$t('orderAuthor.trialTime'), type: 'number', required: false, disabled: false, show: this.isShowForever, message: `${this.TimeStyleDict[this.formModel.tryUseTimeUnit]}` },
{ prop: 'price', label: this.$t('orderAuthor.price'), type: 'number', required: false, min: 0.01, message: this.$t('global.yuan') },
{ prop: 'remarks', label: this.$t('orderAuthor.describtion'), type: 'textarea', required: false }
]
};
},
rules() {
return {
name: [
{ required: true, message: this.$t('rules.goodsNameInput'), trigger: 'blur' }
],
permissionName: [
{ required: true, message: this.$t('rules.pleaseSelectPermission'), trigger: 'change' }
],
forever: [
{ required: true, message: this.$t('rules.pleaseSelect'), trigger: 'change' }
],
tryUseTime: [
{ required: true, message: this.$t('rules.trialTimeInput'), trigger: 'change' }
],
tryUseTimeUnit: [
{ required: true, message: this.$t('rules.unitOfTimeRadio'), trigger: 'change' }
],
price: [
{ required: true, message: this.$t('rules.totalPriceInput'), trigger: 'change' },
{
validator(rule, value, callback) {
if (Number(value) >= 0) {
if (String(value).split('.')[1] && String(value).split('.')[1].length > 2) {
callback(new Error(this.$t('rules.totalPriceInputError1')));
} else {
callback();
}
} else {
callback(new Error(this.$t('rules.totalPriceInputError2')));
}
},
trigger: 'blur'
}
],
remarks: [
{ required: true, message: this.$t('rules.goodsDescribtionInput'), trigger: 'blur' }
]
};
}
},
mounted() {
this.initLoadPage();
},
methods: {
doShow() {
this.show = true;
},
initLoadPage() {
//
this.TimeStyleDict = {};
this.$Dictionary.timeStyleType().then(list => {
this.convertList(list, this.TimeStyleList, elem => {
return true;
});
list.forEach(elem => {
this.TimeStyleDict[elem.code] = elem.name;
});
});
},
buildModel() {
//
const model = {
name: this.formModel.name,
permissionId: this.formModel.permissionId,
tryUse: this.formModel.forever,
tryUseTime: this.formModel.tryUseTime,
tryUseTimeUnit: this.formModel.tryUseTimeUnit,
price: this.formModel.price,
remarks: this.formModel.remarks
};
return model;
},
create() {
this.$refs.dataform.validateForm(() => {
saveCommodityList(this.buildModel()).then(response => {
this.turnback();
this.$message.success(this.$t('tip.creatingSuccessful'));
}).catch((error) => {
this.$messageBox(this.$t('tip.creatingFailed')+':'+error.message);
});
});
},
close() {
this.show = false;
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
</style>

View File

@ -1,172 +0,0 @@
<template>
<div>
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" />
<el-table :data="tableData" border style="width: 100%" :height="height-640">
<el-table-column prop="name" :label="this.$t('orderAuthor.permissionName')" />
<el-table-column prop="date" :label="this.$t('orderAuthor.permissionType')" />
<el-table-column prop="address" :label="this.$t('global.operate')" />
</el-table>
<add-goods ref="addGoods" @selectGoods="selectGoods" />
</div>
</template>
<script>
import addGoods from '../../commodity/addGoods';
export default {
name: 'DictionaryDetailEdit',
components: {
addGoods
},
data() {
return {
TimeStyleList: [],
TimeStyleDict: {},
formModel: {
name: '',
permissionName: '',
permissionId: '',
forever: false,
tryUseTime: 0,
tryUseTimeUnit: '05',
price: 0,
remarks: ''
},
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
};
},
computed: {
isShowForever() {
return this.formModel.forever;
},
form() {
return {
labelWidth: '135px',
items: [
{ prop: 'name', label: this.$t('orderAuthor.commodityName'), type: 'text', required: false },
{ prop: 'permissionName', label: this.$t('orderAuthor.permission'), type: 'text', required: false, disabled: true, rightWidth: true, buttontip: this.$t('orderAuthor.selectPermission'), buttonClick: this.buttonClick },
{ prop: 'forever', label: this.$t('orderAuthor.whetherTrial'), type: 'radio', required: false, options: this.$ConstSelect.Whether, disabled: false },
{ prop: 'tryUseTimeUnit', label: this.$t('orderAuthor.unitOfTime'), type: 'select', required: false, disabled: false, show: this.isShowForever, options: this.TimeStyleList },
{ prop: 'tryUseTime', label: this.$t('orderAuthor.trialTime'), type: 'number', required: false, disabled: false, show: this.isShowForever, message: `${this.TimeStyleDict[this.formModel.tryUseTimeUnit]}` },
{ prop: 'price', label: this.$t('orderAuthor.price'), type: 'number', required: false, min: 0.01, message: this.$t('global.yuan') },
{ prop: 'remarks', label: this.$t('orderAuthor.describtion'), type: 'textarea', required: false }
]
};
},
rules() {
return {
name: [
{ required: true, message: this.$t('rules.goodsNameInput'), trigger: 'blur' }
],
permissionName: [
{ required: true, message: this.$t('rules.pleaseSelectPermission'), trigger: 'change' }
],
forever: [
{ required: true, message: this.$t('rules.pleaseSelect'), trigger: 'change' }
],
tryUseTime: [
{ required: true, message: this.$t('rules.trialTimeInput'), trigger: 'change' }
],
tryUseTimeUnit: [
{ required: true, message: this.$t('rules.unitOfTimeRadio'), trigger: 'change' }
],
price: [
{ required: true, message: this.$t('rules.totalPriceInput'), trigger: 'change' },
{
validator(rule, value, callback) {
if (Number(value) >= 0) {
if (String(value).split('.')[1] && String(value).split('.')[1].length > 2) {
callback(new Error(this.$t('rules.totalPriceInputError1')));
} else {
callback();
}
} else {
callback(new Error(this.$t('rules.totalPriceInputError2')));
}
},
trigger: 'blur'
}
],
remarks: [
{ required: true, message: this.$t('rules.goodsDescribtionInput'), trigger: 'blur' }
]
};
},
height() {
return this.$store.state.app.height;
}
},
mounted() {
this.initLoadPage();
},
methods: {
convertList(FromList, ToList, checktypeFunction) {
if (FromList) {
ToList.length = 0;
FromList.forEach(elem => {
if (checktypeFunction(elem)) {
ToList.push({ value: elem.code, label: elem.name });
}
});
}
},
async initLoadPage() {
//
this.TimeStyleDict = {};
this.$Dictionary.timeStyleType().then(list => {
this.convertList(list, this.TimeStyleList, elem => {
return true;
});
list.forEach(elem => {
this.TimeStyleDict[elem.code] = elem.name;
});
});
},
buttonClick() {
this.$refs.addGoods.doShow();
},
selectGoods(data) {
this.formModel.permissionId = data.id;
this.formModel.permissionName = data.name;
},
buildModel() {
//
const model = {
name: this.formModel.name,
permissionId: this.formModel.permissionId,
tryUse: this.formModel.forever,
tryUseTime: this.formModel.tryUseTime,
tryUseTimeUnit: this.formModel.tryUseTimeUnit,
price: this.formModel.price,
remarks: this.formModel.remarks,
id: this.formModel.id
};
return model;
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
</style>

View File

@ -3,59 +3,44 @@
<div class="pack-box" :style="{ height: height +'px' }"> <div class="pack-box" :style="{ height: height +'px' }">
<el-scrollbar wrap-class="scrollbar-wrapper" style=""> <el-scrollbar wrap-class="scrollbar-wrapper" style="">
<el-steps class="steps" :active="display" align-center> <el-steps class="steps" :active="display" align-center>
<el-step title="选择权限" icon="el-icon-edit" /> <el-step :title="$t('permission.selectPermission')" />
<el-step title="创建商品" icon="el-icon-edit" /> <el-step :title="$t('permission.createOrder')" />
<el-step title="创建订单" icon="el-icon-edit" /> <el-step :title="$t('permission.checkCode')" />
</el-steps> </el-steps>
<div v-show="display == 0"> <div v-show="display == 0">
<permission-form @permissionNext="permissionNext" /> <permission-form @permissionNext="permissionNext" @permissionNextOrder="permissionNextOrder" @changeType="changeType" />
</div> </div>
<div v-show="display == 1"> <div v-show="display == 1">
<el-card class="forms pack-rule"> <order-form ref="orderForm" :permission-type="permissionType" :goods-list="goodsList" @back="back" @orderNext="orderNext" />
<goods-form />
</el-card>
<div class="draft">
<el-button-group>
<el-button type="primary" @click="packForm">下一步</el-button>
<el-button type="primary" @click="back">上一步</el-button>
</el-button-group>
</div>
</div> </div>
<div v-show="display == 2"> <div v-show="display == 2">
<el-card class="forms pack-rule"> <q-code ref="qCode" />
<order-form />
</el-card>
<div class="draft">
<el-button-group>
<el-button type="primary" @click="createPackage">创建</el-button>
<el-button type="primary" @click="back">上一步</el-button>
</el-button-group>
</div>
</div> </div>
</el-scrollbar> </el-scrollbar>
<qr-code ref="qrCode" />
</div> </div>
</el-card> </el-card>
</template> </template>
<script> <script>
import QrCode from '@/components/QrCode';
import GoodsForm from './goods';
import OrderForm from './order'; import OrderForm from './order';
import PermissionForm from './permission'; import PermissionForm from './permission';
import QCode from './qCode';
export default { export default {
name: 'PackRule', name: 'PackRule',
components: { components: {
QrCode,
GoodsForm,
OrderForm, OrderForm,
PermissionForm PermissionForm,
QCode
}, },
data() { data() {
return { return {
display: 0, display: 0,
urlInfo: {} permissionType: '01',
urlInfo: {},
permissionVo: {},
goodsList: [],
orderList: []
}; };
}, },
computed: { computed: {
@ -64,31 +49,35 @@ export default {
} }
}, },
mounted() { mounted() {
this.loadInitData();
}, },
methods: { methods: {
loadInitData() {
},
packForm() {
this.display++;
},
back() { back() {
this.display--; this.display--;
}, },
permissionNext(code) { changeType(code) {
this.permissionType = code; //
},
//
permissionNext(list) {
this.goodsList = list; //
this.display = 1; this.display = 1;
}, },
turnback() { // 线
this.$router.go(-1); permissionNextOrder(permission, good) {
this.goodsList = [{
isPackage: true,
id: good.id,
permissionId: good.permissionId,
name: good.name,
remarks: good.remarks,
price: good.price
}];
this.$refs.orderForm.setOrderName(good, permission);
this.display = 1;
}, },
createPackage() { orderNext(data) {
this.display = 2;
}, this.$refs.qCode.qrCodeShow(data);
qrCodeShow() {
if (this.$refs) {
this.$refs.qrCode.doShow(this.urlInfo);
}
} }
} }
}; };

View File

@ -0,0 +1,100 @@
<template>
<el-dialog :title="this.$t('orderAuthor.packingDetails')" :visible.sync="dialogShow" width="800px" :before-close="close">
<div>
<QueryListPage ref="queryListPage" :pager-config="pagerConfig" :query-form="queryForm" :query-list="queryList" />
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogShow = false">{{ $t('map.cancel') }}</el-button>
</span>
</el-dialog>
</template>
<script>
import { getPermissonDetail } from '@/api/management/author';
export default {
name: 'Author',
components: {
},
data() {
return {
dialogShow: false,
id: '',
PermissionTypeList: [],
pagerConfig: {
pageSize: 'pageSize',
pageIndex: 'pageNum'
},
queryForm: {
labelWidth: '140px',
reset: true,
show: false,
queryObject: {
}
},
queryList: {
query: this.queryFunction,
selectCheckShow: false,
indexShow: true,
columns: [
{
title: this.$t('orderAuthor.permissionName'),
prop: 'name'
},
{
title: this.$t('orderAuthor.permissionType'),
prop: 'type',
type: 'tag',
columnValue: (row) => { return this.$convertField(row.type, this.PermissionTypeList, ['value', 'label']); },
tagType: (row) => { return ''; }
}
],
actions: [
]
}
};
},
mounted() {
this.loadInitData();
},
methods: {
loadInitData() {
this.$Dictionary.permissionType().then(list => {
this.$convertList(list, this.PermissionTypeList, elem => {
return true;
});
});
},
doShow(id) {
this.id = id;
this.dialogShow = true;
this.reloadTable();
},
close() {
this.id = '';
this.dialogShow = false;
},
queryFunction() {
if (this.id) {
return getPermissonDetail(this.id);
}
},
reloadTable() {
if (this.queryList && this.queryList.reload) {
this.queryList.reload();
}
},
turnback() {
this.$router.go(-1);
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.draft {
width: 400px;
text-align: center;
margin: 20px auto;
}
</style>

View File

@ -1,31 +1,62 @@
<template> <template>
<div> <div>
<el-scrollbar <div class="forms pack-rule">
wrap-class="scrollbar-wrapper" <el-table
:style="{height:height -70 + 'px'}" v-if="goodsList.length"
style="padding-top: 40px" :data="goodsList"
> border
style="width: 100%; margin-bottom: 10px;"
>
<el-table-column prop="name" :label="$t('permission.goodsName')" />
<el-table-column prop="price" :label="$t('permission.price')" width="100" />
<el-table-column prop="remarks" label="描述" />
<el-table-column v-if="goodsList[0].isPackage" :label="this.$t('global.operate')" width="180">
<template slot-scope="scope">
<el-button type="text" size="small" @click="showPermission(scope.$index, scope.row)">{{ $t('permission.permissionList') }}</el-button>
</template>
</el-table-column>
</el-table>
<data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" class="data-box" /> <data-form ref="dataform" :form="form" :form-model="formModel" :rules="rules" class="data-box" />
<add-goods ref="addGoods" @selectGoods="selectGoods" /> </div>
</el-scrollbar> <div class="draft">
<el-button-group>
<el-button type="primary" @click="back">{{ $t('permission.lastShep') }}</el-button>
<el-button type="primary" @click="Package">{{ $t('permission.package') }}</el-button>
</el-button-group>
</div>
<qr-code ref="qrCode" />
<premission-list ref="permissionList" />
</div> </div>
</template> </template>
<script> <script>
import { addOrganization, getOrganizationList } from '@/api/management/organization'; import { addOrganization, getOrganizationList } from '@/api/management/organization';
import { getGoodsList } from '@/api/management/goods';
import { getSellerList } from '@/api/management/user'; import { getSellerList } from '@/api/management/user';
import addGoods from '../../order/addGoods'; import { createPermission } from '@/api/management/order';
import QrCode from '@/components/QrCode';
import PremissionList from './list';
export default { export default {
name: 'OrderForm', name: 'OrderForm',
components: { components: {
addGoods QrCode,
PremissionList
},
props: {
permissionType: {
type: String,
required: true
},
goodsList: {
type: Array,
default: () => {
return [];
}
}
}, },
data() { data() {
return { return {
goodsList: [],
OrganizationList: [], OrganizationList: [],
OrderTypeList: [], OrderTypeList: [],
SellerList: [], SellerList: [],
@ -33,6 +64,10 @@ export default {
PayTypeList: [], PayTypeList: [],
PayStatusTypeList: [], PayStatusTypeList: [],
foreverInitData: false, foreverInitData: false,
canDistribute: true,
urlInfo: {},
goodsVo: {},
orderList: [],
formModel: { formModel: {
organizationId: '', organizationId: '',
goodsId: '', goodsId: '',
@ -48,7 +83,8 @@ export default {
payWays: '01', payWays: '01',
payStatus: '02', payStatus: '02',
startTime: '', startTime: '',
sellerId: '' sellerId: '',
canDistribute: '01'
}, },
DatePicker: { DatePicker: {
shortcuts: [{ shortcuts: [{
@ -71,7 +107,11 @@ export default {
picker.$emit('pick', date); picker.$emit('pick', date);
} }
}] }]
} },
permissionList: [
{ value: '01', label: this.$t('orderAuthor.publicAuthority') },
{ value: '02', label: this.$t('orderAuthor.privateAuthority') }
]
}; };
}, },
computed: { computed: {
@ -103,20 +143,21 @@ export default {
const form = { const form = {
labelWidth: this.$i18n.locale == 'en' ? '200px': '145px', labelWidth: this.$i18n.locale == 'en' ? '200px': '145px',
items: [ items: [
{ prop: 'organizationId', label: this.$t('orderAuthor.organizationOrEnterprise'), type: 'select', required: false, options: this.OrganizationList, allowCreate: true, onChange: this.onChange }, { prop: 'organizationId', label: this.$t('orderAuthor.organizationOrEnterprise'), type: 'select', options: this.OrganizationList, allowCreate: true, onChange: this.onChange },
{ prop: 'goodsName', label: this.$t('orderAuthor.commodityName'), type: 'text', required: false, disabled: true, rightWidth: true, buttontip: '选择商品', buttonClick: this.buttonClick }, // { prop: 'goodsName', label: this.$t('orderAuthor.commodityName'), type: 'text', disabled: true },
{ prop: 'price', label: this.$t('orderAuthor.itemPricing'), type: 'number', required: false, disabled: true, min: 0, message: '元' }, // { prop: 'price', label: this.$t('orderAuthor.itemPricing'), type: 'number', disabled: true, min: 0, message: '' },
{ prop: 'orderType', label: this.$t('orderAuthor.orderType'), type: 'select', required: false, options: this.OrderTypeList }, { prop: 'orderType', label: this.$t('orderAuthor.orderType'), type: 'select', options: this.OrderTypeList },
{ prop: 'sellerId', label: this.$t('orderAuthor.salesman'), type: 'select', required: false, show: this.isShowSeller, options: this.SellerList }, { prop: 'sellerId', label: this.$t('orderAuthor.salesman'), type: 'select', show: this.isShowSeller, options: this.SellerList },
{ prop: 'contractNo', label: this.$t('orderAuthor.contractNumber'), type: 'text', required: false, show: this.isShowContractNo }, { prop: 'contractNo', label: this.$t('orderAuthor.contractNumber'), type: 'text', show: this.isShowContractNo },
{ prop: 'amount', label: this.totalTitle, type: 'number', required: false, show: true, min: 0 }, { prop: 'amount', label: this.$t('orderAuthor.choosePermissionNumber'), type: 'number', show: true, min: 0 },
{ prop: 'forever', label: this.$t('orderAuthor.permanenceOrNot'), type: 'radio', required: false, options: this.$ConstSelect.Whether, disabled: this.foreverIsDisabled }, { prop: 'forever', label: this.$t('orderAuthor.permanenceOrNot'), type: 'radio', options: this.$ConstSelect.Whether, disabled: this.foreverIsDisabled },
{ prop: 'startTime', label: this.$t('orderAuthor.startDate'), type: 'date', required: false, show: this.isShowStartDate, viewFormat: 'yyyy-MM-dd', valueFormat: 'yyyy-MM-dd', picker: this.DatePicker }, { prop: 'startTime', label: this.$t('orderAuthor.startDate'), type: 'date', show: this.isShowStartDate, viewFormat: 'yyyy-MM-dd', valueFormat: 'yyyy-MM-dd', picker: this.DatePicker },
{ prop: 'monthAmount', label: this.$t('orderAuthor.choosePurchaseTime'), type: 'number', required: false, show: this.isShowMonths, min: 0, message: '月' }, { prop: 'monthAmount', label: this.$t('orderAuthor.choosePurchaseTime'), type: 'number', show: this.isShowMonths, min: 0, message: '月' },
{ prop: 'totalPrice', label: this.$t('orderAuthor.totalPrice'), type: 'number', required: false, show: this.isShowPrice, min: 0, message: '元' }, { prop: 'totalPrice', label: this.$t('orderAuthor.totalPrice'), type: 'number', show: this.isShowPrice, min: 0, message: '元' },
{ prop: 'bizType', label: this.$t('orderAuthor.businessType'), type: 'select', required: false, disabled: true, options: this.BizTypeList }, { prop: 'bizType', label: this.$t('orderAuthor.businessType'), type: 'select', disabled: true, options: this.BizTypeList },
{ prop: 'payWays', label: this.$t('orderAuthor.paymentMethod'), type: 'select', required: false, show: this.isShowPayType, options: this.PayTypeList }, { prop: 'payWays', label: this.$t('orderAuthor.paymentMethod'), type: 'select', show: this.isShowPayType, options: this.PayTypeList },
{ prop: 'payStatus', label: this.$t('orderAuthor.paymentStatus'), type: 'select', required: false, show: this.isShowPayStatus, options: this.PayStatusTypeList } { prop: 'payStatus', label: this.$t('orderAuthor.paymentStatus'), type: 'select', show: this.isShowPayStatus, options: this.PayStatusTypeList },
{ prop: 'canDistribute', label: this.$t('orderAuthor.optionPrivilegeTransfer'), type: 'radio', options: this.permissionList }
] ]
}; };
return form; return form;
@ -127,12 +168,6 @@ export default {
organizationId: [ organizationId: [
{ required: true, message: this.$t('rules.organizationInput'), trigger: 'blur' } { required: true, message: this.$t('rules.organizationInput'), trigger: 'blur' }
], ],
goodsName: [
{ required: true, message: this.$t('rules.productSelect'), trigger: 'change' }
],
price: [
{ required: true, message: this.$t('rules.itemPricingInput'), trigger: 'blur' }
],
orderType: [ orderType: [
{ required: true, message: this.$t('rules.orderTypeSelect'), trigger: 'change' } { required: true, message: this.$t('rules.orderTypeSelect'), trigger: 'change' }
], ],
@ -221,25 +256,10 @@ export default {
buttonClick() { buttonClick() {
this.$refs.addGoods.doShow(); this.$refs.addGoods.doShow();
}, },
selectGoods(data) {
this.formModel.goodsId = data.id;
this.formModel.goodsName = data.name;
this.formModel.price = data.price;
},
initLoadPage() { initLoadPage() {
// //
// //
this.loading = false; this.loading = false;
this.goodsList.length = 0;
getGoodsList().then(response => {
const data = response.data;
if (data && data.length) {
data.forEach(elem => {
this.goodsList.push({ value: elem.id, label: elem.name, price: elem.price });
});
}
});
// //
this.OrganizationList.length = 0; this.OrganizationList.length = 0;
getOrganizationList().then(response => { getOrganizationList().then(response => {
@ -256,12 +276,6 @@ export default {
}); });
}); });
// this.$Dictionary.permissionType().then(list => {
// this.$convertList(list, this.PermissionTypeList, elem => {
// return true;
// });
// });
this.$Dictionary.orderType().then(list => { this.$Dictionary.orderType().then(list => {
this.$convertList(list, this.OrderTypeList, elem => { this.$convertList(list, this.OrderTypeList, elem => {
return elem.code !== '01'; // return elem.code !== '01'; //
@ -319,12 +333,106 @@ export default {
this.$message.info(this.$t('error.cancelled')); this.$message.info(this.$t('error.cancelled'));
}); });
}, },
turnback() { showPermission(index, row) {
this.$router.go(-1); this.$refs.permissionList.doShow(row.permissionId);
},
//
setOrderName(data, permission) {
if (data) {
this.formModel.goodsName = data.name;
this.formModel.price = data.price;
this.formModel.goodsId = data.id;
this.goodsVo = {};
this.permissionVo = permission; //
if (!this.permissionVo.id) {
this.goodsVo = data;
}
}
},
Package() {
if (this.permissionType == '01') {
this.createPackage();
} else if (this.permissionType == '02') {
this.createPermission();
}
},
createPackage() {
this.$refs.dataform.validateForm(() => {
this.orderList = [];
this.goodsList.forEach(item => {
this.formModel.goodsId = item.id;
this.formModel.goodsName = item.name;
this.formModel.price = item.price;
this.orderList.push(this.formModel);
});
this.packForm(); //
});
},
packForm() {
if (this.orderList && this.orderList.length) {
const arr = this.goodsList.map(nor => {
return nor.permissionId;
});
const param = {
createVO: {isPackage: false, relPermissions: arr},
orderList: this.orderList,
canDistribute: this.formModel.canDistribute == '01'
};
createPermission(param).then(res => {
this.urlInfo = {
url: res.data,
title: this.$t('orderAuthor.permissionToDistributeQRCode')
};
this.$emit('orderNext', this.urlInfo);
}).catch(error => {
console.log(error);
});
} else {
this.$messageBox(this.$t('tip.selectPackagingRecord'));
}
},
//
createPermission() {
this.$refs.dataform.validateForm(() => {
const param = {
createVO: {
isPackage: true,
relPermissions: this.permissionVo.relPermissions,
permissionName: this.permissionVo.name,
id: this.permissionVo.id,
remarks: this.permissionVo.remarks
},
goodsVO: this.goodsVo,
orderList: [this.formModel],
canDistribute: this.formModel.canDistribute == '01'
};
createPermission(param).then(res => {
this.urlInfo = {
url: res.data,
title: this.$t('orderAuthor.permissionToDistributeQRCode')
};
this.$emit('orderNext', this.urlInfo);
}).catch(error => {
console.log(error);
});
});
},
back() {
this.$emit('back');
} }
} }
}; };
</script> </script>
<style rel="stylesheet/scss" lang="scss" scoped> <style rel="stylesheet/scss" lang="scss" scoped>
.pack-rule {
width: 800px;
margin: 0 auto;
margin-top: 12px;
padding: 40px;
}
.draft {
width: 400px;
text-align: center;
margin: 20px auto;
}
</style> </style>

View File

@ -1,16 +1,51 @@
<template> <template>
<div> <div>
<el-card class="forms pack-rule"> <div class="forms pack-rule">
<div class="title_nav">
<div class="map_title">{{ $t('orderAuthor.mapName') }}:</div>
<el-select v-model="addModel.mapId" :disabled="ruleList.length ? true : false" size="small">
<el-option
v-for="item in mapList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
<div class="table_box">
<el-button class="addList" size="small" @click="dialogSelect">{{ $t('orderAuthor.addPermissions') }}</el-button>
<el-table :data="ruleList" border style="width: 100%">
<el-table-column prop="name" :label="this.$t('orderAuthor.permissionName')" />
<el-table-column prop="type" :label="this.$t('orderAuthor.permissionType')">
<template slot-scope="scope">
{{ computedName(PermissionTypeList, scope.row.type) }}
</template>
</el-table-column>
<el-table-column v-if="addModel.type == '01'" prop="price" label="价格">
<template slot-scope="scope">
<div v-if="scope.row.price">{{ scope.row.price }}</div>
<div v-if="!scope.row.price">
<el-input v-model="scope.row.payPrice" placeholder="请输入价格" />
</div>
</template>
</el-table-column>
<el-table-column :label="this.$t('global.operate')" width="180">
<template slot-scope="scope">
<el-button type="text" size="small" @click="deleteForm(scope.$index, scope.row)">{{ $t('global.delete') }}</el-button>
</template>
</el-table-column>
</el-table>
</div>
<el-form ref="formData" label-width="130px" :model="addModel" size="mini" :rules="rules" class="rule_box"> <el-form ref="formData" label-width="130px" :model="addModel" size="mini" :rules="rules" class="rule_box">
<el-form-item label="权限类型" prop="type"> <el-form-item label="权限类型:">
<el-radio-group v-model="addModel.type"> <el-radio-group v-model="addModel.type">
<el-radio v-for="item in permissionType" :key="item.value" :label="item.value">{{ item.label }}</el-radio> <el-radio v-for="item in permissionType" :key="item.value" :label="item.value" @change="changeRadio">{{ item.label }}</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item v-show="addModel.type == '02'" :label="this.$t('orderAuthor.permissionName') + ':'" prop="name"> <el-form-item v-show="addModel.type == '02'" :label="$t('orderAuthor.permissionGoodName') + ':'" prop="name">
<el-input v-model="addModel.name" size="small" /> <el-input v-model="addModel.name" size="small" />
</el-form-item> </el-form-item>
<el-form-item v-show="addModel.type == '02'" :label="this.$t('orderAuthor.describtion') + ':'" prop="remarks"> <el-form-item v-show="addModel.type == '02'" :label="$t('orderAuthor.describtion') + ':'">
<el-input <el-input
v-model="addModel.remarks" v-model="addModel.remarks"
type="textarea" type="textarea"
@ -19,39 +54,30 @@
show-word-limit show-word-limit
/> />
</el-form-item> </el-form-item>
<el-form-item :label="this.$t('orderAuthor.mapName') + ':'"> <el-form-item v-show="addModel.type == '02' && !isGoods" :label="$t('orderAuthor.price') + ':'" prop="price">
<el-select v-model="addModel.mapId" :disabled="ruleList.length ? true : false"> <el-input-number v-model="addModel.price" :min="0.01" />
<span style="padding-left: 20px; font-size: 12px; color: #a9a9a9;">{{ $t('global.yuan') }}</span>
</el-form-item>
<el-form-item v-show="addModel.type == '02' && !isGoods" :label="$t('orderAuthor.whetherTrial')" prop="forever">
<el-radio-group v-model="addModel.forever">
<el-radio v-for="option in $ConstSelect.Whether" :key="option.value" :label="option.value">{{ option.label }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="addModel.type == '02' && addModel.forever && !isGoods" :label="$t('orderAuthor.unitOfTime')" prop="tryUseTimeUnit">
<el-select v-model="addModel.tryUseTimeUnit" filterable>
<el-option <el-option
v-for="item in mapList" v-for="option in TimeStyleList"
:key="item.value" :key="option.value"
:label="item.label" :label="option.label"
:value="item.value" :value="option.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="addModel.type == '02' && addModel.forever && !isGoods" :label="$t('orderAuthor.price') + ':'" prop="tryUseTime">
<el-input-number v-model="addModel.tryUseTime" :min="0.01" />
<span style="padding-left: 20px; font-size: 12px; color: #a9a9a9;">{{ TimeStyleDict[addModel.tryUseTimeUnit] }}</span>
</el-form-item>
</el-form> </el-form>
<div>
<el-button class="addList" size="small" @click="dialogSelect">{{ $t('orderAuthor.addPermissions') }}</el-button>
<el-table
:data="ruleList"
border
style="width: 100%"
:height="addModel.type == '01' ? height-400 : height-500"
>
<el-table-column prop="name" :label="this.$t('orderAuthor.permissionName')" />
<el-table-column prop="type" :label="this.$t('orderAuthor.permissionType')">
<template slot-scope="scope">
{{ computedName(PermissionTypeList, scope.row.type) }}
</template>
</el-table-column>
<el-table-column :label="this.$t('global.operate')" width="180">
<template slot-scope="scope">
<el-button type="text" size="small" @click="deleteForm(scope.$index, scope.row)">{{ $t('global.delete') }}</el-button>
<el-button v-if="scope.row.flag" type="text" size="small" @click="createGood(scope.$index, scope.row)">创建商品</el-button>
</template>
</el-table-column>
</el-table>
</div>
<choose-permission <choose-permission
ref="choosePermission" ref="choosePermission"
:rule-list="ruleList" :rule-list="ruleList"
@ -60,12 +86,11 @@
@addRuleForm="addRuleForm" @addRuleForm="addRuleForm"
@deleteForm="deleteForm" @deleteForm="deleteForm"
/> />
<create-good ref="createGood" /> </div>
</el-card>
<div class="draft"> <div class="draft">
<el-button-group> <el-button-group>
<el-button type="primary" @click="permissionNext">下一步</el-button>
<el-button type="primary" @click="turnback">{{ $t('global.back') }}</el-button> <el-button type="primary" @click="turnback">{{ $t('global.back') }}</el-button>
<el-button type="primary" @click="permissionNext">下一步</el-button>
</el-button-group> </el-button-group>
</div> </div>
</div> </div>
@ -73,37 +98,45 @@
<script> <script>
import ChoosePermission from '../../author/draft/choosePermission'; import ChoosePermission from '../../author/draft/choosePermission';
import CreateGood from './createGood';
import { EventBus } from '@/scripts/event-bus';
import { listPublishMap } from '@/api/jmap/map'; import { listPublishMap } from '@/api/jmap/map';
import { getPermissionGoods } from '@/api/management/goods'; import { getPermissionGoods, postsPermissionGoods } from '@/api/management/goods';
import { postFindPermission } from '@/api/management/order';
export default { export default {
name: 'PermissionForm', name: 'PermissionForm',
components: { components: {
ChoosePermission, ChoosePermission
CreateGood
}, },
data() { data() {
return { return {
ruleList: [], ruleList: [], //
TimeStyleList: [],
EffectiveTypeList: [], EffectiveTypeList: [],
PermissionTypeList: [], PermissionTypeList: [],
permissionType: [ permissionType: [
{value: '01', label: '基础权限'}, {value: '01', label: '基础权限'},
{value: '02', label: '权限'} {value: '02', label: '万能权限'}
], ],
isGoods: true,
mapList: [], mapList: [],
goodsList: [], goodsList: [], //
goodsListNew: [],
addModel: { addModel: {
type: '01', type: '01',
name: '', name: '',
remarks: '', remarks: '',
mapId: '' mapId: '',
price: '',
forever: false,
tryUseTimeUnit: '05',
tryUseTime: 0
}, },
rules: { rules: {
name: [ name: [
{ required: true, message: this.$t('rules.enterPermissionName'), trigger: 'blur' } { required: true, message: this.$t('rules.enterPermissionName'), trigger: 'blur' }
],
price: [
{ required: true, message: '请输入商品价格', trigger: 'blur' }
] ]
} }
}; };
@ -113,11 +146,65 @@ export default {
return this.$store.state.app.height - 65; return this.$store.state.app.height - 65;
} }
}, },
watch: {
ruleList(list) {
if (this.addModel.type == '02') {
const arr = list.map(item => {
return item.id;
});
postFindPermission(arr).then(res => {
this.isGoods = true;
if (!res.data) {
this.isGoods = false;
} else {
this.addModel.name = res.data.name;
}
});
}
}
},
mounted() { mounted() {
this.loadInitData(); this.loadInitData();
}, },
methods: { methods: {
convertList(FromList, ToList, checktypeFunction) {
if (FromList) {
ToList.length = 0;
FromList.forEach(elem => {
if (checktypeFunction(elem)) {
ToList.push({ value: elem.code, label: elem.name });
}
});
}
},
changeRadio(data) {
this.$emit('changeType', data);
if (data == '02') {
const arr = this.ruleList.map(item => {
return item.id;
});
postFindPermission(arr).then(res => {
this.isGoods = true;
if (!res.data) {
this.isGoods = false;
} else {
this.addModel.name = res.data.name;
}
});
}
},
async loadInitData() { async loadInitData() {
//
this.TimeStyleDict = {};
this.$Dictionary.timeStyleType().then(list => {
this.convertList(list, this.TimeStyleList, elem => {
return true;
});
list.forEach(elem => {
this.TimeStyleDict[elem.code] = elem.name;
});
});
this.EffectiveTypeList = []; this.EffectiveTypeList = [];
this.$Dictionary.effectiveType().then(list => { this.$Dictionary.effectiveType().then(list => {
this.EffectiveTypeList = list.map(elem => { return { value: elem.code, label: elem.name }; }); this.EffectiveTypeList = list.map(elem => { return { value: elem.code, label: elem.name }; });
@ -154,15 +241,18 @@ export default {
row['isPut'] = false; row['isPut'] = false;
this.ruleList.splice(idx, 1); this.ruleList.splice(idx, 1);
} }
EventBus.$emit('reloadTable', { index: index, list: row });
},
createGood(index, row) {
this.$refs.createGood.doShow();
}, },
addRuleForm(index, row) { addRuleForm(index, row) {
row['isPut'] = true; row['isPut'] = true;
getPermissionGoods(row.id).then(res => {
if (res.data.length) {
row.price = res.data[0].price;
if (this.addModel.type == '01') {
row.goods = res.data[0];
}
}
});
this.ruleList.push(row); this.ruleList.push(row);
EventBus.$emit('reloadTable', { index: index, list: row });
}, },
dialogSelect(row) { dialogSelect(row) {
if (this.addModel.mapId) { if (this.addModel.mapId) {
@ -171,32 +261,100 @@ export default {
this.$messageBox(this.$t('rules.mapInput')); this.$messageBox(this.$t('rules.mapInput'));
} }
}, },
buildModel(data) {
//
const model = {
name: data.name,
permissionId: data.id,
tryUse: false,
tryUseTime: 0,
tryUseTimeUnit: '05',
price: data.price,
remarks: data.remarks
};
return model;
},
async permissionNext() { async permissionNext() {
if (this.ruleList.length) { if (this.ruleList.length) {
const arr = this.ruleList.map(item => { const arr = this.ruleList.map(item => { return item.id; });
return item.id; if (this.addModel.type == '01') {
}); const list = [];
const res = await getPermissionGoods(arr.join(',')); const goodsList = [];
if (res.code == 200) { this.ruleList.forEach(nor => {
this.goodsList = res.data; if (nor.payPrice) {
if (this.goodsList.length == this.ruleList.length) { nor.price = nor.payPrice;
this.$emit('permissionNext', this.addModel.type); goodsList.push(this.buildModel(nor));
} else { }
this.goodsList.forEach(nor => { if (nor.price) {
this.ruleList.forEach(ele => { nor.payPrice = '';
if (nor.permissionId == ele.id) { list.push(nor);
ele.createGood = true; }
});
if (goodsList.length) {
try {
const response = await postsPermissionGoods({goodsVOList: goodsList});
if (response.code == 200) {
this.goodsListNew = response.data;
}
} catch (error) { this.goodsList = []; }
}
if (list.length == this.ruleList.length) {
this.goodsList = [];
this.ruleList.forEach(item => {
this.goodsListNew.forEach(ele => {
if (item.id == ele.permissionId) {
item.goods = ele;
} }
}); });
item.goods && this.goodsList.push(item.goods);
}); });
this.ruleList.forEach(item => { if (this.goodsList.length == this.ruleList.length) {
item.flag = true; this.$emit('permissionNext', this.goodsList);
if (item.createGood) { }
item.flag = false; } else {
} this.$messageBox('基础权限没有对应商品类型, 请填写商品价格会自动创建');
});
this.$messageBox('基础权限没有对应商品类型, 请创建商品');
} }
} else if (this.addModel.type == '02') {
this.$refs.formData.validate((valid) => {
if (valid) { // 使
postFindPermission(arr).then(res => {
this.addModel['relPermissions'] = arr;
if (res.data) {
this.addModel.name = res.data.name;
this.addModel.remarks = res.data.remarks;
this.$confirm('选择的权限已存在对应商品,是否创建订单', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.addModel['id'] = res.data.id;
const good = {
id: res.data.goodsId,
permissionId: res.data.id,
name: res.data.prdName,
price: res.data.prdPrice,
remarks: res.data.remarks
};
this.$emit('permissionNextOrder', this.addModel, good);
});
} else {
this.addModel['id'] = '';
//
const good = {
name: this.addModel.name,
permissionId: this.addModel.id,
tryUse: this.addModel.forever,
tryUseTime: this.addModel.tryUseTime,
tryUseTimeUnit: this.addModel.tryUseTimeUnit,
price: this.addModel.price,
remarks: this.addModel.remarks
};
this.$emit('permissionNextOrder', this.addModel, good);
}
// this.$emit('permissionNextOrder', this.addModel, good);
}).catch((error) => { console.log(error); });
}
});
} }
} else { } else {
this.$messageBox('请添加权限'); this.$messageBox('请添加权限');
@ -209,6 +367,16 @@ export default {
}; };
</script> </script>
<style rel="stylesheet/scss" lang="scss" scoped> <style rel="stylesheet/scss" lang="scss" scoped>
.map_title{
float: left;
margin-right: 8px;
width: 120px;
text-align: right;
line-height: 30px;
font-size: 14px;
color: #606266;
font-weight: 700;
}
.pack-rule { .pack-rule {
width: 800px; width: 800px;
margin: 0 auto; margin: 0 auto;

View File

@ -0,0 +1,63 @@
<template>
<div>
<div class="pack-box">
<div style="text-align:center; margin:auto; margin-top: 35px;">
<qrcode-vue v-loading="loading" :value="url" :size="500" />
</div>
</div>
<div class="draft">
<el-button-group>
<el-button @click="turnback">返回</el-button>
</el-button-group>
</div>
</div>
</template>
<script>
import QrcodeVue from 'qrcode.vue';
export default {
name: 'QCode',
components: {
QrcodeVue
},
props: {
},
data() {
return {
loading: false,
url: ''
};
},
computed: {
},
mounted() {
},
methods: {
qrCodeShow(data) { //
console.log(data);
this.url = data.url;
},
turnback() {
this.$router.go(-1);
}
}
};
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.pack-rule {
width: 800px;
margin: 0 auto;
margin-top: 12px;
padding: 40px;
}
.draft {
width: 400px;
text-align: center;
margin: 20px auto;
}
</style>

View File

@ -148,7 +148,7 @@ export default {
], ],
actions: [ actions: [
{ text: this.$t('orderAuthor.privilegePackaging'), btnCode: 'employee_insert', handler: this.handlePackage }, { text: this.$t('orderAuthor.privilegePackaging'), btnCode: 'employee_insert', handler: this.handlePackage },
// { text: this.$t('orderAuthor.createPackage'), handler: this.handleCreatePackage }, { text: this.$t('orderAuthor.createPackage'), handler: this.handleCreatePackage },
{ text: this.$t('orderAuthor.receivingPermission'), handler: this.handlerPermission, show: process.env.NODE_ENV == 'development' } { text: this.$t('orderAuthor.receivingPermission'), handler: this.handlerPermission, show: process.env.NODE_ENV == 'development' }
] ]
} }