setup.ts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. import { getPayCurrencyTypeEnumList } from "@/common/constants/enumsList";
  2. import { getGoodsUnitEnumItemName } from "@/common/constants/enumsName";
  3. import { commonResultInfo, getRequestResultInfo } from "@/common/methods/request";
  4. import { validateCommon } from "@/common/setup/validate";
  5. import APP from '@/services';
  6. import { QueryCustomInfo } from "@/services/go/ermcp/customInfo";
  7. import { QueryCustomInfoType } from "@/services/go/ermcp/customInfo/interface";
  8. import { QueryDeliveryGoods } from "@/services/go/ermcp/goodsInfo";
  9. import { Ermcp3Brand, Ermcp3Wrstandard, ErmcpDeliveryGoodsDetailEx, ErmcpDeliveryGoodsRsp } from "@/services/go/ermcp/goodsInfo/interface";
  10. import { orderContract, spotContractStatus } from "@/services/proto/spotcontract";
  11. import {
  12. GldErmcpSpotContractOperateReq,
  13. SpotContractOperateReq
  14. } from "@/services/proto/spotcontract/interface";
  15. import { ContractStateSign, GldContractStateSign } from "@/views/information/spot-contract/setup";
  16. import { message } from "ant-design-vue";
  17. import { RuleObject } from "ant-design-vue/lib/form/interface";
  18. import Long from 'long';
  19. import moment, { Moment } from "moment";
  20. import { reactive, ref, Ref, UnwrapRef } from "vue";
  21. import { FormState } from './interface';
  22. /**
  23. * 合同操作相关 针对操作类型 1: 保存草稿 2: 提交申请 3: 删除成功 4:审核通过
  24. * @param reqs GldErmcpSpotContractOperateReq
  25. * @param loading
  26. * @returns
  27. */
  28. export function orderContractControl(reqs: GldErmcpSpotContractOperateReq, loading: Ref<boolean>): Promise<string> {
  29. //处理 合同id
  30. if (reqs.SpotContractID) {
  31. reqs.SpotContractID = Long.fromString(reqs.SpotContractID)
  32. }
  33. // loading 效果
  34. loading.value = true
  35. // 获取提示信息
  36. const sign = getRequestResultInfo(GldContractStateSign, reqs.OperateType) // 接口请求后的返回提示 这里统一进行管理
  37. // 接口调用
  38. const result = orderContract(reqs)
  39. // 接口调用结果处理,提示成功或者失败信息,并关闭loading效果
  40. return commonResultInfo(result, sign, loading)
  41. }
  42. /**
  43. * 修改合同类型 针对操作类型 4:审核拒绝 6:正常完结 5:撤销
  44. * @param reqs
  45. * @param loading
  46. * @returns
  47. */
  48. export function orderContractOperateControl(reqs: SpotContractOperateReq, loading: Ref<boolean>): Promise<string> {
  49. //处理 合同id
  50. if (reqs.SpotContractID) {
  51. reqs.SpotContractID = Long.fromString(reqs.SpotContractID)
  52. }
  53. // loading 效果
  54. loading.value = true
  55. // 获取提示信息
  56. const sign = getRequestResultInfo(ContractStateSign, reqs.OperateType) // 接口请求后的返回提示 这里统一进行管理
  57. // 接口调用
  58. const result = spotContractStatus(reqs)
  59. // 接口调用结果处理,提示成功或者失败信息,并关闭loading效果
  60. return commonResultInfo(result, sign, loading)
  61. }
  62. /**
  63. * 新增和修改的表单数据
  64. * @returns
  65. */
  66. export function handleFromState() {
  67. function initFormData() {
  68. return {
  69. ContractNo: '', // 现货合同编号
  70. ContractType: 1, // int32 现货合同类型-1:采购-1:销售
  71. BizType: 1, // uint32 业务类型 - 1:套保 2:套利
  72. BuyUserID: undefined, // uint64 采购方ID
  73. SellUserID: undefined,// uint64 客户ID
  74. ContractAttachment: '',// bytes 合同附件
  75. DeliveryGoodsID: undefined, // 现货品种ID
  76. WrStandardID: undefined, // uint64 现货商品ID
  77. SpotGoodsBrandID: undefined, // uint64 现货品牌ID
  78. ConvertFactor: undefined,// double 标仓系数
  79. SpotGoodsDesc: '', // string 商品型号
  80. PriceType: 1, // uint32 定价类型-1:一口价2:点价3:暂定价
  81. Qty: '', // double 数量
  82. Price: '',// double 价格暂定价[1:一口价、3:暂定价]
  83. Amount: null, // double 金额[1:一口价、3:暂定价]
  84. DeliveryStartDate: '', // string 交收期(开始)
  85. DeliveryEndDate: '', // string 交收期(结束)
  86. ContractMargin: null, // double 合同保证金
  87. SaleUserID: undefined, // uint64 业务员ID
  88. MerUserID: undefined, // uint64 跟单员ID
  89. AccountID: undefined, // uint64 期货账户ID
  90. Remark: '', // string 合同备注
  91. CurrencyID: undefined, // 结算币种ID
  92. GoodsID: undefined, // uint64 点价合约ID-0:为现货,其它为期货商品合约ID[2:点价3:暂定价]
  93. PriceMove: null,// double 升贴水[2:点价3:暂定价]
  94. StartDate: '', // 点价开始时间
  95. EndDate: '', // 点价结束时间
  96. TradeUserID: undefined, // 交易员ID
  97. SpotContractID: '0',//现货合同ID
  98. }
  99. }
  100. const formState: UnwrapRef<FormState> = reactive(initFormData())
  101. // 业务类型
  102. const businessType = [
  103. { key: 1, value: '套保' },
  104. { key: 2, value: '套利' },
  105. ];
  106. return { formState, businessType, initFormData }
  107. }
  108. /**
  109. * 表单新增和修改验证规则
  110. */
  111. export function handleFormRule(formState: UnwrapRef<FormState>) {
  112. // 验证合同类型
  113. async function v_ContractType(rule: RuleObject, value: number) {
  114. return validateCommon(value, '请选择合同类型')
  115. }
  116. // 验证业务类型
  117. // async function v_BizType(rule: RuleObject, value: number) {
  118. // return validateCommon(value, '请选择业务类型')
  119. // }
  120. // 验证业务类型
  121. async function v_BuyUser(rule: RuleObject, value: number) {
  122. return validateCommon(value, '请选择采购方')
  123. }
  124. // 验证业务类型
  125. async function v_SellUser(rule: RuleObject, value: number) {
  126. return validateCommon(value, '请选择销售方')
  127. }
  128. // 验证现货品种
  129. async function v_DeliveryGoods(rule: RuleObject, value: number) {
  130. return validateCommon(value, '请选择现货品种')
  131. }
  132. // 验证品类
  133. async function v_WrStandard(rule: RuleObject, value: number) {
  134. const errorInfo = formState.DeliveryGoodsID ? '请选择商品' : '请先选择现货品种'
  135. return validateCommon(value, errorInfo)
  136. }
  137. // 验证品牌
  138. async function v_SpotGoodsBrand(rule: RuleObject, value: number) {
  139. const errorInfo = formState.DeliveryGoodsID ? '请选择品牌' : '请先选择现货品种'
  140. return validateCommon(value, errorInfo)
  141. }
  142. // 验证定价类型
  143. async function v_PriceType(rule: RuleObject, value: number) {
  144. return validateCommon(value, '请选择定价类型')
  145. }
  146. // 验证结算币种
  147. async function v_Currency(rule: RuleObject, value: number) {
  148. return validateCommon(value, '请选择结算币种')
  149. }
  150. // 验证点价合约
  151. async function v_Goods(rule: RuleObject, value: number) {
  152. return validateCommon(value, '请选择点价合约')
  153. }
  154. // 验证业务员
  155. async function v_SaleUserID(rule: RuleObject, value: number) {
  156. return validateCommon(value, '请选择业务员')
  157. }
  158. // 验证交易用户
  159. async function v_TradeUserID(rule: RuleObject, value: number) {
  160. return validateCommon(value, '请选择交易用户')
  161. }
  162. const rules = {
  163. ContractNo: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
  164. ContractType: [{ required: true, validator: v_ContractType, trigger: 'change' }],
  165. // BizType: [{ required: true, validator: v_BizType, trigger: 'change' }],
  166. BuyUserID: [{ required: true, validator: v_BuyUser, trigger: 'change' }],
  167. SellUserID: [{ required: true, validator: v_SellUser, trigger: 'change' }],
  168. DeliveryGoodsID: [{ required: true, validator: v_DeliveryGoods, trigger: 'change' }],
  169. WrStandardID: [{ required: true, validator: v_WrStandard, trigger: 'blur' }],
  170. SpotGoodsBrandID: [{ required: true, validator: v_SpotGoodsBrand, trigger: 'blur' }],
  171. GoodsID: [{ required: true, validator: v_Goods, trigger: 'blur' }],
  172. // ConvertFactor: [{ required: true, message: '请选择品类', trigger: 'blur' }],
  173. SpotGoodsDesc: [{ required: true, message: '请输入商品规格', trigger: 'blur' }],
  174. PriceType: [{ required: true, validator: v_PriceType, trigger: 'blur' }],
  175. CurrencyID: [{ required: true, validator: v_Currency, trigger: 'blur' }],
  176. Qty: [{ required: true, message: '请输入数量', trigger: 'blur' }],
  177. Price: [{ required: true, message: '请输入价格', trigger: 'blur' }],
  178. PriceMove: [{ required: true, message: '请输入升贴水', trigger: 'blur', type: 'number' }],
  179. SaleUserID: [{ required: true, validator: v_SaleUserID, trigger: 'change' }],
  180. TradeUserID: [{ required: true, validator: v_TradeUserID, trigger: 'change' }],
  181. };
  182. return { rules }
  183. }
  184. /**
  185. * 合同类型
  186. */
  187. export function handleContract(formState: UnwrapRef<FormState>) {
  188. // 合同类型
  189. const contractType = [
  190. { key: 1, value: '采购' },
  191. { key: -1, value: '销售' },
  192. ];
  193. const isSell = ref<boolean>(false) // true => 销售 false => 采购
  194. /**
  195. * 合同类型变更
  196. */
  197. function contractChange(value: number) {
  198. if (value === 1) {
  199. isSell.value = false
  200. formState.SellUserID = undefined;
  201. } else {
  202. isSell.value = true
  203. formState.BuyUserID = undefined
  204. }
  205. }
  206. const customList = ref<QueryCustomInfoType[]>([])
  207. function queryCustomList() {
  208. QueryCustomInfo(3)
  209. .then((res) => {
  210. customList.value = res.filter(e => (e.status === 4))
  211. console.log('客户资料', customList);
  212. })
  213. .catch((err) => {
  214. message.error(err);
  215. })
  216. }
  217. return { contractType, isSell, contractChange, customList, queryCustomList }
  218. }
  219. /**
  220. * 处理现货商品
  221. */
  222. export function handleDeliveryGoods(formState: UnwrapRef<FormState>) {
  223. // 现货品种
  224. const deliveryGoodsList = ref<ErmcpDeliveryGoodsRsp[]>([])
  225. // 品牌
  226. const gblist = ref<Ermcp3Brand[]>([])
  227. // 品类列表
  228. const gmlist = ref<Ermcp3Wrstandard[]>([])
  229. // 查询现货商品
  230. function getDeliveryGoods() {
  231. QueryDeliveryGoods({}).then(res => {
  232. console.log('查询现货商品', res);
  233. deliveryGoodsList.value = res;
  234. }).catch(err => {
  235. message.error(err)
  236. })
  237. }
  238. // 切换现货商品
  239. function deliveryGoodsChange(value: number | undefined) {
  240. if (value !== undefined) {
  241. getDeliveryGoodsDetail(value)
  242. } else {
  243. gblist.value.length = 0
  244. gmlist.value.length = 0
  245. }
  246. formState.WrStandardID = undefined;
  247. formState.SpotGoodsBrandID = undefined;
  248. formState.ConvertFactor = undefined;
  249. }
  250. // 查询现货商品详情
  251. function getDeliveryGoodsDetail(deliverygoodsid: number) {
  252. const temp = APP.get('DeliveryGoodsList').find((e: ErmcpDeliveryGoodsDetailEx) => e.data.deliverygoodsid === deliverygoodsid)
  253. if (temp) {
  254. gblist.value = temp.gblist
  255. gmlist.value = temp.gmlist
  256. }
  257. }
  258. const numberUnit = ref<string>('')
  259. // 品类变更
  260. function WrStandardChange(value: number) {
  261. const obj = gmlist.value.find((e) => e.wrstandardid === value);
  262. if (obj) {
  263. //标仓系数
  264. formState.ConvertFactor = obj.convertfactor;
  265. // 单位
  266. numberUnit.value = getGoodsUnitEnumItemName(obj.unitid)
  267. }
  268. }
  269. return {
  270. deliveryGoodsList,
  271. gblist,
  272. gmlist,
  273. numberUnit,
  274. WrStandardChange,
  275. getDeliveryGoods,
  276. getDeliveryGoodsDetail,
  277. deliveryGoodsChange
  278. }
  279. }
  280. /**
  281. * 价格信息
  282. */
  283. export function handlePrice(formState: UnwrapRef<FormState>) {
  284. // 定价类型
  285. const priceType = [
  286. { key: 1, value: '一口价' },
  287. { key: 2, value: '点价' },
  288. { key: 3, value: '暂定价' },
  289. ];
  290. // 币种
  291. const payCurrency = getPayCurrencyTypeEnumList()
  292. console.log('payCurrency', payCurrency);
  293. // 目前写死,获取枚举信息里面没有 单位名称,后期进行优化
  294. const payCurrencyUnit = ref<string>('元')
  295. // 切换币种
  296. function parCurrencyChange(value: number) {
  297. const obj = payCurrency.find(e => e.enumitemname === value)
  298. console.log('切换币种', obj);
  299. // payCurrencyUnit.value = obj?.enumdicname
  300. }
  301. return { priceType, payCurrency, payCurrencyUnit, parCurrencyChange }
  302. }
  303. /**
  304. * 处理日期
  305. */
  306. export function handleDate() {
  307. // 交收期
  308. const deliveryDate = ref<Moment[]>([])
  309. // 点价期
  310. const priceDate = ref<Moment[]>([]);
  311. function disabledDate(current: Moment) {
  312. // Can not select days before today and today
  313. return current && current < moment().endOf('day');
  314. }
  315. return { deliveryDate, priceDate, disabledDate }
  316. }
  317. /**
  318. * 处理金额
  319. */
  320. export function handleAmout(formState: UnwrapRef<FormState>) {
  321. function getAmout() {
  322. const { Price, Qty } = formState
  323. formState.Amount = (Price && Qty) ? Number(Price) * Number(Qty) : 0
  324. }
  325. return { getAmout }
  326. }