Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
J
jump_hm_warehouse
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Members
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
毛勇泽
jump_hm_warehouse
Commits
5189f26d
Commit
5189f26d
authored
Jan 25, 2024
by
陈桂东
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
提交代码
parent
9c73eeea
显示空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
178 行增加
和
86 行删除
+178
-86
WzcrkMxRefWzDto.ts
common/src/main/ets/bean/dto/WzcrkMxRefWzDto.ts
+20
-0
BaseTable.ets
common/src/main/ets/db/BaseTable.ets
+26
-29
WzcrkDao.ets
common/src/main/ets/db/dao/WzcrkDao.ets
+46
-2
WzcrkmxDao.ets
common/src/main/ets/db/dao/WzcrkmxDao.ets
+3
-7
NativeSql.ets
common/src/main/ets/db/sql/NativeSql.ets
+19
-2
WzcrkModel.ets
entry/src/main/ets/model/WzcrkModel.ets
+7
-0
WzcrkmxModel.ets
entry/src/main/ets/model/WzcrkmxModel.ets
+19
-13
WzInfo.ets
entry/src/main/ets/pages/metailmange/Common/WzInfo.ets
+13
-17
WzinDetail.ets
entry/src/main/ets/pages/metailmange/WzInPage/WzinDetail/WzinDetail.ets
+22
-14
Pack.ets
entry/src/main/ets/pages/package/Pack.ets
+1
-1
BasicInfoModal.ets
entry/src/main/ets/pages/sub_systemMaintenance/DataSynchronism/modal/BasicInfoModal.ets
+2
-1
没有找到文件。
common/src/main/ets/bean/dto/WzcrkMxRefWzDto.ts
View file @
5189f26d
...
...
@@ -14,3 +14,22 @@ export interface WzcrkMxRefWzDto {
hwh
:
string
,
crksl
:
number
}
/**
* 物资出入库详情
*/
export
interface
WzcrkDetailDto
{
guid
:
string
,
pzlx
:
string
,
pzh
:
number
,
rkkfdm
:
string
,
kfdm
:
string
,
pzszlx
:
string
,
sfdw
:
string
,
ydh
:
string
,
dec
:
string
,
fwgldwdm
:
string
,
swgldwdm
:
string
,
zmlx
:
string
,
}
\ No newline at end of file
common/src/main/ets/db/BaseTable.ets
View file @
5189f26d
...
...
@@ -13,8 +13,8 @@ export type ValuesBucket = {
*/
export default abstract class BaseTable<T> implements ITable {
protected readonly tableName;
private readonly dbName;
protected readonly futureDb: Promise<rdb.RdbStore>
private readonly dbName;
constructor(dbName: string, tableName: string) {
this.dbName = dbName;
...
...
@@ -23,28 +23,6 @@ export default abstract class BaseTable<T> implements ITable {
}
/**
* 初始化数据库
*/
private async initDb(): Promise<rdb.RdbStore> {
Logger.info(this, '初始化数据库,[dbName=' + this.dbName + ',tableName=' + this.tableName + ']');
let db = await rdb.getRdbStore(getContext(this), {
name: this.dbName,
securityLevel: rdb.SecurityLevel.S4
})
Logger.info(this, "开始执行====")
await this.init(db);
Logger.info(this, "结束执行====")
return db;
}
/**
* 初始化数据表
*/
protected async init(db: rdb.RdbStore): Promise<void> {
return db.executeSql(this.getCreateTableSql())
}
/**
* 获取表名
*/
getTableName(): string {
...
...
@@ -79,7 +57,6 @@ export default abstract class BaseTable<T> implements ITable {
})
}
/**
* 更新数据的bucket
*/
...
...
@@ -90,7 +67,6 @@ export default abstract class BaseTable<T> implements ITable {
return bucket;
}
/**
* 清空表
*/
...
...
@@ -149,7 +125,6 @@ export default abstract class BaseTable<T> implements ITable {
return Promise.resolve(1);
}
/**
* 删除数据
*/
...
...
@@ -188,7 +163,7 @@ export default abstract class BaseTable<T> implements ITable {
* @param predicates 默认不填,根据主键更新,否则依据[predicates]更新
*/
async update(item: T, predicates?: rdb.RdbPredicates): Promise<number> {
try{
try
{
let bucket = {};
Logger.info(this, '更新数据,item=' + JSON.stringify(item));
this.toUpdateBucket(bucket, item);
...
...
@@ -199,7 +174,7 @@ export default abstract class BaseTable<T> implements ITable {
predicates = this.getPredicates().equalTo(this.getColumnId(), this.getEntityId(item));
}
return db.update(bucket, predicates);
}
catch (e)
{
}
catch (e)
{
throw new Error('[数据更新失败]|异常信息>>' + e)
}
...
...
@@ -240,7 +215,6 @@ export default abstract class BaseTable<T> implements ITable {
return items;
}
/**
* 创建表的SQL语句
*/
...
...
@@ -265,4 +239,26 @@ export default abstract class BaseTable<T> implements ITable {
* 结果集转对象
*/
abstract toBean(cursor: rdb.ResultSet): T;
/**
* 初始化数据表
*/
protected async init(db: rdb.RdbStore): Promise<void> {
return db.executeSql(this.getCreateTableSql())
}
/**
* 初始化数据库
*/
private async initDb(): Promise<rdb.RdbStore> {
Logger.info(this, '初始化数据库,[dbName=' + this.dbName + ',tableName=' + this.tableName + ']');
let db = await rdb.getRdbStore(getContext(this), {
name: this.dbName,
securityLevel: rdb.SecurityLevel.S1
})
Logger.info(this, "开始执行====")
await this.init(db);
Logger.info(this, "结束执行====")
return db;
}
}
\ No newline at end of file
common/src/main/ets/db/dao/WzcrkDao.ets
View file @
5189f26d
import relationalStore from '@ohos.data.relationalStore';
import { WzcrkDetailDto } from '../../bean/dto/WzcrkMxRefWzDto';
import { Wzcrk } from '../../entity/Wzcrk';
import { Wzcrkmx } from '../../entity/Wzcrkmx';
import { Logger } from '../../utils/Logger';
...
...
@@ -92,6 +93,49 @@ export class WzcrkDao extends BaseTable<Wzcrk> {
return this.update(item, predicates)
}
// 物资出入库详情表单
async queryByCrkDetailGuid(wzcrkguid: string): Promise<WzcrkDetailDto[]> {
Logger.info(this, 'wzcrkguidwzcrkguid' + JSON.stringify(wzcrkguid))
try {
let val_sql = NativeSql.getSqlByCrkDetail(wzcrkguid);
let db = await this.futureDb;
let rs = await db.querySql(val_sql);
let items = []
if (rs.goToFirstRow()) {
do {
items.push(this.toWzcrkRefWz(rs))
} while (rs.goToNextRow())
}
Logger.info(this, 'queryAll items=' + JSON.stringify(items))
return items;
} catch (e) {
throw new Error('[查询异常]|' + e)
}
}
/**
* 物资出入库详情表单
*/
toWzcrkRefWz(cursor: relationalStore.ResultSet): WzcrkDetailDto {
let info: WzcrkDetailDto = {
guid: cursor.getString(cursor.getColumnIndex('guid')),
pzlx: cursor.getString(cursor.getColumnIndex('pzlx')),
pzh: cursor.getLong(cursor.getColumnIndex('pzh')),
rkkfdm: cursor.getString(cursor.getColumnIndex('rkkfdm')),
kfdm: cursor.getString(cursor.getColumnIndex('kfdm')),
pzszlx: cursor.getString(cursor.getColumnIndex('pzszlx')),
ydh: cursor.getString(cursor.getColumnIndex('ydh')),
dec: cursor.getString(cursor.getColumnIndex('dec')),
fwgldwdm: cursor.getString(cursor.getColumnIndex('fwgldwdm')),
swgldwdm: cursor.getString(cursor.getColumnIndex('swgldwdm')),
zmlx: cursor.getString(cursor.getColumnIndex('zmlx')),
sfdw: cursor.getString(cursor.getColumnIndex('sfdw'))
};
return info;
}
/**
* 更新单据状态
*/
...
...
@@ -122,10 +166,10 @@ export class WzcrkDao extends BaseTable<Wzcrk> {
}
async updateWcztBySql(sql) {
Logger.info("执行的sql>>"
,
sql)
Logger.info("执行的sql>>"
,
sql)
let db = await this.futureDb;
return await db.executeSql(sql);
}
}
async getWzcrk(data: Partial<Wzcrk>): Promise<Wzcrk[]> {
let wp = this.getPredicates();
...
...
common/src/main/ets/db/dao/WzcrkmxDao.ets
View file @
5189f26d
...
...
@@ -4,7 +4,7 @@ import BaseTable, { ValueType } from '../BaseTable';
import { Table } from '../decorator/Decorators';
import { Logger } from '../../utils/Logger';
import { NativeSql } from '../sql/NativeSql';
import { WzcrkMxRefWzDto } from '../../bean/dto/WzcrkMxRefWzDto';
import { Wzcrk
DetailDto, Wzcrk
MxRefWzDto } from '../../bean/dto/WzcrkMxRefWzDto';
import { RecommendHwDto } from '../../bean/dto/RecommendHwDto.ts';
...
...
@@ -156,7 +156,7 @@ export class WzcrkmxDao extends BaseTable<Wzcrkmx> {
const valueBucket = {};
for (const [key, value] of Object.entries(data)) {
if
(value) {
if
(value) {
valueBucket[key] = value
}
}
...
...
@@ -175,11 +175,8 @@ export class WzcrkmxDao extends BaseTable<Wzcrkmx> {
async queryByCrkGuid(wzcrkguid: string, wzpm?: string): Promise<WzcrkMxRefWzDto[]> {
try {
let val_sql = NativeSql.getSqlByCrkmx(wzcrkguid, wzpm);
Logger.info(this, '查询SQL语句=' + val_sql)
let db = await this.futureDb;
Logger.info(this, '查询SQL语句开始1')
let rs = await db.querySql(val_sql);
Logger.info(this, '查询SQL语句开始2')
let items = []
if (rs.goToFirstRow()) {
do {
...
...
@@ -193,6 +190,7 @@ export class WzcrkmxDao extends BaseTable<Wzcrkmx> {
}
}
/**
* 物资出入库明细转换
*/
...
...
@@ -244,5 +242,4 @@ export class WzcrkmxDao extends BaseTable<Wzcrkmx> {
};
return info;
}
}
\ No newline at end of file
common/src/main/ets/db/sql/NativeSql.ets
View file @
5189f26d
...
...
@@ -15,6 +15,23 @@ export class NativeSql {
return sql_val;
}
/**
* 获取物资出入库详情
* @param wzcrkguid 出入库主键
*
*/
static getSqlByCrkDetail(wzcrkguid: string): string {
let sql_val = `
select crk.pzlx pzlx,crk.guid, crk.pzh pzh, rk.kfdm rkkfdm, ck.kfdm kfdm, crk.pzszlx pzszlx, crk.sfdw sfdw, crk.ydh ydh,crk.dec dec, crk.fwgldwdm fwgldwdm, crk.swgldwdm swgldwdm, crk.zmlx zmlx
from tab_bzgl_knzy_app_wzcrk crk
left join
TAB_BZGL_KNZY_APP_DWKF ck
on ck.KFDM = crk.kfdm
left join TAB_BZGL_KNZY_APP_DWKF rk
on rk.KFDM = crk.rkkfdm
where crk.guid = '${wzcrkguid}'`;
return sql_val;
}
/**
...
...
@@ -30,8 +47,8 @@ export class NativeSql {
LEFT JOIN TAB_BZGL_KNZY_APP_HJB hj ON tjhw.hjguid = hj.guid
LEFT JOIN TAB_BZGL_KNZY_APP_QYB qy ON hj.qyguid = qy.guid
WHERE
tjhw.pmguid =${
pmguid
}
AND qy.kfguid IN ( SELECT guid FROM TAB_BZGL_KNZY_APP_DWKF WHERE kfdm = ${
kfdm
} )`
tjhw.pmguid =${
pmguid
}
AND qy.kfguid IN ( SELECT guid FROM TAB_BZGL_KNZY_APP_DWKF WHERE kfdm = ${
kfdm
} )`
return sql_val
}
...
...
entry/src/main/ets/model/WzcrkModel.ets
View file @
5189f26d
...
...
@@ -2,6 +2,7 @@ import { WzcrkDao, Wzcrk, SQLiteContext } from '@ohos/common'
import { uuid } from '@ohos/common/src/main/ets/utils/util';
import wzcrkmxModel from './WzcrkmxModel';
import { Logger } from '@ohos/common/src/main/ets/utils/Logger';
import { WzcrkDetailDto } from '@ohos/common/src/main/ets/bean/dto/WzcrkMxRefWzDto';
// 物资出库入库
class WzcrkModel {
...
...
@@ -65,6 +66,12 @@ class WzcrkModel {
return res;
}
/*获取物资出入库详情表单*/
async queryByCrkDetailGuid(guid: string): Promise<WzcrkDetailDto[]> {
let res = await SQLiteContext.with(WzcrkDao).queryByCrkDetailGuid(guid);
return res;
}
async updateWzcrkWczt(guid: string, wczt: string): Promise<number> {
let res = await SQLiteContext.with(WzcrkDao).updateWczt(guid, wczt)
return res;
...
...
entry/src/main/ets/model/WzcrkmxModel.ets
View file @
5189f26d
import {
WzcrkmxDao, WzcrkDao, Wzcrk, Wzcrkmx, SQLiteContext, Logger
} from '@ohos/common'
import {
Logger, SQLiteContext, Wzcrk, WzcrkDao, Wzcrkmx, WzcrkmxDao
} from '@ohos/common'
import { WzcrkMxRefWzDto } from '@ohos/common/src/main/ets/bean/dto/WzcrkMxRefWzDto'
// 物资出库入库
...
...
@@ -9,34 +9,38 @@ class WzcrkmxModel {
}
// 单条添加
async setInsert(data: Wzcrkmx) {
let res= await SQLiteContext.with(WzcrkmxDao).insert(data)
console.log("插入成功===》"
+
JSON.stringify(res))
let res
= await SQLiteContext.with(WzcrkmxDao).insert(data)
console.log("插入成功===》"
+
JSON.stringify(res))
}
// 查询
async query(wzcrkguid?: string,pmdmcode?: string): Promise<WzcrkMxRefWzDto[]> {
let res = await SQLiteContext.with(WzcrkmxDao).queryByCrkGuid(wzcrkguid,pmdmcode)
async query(wzcrkguid?: string,
pmdmcode?: string): Promise<WzcrkMxRefWzDto[]> {
let res = await SQLiteContext.with(WzcrkmxDao).queryByCrkGuid(wzcrkguid,
pmdmcode)
return res;
}
async queryMX(wzcrkguid?: string,pmdmcode?: string): Promise<Wzcrkmx[]> {
let res = await SQLiteContext.with(WzcrkmxDao).getWzcrkmx(wzcrkguid,pmdmcode)
async queryMX(wzcrkguid?: string, pmdmcode?: string): Promise<Wzcrkmx[]> {
let res = await SQLiteContext.with(WzcrkmxDao).getWzcrkmx(wzcrkguid, pmdmcode)
return res;
}
async updateCrkMX(guid: string, hwh: string,crksl?:string):Promise<number> {
let res = await SQLiteContext.with(WzcrkmxDao).updateCrkMx(guid, hwh,crksl)
console.log("更新成功===》"+JSON.stringify(res))
async updateCrkMX(guid: string, hwh: string, crksl?: string): Promise<number> {
let res = await SQLiteContext.with(WzcrkmxDao).updateCrkMx(guid, hwh, crksl)
console.log("更新成功===》" + JSON.stringify(res))
return res;
}
// 更新单据信息
async updateWcztmxByData(guid:
string,data: Partial<Wzcrkmx>):
Promise<number> {
async updateWcztmxByData(guid:
string, data: Partial<Wzcrkmx>):
Promise<number> {
let res = await SQLiteContext.with(WzcrkmxDao).updateWcztmxByData(guid, data)
return res;
}
// 更新单据信息
async updateWcztBySql(guid?:
string, crksl?:number)
{
async updateWcztBySql(guid?:
string, crksl?: number)
{
// const tableName = SQLiteContext.with(WzcrkmxDao).getTableName()
// const sql = `update ${tableName} set crksl = ${crksl} where guid = ${guid}`
const sql = `update TAB_BZGL_KNZY_APP_WZCRKMX set crksl = ${crksl} where guid = ${guid}`
Logger.info('splsplspl>>',sql)
Logger.info('splsplspl>>',
sql)
return await SQLiteContext.with(WzcrkmxDao).updateWcztBySql(sql)
}
// 获取推荐货位
...
...
@@ -49,6 +53,7 @@ class WzcrkmxModel {
await SQLiteContext.with(WzcrkmxDao).clearTable()
}
}
const wzcrkmxModel = new WzcrkmxModel()
export default wzcrkmxModel
\ No newline at end of file
entry/src/main/ets/pages/metailmange/Common/WzInfo.ets
View file @
5189f26d
...
...
@@ -24,10 +24,8 @@ import wzcrkmxModel from '../../../model/WzcrkmxModel';
}
@Component
@Entry
// 物资信息
export struct WzInfo {
private searchcontroller: SearchController = new SearchController()
@State currentHwh: string = '' // 当前货位
@State pageType: string = "" //当前凭证的类型
@State currentModel: boolean = false //倒出:true/倒入:false
...
...
@@ -42,13 +40,25 @@ export struct WzInfo {
@State wzmx: WzmxClass[] = []
@ObjectLink wzcrk: WzClass
getDetail: (wzpm?: string) => void
scanInfoDialog: CustomDialogController = new CustomDialogController({
builder: WzScanInfoDialog({
container: this.container,
defaultHwh: $defaultHwh,
pageType: $pageType,
currentHwh: $currentHwh,
currentWZInfo: $currentWZInfo
}),
autoCancel: false,
alignment: DialogAlignment.Top,
customStyle: true
})
private searchcontroller: SearchController = new SearchController()
// 在自定义组件即将析构销毁时将dialogController置空
aboutToDisappear() {
this.scanInfoDialog = undefined // 将dialogController置空
}
@Builder container() {
Column() {
Flex({ justifyContent: FlexAlign.SpaceBetween }) {
...
...
@@ -116,20 +126,6 @@ export struct WzInfo {
}
}
scanInfoDialog: CustomDialogController = new CustomDialogController({
builder: WzScanInfoDialog({
container: this.container,
defaultHwh: $defaultHwh,
pageType: $pageType,
currentHwh: $currentHwh,
currentWZInfo: $currentWZInfo
}),
autoCancel: false,
alignment: DialogAlignment.Top,
customStyle: true
})
// 页面初始化
aboutToAppear() {
this.getData()
...
...
entry/src/main/ets/pages/metailmange/WzInPage/WzinDetail/WzinDetail.ets
View file @
5189f26d
...
...
@@ -9,7 +9,7 @@ import { WzClass, WzmxClass } from '../../Common/Wzcrk.data';
import promptAction from '@ohos.promptAction';
import wzcrkModel from '../../../../model/WzcrkModel';
import { SQLiteContext, Wzcrkmx, WzcrkmxDao } from '@ohos/common';
import {
AddWzin
} from './AddWzin'
import {
AddWzin
} from './AddWzin'
import { uuid } from '@ohos/common/src/main/ets/utils/util';
import IdentifyService from '../../../../identify/IdentifySerivce'
import emitter from '@ohos.events.emitter';
...
...
@@ -38,23 +38,30 @@ struct WzinDetail {
@State isUpdate: boolean = false
@State wzcrk: WzClass = null // 物资出入库单据信息
@State wzmx: WzmxClass[] = [] // 物资出入库明细
private controller: TabsController = new TabsController()
wzcrkmxDao: WzcrkmxDao = SQLiteContext.with(WzcrkmxDao)
private controller: TabsController = new TabsController()
onPageShow() {
const params = router.getParams() as params
this.isUpdate = params.isUpdate
this.wzcrk = new WzClass(params.wzcrk)
Logger.info('接收到出入库信息>>', JSON.stringify(params.wzcrk))
this.getDetail()
if (this.isUpdate) {
this.getWzFormDetail()
}
this.getWzmxList()
this.scanCodeListen()
IdentifyService.openScanPort()
}
// 获取凭证信息
async getDetail(wzpm?) {
// 获取物资表单详情
async getWzFormDetail() {
Logger.info('获取物资表单详情>>', JSON.stringify(this.wzcrk.guid))
const res = await wzcrkModel.queryByCrkDetailGuid(this.wzcrk.guid)
Logger.info('获取到物资出入库表单>>', JSON.stringify(res))
}
// 获取物资列表详情信息
async getWzmxList(wzpm?) {
this.wzmx = []
const res = await wzcrkmxModel.query(this.wzcrk.guid, wzpm)
res.forEach(i => {
...
...
@@ -86,7 +93,7 @@ struct WzinDetail {
TabContent() {
Column() {
if(this.isUpdate) {
if
(this.isUpdate) {
PzInfo({ wzcrk: this.wzcrk })
} else {
AddWzin({ wzcrk: this.wzcrk })
...
...
@@ -97,7 +104,7 @@ struct WzinDetail {
TabContent() {
Column() {
WzInfo({ wzmx: this.wzmx, wzcrk: this.wzcrk, getDetail: this.get
Detail
, pageType: "入库" })
WzInfo({ wzmx: this.wzmx, wzcrk: this.wzcrk, getDetail: this.get
WzmxList
, pageType: "入库" })
}.width("100%")
}.tabBar(this.TabBuilder(1, '物资信息'))
}
...
...
@@ -118,7 +125,7 @@ struct WzinDetail {
try {
Logger.info('保存的入库明细数据>>', JSON.stringify(this.wzmx))
if(this.isUpdate) {
if
(this.isUpdate) {
const crksl = this.wzmx.map(v => Number(v.crksl)).reduce((a, b) => a + b, 0)
await wzcrkModel.updateWcztByData(this.wzcrk.guid, {
dec: this.wzcrk.dec,
...
...
@@ -129,7 +136,7 @@ struct WzinDetail {
for (let index = 0; index < this.wzmx.length; index++) {
const element = this.wzmx[index];
try {
let val1 = await wzcrkmxModel.updateWcztmxByData(element.guid, {
crksl:element.crksl
})
let val1 = await wzcrkmxModel.updateWcztmxByData(element.guid, {
crksl: element.crksl
})
} catch (e) {
Logger.error(this, '保存失败了>>' + JSON.stringify(e))
}
...
...
@@ -162,8 +169,8 @@ struct WzinDetail {
}.width("100%")
}.onKeyEvent((e: globalThis.KeyEvent) => {
console.error('keycode====》:' + e.keyCode)
if (this.currentIndex
==1&&
(e.keyCode == 2096 || e.keyCode == 2093)) {
if
(e.type==1)
{
if (this.currentIndex
== 1 &&
(e.keyCode == 2096 || e.keyCode == 2093)) {
if
(e.type == 1)
{
IdentifyService.openScan()
}
}
...
...
@@ -174,6 +181,7 @@ struct WzinDetail {
colors: [[0x36a3c0, 0.0], [0x97c6a6, 1], [0xc7d799, 0.0]] // 数组末尾元素占比小于1时满足重复着色效果
})
}
scanCodeListen() {
var innerEvent = { eventId: 2 }
emitter.on(innerEvent, (eventData) => {
...
...
entry/src/main/ets/pages/package/Pack.ets
View file @
5189f26d
...
...
@@ -39,7 +39,7 @@ export struct Pack {
@State ddh: string = ''
@State bgzt: string = ''
onPageShow
() {
aboutToAppear
() {
let params = router.getParams() as Type;
this.type = params.type
...
...
entry/src/main/ets/pages/sub_systemMaintenance/DataSynchronism/modal/BasicInfoModal.ets
View file @
5189f26d
...
...
@@ -99,7 +99,8 @@ export struct BasicInfoModal {
Row() {
Text('*').fontColor('red')
Text('单位代码:').width('30%')
TextInput({ placeholder: "请输入单位代码", text: this.dwguid }).width('60%')
TextInput({ placeholder: "请输入单位代码", text: this.dwguid })
.width('60%')
.borderRadius(6)
.borderColor('#bcc5d7')
.borderWidth(1)
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论