|
|
@@ -90,33 +90,47 @@
|
|
|
|
|
|
<!-- Tab 4: 结算 -->
|
|
|
<el-tab-pane label="结算" name="settlements">
|
|
|
- <div style="margin-bottom: 15px;">
|
|
|
- <el-button type="primary" size="small" @click="showCreateSettlementDialog">生成结算单</el-button>
|
|
|
- </div>
|
|
|
- <el-table :data="settlements" stripe>
|
|
|
- <el-table-column prop="id" label="ID" width="60"></el-table-column>
|
|
|
- <el-table-column label="结算周期" width="200">
|
|
|
- <template slot-scope="scope">{{ scope.row.periodStart | parseTime('{y}-{m}-{d}') }} ~ {{ scope.row.periodEnd | parseTime('{y}-{m}-{d}') }}</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="totalSales" label="销售总额(分)" width="120">
|
|
|
- <template slot-scope="scope">{{ scope.row.totalSales }}</template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column prop="platformProfit" label="平台留利(分)" width="120"></el-table-column>
|
|
|
- <el-table-column prop="supplierPayout" label="供应商实付(分)" width="120"></el-table-column>
|
|
|
- <el-table-column prop="status" label="状态" width="100">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-tag :type="scope.row.status === 'settled' ? 'success' : 'warning'" size="small">
|
|
|
- {{ scope.row.status === 'settled' ? '已结算' : '待确认' }}
|
|
|
- </el-tag>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="操作" width="180">
|
|
|
- <template slot-scope="scope">
|
|
|
- <el-button size="mini" @click="viewSettlementDetail(scope.row)">明细</el-button>
|
|
|
- <el-button size="mini" type="success" @click="handleConfirmSettlement(scope.row)" :disabled="scope.row.status === 'settled'">确认结算</el-button>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
+ <div style="margin-bottom: 15px;">
|
|
|
+ <el-button type="primary" size="small" @click="showCreateSettlementDialog">生成结算单</el-button>
|
|
|
+ </div>
|
|
|
+ <el-table :data="settlements" stripe>
|
|
|
+ <el-table-column prop="id" label="ID" width="60"></el-table-column>
|
|
|
+ <el-table-column label="结算周期" width="200">
|
|
|
+ <template slot-scope="scope">{{ scope.row.periodStart | parseTime('{y}-{m}-{d}') }} ~ {{ scope.row.periodEnd | parseTime('{y}-{m}-{d}') }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="totalSales" label="销售总额(分)" width="120">
|
|
|
+ <template slot-scope="scope">{{ scope.row.totalSales }}</template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="platformProfit" label="平台留利(分)" width="120"></el-table-column>
|
|
|
+ <el-table-column prop="supplierPayout" label="供应商实付(分)" width="120"></el-table-column>
|
|
|
+ <el-table-column prop="status" label="状态" width="100">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-tag :type="scope.row.status === 'settled' ? 'success' : 'warning'" size="small">
|
|
|
+ {{ scope.row.status === 'settled' ? '已结算' : '待确认' }}
|
|
|
+ </el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="180">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <el-button size="mini" @click="viewSettlementDetail(scope.row)">明细</el-button>
|
|
|
+ <el-button size="mini" type="success" @click="handleConfirmSettlement(scope.row)" :disabled="scope.row.status === 'settled'">确认结算</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </el-tab-pane>
|
|
|
+
|
|
|
+ <!-- Tab 5: 下级关系 -->
|
|
|
+ <el-tab-pane label="下级关系" name="hierarchy">
|
|
|
+ <div style="margin-bottom: 15px;">
|
|
|
+ <el-button type="primary" size="small" @click="showSetHierarchyDialog">调整关系</el-button>
|
|
|
+ </div>
|
|
|
+ <el-tree
|
|
|
+ :data="hierarchyTree"
|
|
|
+ node-key="userId"
|
|
|
+ default-expand-all
|
|
|
+ :expand-on-click-node="false"
|
|
|
+ :render-content="renderHierarchyNode">
|
|
|
+ </el-tree>
|
|
|
</el-tab-pane>
|
|
|
</el-tabs>
|
|
|
</el-card>
|
|
|
@@ -144,10 +158,30 @@
|
|
|
<el-table-column prop="supplierName" label="收款供应商" width="100"></el-table-column>
|
|
|
<el-table-column prop="payout" label="实付(分)" width="100"></el-table-column>
|
|
|
</el-table>
|
|
|
- </el-dialog>
|
|
|
+ </el-dialog>
|
|
|
+
|
|
|
+ <!-- 调整层级关系对话框 -->
|
|
|
+ <el-dialog title="调整层级关系" :visible.sync="setHierarchyVisible" width="450px">
|
|
|
+ <el-form label-width="100px">
|
|
|
+ <el-form-item label="上级">
|
|
|
+ <el-select v-model="setHierarchyForm.parentId" placeholder="选择上级" style="width: 100%">
|
|
|
+ <el-option v-for="member in members" :key="member.userId" :label="`${member.nickname} (${member.realName})`" :value="member.userId"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="下级">
|
|
|
+ <el-select v-model="setHierarchyForm.childId" placeholder="选择下级" style="width: 100%">
|
|
|
+ <el-option v-for="member in members" :key="member.userId" :label="`${member.nickname} (${member.realName})`" :value="member.userId"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer">
|
|
|
+ <el-button @click="setHierarchyVisible = false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="confirmSetHierarchy">确定</el-button>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
|
|
|
- <!-- 生成结算单对话框 -->
|
|
|
- <el-dialog title="生成结算单" :visible.sync="createSettlementVisible" width="450px">
|
|
|
+ <!-- 生成结算单对话框 -->
|
|
|
+ <el-dialog title="生成结算单" :visible.sync="createSettlementVisible" width="450px">
|
|
|
<el-form label-width="120px">
|
|
|
<el-form-item label="结算周期开始">
|
|
|
<el-date-picker v-model="settlementForm.periodStart" type="date" placeholder="选择开始日期" value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker>
|
|
|
@@ -169,33 +203,40 @@
|
|
|
|
|
|
<script>
|
|
|
import { getSupplySystemDetail, getSupplySystemMembers, addSupplySystemMember,
|
|
|
- removeSupplySystemMember, changeSupplySystemMemberRole,
|
|
|
- getSupplySettlementList, getSupplySettlementDetailItems,
|
|
|
- createSupplySettlement, confirmSupplySettlement } from '@/api/admin'
|
|
|
+ removeSupplySystemMember, changeSupplySystemMemberRole,
|
|
|
+ getSupplySettlementList, getSupplySettlementDetailItems,
|
|
|
+ createSupplySettlement, confirmSupplySettlement, getSupplyHierarchyTree,
|
|
|
+ setSupplyHierarchy, removeSupplyHierarchy } from '@/api/admin'
|
|
|
|
|
|
export default {
|
|
|
name: 'SupplySystemDetail',
|
|
|
- data() {
|
|
|
- return {
|
|
|
- activeTab: 'members',
|
|
|
- system: {},
|
|
|
- products: [],
|
|
|
- members: [],
|
|
|
- orders: [],
|
|
|
- settlements: [],
|
|
|
- settlementItems: [],
|
|
|
- addMemberVisible: false,
|
|
|
- addMemberUserId: null,
|
|
|
- settlementDetailVisible: false,
|
|
|
- createSettlementVisible: false,
|
|
|
- creatingSettlement: false,
|
|
|
- settlementForm: {
|
|
|
- periodStart: '',
|
|
|
- periodEnd: '',
|
|
|
- remark: ''
|
|
|
- }
|
|
|
- }
|
|
|
- },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ activeTab: 'members',
|
|
|
+ system: {},
|
|
|
+ products: [],
|
|
|
+ members: [],
|
|
|
+ orders: [],
|
|
|
+ settlements: [],
|
|
|
+ settlementItems: [],
|
|
|
+ hierarchyTree: [],
|
|
|
+ addMemberVisible: false,
|
|
|
+ addMemberUserId: null,
|
|
|
+ settlementDetailVisible: false,
|
|
|
+ createSettlementVisible: false,
|
|
|
+ setHierarchyVisible: false,
|
|
|
+ creatingSettlement: false,
|
|
|
+ setHierarchyForm: {
|
|
|
+ parentId: null,
|
|
|
+ childId: null
|
|
|
+ },
|
|
|
+ settlementForm: {
|
|
|
+ periodStart: '',
|
|
|
+ periodEnd: '',
|
|
|
+ remark: ''
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
created() {
|
|
|
const id = this.$route.query.id || this.$route.params.id
|
|
|
if (id) {
|
|
|
@@ -213,16 +254,17 @@ export default {
|
|
|
},
|
|
|
methods: {
|
|
|
async loadDetail(id) {
|
|
|
- try {
|
|
|
- const res = await getSupplySystemDetail(id)
|
|
|
- if (res.data) {
|
|
|
- this.system = res.data
|
|
|
+ try {
|
|
|
+ const res = await getSupplySystemDetail(id)
|
|
|
+ if (res.data) {
|
|
|
+ this.system = res.data
|
|
|
+ }
|
|
|
+ this.loadMembers(id)
|
|
|
+ this.loadSettlements(id)
|
|
|
+ this.loadHierarchy()
|
|
|
+ } catch (e) {
|
|
|
+ this.$message.error('加载失败')
|
|
|
}
|
|
|
- this.loadMembers(id)
|
|
|
- this.loadSettlements(id)
|
|
|
- } catch (e) {
|
|
|
- this.$message.error('加载失败')
|
|
|
- }
|
|
|
},
|
|
|
async loadMembers(systemId) {
|
|
|
try {
|
|
|
@@ -324,20 +366,117 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
async handleConfirmSettlement(row) {
|
|
|
- try {
|
|
|
- await confirmSupplySettlement(row.id)
|
|
|
- this.$message.success('结算已确认')
|
|
|
- this.loadSettlements(this.system.id)
|
|
|
- } catch (e) {
|
|
|
- this.$message.error('确认失败')
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ try {
|
|
|
+ await confirmSupplySettlement(row.id)
|
|
|
+ this.$message.success('结算已确认')
|
|
|
+ this.loadSettlements(this.system.id)
|
|
|
+ } catch (e) {
|
|
|
+ this.$message.error('确认失败')
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ async loadHierarchy() {
|
|
|
+ try {
|
|
|
+ const res = await getSupplyHierarchyTree(this.system.id)
|
|
|
+ if (res.data) {
|
|
|
+ this.hierarchyTree = res.data
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.error(e)
|
|
|
+ this.$message.error('加载层级关系失败')
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ showSetHierarchyDialog(nodeData) {
|
|
|
+ this.setHierarchyForm = { parentId: null, childId: nodeData ? nodeData.userId : null }
|
|
|
+ this.setHierarchyVisible = true
|
|
|
+ },
|
|
|
+
|
|
|
+ async confirmSetHierarchy() {
|
|
|
+ if (!this.setHierarchyForm.parentId || !this.setHierarchyForm.childId) {
|
|
|
+ this.$message.warning('请选择上级和下级')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ await setSupplyHierarchy({
|
|
|
+ systemId: this.system.id,
|
|
|
+ parentId: this.setHierarchyForm.parentId,
|
|
|
+ childId: this.setHierarchyForm.childId
|
|
|
+ })
|
|
|
+ this.$message.success('关系调整成功')
|
|
|
+ this.setHierarchyVisible = false
|
|
|
+ this.loadHierarchy()
|
|
|
+ } catch (e) {
|
|
|
+ this.$message.error('调整失败')
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ async handleRemoveRelation(node) {
|
|
|
+ try {
|
|
|
+ await this.$confirm('确定移除该成员的层级关系吗?', '提示', {
|
|
|
+ confirmButtonText: '确定',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ })
|
|
|
+ await removeSupplyHierarchy({
|
|
|
+ systemId: this.system.id,
|
|
|
+ childId: node.userId
|
|
|
+ })
|
|
|
+ this.$message.success('关系已移除')
|
|
|
+ this.loadHierarchy()
|
|
|
+ } catch (e) {
|
|
|
+ if (e !== 'cancel') this.$message.error('移除失败')
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ renderHierarchyNode(h, { node }) {
|
|
|
+ return h('div', { class: 'custom-tree-node' }, [
|
|
|
+ h('span', `${node.data.nickname} (${node.data.realName || '-'}) - 级别: ${node.data.level}`),
|
|
|
+ h('span', {
|
|
|
+ style: {
|
|
|
+ marginLeft: '10px'
|
|
|
+ }
|
|
|
+ }, [
|
|
|
+ h('el-button', {
|
|
|
+ attrs: {
|
|
|
+ size: 'mini',
|
|
|
+ type: 'text'
|
|
|
+ },
|
|
|
+ on: {
|
|
|
+ click: (e) => {
|
|
|
+ e.stopPropagation()
|
|
|
+ this.showSetHierarchyDialog(node.data)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, '调整上级'),
|
|
|
+ h('el-button', {
|
|
|
+ attrs: {
|
|
|
+ size: 'mini',
|
|
|
+ type: 'text',
|
|
|
+ style: 'color: #f56c6c; margin-left: 5px;'
|
|
|
+ },
|
|
|
+ on: {
|
|
|
+ click: (e) => {
|
|
|
+ e.stopPropagation()
|
|
|
+ this.handleRemoveRelation(node.data)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }, '移除关系')
|
|
|
+ ])
|
|
|
+ ])
|
|
|
+ },
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|
|
|
.supply-system-detail {
|
|
|
- padding: 20px;
|
|
|
+ padding: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.custom-tree-node {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ width: 100%;
|
|
|
}
|
|
|
</style>
|