FieldGrantLogic.php 44KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. <?php
  2. /**
  3. * 字段授权逻辑类
  4. *
  5. * @author qifan
  6. * @date 2020-12-01
  7. */
  8. namespace app\admin\logic;
  9. use think\Db;
  10. class FieldGrantLogic
  11. {
  12. private $except = [
  13. 'leads' => [
  14. 'name', 'email', 'source', 'mobile', 'telephone', 'detail_address', 'industry', 'level', 'next_time',
  15. 'remark', 'owner_user_id', 'last_record', 'create_user_id', 'create_time', 'update_time', 'last_time'
  16. ],
  17. 'customer' => [
  18. 'name', 'source', 'mobile', 'telephone', 'website', 'industry', 'level', 'next_time', 'remark', 'email',
  19. 'owner_user_id', 'last_record', 'create_user_id', 'create_time', 'update_time', 'last_time', 'obtain_time',
  20. 'deal_status', 'is_lock', 'pool_day'
  21. ],
  22. 'contacts' => [
  23. 'name', 'customer_id', 'mobile', 'telephone', 'email', 'post', 'decision', 'detail_address', 'next_time',
  24. 'remark', 'sex', 'owner_user_id', 'create_user_id', 'create_time', 'update_time', 'last_time', 'last_record'
  25. ],
  26. 'business' => [
  27. 'name', 'customer_id', 'money', 'deal_date', 'remark', 'status_id', 'type_id', 'owner_user_id',
  28. 'create_user_id', 'create_time', 'update_time', 'last_time', 'last_record'
  29. ],
  30. 'contract' => [
  31. 'name', 'num', 'customer_id', 'business_id', 'money', 'order_date', 'start_time', 'end_time', 'contacts_id',
  32. 'order_user_id', 'remark', 'owner_user_id', 'create_user_id', 'create_time', 'update_time', 'last_time',
  33. 'last_record', 'done_money', 'un_money', 'check_status'
  34. ],
  35. 'receivables' => [
  36. 'number', 'customer_id', 'contract_id', 'plan_id', 'return_time', 'money', 'return_type', 'remark',
  37. 'owner_user_id', 'create_user_id', 'create_time', 'update_time', 'check_status'
  38. ],
  39. 'product' => [
  40. 'name', 'category_id', 'unit', 'num', 'price', 'description', 'status', 'owner_user_id', 'create_user_id',
  41. 'create_time', 'update_time'
  42. ],
  43. 'visit' => [
  44. 'number', 'visit_time', 'owner_user_id', 'shape', 'customer_id', 'contacts_id', 'contract_id', 'satisfaction',
  45. 'feedback', 'create_user_id', 'create_time', 'update_time'
  46. ],
  47. 'invoice' => [
  48. 'invoice_apple_number', 'customer_id', 'contract_id', 'contract_money', 'invoice_date', 'invoice_money', 'invoice_type', 'remark'
  49. ],
  50. 'receivables_plan' => [
  51. 'receivables_id','un_money','real_money','real_data', 'num', 'money', 'owner_user_id', 'return_date', 'customer_id', 'remind', 'contract_id', 'create_user_id', 'create_time', 'update_time'
  52. ]
  53. ];
  54. /**
  55. * 字段授权列表
  56. *
  57. * @param $param
  58. * @return array|bool|\PDOStatement|string|\think\Model|null
  59. * @throws \think\db\exception\DataNotFoundException
  60. * @throws \think\db\exception\ModelNotFoundException
  61. * @throws \think\exception\DbException
  62. */
  63. public function index($param)
  64. {
  65. $where = function ($query) use ($param) {
  66. $query->where('module', $param['module']);
  67. $query->where('column', $param['column']);
  68. $query->where('role_id', $param['role_id']);
  69. };
  70. $count = Db::name('admin_field_grant')->where($where)->count();
  71. # 如果该角色下没有字段授权数据则自动添加
  72. if ($count == 0 && Db::name('admin_group')->where('id', $param['role_id'])->find()) {
  73. $this->createCrmFieldGrant($param['role_id']);
  74. }
  75. $data = Db::name('admin_field_grant')->field(['grant_id', 'content'])->where($where)->find();
  76. if (!empty($data['content'])) $data['content'] = unserialize($data['content']);
  77. return !empty($data) ? $data : [];
  78. }
  79. /**
  80. * 添加字段授权信息
  81. *
  82. * @param $roleId
  83. * @throws \think\db\exception\DataNotFoundException
  84. * @throws \think\db\exception\ModelNotFoundException
  85. * @throws \think\exception\DbException
  86. */
  87. public function createCrmFieldGrant($roleId)
  88. {
  89. # 防止重复,先删除一下
  90. $this->deleteCrmFieldGrant($roleId);
  91. # 添加线索字段授权数据
  92. $this->createLeadsFieldGrant($roleId);
  93. # 添加客户字段授权数据
  94. $this->createCustomerFieldGrant($roleId);
  95. # 添加联系人字段授权数据
  96. $this->createContactsFieldGrant($roleId);
  97. # 添加商机字段授权数据
  98. $this->createBusinessFieldGrant($roleId);
  99. # 添加合同字段授权数据
  100. $this->createContractFieldGrant($roleId);
  101. # 添加回款字段授权数据
  102. $this->createReceivablesFieldGrant($roleId);
  103. # 添加产品字段授权信息
  104. $this->createProductFieldGrant($roleId);
  105. # 添加回访字段授权信息
  106. $this->createVisitFieldGrant($roleId);
  107. # 添加发票字段授权信息
  108. $this->createInvoiceFieldGrant($roleId);
  109. # 添加回款计划字段授权信息
  110. $this->createReceivablesPlanFieldGrant($roleId);
  111. }
  112. /**
  113. * 更新授权字段
  114. *
  115. * @param $grantId
  116. * @param $content
  117. * @return int|string
  118. * @throws \think\Exception
  119. * @throws \think\exception\PDOException
  120. */
  121. public function update($grantId, $content)
  122. {
  123. return Db::name('admin_field_grant')->where('grant_id', $grantId)->update(['content' => serialize(array_values($content))]);
  124. }
  125. /**
  126. * 删除授权字段数据
  127. *
  128. * @param $roleId
  129. * @param string $module
  130. * @throws \think\Exception
  131. * @throws \think\exception\PDOException
  132. */
  133. public function deleteCrmFieldGrant($roleId)
  134. {
  135. Db::name('admin_field_grant')->where('module', 'crm')->where('role_id', $roleId)->delete();
  136. }
  137. /**
  138. * 拷贝字段授权数据
  139. *
  140. * @param $copyId
  141. * @param $roleId
  142. * @throws \think\db\exception\DataNotFoundException
  143. * @throws \think\db\exception\ModelNotFoundException
  144. * @throws \think\exception\DbException
  145. */
  146. public function copyCrmFieldGrant($copyId, $roleId)
  147. {
  148. $data = [];
  149. $list = Db::name('admin_field_grant')->where('module', 'crm')->where('role_id', $copyId)->select();
  150. foreach ($list as $key => $value) {
  151. $data[] = [
  152. 'role_id' => $roleId,
  153. 'module' => $value['module'],
  154. 'column' => $value['column'],
  155. 'content' => $value['content'],
  156. 'create_time' => time(),
  157. 'update_time' => time()
  158. ];
  159. }
  160. if (!empty($data)) Db::name('admin_field_grant')->insertAll($data);
  161. }
  162. /**
  163. * 同步更新自定义字段的授权信息
  164. *
  165. * @param $types
  166. * @return bool
  167. * @throws \think\Exception
  168. * @throws \think\db\exception\DataNotFoundException
  169. * @throws \think\db\exception\ModelNotFoundException
  170. * @throws \think\exception\DbException
  171. * @throws \think\exception\PDOException
  172. */
  173. public function fieldGrantDiyHandle($types)
  174. {
  175. $typesArray = explode('_', $types);
  176. # 只处理客户管理角色下的字段授权
  177. if ($typesArray[0] != 'crm') return false;
  178. # 查询自定义字段表
  179. $fieldBaseData = [];
  180. $fieldList = Db::name('admin_field')->field(['name', 'field'])->where('types', $types)->select();
  181. foreach ($fieldList as $key => $value) {
  182. # 排除掉固定字段
  183. if (in_array($value['field'], $this->except[$typesArray[1]])) continue;
  184. $fieldBaseData[$value['field']] = $value;
  185. }
  186. # 查询字段授权表
  187. $grantList = Db::name('admin_field_grant')->field(['grant_id', 'content'])->where('column', $typesArray[1])->select();
  188. # 处理授权字段的数据更新
  189. foreach ($grantList as $key => $value) {
  190. $content = unserialize($value['content']);
  191. $fieldData = $fieldBaseData;
  192. foreach ($content as $k => $v) {
  193. # 只处理自定义字段
  194. if ($v['is_diy'] == 0) continue;
  195. if (empty($fieldData[$v['field']])) {
  196. # 【处理删除:】没有在$fieldData找到,说明自定义字段被删除,则进行同步删除。
  197. unset($content[(int)$k]);
  198. } else {
  199. # 【处理更新:】如果在$fieldData找到,则进行同步更新。
  200. $content[$k]['name'] = $fieldData[$v['field']]['name'];
  201. $content[$k]['field'] = $fieldData[$v['field']]['field'];
  202. # 删除$fieldData的数据,方便统计新增的自定义字段。
  203. unset($fieldData[(string)$v['field']]);
  204. }
  205. }
  206. # 【处理新增】如果$fieldData还有数据,说明是新增的,则进行同步新增。
  207. if (!empty($fieldData)) {
  208. foreach ($fieldData as $k => $v) {
  209. $content[] = [
  210. 'name' => $v['name'],
  211. 'field' => $v['field'],
  212. 'read' => 1,
  213. 'read_operation' => 1,
  214. 'write' => 1,
  215. 'write_operation' => 1,
  216. 'is_diy' => 1
  217. ];
  218. }
  219. }
  220. Db::name('admin_field_grant')->where('grant_id', $value['grant_id'])->update(['content' => serialize(array_values($content))]);
  221. }
  222. return true;
  223. }
  224. /**
  225. * 处理线索字段授权数据
  226. *
  227. * @param int $roleId 角色ID
  228. * @author fanqi
  229. * @date 2021-03-22
  230. */
  231. private function createLeadsFieldGrant($roleId)
  232. {
  233. # 固定字段
  234. $content = [
  235. ['field' => 'name', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '线索名称'],
  236. ['field' => 'email', 'maskType' => 0, 'form_type'=>'email', 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '邮箱'],
  237. ['field' => 'source', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '线索来源'],
  238. ['field' => 'mobile', 'maskType' => 0, 'read' => 1,'form_type'=>'mobile', 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '手机'],
  239. ['field' => 'telephone', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '电话'],
  240. ['field' => 'detail_address', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '地址'],
  241. ['field' => 'industry', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户行业'],
  242. ['field' => 'level', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户级别'],
  243. ['field' => 'next_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '下次联系时间'],
  244. ['field' => 'remark', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '备注'],
  245. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  246. ['field' => 'last_record', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进记录'],
  247. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  248. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  249. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  250. ['field' => 'last_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进时间'],
  251. ];
  252. $leadsList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_leads')->select();
  253. # 自定义字段
  254. foreach ($leadsList as $key => $value) {
  255. if (in_array($value['field'], $this->except['leads'])) continue;
  256. $content[] = [
  257. 'name' => $value['name'],
  258. 'field' => $value['field'],
  259. 'form_type'=>$value['form_type'],
  260. 'read' => 1,
  261. 'read_operation' => 1,
  262. 'write' => 1,
  263. 'write_operation' => 1,
  264. 'is_diy' => 1
  265. ];
  266. }
  267. Db::name('admin_field_grant')->insert([
  268. 'role_id' => $roleId,
  269. 'module' => 'crm',
  270. 'column' => 'leads',
  271. 'content' => serialize($content),
  272. 'create_time' => time(),
  273. 'update_time' => time()
  274. ]);
  275. }
  276. /**
  277. * 处理客户字段授权数据
  278. *
  279. * @param int $roleId 角色ID
  280. * @author fanqi
  281. * @date 2021-03-22
  282. */
  283. private function createCustomerFieldGrant($roleId)
  284. {
  285. # 固定字段
  286. $content = [
  287. ['field' => 'name', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户名称'],
  288. ['field' => 'source', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户来源'],
  289. ['field' => 'mobile', 'maskType' => 0,'form_type'=>'mobile', 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '手机'],
  290. ['field' => 'telephone', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '电话'],
  291. ['field' => 'website', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '网址'],
  292. ['field' => 'industry', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户行业'],
  293. ['field' => 'level', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户级别'],
  294. ['field' => 'next_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '下次联系时间'],
  295. ['field' => 'remark', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '备注'],
  296. ['field' => 'email', 'maskType' => 0,'form_type'=>'email', 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '邮箱'],
  297. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  298. ['field' => 'last_record', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进记录'],
  299. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  300. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  301. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  302. ['field' => 'last_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进时间'],
  303. ['field' => 'obtain_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人获取客户时间'],
  304. ['field' => 'deal_status', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '成交状态'],
  305. ['field' => 'is_lock', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '锁定状态'],
  306. ['field' => 'pool_day', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '距进入公海天数'],
  307. ];
  308. $customerList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_customer')->select();
  309. # 自定义字段
  310. foreach ($customerList as $key => $value) {
  311. if (in_array($value['field'], $this->except['customer'])) continue;
  312. $content[] = [
  313. 'name' => $value['name'],
  314. 'field' => $value['field'],
  315. 'read' => 1,
  316. 'read_operation' => 1,
  317. 'write' => 1,
  318. 'write_operation' => 1,
  319. 'is_diy' => 1
  320. ];
  321. }
  322. Db::name('admin_field_grant')->insert([
  323. 'role_id' => $roleId,
  324. 'module' => 'crm',
  325. 'column' => 'customer',
  326. 'content' => serialize($content),
  327. 'create_time' => time(),
  328. 'update_time' => time()
  329. ]);
  330. }
  331. /**
  332. * 处理联系人字段授权数据
  333. *
  334. * @param int $roleId 角色ID
  335. * @author fanqi
  336. * @date 2021-03-22
  337. */
  338. private function createContactsFieldGrant($roleId)
  339. {
  340. # 固定字段
  341. $content = [
  342. ['field' => 'name', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '姓名'],
  343. ['field' => 'customer_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '客户名称'],
  344. ['field' => 'mobile', 'maskType' => 0,'form_type'=>'mobile', 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '手机'],
  345. ['field' => 'telephone', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '电话'],
  346. ['field' => 'email', 'maskType' => 0, 'form_type'=>'email','read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '邮箱'],
  347. ['field' => 'post', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '职务'],
  348. ['field' => 'decision', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '是否关键决策人'],
  349. ['field' => 'detail_address', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '地址'],
  350. ['field' => 'next_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '下次联系时间'],
  351. ['field' => 'remark', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '备注'],
  352. ['field' => 'sex', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '性别'],
  353. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  354. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  355. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  356. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  357. ['field' => 'last_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进时间'],
  358. ];
  359. $contactsList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_contacts')->select();
  360. # 自定义字段
  361. foreach ($contactsList as $key => $value) {
  362. if (in_array($value['field'], $this->except['contacts'])) continue;
  363. $content[] = [
  364. 'name' => $value['name'],
  365. 'field' => $value['field'],
  366. 'read' => 1,
  367. 'read_operation' => 1,
  368. 'write' => 1,
  369. 'write_operation' => 1,
  370. 'is_diy' => 1
  371. ];
  372. }
  373. Db::name('admin_field_grant')->insert([
  374. 'role_id' => $roleId,
  375. 'module' => 'crm',
  376. 'column' => 'contacts',
  377. 'content' => serialize($content),
  378. 'create_time' => time(),
  379. 'update_time' => time()
  380. ]);
  381. }
  382. /**
  383. * 处理商机字段授权数据
  384. *
  385. * @param int $roleId 角色ID
  386. * @author fanqi
  387. * @date 2021-03-22
  388. */
  389. private function createBusinessFieldGrant($roleId)
  390. {
  391. # 固定字段
  392. $content = [
  393. ['field' => 'name', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '商机名称'],
  394. ['field' => 'customer_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '客户名称'],
  395. ['field' => 'money', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '商机金额'],
  396. ['field' => 'deal_date', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '预计成交日期'],
  397. ['field' => 'remark', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '备注'],
  398. ['field' => 'status_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '商机阶段'],
  399. ['field' => 'type_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '商机状态组'],
  400. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  401. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  402. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  403. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  404. ['field' => 'last_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进时间'],
  405. ];
  406. $BusinessList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_business')->select();
  407. # 自定义字段
  408. foreach ($BusinessList as $key => $value) {
  409. if (in_array($value['field'], $this->except['business'])) continue;
  410. $content[] = [
  411. 'name' => $value['name'],
  412. 'field' => $value['field'],
  413. 'read' => 1,
  414. 'read_operation' => 1,
  415. 'write' => 1,
  416. 'write_operation' => 1,
  417. 'is_diy' => 1
  418. ];
  419. }
  420. Db::name('admin_field_grant')->insert([
  421. 'role_id' => $roleId,
  422. 'module' => 'crm',
  423. 'column' => 'business',
  424. 'content' => serialize($content),
  425. 'create_time' => time(),
  426. 'update_time' => time()
  427. ]);
  428. }
  429. /**
  430. * 处理合同字段授权数据
  431. *
  432. * @param int $roleId 角色ID
  433. * @author fanqi
  434. * @date 2021-03-22
  435. */
  436. private function createContractFieldGrant($roleId)
  437. {
  438. # 固定字段
  439. $content = [
  440. ['field' => 'name', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '合同名称'],
  441. ['field' => 'num', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '合同编号'],
  442. ['field' => 'customer_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户名称'],
  443. ['field' => 'business_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '商机名称'],
  444. ['field' => 'money', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '合同金额'],
  445. ['field' => 'order_date', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '下单时间'],
  446. ['field' => 'start_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '合同开始时间'],
  447. ['field' => 'end_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '合同结束时间'],
  448. ['field' => 'contacts_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户签约人'],
  449. ['field' => 'order_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '公司签约人'],
  450. ['field' => 'remark', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '备注'],
  451. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  452. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  453. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  454. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  455. ['field' => 'last_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进时间'],
  456. ['field' => 'last_record', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '最后跟进记录'],
  457. ['field' => 'done_money', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '已收款金额'],
  458. ['field' => 'un_money', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '未收款金额'],
  459. ['field' => 'check_status', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '审核状态'],
  460. ];
  461. $contractList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_contract')->select();
  462. # 自定义字段
  463. foreach ($contractList as $key => $value) {
  464. if (in_array($value['field'], $this->except['contract'])) continue;
  465. $content[] = [
  466. 'name' => $value['name'],
  467. 'field' => $value['field'],
  468. 'read' => 1,
  469. 'read_operation' => 1,
  470. 'write' => 1,
  471. 'write_operation' => 1,
  472. 'is_diy' => 1
  473. ];
  474. }
  475. Db::name('admin_field_grant')->insert([
  476. 'role_id' => $roleId,
  477. 'module' => 'crm',
  478. 'column' => 'contract',
  479. 'content' => serialize($content),
  480. 'create_time' => time(),
  481. 'update_time' => time()
  482. ]);
  483. }
  484. /**
  485. * 处理回款字段授权数据
  486. *
  487. * @param int $roleId 角色ID
  488. * @author fanqi
  489. * @date 2021-03-22
  490. */
  491. private function createReceivablesFieldGrant($roleId)
  492. {
  493. # 固定字段
  494. $content = [
  495. ['field' => 'number', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '回款编号'],
  496. ['field' => 'customer_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户名称'],
  497. ['field' => 'contract_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '合同编号'],
  498. ['field' => 'plan_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '期数'],
  499. ['field' => 'return_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '回款日期'],
  500. ['field' => 'money', 'maskType' => 0,'form_type'=>'floatnumber', 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '回款金额'],
  501. ['field' => 'return_type', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '回款方式'],
  502. ['field' => 'remark', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '备注'],
  503. ['field' => 'contract_money', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '合同金额'],
  504. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  505. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  506. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  507. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  508. ['field' => 'check_status', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '审核状态'],
  509. ];
  510. $receivablesList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_receivables')->select();
  511. # 自定义字段
  512. foreach ($receivablesList as $key => $value) {
  513. if (in_array($value['field'], $this->except['receivables'])) continue;
  514. $content[] = [
  515. 'name' => $value['name'],
  516. 'field' => $value['field'],
  517. 'read' => 1,
  518. 'read_operation' => 1,
  519. 'write' => 1,
  520. 'write_operation' => 1,
  521. 'is_diy' => 1
  522. ];
  523. }
  524. Db::name('admin_field_grant')->insert([
  525. 'role_id' => $roleId,
  526. 'module' => 'crm',
  527. 'column' => 'receivables',
  528. 'content' => serialize($content),
  529. 'create_time' => time(),
  530. 'update_time' => time()
  531. ]);
  532. }
  533. /**
  534. * 处理产品字段授权信息
  535. *
  536. * @param int $roleId 角色ID
  537. * @author fanqi
  538. * @date 2021-03-22
  539. */
  540. private function createProductFieldGrant($roleId)
  541. {
  542. # 固定字段
  543. $content = [
  544. ['field' => 'name', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '产品名称'],
  545. ['field' => 'category_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '产品类型'],
  546. ['field' => 'unit', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '产品单位'],
  547. ['field' => 'num', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '产品编码'],
  548. ['field' => 'price', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '价格'],
  549. ['field' => 'description', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '产品描述'],
  550. ['field' => 'status', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '是否上下架'],
  551. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  552. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  553. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  554. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  555. ];
  556. $productList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_product')->select();
  557. # 自定义字段
  558. foreach ($productList as $key => $value) {
  559. if (in_array($value['field'], $this->except['product'])) continue;
  560. $content[] = [
  561. 'name' => $value['name'],
  562. 'field' => $value['field'],
  563. 'read' => 1,
  564. 'read_operation' => 1,
  565. 'write' => 1,
  566. 'write_operation' => 1,
  567. 'is_diy' => 1
  568. ];
  569. }
  570. Db::name('admin_field_grant')->insert([
  571. 'role_id' => $roleId,
  572. 'module' => 'crm',
  573. 'column' => 'product',
  574. 'content' => serialize($content),
  575. 'create_time' => time(),
  576. 'update_time' => time()
  577. ]);
  578. }
  579. /**
  580. * 处理回访字段授权信息
  581. *
  582. * @param int $roleId
  583. * @author fanqi
  584. * @date 2021-03-22
  585. */
  586. private function createVisitFieldGrant($roleId)
  587. {
  588. $content = [
  589. ['field' => 'number', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '回访编号'],
  590. ['field' => 'visit_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '回访时间'],
  591. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '回访人'],
  592. ['field' => 'shape', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '回访形式'],
  593. ['field' => 'customer_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '客户名称'],
  594. ['field' => 'contacts_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '联系人'],
  595. ['field' => 'contract_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '合同编号'],
  596. ['field' => 'satisfaction', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户满意度'],
  597. ['field' => 'feedback', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '客户反馈'],
  598. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  599. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  600. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  601. ];
  602. $visitList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_visit')->select();
  603. # 处理自定义字段
  604. foreach ($visitList as $key => $value) {
  605. if (in_array($value['field'], $this->except['visit'])) continue;
  606. $content[] = [
  607. 'name' => $value['name'],
  608. 'field' => $value['field'],
  609. 'read' => 1,
  610. 'read_operation' => 1,
  611. 'write' => 1,
  612. 'write_operation' => 1,
  613. 'is_diy' => 1
  614. ];
  615. }
  616. Db::name('admin_field_grant')->insert([
  617. 'role_id' => $roleId,
  618. 'module' => 'crm',
  619. 'column' => 'visit',
  620. 'content' => serialize($content),
  621. 'create_time' => time(),
  622. 'update_time' => time()
  623. ]);
  624. }
  625. /**
  626. * 处理发票字段授权信息
  627. *
  628. * @param $roleId
  629. * @author fanqi
  630. * @since 2021-06-25
  631. */
  632. private function createInvoiceFieldGrant($roleId)
  633. {
  634. $content = [
  635. ['field' => 'invoice_apple_number', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '发票申请编号'],
  636. ['field' => 'customer_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '客户名称'],
  637. ['field' => 'contract_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '合同编号'],
  638. ['field' => 'contract_money', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '合同金额'],
  639. ['field' => 'invoice_money', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '开票金额'],
  640. ['field' => 'invoice_date', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '开票日期'],
  641. ['field' => 'invoice_type', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '开票类型'],
  642. ['field' => 'remark', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '备注'],
  643. ];
  644. $invoiceList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_invoice')->select();
  645. # 处理自定义字段
  646. foreach ($invoiceList as $key => $value) {
  647. if (in_array($value['field'], $this->except['invoice'])) continue;
  648. $content[] = [
  649. 'name' => $value['name'],
  650. 'field' => $value['field'],
  651. 'read' => 1,
  652. 'read_operation' => 1,
  653. 'write' => 1,
  654. 'write_operation' => 1,
  655. 'is_diy' => 1
  656. ];
  657. }
  658. Db::name('admin_field_grant')->insert([
  659. 'role_id' => $roleId,
  660. 'module' => 'crm',
  661. 'column' => 'invoice',
  662. 'content' => serialize($content),
  663. 'create_time' => time(),
  664. 'update_time' => time()
  665. ]);
  666. }
  667. /**
  668. * 处理回款计划字段授权信息
  669. *
  670. * @param int $roleId
  671. * @author fanqi
  672. * @date 2021-03-22
  673. */
  674. private function createReceivablesPlanFieldGrant($roleId)
  675. {
  676. $content = [
  677. ['field' => 'num', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '期数'],
  678. ['field' => 'money', 'maskType' => 0, 'form_type'=>'floatnumber', 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '计划回款金额'],
  679. ['field' => 'owner_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '负责人'],
  680. ['field' => 'return_date', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '计划回款日期'],
  681. ['field' => 'customer_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '客户名称'],
  682. ['field' => 'remind', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 1, 'write_operation' => 1, 'is_diy' => 0, 'name' => '提前几日提醒'],
  683. ['field' => 'contract_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 0, 'write' => 1, 'write_operation' => 0, 'is_diy' => 0, 'name' => '合同编号'],
  684. ['field' => 'create_user_id', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建人'],
  685. ['field' => 'create_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '创建时间'],
  686. ['field' => 'update_time', 'maskType' => 0, 'read' => 1, 'read_operation' => 1, 'write' => 0, 'write_operation' => 0, 'is_diy' => 0, 'name' => '更新时间'],
  687. ];
  688. $visitList = Db::name('admin_field')->field(['name', 'field'])->where('types', 'crm_receivables_plan')->select();
  689. # 处理自定义字段
  690. foreach ($visitList as $key => $value) {
  691. if (in_array($value['field'], $this->except['receivables_plan'])) continue;
  692. $content[] = [
  693. 'name' => $value['name'],
  694. 'field' => $value['field'],
  695. 'read' => 1,
  696. 'read_operation' => 1,
  697. 'write' => 1,
  698. 'write_operation' => 1,
  699. 'is_diy' => 1
  700. ];
  701. }
  702. Db::name('admin_field_grant')->insert([
  703. 'role_id' => $roleId,
  704. 'module' => 'crm',
  705. 'column' => 'receivables_plan',
  706. 'content' => serialize($content),
  707. 'create_time' => time(),
  708. 'update_time' => time()
  709. ]);
  710. }
  711. }