From fe618973c04544c0bd169c2c4436ff5807b756f1 Mon Sep 17 00:00:00 2001 From: haoyahui <2032914783@qq.com> Date: 星期一, 20 十一月 2023 17:52:31 +0800 Subject: [PATCH] 库存预警设置,盘点删除 --- admin-web/src/views/systemSetting/role/index.vue | 12 admin-web/src/views/stock/inventorycount/inventorytask/index.vue | 43 ++++- admin-web/src/api/stock/inventory.js | 6 admin-web/src/views/mixins/listPage.js | 1 admin-web/src/views/stock/ledger/inventoryAlert/edit.vue | 144 ++++++++++++++++- admin-web/src/views/stock/inventorycount/exceptionDetails/index.vue | 247 +++++++++++------------------- 6 files changed, 267 insertions(+), 186 deletions(-) diff --git a/admin-web/src/api/stock/inventory.js b/admin-web/src/api/stock/inventory.js index 804a57b..239c74c 100644 --- a/admin-web/src/api/stock/inventory.js +++ b/admin-web/src/api/stock/inventory.js @@ -24,11 +24,11 @@ } // 鍒犻櫎 -export function inventoryDel(data) { +export function inventoryDel(params) { return request({ url: '/pc/l/wh/form/inventory/del', - method: 'post', - data, + method: 'delete', + params, }); } diff --git a/admin-web/src/views/mixins/listPage.js b/admin-web/src/views/mixins/listPage.js index 2db0160..48fc6e0 100644 --- a/admin-web/src/views/mixins/listPage.js +++ b/admin-web/src/views/mixins/listPage.js @@ -30,7 +30,6 @@ }, }, created() { - this.fetchData(); }, filters: { formatTime(time) { diff --git a/admin-web/src/views/stock/inventorycount/exceptionDetails/index.vue b/admin-web/src/views/stock/inventorycount/exceptionDetails/index.vue index 53c6390..27f95d1 100644 --- a/admin-web/src/views/stock/inventorycount/exceptionDetails/index.vue +++ b/admin-web/src/views/stock/inventorycount/exceptionDetails/index.vue @@ -10,31 +10,28 @@ <el-row style="margin-top: 15px"> <el-col> <!--鍒楄〃--> - <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/> + <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" /> </el-col> </el-row> </el-card> </el-container> </el-container> - <my-import - :import-setting="importSetting" - :dialog-show="importSetting.dialogShow" - :dialog-title="importSetting.dialogTitle" - /> </div> </template> <script> -import MyTableV2 from "@/components/myTable/myTableV2"; -import MyButton from "@/components/myButton/myButton"; +import MyTableV2 from '@/components/myTable/myTableV2'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import * as finsystenant from '@/api/baseSetting/finsystenant' -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import * as finsystenant from '@/api/baseSetting/finsystenant'; +import { getBaseUrl } from '@/utils/base'; +import { mapGetters } from 'vuex'; +import { selectTenantWarehouse,goodsModel } from '@/api/baseSetting/finsystenant'; +import { getDicts } from '@/api/system/dict/data'; export default { - name: "index", - components: {MyButton, MyTableV2, myImport}, + name: 'index', + components: { MyButton, MyTableV2 }, data() { return { // 鎼滅储妗� @@ -61,7 +58,7 @@ dataIndex: 'name', label: '鐗╁搧鍚嶇О', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'select', @@ -77,7 +74,16 @@ label: '绫诲瀷', placeholder: '璇烽�夋嫨', defaultValue: '', - options: [], + options: [{ + label:'鍏ㄩ儴', + value:'' + },{ + label:'鐩樼泩', + value:'1' + },{ + label:'鐩樹簭', + value:'2' + }], }, { type: 'select', @@ -85,21 +91,30 @@ label: '鍑哄叆搴撶被鍨�', placeholder: '璇烽�夋嫨', defaultValue: '', - options: [], + options: [{ + label:'鍏ㄩ儴', + value:'' + },{ + label:'鐩樼泩鍏ュ簱', + value:'1' + },{ + label:'鐩樹簭鍑哄簱', + value:'2' + }], }, { type: 'text', dataIndex: 'name', label: '鍗曞彿', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'text', dataIndex: 'name', label: '鎿嶄綔浜�', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'date-picker', @@ -121,31 +136,7 @@ tenantId: null, userName: null, userPhone: null, - status: 1 - }, - // 瀵煎叆 - importSetting: { - dialogTitle: '瀵煎叆', - dialogShow: false, - fileSettings: { - data: {}, - uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃 - accept: '.xls', // 鏍煎紡 - type: 'text', // 鍥炴樉褰㈠紡 - loading: false // 瀵煎叆鏁堟灉 - }, - /* 妯℃澘涓嬭浇 */ - templateSettings: { - templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О - templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃 - }, - onSuccess: null - }, - editSetting: { - title: '', - id: '', - orgId: '', - show: false, + status: 1, }, // 琛ㄦ牸鏁版嵁 table: { @@ -154,31 +145,32 @@ url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/list', // 璇锋眰鍦板潃 // 宸ュ叿鏉� tools: { - columnsCtrl: {// 鍒楁帶鍒舵寜閽� - show: false + columnsCtrl: { + // 鍒楁帶鍒舵寜閽� + show: false, }, - generalExport: {// 閫氱敤瀵煎嚭鎸夐挳 - show: false + generalExport: { + // 閫氱敤瀵煎嚭鎸夐挳 + show: false, }, // 鑷畾涔夊伐鍏锋潯鎸夐挳 - custom: [ - ] + custom: [], }, // 鍒椾俊鎭� columns: [ - {title: '浠撳簱', field: 'name', align: 'left',}, - {title: '鐗╁搧鍚嶇О', field: 'WAREHOUSE_NAME', align: 'center'}, - {title: '瑙勬牸鍨嬪彿', field: 'lv', align: 'center', }, - {title: '绫诲瀷', field: 'lv', align: 'center', }, - {title: '搴撳瓨鏁伴噺', field: 'summary', align: 'left',}, - {title: '鐩樼偣鏁伴噺', field: 'summary', align: 'left',}, - {title: '寮傚父鏁伴噺', field: 'summary', align: 'left',}, - {title: '鍑哄叆搴撶被鍨�', field: 'summary', align: 'left',}, - {title: '鍑哄叆搴撳崟鍙�', field: 'summary', align: 'left',}, - {title: '鏈烘瀯', field: 'summary', align: 'left',}, - {title: '鎿嶄綔浜�', field: 'summary', align: 'left',}, - {title: '鎿嶄綔鏃堕棿', field: 'summary', align: 'left',}, - ], + { title: '浠撳簱', field: 'name', align: 'left' }, + { title: '鐗╁搧鍚嶇О', field: 'WAREHOUSE_NAME', align: 'center' }, + { title: '瑙勬牸鍨嬪彿', field: 'lv', align: 'center' }, + { title: '绫诲瀷', field: 'lv', align: 'center' }, + { title: '搴撳瓨鏁伴噺', field: 'summary', align: 'left' }, + { title: '鐩樼偣鏁伴噺', field: 'summary', align: 'left' }, + { title: '寮傚父鏁伴噺', field: 'summary', align: 'left' }, + { title: '鍑哄叆搴撶被鍨�', field: 'summary', align: 'left' }, + { title: '鍑哄叆搴撳崟鍙�', field: 'summary', align: 'left' }, + { title: '鏈烘瀯', field: 'summary', align: 'left' }, + { title: '鎿嶄綔浜�', field: 'summary', align: 'left' }, + { title: '鎿嶄綔鏃堕棿', field: 'summary', align: 'left' }, + ], // 鎿嶄綔淇℃伅 operation: { show: false, // 鏄剧ず鎿嶄綔鍒� @@ -192,79 +184,44 @@ small: false, pageNum: 1, pageSize: 10, - total: 0 - } - } + total: 0, + }, + }, }, - } + }; + }, + + computed: { + ...mapGetters(['userInfo']), }, created() { - // 鑾峰彇鏈烘瀯鏍� - this.initTreeData() + this.initQuery(); }, methods: { - //瀵煎叆 - importOrg() { - this.importSetting.dialogShow = true - this.importSetting.onSuccess = (response, callBack) => { - if (response.code===1){ - this.$message.success(response.msg) - this.search(1) - }else{ - this.$message.warning(response.msg) - } - callBack() - } - }, - // 宸︿晶鏍戝垵濮嬪寲 - initTreeData() { - finsystenant.getTree().then(res => { - const content = res || [] - this.treeDataList.splice(0, this.treeDataList.length) - this.treeDataList = content - if (content.length > 0) { - this.importSetting.fileSettings.data = {pid: content[0].id} - } - }) - }, - updState(row) { - let vm = this - let text = row.status == 0 ? "鍚敤" : "绂佺敤"; - vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"鍚楋紵').then(function () { - let params = Object.assign({}, row) - params.status = row.status == 1 ? 0 : 1 - finsystenant.edit(params).then(res => { - if (res) { - row.status = row.status === 1 ? 0 : 1 - vm.$modal.msgSuccess(text + "鎴愬姛"); - vm.search() + initQuery() { + selectTenantWarehouse({ agencyId: this.userInfo.tenantId }).then((res) => { + this.items.forEach((v) => { + if (v.label == '鐩樼偣浠撳簱') { + v.options = res.map((item) => { + item.label = item.warehouseName; + item.value = item.id; + return item; + }); } - }) - }) - }, - del(row) { - this.$modal - .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.name + '"鐨勬満鏋勫悧锛�') - .then(function () { - finsystenant.del({id: row.id}).then((res) => { - }); - }) - .then((res) => { - this.$message.success('鍒犻櫎鎴愬姛锛�'); - this.search() - }) - .catch(() => { }); - }, - showAdd() { - // if (!this.editSetting.orgId) { - // this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯') - // } else { - this.editSetting.id = null; - this.editSetting.info = null; - this.editSetting.title = '鏂板'; - this.editSetting.show = true; - // } + }); + goodsModel().then((res) => { + this.items.forEach((v) => { + if (v.label == '瑙勬牸鍨嬪彿') { + v.options = res.map((item) => { + item.label = item.modelName; + item.value = item.id; + return item; + }); + } + }); + }); + }, showAudit(row) { this.editSetting.id = row.id; @@ -272,38 +229,20 @@ this.editSetting.title = '缂栬緫'; this.editSetting.show = true; }, - nodeClick(param) { - param = param || {} - this.p = Object.assign({}, { - id: param.id, - name: param.name - }) - if (this.p.id != undefined && this.p.id != null) { - this.filterFrom.tenantId = this.p.id - this.editSetting.orgId = this.p.id - } else { - this.filterFrom.tenantId = null - this.editSetting.orgId = null - } - this.importSetting.fileSettings.data = {pid: param.id} - this.search(1) - }, // 鏌ヨtable鍒楄〃 search(pageNum) { if (pageNum != undefined) { - this.$refs.myTable.search(pageNum) + this.$refs.myTable.search(pageNum); } else { - this.$refs.myTable.search() + this.$refs.myTable.search(); } }, fifterForm(params) { - this.filterFrom = Object.assign(this.filterFrom, params) - this.search(1) - } - } -} + this.filterFrom = Object.assign(this.filterFrom, params); + this.search(1); + }, + }, +}; </script> -<style scoped> - -</style> +<style scoped></style> diff --git a/admin-web/src/views/stock/inventorycount/inventorytask/index.vue b/admin-web/src/views/stock/inventorycount/inventorytask/index.vue index 411bdbd..6ffd187 100644 --- a/admin-web/src/views/stock/inventorycount/inventorytask/index.vue +++ b/admin-web/src/views/stock/inventorycount/inventorytask/index.vue @@ -42,8 +42,9 @@ import myImport from '@/views/components/myImport'; import { getBaseUrl } from '@/utils/base'; import { selectTenantWarehouse } from '@/api/baseSetting/finsystenant'; -import { inventoryListApi } from '@/api/stock/inventory'; +import { inventoryListApi,inventoryDel } from '@/api/stock/inventory'; import * as DateFormatter from '@/utils/DateFormatter'; +import {mapGetters} from 'vuex' export default { name: 'index', @@ -154,9 +155,9 @@ // 鍒椾俊鎭� columns: [ { title: '鐩樼偣鍗曞彿', field: 'businessFormCode', align: 'left' }, - { title: '浠诲姟鍚嶇О', field: 'businessFormName', align: 'center' }, - { title: '鐩樼偣浠撳簱', field: 'warehouseName', align: 'center' }, - { title: '鐩樼偣浜�', field: 'operatorName', align: 'center' }, + { title: '浠诲姟鍚嶇О', field: 'businessFormName', align: 'left' }, + { title: '鐩樼偣浠撳簱', field: 'warehouseName', align: 'left' }, + { title: '鐩樼偣浜�', field: 'operatorName', align: 'left' }, { title: '鐩戠洏浜�', field: 'operatorName2', align: 'left' }, { title: '鐩樼偣鏃堕棿', @@ -192,17 +193,38 @@ // 鎿嶄綔淇℃伅 operation: { show: true, // 鏄剧ず鎿嶄綔鍒� - width: '150', // 鍒楀 + width: '220', // 鍒楀 attr: [ { title: '缂栬緫', + hidden:(row)=>{ + if(row.states!=0){ + return true + } + }, events: (row) => { this.showAudit(row); }, }, { + title: '鍒犻櫎', + hidden:(row)=>{ + if(row.states!=0){ + return true + } + }, + events: (row) => { + this.del(row); + }, + }, + { title: '鐩樼偣', type: 'success', + hidden:(row)=>{ + if(row.states!=0){ + return true + } + }, events: (row) => { this.showInventory(row); }, @@ -222,13 +244,16 @@ }, }; }, + computed:{ + ...mapGetters(['userInfo']) + }, created() { - selectTenantWarehouse().then((res) => { + selectTenantWarehouse({agencyId: this.userInfo.tenantId}).then((res) => { this.items.forEach((v) => { if (v.label == '鐩樼偣浠撳簱') { v.options = res.map((item) => { item.label = item.warehouseName; - item.vlaue = item.id; + item.value = item.id; return item; }); } @@ -251,9 +276,9 @@ }, del(row) { this.$modal - .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.name + '"鐨勬満鏋勫悧锛�') + .confirm('鏄惁纭鍒犻櫎鍗曞彿涓猴細' + row.businessFormCode + ' 鐨勬暟鎹悧锛�') .then(() => { - finsystenant.del({ id: row.id }).then((res) => { + inventoryDel({ id: row.id }).then((res) => { this.$message.success('鍒犻櫎鎴愬姛锛�'); this.search(); }); diff --git a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue index c700a5d..93fcd42 100644 --- a/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue +++ b/admin-web/src/views/stock/ledger/inventoryAlert/edit.vue @@ -1,35 +1,56 @@ <template> - <win-md :title="setting.title" @close="close" :width="'800px'"> + <win-md :title="`${setting.title}棰勮璁剧疆`" @close="close" :width="'800px'"> <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px"> <el-row :gutter="24"> <el-col :span="12"> - <el-form-item label="鐗╁搧鍒嗙被" prop="code"> - <el-input disabled v-model="formData.code" clearable maxlength="20" show-word-limit style="width: 100%" /> + <el-form-item label="鐗╁搧鍒嗙被"> + <el-cascader + v-model="formData.baseCategoryIds" + :options="categoryOptions" + :props="{ value: 'id' }" + style="width: 100%" + ></el-cascader> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="鐗╁搧鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%" /> + <el-form-item label="鐗╁搧鍚嶇О"> + <el-select + :value="formData.baseGoodsTemplateId" + placeholder="璇峰厛鎷╃墿鍝佸垎绫�" + filterable + style="width: 100%" + > + <el-option v-for="item in goodsTemplatelAll" :key="item.id" :label="item.goodsName" :value="item.id" /> + </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> <el-form-item label="瑙勬牸鍨嬪彿"> - <el-input v-model="formData.adss" clearable maxlength="20" show-word-limit style="width: 100%" /> + <el-select + v-model="formData.modelsIds" + multiple + placeholder="璇峰厛鎷╃墿鍝佸悕绉�" + @change="modelChange($event)" + @remove-tag="modelRemoveTag($event)" + style="width: 100%" + > + <el-option v-for="item in goodsModelAll" :key="item.id" :label="item.modelName" :value="item.id" /> + </el-select> </el-form-item> </el-col> </el-row> <el-table :data="formData.models" :stripe="true"> <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> </el-table-column> - <el-table-column prop="baseGoodsModelsId" label="淇濆簳搴撳瓨" align="center"> + <el-table-column prop="bdcount" label="淇濆簳搴撳瓨" align="center"> <template slot-scope="scope"> - <el-input v-model="scope.row.baseGoodsModelsId"></el-input> + <el-input v-model="scope.row.bdcount"></el-input> </template> </el-table-column> - <el-table-column prop="baseGoodsModelsId" label="灏侀《搴撳瓨" align="center"> + <el-table-column prop="count" label="灏侀《搴撳瓨" align="center"> <template slot-scope="scope"> - <el-input v-model="scope.row.baseGoodsModelsId"></el-input> + <el-input v-model="scope.row.count"></el-input> </template> </el-table-column> </el-table> @@ -45,6 +66,12 @@ import winMd from '@/components/win/win-md'; import myButton from '@/components/myButton/myButton'; import * as finsystenant from '@/api/baseSetting/finsystenant'; +import { + getCategorySelectTree, + goodsModel, + warehouseSelectNumber, + goodsTemplate, +} from '@/api/baseSetting/finsystenant'; export default { components: { winMd, myButton }, @@ -56,14 +83,15 @@ }, data() { return { - checkAll: false, - checkedList: [], + agencyOptions: [], // 璋冩嫧鏈烘瀯 + categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 + modelList: [], //鍨嬪彿鍒楄〃 formData: { baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍 baseCategoryId: '', // 鍒嗙被缂栧彿 baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿 modelsIds: [], //瑙勬牸鍨嬪彿 - models:[] + models: [], }, modelsItem: { baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿 @@ -81,8 +109,98 @@ if (this.setting.info) { this.formData = Object.assign({}, JSON.parse(this.setting.info)); } + this.init(); }, methods: { + async init() { + this.getCategoryTree(); + this.getgoodsTemplate(); + this.getgoodsModel(); + }, + + async getCategoryTree() { + // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 + const treeRes = await getCategorySelectTree(); + this.categoryOptions = this.removeEmptyChildren(treeRes); + console.log('categoryOptions', this.categoryOptions); + }, + + // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃 + getgoodsTemplate(id) { + goodsTemplate({ categoryId: id || '', agencyId: this.formData.outAgencyId }).then((res) => { + this.goodsTemplatelAll = res; + }); + }, + + // 瑙勬牸鍨嬪彿 + getgoodsModel(id) { + goodsModel({ goodsTemplatesId: id || '' }).then((res) => { + this.goodsModelAll = res; + }); + }, + + // 鐗╁搧鍒嗙被閫夋嫨 + categoryChange(e) { + this.formData.goodsOptions = []; + this.formData.baseGoodsTemplateId = ''; + this.formData.goodsTemplateName = ''; + this.formData.modelsOptions = []; + this.formData.modelsIds = []; + this.formData.models = []; + + this.formData.transferGoods.baseCategoryId = e[e.length - 1]; + // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 + this.getgoodsTemplate(e[e.length - 1]); + }, + + // 鐗╁搧鍚嶇О鍒楄〃閫夋嫨 + goodsTemplateChange(e, index) { + let temp = this.formData.transferGoods.find((v) => v.baseGoodsTemplateId == e); + if (temp) { + this.$message.warning('宸查�夎繃姝ょ墿鍝�'); + return; + } else { + this.formData.transferGoods[index].baseGoodsTemplateId = e; + } + this.formData.transferGoods[index].modelsOptions = []; + this.formData.transferGoods[index].modelsIds = []; + this.formData.transferGoods[index].models = []; + + this.formData.transferGoods[index].goodsTemplateName = this.getGoodsTemplateName(e); + // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 + this.getgoodsModel(e, index); + }, + + removeEmptyChildren(arr) { + arr.forEach((item) => { + if (!item.children || !item.children.length) { + delete item.children; + } else { + this.removeEmptyChildren(item.children); + } + }); + return arr; + }, + + // 瑙勬牸鍨嬪彿閫夋嫨 + modelChange(e) { + let arr = [...this.formData.models]; + let str = JSON.stringify(arr); + e.forEach((item) => { + if (str.indexOf(item) == -1) { + arr.push({ baseGoodsModelsId: item, bdcount: null,count:null }); + } + }); + this.formData.models = arr; + }, + + // 瑙勬牸鍨嬪彿绉婚櫎 + modelRemoveTag(e) { + let arr = this.formData.models; + let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e); + this.formData.models.splice(delIndex, 1); + }, + getEditInfo(id) {}, close() { this.$emit('close'); diff --git a/admin-web/src/views/systemSetting/role/index.vue b/admin-web/src/views/systemSetting/role/index.vue index 7795ade..8431088 100644 --- a/admin-web/src/views/systemSetting/role/index.vue +++ b/admin-web/src/views/systemSetting/role/index.vue @@ -286,12 +286,12 @@ }, // 鍒椾俊鎭� columns: [ - {title: '瑙掕壊缂栧彿', field: 'role_id', align: 'center', width: '200px'}, - {title: '瑙掕壊鍚嶇О', field: 'role_name', align: 'center', width: '260px'}, - {title: '鏉冮檺瀛楃', field: 'role_key', align: 'center', width: '260px'}, - {title: '椤哄簭鍙�', field: 'role_sort', align: 'center', width: '100px'}, + {title: '瑙掕壊缂栧彿', field: 'role_id', align: 'center',}, + {title: '瑙掕壊鍚嶇О', field: 'role_name', align: 'center',}, + {title: '鏉冮檺瀛楃', field: 'role_key', align: 'center',}, + {title: '椤哄簭鍙�', field: 'role_sort', align: 'center',}, { - title: '鐘舵��', field: 'status', align: 'center', width: '100px', + title: '鐘舵��', field: 'status', align: 'center', switch: row => { const result = {} if (row.status == 0) { @@ -318,7 +318,7 @@ ], // 鎿嶄綔淇℃伅 operation: { - // width: 150, + width: 150, align: 'center', show: true, // 鏄剧ず鎿嶄綔鍒� attr: [ -- Gitblit v1.9.1