From 89ecd1d3b14eb8f7e8073b0cd5190a35097366a8 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期四, 01 二月 2024 10:51:37 +0800
Subject: [PATCH] 开发业务接口
---
company/src/components/common/UploadAvatarImage.vue | 2
company/src/views/business/taxes.vue | 146 +++++++----
company/src/api/business/taxes.js | 6
company/src/components/business/OperaCompanyWindow.vue | 428 ++++++++++++++++----------------
company/src/components/business/OperaTaxesWindow.vue | 3
company/src/components/business/dispatchReviewCheck.vue | 5
company/src/components/business/OperaTaxesUploadWindow.vue | 148 +++++++++++
7 files changed, 466 insertions(+), 272 deletions(-)
diff --git a/company/src/api/business/taxes.js b/company/src/api/business/taxes.js
index 03a2cee..fb29f63 100644
--- a/company/src/api/business/taxes.js
+++ b/company/src/api/business/taxes.js
@@ -6,3 +6,9 @@
trim: true
})
}
+// 鏌ヨ
+export function doneApply(data) {
+ return request.post('/business/taxes/doneApply', data, {
+ trim: true
+ })
+}
diff --git a/company/src/components/business/OperaCompanyWindow.vue b/company/src/components/business/OperaCompanyWindow.vue
index 4b94d21..ea7823e 100644
--- a/company/src/components/business/OperaCompanyWindow.vue
+++ b/company/src/components/business/OperaCompanyWindow.vue
@@ -113,223 +113,223 @@
</template>
<script>
- import BaseOpera from '@/components/base/BaseOpera'
- import GlobalWindow from '@/components/common/GlobalWindow'
- import UploadAvatarImage from '@/components/common/UploadAvatarImage'
- import { all } from '@/api/business/solutions'
- import { sendSms } from '@/api/business/smsEmail'
- export default {
- name: 'OperaCompanyWindow',
- extends: BaseOpera,
- components: { GlobalWindow, UploadAvatarImage },
- data () {
- return {
- // 琛ㄥ崟鏁版嵁
- form: {
- id: null,
- name: '',
- code: '',
- legalName: '',
- taxCode: '',
- taxAccount: '',
- username: '',
- taxBank: '',
- taxAddr: '',
- invoiceEmail: '',
- invoiceAddr: '',
- phone: '',
- email: '',
- captche: '',
- businessImg: {
- fileurl: '',
- name: ''
- },
- idcardImgList: [],
- signImg: {
- fileurl: '',
- name: ''
- },
- solutionList: [
- {
- solutionBaseId: '',
- canAdd: 0,
- canReduce: 0
- }
- ],
- type: '',
- file: {
- imgurl: '',
- imgurlfull: ''
- },
- file1: {
- imgurl: '',
- imgurlfull: ''
- },
- file2: {
- imgurl: '',
- imgurlfull: ''
- },
- file3: {
- imgurl: '',
- imgurlfull: ''
- },
- },
- timer: null,
- num: 0,
- // 楠岃瘉瑙勫垯
- rules: {
- name: [
- { required: true, message: '璇疯緭鍏ュ叕鍙稿悕绉�' }
- ],
- code: [
- { required: true, message: '璇疯緭鍏ョ粺涓�淇$敤浠g爜' }
- ],
- captche: [
- { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }
- ],
- legalName: [
- { required: true, message: '璇疯緭鍏ユ硶浜哄鍚�' }
- ],
- phone: [
- { required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }
- ],
- taxAccount: [
- { required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }
- ],
- email: [
- { required: true, message: '璇疯緭鍏ヨ璇侀偖绠�' }
- ],
- businessImg: [
- { required: true, message: '璇蜂笂浼犺惀涓氭墽鐓�' }
- ],
- idcardImgList: [
- { required: true, message: '璇蜂笂浼犳硶浜鸿韩浠借瘉' }
- ],
- signImg: [
- { required: true, message: '璇蜂笂浼犵數瀛愮绔�' }
- ],
- username: [
- { required: true, message: '璇疯緭鍏ュ叕鍙歌处鍙�' }
- ]
- },
-
- programme: []
- }
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadAvatarImage from '@/components/common/UploadAvatarImage'
+import { all } from '@/api/business/solutions'
+import { sendSms } from '@/api/business/smsEmail'
+export default {
+ name: 'OperaCompanyWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow, UploadAvatarImage },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ name: '',
+ code: '',
+ legalName: '',
+ taxCode: '',
+ taxAccount: '',
+ username: '',
+ taxBank: '',
+ taxAddr: '',
+ invoiceEmail: '',
+ invoiceAddr: '',
+ phone: '',
+ email: '',
+ captche: '',
+ businessImg: {
+ fileurl: '',
+ name: ''
},
- created () {
- this.config({
- api: '/business/company',
- 'field.id': 'id'
- })
+ idcardImgList: [],
+ signImg: {
+ fileurl: '',
+ name: ''
},
- watch: {
- visible: {
- handler(news) {
- if (news) {
- clearInterval(this.timer)
- this.num = 0
- }
- }
- }
+ solutionList: [
+ {
+ solutionBaseId: '',
+ canAdd: 0,
+ canReduce: 0
+ }
+ ],
+ type: '',
+ file: {
+ imgurl: '',
+ imgurlfull: ''
},
- methods: {
- send() {
- if (!this.form.phone) {
- this.$message.warning('璇疯緭鍏ユ墜鏈哄彿')
- return
- }
- sendSms({ phone: this.form.phone })
- .then(res => {
- this.num = 60
- this.setTime()
- })
- },
- setTime() {
- this.timer = setInterval(() => {
- this.num -= 1
- if (this.num === 0) {
- clearInterval(this.timer)
- this.num = 0
- }
- }, 1000)
- },
- open (title, target) {
- this.title = title
- this.visible = true
- this.getAll()
- // 鏂板缓
- if (target == null) {
- this.$nextTick(() => {
- this.$refs.form.resetFields()
- this.form[this.configData['field.id']] = null
- })
- return
- }
- // 缂栬緫
- this.$nextTick(() => {
- for (const key in this.form) {
- this.form[key] = target[key]
- }
- })
- },
- // 鑾峰彇鍏ㄩ儴鏂规
- getAll() {
- all({})
- .then(res => {
- this.programme = res
- })
- },
- dele(index) {
- if (this.form.solutionList.length === 1) {
- this.$message.warning('鑷冲皯淇濈暀涓�椤�')
- return
- }
- this.form.solutionList.splice(index, 1)
- },
- add() {
- this.form.solutionList.push({
- solutionName: '',
- canAdd: '',
- canReduce: ''
- })
- },
- handleRemove(file, fileList) {
- console.log(file, fileList);
- },
- // 鎺ユ敹钀ヤ笟鎵х収鏁版嵁
- result(data) {
- this.form.businessImg = {
- fileurl: '',
- name: ''
- }
- this.form.businessImg.fileurl = data.imgurl
- this.form.businessImg.name = data.name
- },
- // 韬唤璇佺収鐗�1
- result1(data) {
- this.form.idcardImgList[0] = {
- fileurl: '',
- name: ''
- }
- this.form.idcardImgList[0] = { fileurl: data.imgurl, name: data.name }
- },
- // 韬唤璇佺収鐗�2
- result2(data) {
- this.form.idcardImgList[1] = {
- fileurl: '',
- name: ''
- }
- this.form.idcardImgList[1] = { fileurl: data.imgurl, name: data.name }
- },
- // 鐢靛瓙绛剧珷
- result3(data) {
- this.form.signImg = {
- fileurl: '',
- name: ''
- }
- this.form.signImg.fileurl = data.imgurl
- this.form.signImg.name = data.name
- }
+ file1: {
+ imgurl: '',
+ imgurlfull: ''
+ },
+ file2: {
+ imgurl: '',
+ imgurlfull: ''
+ },
+ file3: {
+ imgurl: '',
+ imgurlfull: ''
}
+ },
+ timer: null,
+ num: 0,
+ // 楠岃瘉瑙勫垯
+ rules: {
+ name: [
+ { required: true, message: '璇疯緭鍏ュ叕鍙稿悕绉�' }
+ ],
+ code: [
+ { required: true, message: '璇疯緭鍏ョ粺涓�淇$敤浠g爜' }
+ ],
+ captche: [
+ { required: true, message: '璇疯緭鍏ラ獙璇佺爜' }
+ ],
+ legalName: [
+ { required: true, message: '璇疯緭鍏ユ硶浜哄鍚�' }
+ ],
+ phone: [
+ { required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }
+ ],
+ taxAccount: [
+ { required: true, message: '璇疯緭鍏ユ墜鏈哄彿' }
+ ],
+ email: [
+ { required: true, message: '璇疯緭鍏ヨ璇侀偖绠�' }
+ ],
+ businessImg: [
+ { required: true, message: '璇蜂笂浼犺惀涓氭墽鐓�' }
+ ],
+ idcardImgList: [
+ { required: true, message: '璇蜂笂浼犳硶浜鸿韩浠借瘉' }
+ ],
+ signImg: [
+ { required: true, message: '璇蜂笂浼犵數瀛愮绔�' }
+ ],
+ username: [
+ { required: true, message: '璇疯緭鍏ュ叕鍙歌处鍙�' }
+ ]
+ },
+
+ programme: []
}
+ },
+ created () {
+ this.config({
+ api: '/business/company',
+ 'field.id': 'id'
+ })
+ },
+ watch: {
+ visible: {
+ handler (news) {
+ if (news) {
+ clearInterval(this.timer)
+ this.num = 0
+ }
+ }
+ }
+ },
+ methods: {
+ send () {
+ if (!this.form.phone) {
+ this.$message.warning('璇疯緭鍏ユ墜鏈哄彿')
+ return
+ }
+ sendSms({ phone: this.form.phone })
+ .then(res => {
+ this.num = 60
+ this.setTime()
+ })
+ },
+ setTime () {
+ this.timer = setInterval(() => {
+ this.num -= 1
+ if (this.num === 0) {
+ clearInterval(this.timer)
+ this.num = 0
+ }
+ }, 1000)
+ },
+ open (title, target) {
+ this.title = title
+ this.visible = true
+ this.getAll()
+ // 鏂板缓
+ if (target == null) {
+ this.$nextTick(() => {
+ this.$refs.form.resetFields()
+ this.form[this.configData['field.id']] = null
+ })
+ return
+ }
+ // 缂栬緫
+ this.$nextTick(() => {
+ for (const key in this.form) {
+ this.form[key] = target[key]
+ }
+ })
+ },
+ // 鑾峰彇鍏ㄩ儴鏂规
+ getAll () {
+ all({})
+ .then(res => {
+ this.programme = res
+ })
+ },
+ dele (index) {
+ if (this.form.solutionList.length === 1) {
+ this.$message.warning('鑷冲皯淇濈暀涓�椤�')
+ return
+ }
+ this.form.solutionList.splice(index, 1)
+ },
+ add () {
+ this.form.solutionList.push({
+ solutionName: '',
+ canAdd: '',
+ canReduce: ''
+ })
+ },
+ handleRemove (file, fileList) {
+ console.log(file, fileList)
+ },
+ // 鎺ユ敹钀ヤ笟鎵х収鏁版嵁
+ result (data) {
+ this.form.businessImg = {
+ fileurl: '',
+ name: ''
+ }
+ this.form.businessImg.fileurl = data.imgurl
+ this.form.businessImg.name = data.name
+ },
+ // 韬唤璇佺収鐗�1
+ result1 (data) {
+ this.form.idcardImgList[0] = {
+ fileurl: '',
+ name: ''
+ }
+ this.form.idcardImgList[0] = { fileurl: data.imgurl, name: data.name }
+ },
+ // 韬唤璇佺収鐗�2
+ result2 (data) {
+ this.form.idcardImgList[1] = {
+ fileurl: '',
+ name: ''
+ }
+ this.form.idcardImgList[1] = { fileurl: data.imgurl, name: data.name }
+ },
+ // 鐢靛瓙绛剧珷
+ result3 (data) {
+ this.form.signImg = {
+ fileurl: '',
+ name: ''
+ }
+ this.form.signImg.fileurl = data.imgurl
+ this.form.signImg.name = data.name
+ }
+ }
+}
</script>
diff --git a/company/src/components/business/OperaTaxesUploadWindow.vue b/company/src/components/business/OperaTaxesUploadWindow.vue
new file mode 100644
index 0000000..97a5472
--- /dev/null
+++ b/company/src/components/business/OperaTaxesUploadWindow.vue
@@ -0,0 +1,148 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="50%"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules" style="width: 50%;">
+ <el-form-item label="鍙戠エ鍙�" prop="doneCode">
+ <el-input v-model="form.doneCode" placeholder="璇疯緭鍏�" v-trim/>
+ </el-form-item>
+ <el-form-item label="鐢靛瓙鍙戠エ" prop="imgurl">
+ <UploadAvatarImage :uploadData="{ folder: 'taxes' }" :file="form.file" @uploadSuccess="result3" />
+ </el-form-item>
+ </el-form>
+ <template v-slot:footer>
+ <el-button type="primary" @click="doSubmit">纭� 瀹�</el-button>
+ <el-button @click="visible=false">鍙栨秷</el-button>
+ </template>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { doneApply } from '@/api/business/taxes'
+import UploadAvatarImage from '@/components/common/UploadAvatarImage'
+export default {
+ name: 'OperaTaxesUploadWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow, UploadAvatarImage },
+ data () {
+ return {
+ // 琛ㄥ崟鏁版嵁
+ // 鎼滅储
+ form: {
+ id: null,
+ doneCode: null,
+ imgurl: null,
+ file: { }
+ },
+ // 楠岃瘉瑙勫垯
+ rules: {
+ doneCode: [
+ { required: true, message: '璇疯緭鍏ュ彂绁ㄥ彿' }
+ ],
+ imgurl: [
+ { required: true, message: '璇蜂笂浼犲彂绁ㄧ數瀛愮増' }
+ ]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/taxes',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ open (title, target) {
+ this.title = title
+ this.visible = true
+ this.form = {
+ id: null,
+ doneCode: null,
+ imgurl: null,
+ file: { }
+ },
+ this.form.id = target.id
+ this.form.doneCode = target.doneCode
+ this.form.file = { imgurl: target.imgurl, imgurlfull: target.imgurlFull }
+ },
+ result3 (data) {
+ this.form.imgurl = null
+ this.form.imgurl = data.imgurl
+ },
+ doSubmit () {
+ this.$refs.form.validate((valid) => {
+ // debugger
+ if (!valid) {
+ return
+ }
+ doneApply(this.form)
+ .then(response => {
+ this.visible = false
+ this.$emit('success')
+ }).catch(err => {
+ console.log(err)
+ this.$tip.apiFailed(err)
+ }).finally(() => {
+ this.isWorking = false
+ })
+ })
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+ .info {
+ width: 100%;
+ .info_label {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ span {
+ font-size: 18px;
+ font-weight: 500;
+ color: #000000;
+ }
+ }
+ .info_list {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ flex-wrap: wrap;
+ .info_list_item {
+ width: 50%;
+ display: flex;
+ align-items: start;
+ margin-bottom: 20px;
+ .info_list_item_label {
+ width: 150px;
+ flex-shrink: 0;
+ }
+ .info_list_item_val {
+ flex: 1;
+ display: flex;
+ align-items: center;
+ .image {
+ width: 100px;
+ height: 100px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ img {
+ width: 100%;
+ }
+ }
+ }
+ }
+ }
+ }
+</style>
diff --git a/company/src/components/business/OperaTaxesWindow.vue b/company/src/components/business/OperaTaxesWindow.vue
index f747b2b..e3d809c 100644
--- a/company/src/components/business/OperaTaxesWindow.vue
+++ b/company/src/components/business/OperaTaxesWindow.vue
@@ -100,7 +100,8 @@
id: null
},
// 楠岃瘉瑙勫垯
- rules: {}
+ rules: {},
+ tableData:[]
}
},
created () {
diff --git a/company/src/components/business/dispatchReviewCheck.vue b/company/src/components/business/dispatchReviewCheck.vue
index b1051c9..2095567 100644
--- a/company/src/components/business/dispatchReviewCheck.vue
+++ b/company/src/components/business/dispatchReviewCheck.vue
@@ -52,7 +52,10 @@
},
methods: {
open(title,target){
- this.form.id = null
+ this.form = {
+ id: null,
+ checkInfo: ''
+ },
this.title=title
this.visible=true
this.form.id=target.id
diff --git a/company/src/components/common/UploadAvatarImage.vue b/company/src/components/common/UploadAvatarImage.vue
index 6347a83..006c06c 100644
--- a/company/src/components/common/UploadAvatarImage.vue
+++ b/company/src/components/common/UploadAvatarImage.vue
@@ -10,7 +10,7 @@
:on-success="handleAvatarSuccess"
:on-error="uploadError"
:before-upload="beforeAvatarUpload">
- <img v-if="file.imgurlfull" :src="file.imgurlfull" :style="customStyle" class="avatar">
+ <img v-if=" file.imgurlfull" :src="file.imgurlfull" :style="customStyle" class="avatar">
<div v-else :style="customStyle">
<i class="el-icon-plus avatar-uploader-icon"></i>
<div class="tips-style">{{ tipsLabel }}</div>
diff --git a/company/src/views/business/taxes.vue b/company/src/views/business/taxes.vue
index be106cb..6f1a9da 100644
--- a/company/src/views/business/taxes.vue
+++ b/company/src/views/business/taxes.vue
@@ -68,9 +68,15 @@
<span v-if="row.type === 1">绾歌川鍙戠エ</span>
</template>
</el-table-column>
+ <el-table-column prop="type" label="鍙戠エ鐢靛瓙鐗�" min-width="100px">
+ <template slot-scope="{row}">
+ <img v-if="row.imgurlfull!=null" :src="row.imgurlfull" style="width: 90px;height: 90px">
+ </template>
+ </el-table-column>
<el-table-column label="鎿嶄綔" min-width="100px">
<template slot-scope="{row}">
- <el-button type="text">涓婁紶鍙戠エ</el-button>
+ <el-button v-if="row.status==0" type="text" @click="$refs.OperaTaxesUploadWindow.open('涓婁紶鍙戠エ',row)">涓婁紶鍙戠エ</el-button>
+ <el-button v-if="row.status ==1 " type="text" @click="$refs.OperaTaxesUploadWindow.open('淇敼鍙戠エ',row)">淇敼鍙戠エ</el-button>
<el-button type="text">鐢宠璇︽儏</el-button>
</template>
</el-table-column>
@@ -93,78 +99,108 @@
<div class="form_item">
<div class="form_item_label">鍙戠エ鍙凤細</div>
<div class="form_item_val">
- <input type="text" placeholder="璇疯緭鍏�" />
+ <input v-model="form.doneCode" type="text" placeholder="璇疯緭鍏�" />
</div>
</div>
<div class="form_item">
<div class="form_item_label">涓婁紶鍙戠エ锛�</div>
<div class="form_item_val">
- <el-upload
- action="https://jsonplaceholder.typicode.com/posts/"
- list-type="picture-card"
- :on-remove="handleRemove">
- <i class="el-icon-plus"></i>
- </el-upload>
+ <UploadAvatarImage :uploadData="{ folder: 'taxes' }" :file="form.file" @uploadSuccess="result3" />
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-button @click="visible = false">鍙� 娑�</el-button>
- <el-button type="primary" @click="visible = false">鎻� 浜�</el-button>
+ <el-button type="primary" @click="doneApplyDo">鎻� 浜�</el-button>
</span>
</el-dialog>
<OperaTaxesWindow ref="OperaTaxesWindow" @success="handlePageChange"/>
+ <OperaTaxesUploadWindow ref="OperaTaxesUploadWindow" @success="handlePageChange"/>
</TableLayout>
</template>
<script>
- import BaseTable from '@/components/base/BaseTable'
- import TableLayout from '@/layouts/TableLayout'
- import Pagination from '@/components/common/Pagination'
- import OperaTaxesWindow from '@/components/business/OperaTaxesWindow'
- import {all as solutionAll} from "@/api/business/solutions";
- import {pageAll as companyAll} from "@/api/business/company";
- export default {
- name: 'Taxes',
- extends: BaseTable,
- components: { TableLayout, Pagination, OperaTaxesWindow },
- data () {
- return {
- // 鎼滅储
- companyList:[],
- searchForm: {
- status: '',
- companyId: ''
- },
- visible: false
- }
- },
- created () {
- this.config({
- module: '鍙戠エ淇℃伅琛�',
- api: '/business/taxes',
- 'field.id': 'id',
- 'field.main': 'id'
- })
- this.search()
- this.loadSelectList()
- },
- methods: {
- handleRemove(file, fileList) {
- console.log(file, fileList);
- },
- loadSelectList() {
- solutionAll({dataType:0}).then(res => {
- this.solutionList = res
- }).catch(err => {
- })
- companyAll({}).then(res => {
- this.companyList = res
- }).catch(err => {
- })
- }
- }
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaTaxesWindow from '@/components/business/OperaTaxesWindow'
+import OperaTaxesUploadWindow from '@/components/business/OperaTaxesUploadWindow'
+import { all as solutionAll } from '@/api/business/solutions'
+import { pageAll as companyAll } from '@/api/business/company'
+import { doneApply } from '@/api/business/taxes'
+import UploadAvatarImage from '@/components/common/UploadAvatarImage'
+export default {
+ name: 'Taxes',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaTaxesWindow, OperaTaxesUploadWindow, UploadAvatarImage },
+ data () {
+ return {
+ // 鎼滅储
+ form: {
+ id: null,
+ doneCode: null,
+ imgurl: null,
+ file:{ },
+ },
+ companyList: [],
+ searchForm: {
+ status: '',
+ companyId: ''
+ },
+ visible: false
}
+ },
+ created () {
+ this.config({
+ module: '鍙戠エ淇℃伅琛�',
+ api: '/business/taxes',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ this.loadSelectList()
+ },
+ methods: {
+ handleRemove (file, fileList) {
+ console.log(file, fileList)
+ },
+ uploadImg (row) {
+ this.form = {
+ id: row.id,
+ doneCode: row.doneCode,
+ imgurl:null
+ },
+ this.form.file= {imgurl: row.imgurl, imgurlfull: row.imgurlFull }
+ this.visible = true
+ },
+ result3 (data) {
+ this.form.imgurl = null
+ this.form.imgurl = data.imgurl
+ },
+ doneApplyDo () {
+ doneApply(this.form)
+ .then(response => {
+ this.visible = false
+ this.search()
+ }).catch(err => {
+ console.log(err)
+ this.$tip.apiFailed(err)
+ }).finally(() => {
+ this.isWorking = false
+ })
+ },
+ loadSelectList () {
+ solutionAll({ dataType: 0 }).then(res => {
+ this.solutionList = res
+ }).catch(err => {
+ })
+ companyAll({}).then(res => {
+ this.companyList = res
+ }).catch(err => {
+ })
+ }
+ }
+}
</script>
<style lang="scss" scoped>
--
Gitblit v1.9.3